* Use ptr from mmap for `GHistIndexMatrix` and `ColumnMatrix`. - Define a resource for holding various types of memory pointers. - Define ref vector for holding resources. - Swap the underlying resources for GHist and ColumnM. - Add documentation for current status. - s390x support is removed. It should work if you can compile XGBoost, all the old workaround code does is to get GCC to compile.
60 lines
1.8 KiB
Plaintext
60 lines
1.8 KiB
Plaintext
/**
|
|
* Copyright 2019-2023, XGBoost contributors
|
|
*/
|
|
#include <dmlc/registry.h>
|
|
|
|
#include <cstddef> // for size_t
|
|
|
|
#include "../common/io.h" // for AlignedResourceReadStream, AlignedFileWriteStream
|
|
#include "../common/ref_resource_view.h" // for ReadVec, WriteVec
|
|
#include "ellpack_page.cuh"
|
|
#include "histogram_cut_format.h" // for ReadHistogramCuts, WriteHistogramCuts
|
|
#include "sparse_page_writer.h" // for SparsePageFormat
|
|
|
|
namespace xgboost::data {
|
|
DMLC_REGISTRY_FILE_TAG(ellpack_page_raw_format);
|
|
|
|
class EllpackPageRawFormat : public SparsePageFormat<EllpackPage> {
|
|
public:
|
|
bool Read(EllpackPage* page, common::AlignedResourceReadStream* fi) override {
|
|
auto* impl = page->Impl();
|
|
if (!ReadHistogramCuts(&impl->Cuts(), fi)) {
|
|
return false;
|
|
}
|
|
if (!fi->Read(&impl->n_rows)) {
|
|
return false;
|
|
}
|
|
if (!fi->Read(&impl->is_dense)) {
|
|
return false;
|
|
}
|
|
if (!fi->Read(&impl->row_stride)) {
|
|
return false;
|
|
}
|
|
if (!common::ReadVec(fi, &impl->gidx_buffer.HostVector())) {
|
|
return false;
|
|
}
|
|
if (!fi->Read(&impl->base_rowid)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
size_t Write(const EllpackPage& page, common::AlignedFileWriteStream* fo) override {
|
|
std::size_t bytes{0};
|
|
auto* impl = page.Impl();
|
|
bytes += WriteHistogramCuts(impl->Cuts(), fo);
|
|
bytes += fo->Write(impl->n_rows);
|
|
bytes += fo->Write(impl->is_dense);
|
|
bytes += fo->Write(impl->row_stride);
|
|
CHECK(!impl->gidx_buffer.ConstHostVector().empty());
|
|
bytes += common::WriteVec(fo, impl->gidx_buffer.HostVector());
|
|
bytes += fo->Write(impl->base_rowid);
|
|
return bytes;
|
|
}
|
|
};
|
|
|
|
XGBOOST_REGISTER_ELLPACK_PAGE_FORMAT(raw)
|
|
.describe("Raw ELLPACK binary data format.")
|
|
.set_body([]() { return new EllpackPageRawFormat(); });
|
|
} // namespace xgboost::data
|