Fix non-openmp build. (#5566)
* Add test to Jenkins. * Fix threading utils tests. * Require thread library.
This commit is contained in:
@@ -88,12 +88,15 @@ if (XGBOOST_BUILTIN_PREFETCH_PRESENT)
|
||||
-DXGBOOST_BUILTIN_PREFETCH_PRESENT=1)
|
||||
endif (XGBOOST_BUILTIN_PREFETCH_PRESENT)
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
list(APPEND SRC_LIBS Threads::Threads ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
if (USE_OPENMP OR USE_CUDA) # CUDA requires OpenMP
|
||||
find_package(OpenMP REQUIRED)
|
||||
list(APPEND SRC_LIBS OpenMP::OpenMP_CXX)
|
||||
set(LINKED_LIBRARIES_PRIVATE "${LINKED_LIBRARIES_PRIVATE};${SRC_LIBS}" PARENT_SCOPE)
|
||||
target_link_libraries(objxgboost PRIVATE OpenMP::OpenMP_CXX)
|
||||
endif (USE_OPENMP OR USE_CUDA)
|
||||
set(LINKED_LIBRARIES_PRIVATE "${LINKED_LIBRARIES_PRIVATE};${SRC_LIBS}" PARENT_SCOPE)
|
||||
|
||||
# For MSVC: Call msvc_use_static_runtime() once again to completely
|
||||
# replace /MD with /MT. See https://github.com/dmlc/xgboost/issues/4462
|
||||
|
||||
@@ -227,8 +227,7 @@ class ColumnMatrix {
|
||||
/* missing values make sense only for column with type kDenseColumn,
|
||||
and if no missing values were observed it could be handled much faster. */
|
||||
if (noMissingValues) {
|
||||
const int32_t nthread = omp_get_max_threads(); // NOLINT
|
||||
#pragma omp parallel for num_threads(nthread)
|
||||
#pragma omp parallel for num_threads(omp_get_max_threads())
|
||||
for (omp_ulong rid = 0; rid < nrow; ++rid) {
|
||||
const size_t ibegin = rid*nfeature;
|
||||
const size_t iend = (rid+1)*nfeature;
|
||||
|
||||
@@ -110,10 +110,12 @@ class BlockedSpace2d {
|
||||
|
||||
// Wrapper to implement nested parallelism with simple omp parallel for
|
||||
template<typename Func>
|
||||
void ParallelFor2d(const BlockedSpace2d& space, const int nthreads, Func func) {
|
||||
void ParallelFor2d(const BlockedSpace2d& space, int nthreads, Func func) {
|
||||
const size_t num_blocks_in_space = space.Size();
|
||||
nthreads = std::min(nthreads, omp_get_max_threads());
|
||||
nthreads = std::max(nthreads, 1);
|
||||
|
||||
#pragma omp parallel num_threads(nthreads)
|
||||
#pragma omp parallel num_threads(nthreads)
|
||||
{
|
||||
size_t tid = omp_get_thread_num();
|
||||
size_t chunck_size = num_blocks_in_space / nthreads + !!(num_blocks_in_space % nthreads);
|
||||
|
||||
@@ -189,12 +189,7 @@ struct EvalAuc : public Metric {
|
||||
rec[j - gptr[group_id]] = {h_preds[j], j};
|
||||
}
|
||||
|
||||
if (omp_in_parallel()) {
|
||||
std::stable_sort(rec.begin(), rec.end(), common::CmpFirst);
|
||||
} else {
|
||||
XGBOOST_PARALLEL_SORT(rec.begin(), rec.end(), common::CmpFirst);
|
||||
}
|
||||
|
||||
XGBOOST_PARALLEL_SORT(rec.begin(), rec.end(), common::CmpFirst);
|
||||
// calculate AUC
|
||||
double sum_pospair = 0.0;
|
||||
double sum_npos = 0.0, sum_nneg = 0.0, buf_pos = 0.0, buf_neg = 0.0;
|
||||
@@ -557,11 +552,7 @@ struct EvalAucPR : public Metric {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (omp_in_parallel()) {
|
||||
std::stable_sort(rec.begin(), rec.end(), common::CmpFirst);
|
||||
} else {
|
||||
XGBOOST_PARALLEL_SORT(rec.begin(), rec.end(), common::CmpFirst);
|
||||
}
|
||||
XGBOOST_PARALLEL_SORT(rec.begin(), rec.end(), common::CmpFirst);
|
||||
|
||||
// calculate AUC
|
||||
double tp = 0.0, prevtp = 0.0, fp = 0.0, prevfp = 0.0, h = 0.0, a = 0.0, b = 0.0;
|
||||
|
||||
Reference in New Issue
Block a user