disable task-based parallel on windows to avoid /openmp:llvm (#50)

This commit is contained in:
koide3 2024-05-11 00:28:28 +09:00 committed by GitHub
parent eec9c4af60
commit 308da3e371
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View File

@ -97,7 +97,7 @@ endif()
if(MSVC)
add_compile_definitions(_USE_MATH_DEFINES)
add_compile_options(/openmp:llvm)
# add_compile_options(/openmp:llvm)
endif()
##############

View File

@ -4,6 +4,11 @@
#include <algorithm>
#ifdef _MSC_VER
#pragma message("warning: Task-based OpenMP parallelism is not well supported on windows.")
#pragma message("warning: Thus, OpenMP-based downsampling is only partially parallelized on windows.")
#endif
namespace small_gicp {
template <typename RandomAccessIterator, typename Compare>
@ -28,11 +33,15 @@ void merge_sort_omp_impl(RandomAccessIterator first, RandomAccessIterator last,
template <typename RandomAccessIterator, typename Compare>
void merge_sort_omp(RandomAccessIterator first, RandomAccessIterator last, const Compare& comp, int num_threads) {
#ifndef _MSC_VER
#pragma omp parallel num_threads(num_threads)
{
#pragma omp single nowait
{ merge_sort_omp_impl(first, last, comp); }
}
#else
std::stable_sort(first, last, comp);
#endif
}
template <typename RandomAccessIterator, typename Compare>
@ -65,11 +74,15 @@ void quick_sort_omp_impl(RandomAccessIterator first, RandomAccessIterator last,
template <typename RandomAccessIterator, typename Compare>
void quick_sort_omp(RandomAccessIterator first, RandomAccessIterator last, const Compare& comp, int num_threads) {
#ifndef _MSC_VER
#pragma omp parallel num_threads(num_threads)
{
#pragma omp single nowait
{ quick_sort_omp_impl(first, last, comp); }
}
#else
std::sort(first, last, comp);
#endif
}
} // namespace small_gicp