Take advantage of C++17 features (#8858)
--------- Co-authored-by: Hyunsu Philip Cho <chohyu01@cs.washington.edu> Co-authored-by: Jiaming Yuan <jm.yuan@outlook.com>
This commit is contained in:
parent
69a50248b7
commit
2dc22e7aad
@ -3,7 +3,7 @@ PKGROOT=../../
|
|||||||
ENABLE_STD_THREAD=1
|
ENABLE_STD_THREAD=1
|
||||||
# _*_ mode: Makefile; _*_
|
# _*_ mode: Makefile; _*_
|
||||||
|
|
||||||
CXX_STD = CXX14
|
CXX_STD = CXX17
|
||||||
|
|
||||||
XGB_RFLAGS = -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0\
|
XGB_RFLAGS = -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0\
|
||||||
-DDMLC_ENABLE_STD_THREAD=$(ENABLE_STD_THREAD) -DDMLC_DISABLE_STDIN=1\
|
-DDMLC_ENABLE_STD_THREAD=$(ENABLE_STD_THREAD) -DDMLC_DISABLE_STDIN=1\
|
||||||
|
|||||||
@ -3,7 +3,7 @@ PKGROOT=../../
|
|||||||
ENABLE_STD_THREAD=0
|
ENABLE_STD_THREAD=0
|
||||||
# _*_ mode: Makefile; _*_
|
# _*_ mode: Makefile; _*_
|
||||||
|
|
||||||
CXX_STD = CXX14
|
CXX_STD = CXX17
|
||||||
|
|
||||||
XGB_RFLAGS = -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0\
|
XGB_RFLAGS = -DXGBOOST_STRICT_R_MODE=1 -DDMLC_LOG_BEFORE_THROW=0\
|
||||||
-DDMLC_ENABLE_STD_THREAD=$(ENABLE_STD_THREAD) -DDMLC_DISABLE_STDIN=1\
|
-DDMLC_ENABLE_STD_THREAD=$(ENABLE_STD_THREAD) -DDMLC_DISABLE_STDIN=1\
|
||||||
|
|||||||
@ -195,31 +195,6 @@ template <typename Indexable>
|
|||||||
XGBOOST_DEVICE size_t LastOf(size_t group, Indexable const &indptr) {
|
XGBOOST_DEVICE size_t LastOf(size_t group, Indexable const &indptr) {
|
||||||
return indptr[group + 1] - 1;
|
return indptr[group + 1] - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief A CRTP (curiously recurring template pattern) helper function.
|
|
||||||
*
|
|
||||||
* https://www.fluentcpp.com/2017/05/19/crtp-helper/
|
|
||||||
*
|
|
||||||
* Does two things:
|
|
||||||
* 1. Makes "crtp" explicit in the inheritance structure of a CRTP base class.
|
|
||||||
* 2. Avoids having to `static_cast` in a lot of places.
|
|
||||||
*
|
|
||||||
* \tparam T The derived class in a CRTP hierarchy.
|
|
||||||
*/
|
|
||||||
template <typename T>
|
|
||||||
struct Crtp {
|
|
||||||
T &Underlying() { return static_cast<T &>(*this); }
|
|
||||||
T const &Underlying() const { return static_cast<T const &>(*this); }
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief C++17 std::as_const
|
|
||||||
*/
|
|
||||||
template <typename T>
|
|
||||||
typename std::add_const<T>::type &AsConst(T &v) noexcept { // NOLINT(runtime/references)
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
} // namespace common
|
} // namespace common
|
||||||
} // namespace xgboost
|
} // namespace xgboost
|
||||||
#endif // XGBOOST_COMMON_COMMON_H_
|
#endif // XGBOOST_COMMON_COMMON_H_
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility> // for as_const
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "collective/communicator-inl.h"
|
#include "collective/communicator-inl.h"
|
||||||
@ -257,11 +257,11 @@ LearnerModelParam::LearnerModelParam(Context const* ctx, LearnerModelParamLegacy
|
|||||||
: LearnerModelParam{user_param, t} {
|
: LearnerModelParam{user_param, t} {
|
||||||
std::swap(base_score_, base_margin);
|
std::swap(base_score_, base_margin);
|
||||||
// Make sure read access everywhere for thread-safe prediction.
|
// Make sure read access everywhere for thread-safe prediction.
|
||||||
common::AsConst(base_score_).HostView();
|
std::as_const(base_score_).HostView();
|
||||||
if (!ctx->IsCPU()) {
|
if (!ctx->IsCPU()) {
|
||||||
common::AsConst(base_score_).View(ctx->gpu_id);
|
std::as_const(base_score_).View(ctx->gpu_id);
|
||||||
}
|
}
|
||||||
CHECK(common::AsConst(base_score_).Data()->HostCanRead());
|
CHECK(std::as_const(base_score_).Data()->HostCanRead());
|
||||||
}
|
}
|
||||||
|
|
||||||
linalg::TensorView<float const, 1> LearnerModelParam::BaseScore(int32_t device) const {
|
linalg::TensorView<float const, 1> LearnerModelParam::BaseScore(int32_t device) const {
|
||||||
@ -287,9 +287,9 @@ void LearnerModelParam::Copy(LearnerModelParam const& that) {
|
|||||||
base_score_.Reshape(that.base_score_.Shape());
|
base_score_.Reshape(that.base_score_.Shape());
|
||||||
base_score_.Data()->SetDevice(that.base_score_.DeviceIdx());
|
base_score_.Data()->SetDevice(that.base_score_.DeviceIdx());
|
||||||
base_score_.Data()->Copy(*that.base_score_.Data());
|
base_score_.Data()->Copy(*that.base_score_.Data());
|
||||||
common::AsConst(base_score_).HostView();
|
std::as_const(base_score_).HostView();
|
||||||
if (that.base_score_.DeviceIdx() != Context::kCpuId) {
|
if (that.base_score_.DeviceIdx() != Context::kCpuId) {
|
||||||
common::AsConst(base_score_).View(that.base_score_.DeviceIdx());
|
std::as_const(base_score_).View(that.base_score_.DeviceIdx());
|
||||||
}
|
}
|
||||||
CHECK_EQ(base_score_.Data()->DeviceCanRead(), that.base_score_.Data()->DeviceCanRead());
|
CHECK_EQ(base_score_.Data()->DeviceCanRead(), that.base_score_.Data()->DeviceCanRead());
|
||||||
CHECK(base_score_.Data()->HostCanRead());
|
CHECK(base_score_.Data()->HostCanRead());
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user