From f3360d173b1eaf2a703c1cf5b7345513734f3fa7 Mon Sep 17 00:00:00 2001 From: tqchen Date: Tue, 2 Sep 2014 17:38:51 -0700 Subject: [PATCH] pass trival test --- src/io/page_fmatrix-inl.hpp | 21 +++++++++++---------- src/tree/updater_colmaker-inl.hpp | 3 ++- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/io/page_fmatrix-inl.hpp b/src/io/page_fmatrix-inl.hpp index 9e586e1c4..22766ab65 100644 --- a/src/io/page_fmatrix-inl.hpp +++ b/src/io/page_fmatrix-inl.hpp @@ -46,9 +46,10 @@ class CSCMatrixManager { } /*! \brief get underlying batch */ inline ColBatch GetBatch(void) const { - ColBatch batch; - batch.col_index = &col_index[0]; - batch.col_data = &col_data[0]; + ColBatch batch; + batch.size = col_index.size(); + batch.col_index = BeginPtr(col_index); + batch.col_data = BeginPtr(col_data); return batch; } private: @@ -79,11 +80,13 @@ class CSCMatrixManager { col_index_ = col_todo_; read_top_ = 0; } - inline bool LoadNext(PagePtr &val) { + inline bool LoadNext(PagePtr &val) { val->Clear(); if (read_top_ >= col_index_.size()) return false; while (read_top_ < col_index_.size()) { - if (!this->TryFill(col_index_[read_top_], val)) return true; + if (!this->TryFill(col_index_[read_top_], val)) { + return true; + } ++read_top_; } return true; @@ -241,11 +244,9 @@ class FMatrixPage : public IFMatrix { } virtual void InitColAccess(float pkeep = 1.0f) { if (this->HaveColAccess()) return; - if (!this->LoadColData()) { - this->InitColData(pkeep, fname_cbuffer_.c_str(), - 64 << 20, 5); - utils::Check(this->LoadColData(), "fail to read in column data"); - } + this->InitColData(pkeep, fname_cbuffer_.c_str(), + 64 << 20, 5); + utils::Check(this->LoadColData(), "fail to read in column data"); } /*! * \brief get the row iterator associated with FMatrix diff --git a/src/tree/updater_colmaker-inl.hpp b/src/tree/updater_colmaker-inl.hpp index bf93cb7b5..12f808ce4 100644 --- a/src/tree/updater_colmaker-inl.hpp +++ b/src/tree/updater_colmaker-inl.hpp @@ -421,7 +421,7 @@ class ColMaker: public IUpdater { for (bst_omp_uint i = 0; i < nsize; ++i) { const bst_uint fid = batch.col_index[i]; const int tid = omp_get_thread_num(); - const ColBatch::Inst c = batch[i]; + const ColBatch::Inst c = batch[i]; if (param.need_forward_search(fmat.GetColDensity(fid))) { this->EnumerateSplit(c.data, c.data + c.length, +1, fid, gpair, info, stemp[tid]); @@ -452,6 +452,7 @@ class ColMaker: public IUpdater { utils::Check(n > 0, "colsample_bylevel is too small that no feature can be included"); feat_set.resize(n); } + std::sort(feat_set.begin(), feat_set.end()); utils::IIterator *iter = p_fmat->ColIterator(feat_set); while (iter->Next()) { this->UpdateSolution(iter->Value(), gpair, *p_fmat, info);