Simplify sparse and dense CPU hist kernels (#7029)

* Simplify sparse and dense kernels
* Extract row partitioner.

Co-authored-by: Kirill Shvets <kirill.shvets@intel.com>
This commit is contained in:
ShvetsKS
2021-06-11 13:26:30 +03:00
committed by GitHub
parent 1faad825f4
commit 2567404ab6
10 changed files with 369 additions and 434 deletions

View File

@@ -23,19 +23,19 @@ TEST(DenseColumn, Test) {
for (auto j = 0ull; j < dmat->Info().num_col_; j++) {
switch (column_matrix.GetTypeSize()) {
case kUint8BinsTypeSize: {
auto col = column_matrix.GetColumn<uint8_t>(j);
auto col = column_matrix.GetColumn<uint8_t, false>(j);
ASSERT_EQ(gmat.index[i * dmat->Info().num_col_ + j],
(*col.get()).GetGlobalBinIdx(i));
}
break;
case kUint16BinsTypeSize: {
auto col = column_matrix.GetColumn<uint16_t>(j);
auto col = column_matrix.GetColumn<uint16_t, false>(j);
ASSERT_EQ(gmat.index[i * dmat->Info().num_col_ + j],
(*col.get()).GetGlobalBinIdx(i));
}
break;
case kUint32BinsTypeSize: {
auto col = column_matrix.GetColumn<uint32_t>(j);
auto col = column_matrix.GetColumn<uint32_t, false>(j);
ASSERT_EQ(gmat.index[i * dmat->Info().num_col_ + j],
(*col.get()).GetGlobalBinIdx(i));
}
@@ -68,17 +68,17 @@ TEST(SparseColumn, Test) {
column_matrix.Init(gmat, 0.5);
switch (column_matrix.GetTypeSize()) {
case kUint8BinsTypeSize: {
auto col = column_matrix.GetColumn<uint8_t>(0);
auto col = column_matrix.GetColumn<uint8_t, true>(0);
CheckSparseColumn(*col.get(), gmat);
}
break;
case kUint16BinsTypeSize: {
auto col = column_matrix.GetColumn<uint16_t>(0);
auto col = column_matrix.GetColumn<uint16_t, true>(0);
CheckSparseColumn(*col.get(), gmat);
}
break;
case kUint32BinsTypeSize: {
auto col = column_matrix.GetColumn<uint32_t>(0);
auto col = column_matrix.GetColumn<uint32_t, true>(0);
CheckSparseColumn(*col.get(), gmat);
}
break;
@@ -89,7 +89,7 @@ TEST(SparseColumn, Test) {
template<typename BinIdxType>
inline void CheckColumWithMissingValue(const Column<BinIdxType>& col_input,
const GHistIndexMatrix& gmat) {
const DenseColumn<BinIdxType>& col = static_cast<const DenseColumn<BinIdxType>& >(col_input);
const DenseColumn<BinIdxType, true>& col = static_cast<const DenseColumn<BinIdxType, true>& >(col_input);
for (auto i = 0ull; i < col.Size(); i++) {
if (col.IsMissing(i)) continue;
EXPECT_EQ(gmat.index[gmat.row_ptr[i]],
@@ -109,17 +109,17 @@ TEST(DenseColumnWithMissing, Test) {
column_matrix.Init(gmat, 0.2);
switch (column_matrix.GetTypeSize()) {
case kUint8BinsTypeSize: {
auto col = column_matrix.GetColumn<uint8_t>(0);
auto col = column_matrix.GetColumn<uint8_t, true>(0);
CheckColumWithMissingValue(*col.get(), gmat);
}
break;
case kUint16BinsTypeSize: {
auto col = column_matrix.GetColumn<uint16_t>(0);
auto col = column_matrix.GetColumn<uint16_t, true>(0);
CheckColumWithMissingValue(*col.get(), gmat);
}
break;
case kUint32BinsTypeSize: {
auto col = column_matrix.GetColumn<uint32_t>(0);
auto col = column_matrix.GetColumn<uint32_t, true>(0);
CheckColumWithMissingValue(*col.get(), gmat);
}
break;

View File

@@ -4,6 +4,7 @@
#include <utility>
#include "../../../src/common/row_set.h"
#include "../../../src/common/partition_builder.h"
#include "../helpers.h"
namespace xgboost {