/*! * Copyright 2017-2023 by Contributors * \file hist_util.h */ #ifndef PLUGIN_SYCL_COMMON_HIST_UTIL_H_ #define PLUGIN_SYCL_COMMON_HIST_UTIL_H_ #include #include #include #include "../data.h" #include "row_set.h" #include "../../src/common/hist_util.h" #include "../data/gradient_index.h" #include namespace xgboost { namespace sycl { namespace common { template using GHistRow = USMVector, memory_type>; using BinTypeSize = ::xgboost::common::BinTypeSize; class ColumnMatrix; /*! * \brief Fill histogram with zeroes */ template void InitHist(::sycl::queue qu, GHistRow* hist, size_t size, ::sycl::event* event); /*! * \brief Compute subtraction: dst = src1 - src2 */ template ::sycl::event SubtractionHist(::sycl::queue qu, GHistRow* dst, const GHistRow& src1, const GHistRow& src2, size_t size, ::sycl::event event_priv); /*! * \brief Builder for histograms of gradient statistics */ template class GHistBuilder { public: template using GHistRowT = GHistRow; GHistBuilder() = default; GHistBuilder(::sycl::queue qu, uint32_t nbins) : qu_{qu}, nbins_{nbins} {} // Construct a histogram via histogram aggregation ::sycl::event BuildHist(const USMVector& gpair_device, const RowSetCollection::Elem& row_indices, const GHistIndexMatrix& gmat, GHistRowT* HistCollection, bool isDense, GHistRowT* hist_buffer, ::sycl::event event, bool force_atomic_use = false); // Construct a histogram via subtraction trick void SubtractionTrick(GHistRowT* self, const GHistRowT& sibling, const GHistRowT& parent); uint32_t GetNumBins() const { return nbins_; } private: /*! \brief Number of all bins over all features */ uint32_t nbins_ { 0 }; ::sycl::queue qu_; }; } // namespace common } // namespace sycl } // namespace xgboost #endif // PLUGIN_SYCL_COMMON_HIST_UTIL_H_