Lazy initialization of device vector. (#5173)

* Lazy initialization of device vector.

* Fix #5162.

* Disable copy constructor of HostDeviceVector.  Prevents implicit copying.

* Fix CPU build.

* Bring back move assignment operator.
This commit is contained in:
Jiaming Yuan
2020-01-07 11:23:05 +08:00
committed by GitHub
parent 77cfbff5a7
commit ee287808fb
7 changed files with 114 additions and 64 deletions

View File

@@ -11,26 +11,26 @@ TEST(ColumnSampler, Test) {
// No node sampling
cs.Init(n, 1.0f, 0.5f, 0.5f);
auto set0 = *cs.GetFeatureSet(0);
ASSERT_EQ(set0.Size(), 32);
auto set0 = cs.GetFeatureSet(0);
ASSERT_EQ(set0->Size(), 32);
auto set1 = *cs.GetFeatureSet(0);
auto set1 = cs.GetFeatureSet(0);
ASSERT_EQ(set0.HostVector(), set1.HostVector());
ASSERT_EQ(set0->HostVector(), set1->HostVector());
auto set2 = *cs.GetFeatureSet(1);
ASSERT_NE(set1.HostVector(), set2.HostVector());
ASSERT_EQ(set2.Size(), 32);
auto set2 = cs.GetFeatureSet(1);
ASSERT_NE(set1->HostVector(), set2->HostVector());
ASSERT_EQ(set2->Size(), 32);
// Node sampling
cs.Init(n, 0.5f, 1.0f, 0.5f);
auto set3 = *cs.GetFeatureSet(0);
ASSERT_EQ(set3.Size(), 32);
auto set3 = cs.GetFeatureSet(0);
ASSERT_EQ(set3->Size(), 32);
auto set4 = *cs.GetFeatureSet(0);
auto set4 = cs.GetFeatureSet(0);
ASSERT_NE(set3.HostVector(), set4.HostVector());
ASSERT_EQ(set4.Size(), 32);
ASSERT_NE(set3->HostVector(), set4->HostVector());
ASSERT_EQ(set4->Size(), 32);
// No level or node sampling, should be the same at different depth
cs.Init(n, 1.0f, 1.0f, 0.5f);
@@ -38,11 +38,11 @@ TEST(ColumnSampler, Test) {
cs.GetFeatureSet(1)->HostVector());
cs.Init(n, 1.0f, 1.0f, 1.0f);
auto set5 = *cs.GetFeatureSet(0);
ASSERT_EQ(set5.Size(), n);
auto set5 = cs.GetFeatureSet(0);
ASSERT_EQ(set5->Size(), n);
cs.Init(n, 1.0f, 1.0f, 1.0f);
auto set6 = *cs.GetFeatureSet(0);
ASSERT_EQ(set5.HostVector(), set6.HostVector());
auto set6 = cs.GetFeatureSet(0);
ASSERT_EQ(set5->HostVector(), set6->HostVector());
// Should always be a minimum of one feature
cs.Init(n, 1e-16f, 1e-16f, 1e-16f);