[SYC]. Implementation of HostDeviceVector (#10842)
This commit is contained in:
committed by
GitHub
parent
bc69a3e877
commit
2179baa50c
@@ -49,7 +49,7 @@ void mergeSort(BinIdxType* begin, BinIdxType* end, BinIdxType* buf) {
|
||||
}
|
||||
|
||||
template <typename BinIdxType>
|
||||
void GHistIndexMatrix::SetIndexData(::sycl::queue qu,
|
||||
void GHistIndexMatrix::SetIndexData(::sycl::queue* qu,
|
||||
BinIdxType* index_data,
|
||||
const DeviceMatrix &dmat,
|
||||
size_t nbins,
|
||||
@@ -66,11 +66,11 @@ void GHistIndexMatrix::SetIndexData(::sycl::queue qu,
|
||||
// Sparse case only
|
||||
if (!offsets) {
|
||||
// sort_buff has type uint8_t
|
||||
sort_buff.Resize(&qu, num_rows * row_stride * sizeof(BinIdxType));
|
||||
sort_buff.Resize(qu, num_rows * row_stride * sizeof(BinIdxType));
|
||||
}
|
||||
BinIdxType* sort_data = reinterpret_cast<BinIdxType*>(sort_buff.Data());
|
||||
|
||||
auto event = qu.submit([&](::sycl::handler& cgh) {
|
||||
auto event = qu->submit([&](::sycl::handler& cgh) {
|
||||
cgh.parallel_for<>(::sycl::range<1>(num_rows), [=](::sycl::item<1> pid) {
|
||||
const size_t i = pid.get_id(0);
|
||||
const size_t ibegin = offset_vec[i];
|
||||
@@ -92,8 +92,8 @@ void GHistIndexMatrix::SetIndexData(::sycl::queue qu,
|
||||
}
|
||||
});
|
||||
});
|
||||
qu.memcpy(hit_count.data(), hit_count_ptr, nbins * sizeof(size_t), event);
|
||||
qu.wait();
|
||||
qu->memcpy(hit_count.data(), hit_count_ptr, nbins * sizeof(size_t), event);
|
||||
qu->wait();
|
||||
}
|
||||
|
||||
void GHistIndexMatrix::ResizeIndex(size_t n_index, bool isDense) {
|
||||
@@ -110,7 +110,7 @@ void GHistIndexMatrix::ResizeIndex(size_t n_index, bool isDense) {
|
||||
}
|
||||
}
|
||||
|
||||
void GHistIndexMatrix::Init(::sycl::queue qu,
|
||||
void GHistIndexMatrix::Init(::sycl::queue* qu,
|
||||
Context const * ctx,
|
||||
const DeviceMatrix& p_fmat_device,
|
||||
int max_bins) {
|
||||
@@ -123,7 +123,7 @@ void GHistIndexMatrix::Init(::sycl::queue qu,
|
||||
const uint32_t nbins = cut.Ptrs().back();
|
||||
this->nbins = nbins;
|
||||
hit_count.resize(nbins, 0);
|
||||
hit_count_buff.Resize(&qu, nbins, 0);
|
||||
hit_count_buff.Resize(qu, nbins, 0);
|
||||
|
||||
this->p_fmat = p_fmat_device.p_mat;
|
||||
const bool isDense = p_fmat_device.p_mat->IsDense();
|
||||
@@ -150,7 +150,7 @@ void GHistIndexMatrix::Init(::sycl::queue qu,
|
||||
if (isDense) {
|
||||
index.ResizeOffset(n_offsets);
|
||||
offsets = index.Offset();
|
||||
qu.memcpy(offsets, cut_device.Ptrs().DataConst(),
|
||||
qu->memcpy(offsets, cut_device.Ptrs().DataConst(),
|
||||
sizeof(uint32_t) * n_offsets).wait_and_throw();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,16 +26,16 @@ class HistogramCuts {
|
||||
public:
|
||||
HistogramCuts() {}
|
||||
|
||||
explicit HistogramCuts(::sycl::queue qu) {}
|
||||
explicit HistogramCuts(::sycl::queue* qu) {}
|
||||
|
||||
~HistogramCuts() {
|
||||
}
|
||||
|
||||
void Init(::sycl::queue qu, xgboost::common::HistogramCuts const& cuts) {
|
||||
void Init(::sycl::queue* qu, xgboost::common::HistogramCuts const& cuts) {
|
||||
qu_ = qu;
|
||||
cut_values_.Init(&qu_, cuts.cut_values_.HostVector());
|
||||
cut_ptrs_.Init(&qu_, cuts.cut_ptrs_.HostVector());
|
||||
min_vals_.Init(&qu_, cuts.min_vals_.HostVector());
|
||||
cut_values_.Init(qu_, cuts.cut_values_.HostVector());
|
||||
cut_ptrs_.Init(qu_, cuts.cut_ptrs_.HostVector());
|
||||
min_vals_.Init(qu_, cuts.min_vals_.HostVector());
|
||||
}
|
||||
|
||||
// Getters for USM buffers to pass pointers into device kernels
|
||||
@@ -47,7 +47,7 @@ class HistogramCuts {
|
||||
USMVector<bst_float> cut_values_;
|
||||
USMVector<uint32_t> cut_ptrs_;
|
||||
USMVector<float> min_vals_;
|
||||
::sycl::queue qu_;
|
||||
::sycl::queue* qu_;
|
||||
};
|
||||
|
||||
using BinTypeSize = ::xgboost::common::BinTypeSize;
|
||||
@@ -115,11 +115,11 @@ struct Index {
|
||||
}
|
||||
|
||||
void Resize(const size_t nBytesData) {
|
||||
data_.Resize(&qu_, nBytesData);
|
||||
data_.Resize(qu_, nBytesData);
|
||||
}
|
||||
|
||||
void ResizeOffset(const size_t nDisps) {
|
||||
offset_.Resize(&qu_, nDisps);
|
||||
offset_.Resize(qu_, nDisps);
|
||||
p_ = nDisps;
|
||||
}
|
||||
|
||||
@@ -131,7 +131,7 @@ struct Index {
|
||||
return data_.End();
|
||||
}
|
||||
|
||||
void setQueue(::sycl::queue qu) {
|
||||
void setQueue(::sycl::queue* qu) {
|
||||
qu_ = qu;
|
||||
}
|
||||
|
||||
@@ -155,7 +155,7 @@ struct Index {
|
||||
size_t p_ {1};
|
||||
Func func_;
|
||||
|
||||
::sycl::queue qu_;
|
||||
::sycl::queue* qu_;
|
||||
};
|
||||
|
||||
/*!
|
||||
@@ -182,11 +182,11 @@ struct GHistIndexMatrix {
|
||||
size_t row_stride;
|
||||
|
||||
// Create a global histogram matrix based on a given DMatrix device wrapper
|
||||
void Init(::sycl::queue qu, Context const * ctx,
|
||||
void Init(::sycl::queue* qu, Context const * ctx,
|
||||
const sycl::DeviceMatrix& p_fmat_device, int max_num_bins);
|
||||
|
||||
template <typename BinIdxType>
|
||||
void SetIndexData(::sycl::queue qu, BinIdxType* index_data,
|
||||
void SetIndexData(::sycl::queue* qu, BinIdxType* index_data,
|
||||
const sycl::DeviceMatrix &dmat_device,
|
||||
size_t nbins, size_t row_stride, uint32_t* offsets);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user