Merge topic 'fix-openmp-segfaul'
47ee1b247 OpenMP: fix race condition Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Nickolas Davis <nadavi@sandia.gov> Merge-request: !2625
This commit is contained in:
commit
be9ac1ef3f
@ -333,6 +333,11 @@ struct ReduceHelper
|
||||
|
||||
bool doParallel = false;
|
||||
vtkm::Id numThreads = 0;
|
||||
|
||||
vtkm::cont::RuntimeDeviceInformation{}
|
||||
.GetRuntimeConfiguration(vtkm::cont::DeviceAdapterTagOpenMP())
|
||||
.GetThreads(numThreads);
|
||||
|
||||
std::unique_ptr<ReturnType[]> threadData;
|
||||
|
||||
VTKM_OPENMP_DIRECTIVE(parallel default(none) firstprivate(f) shared(
|
||||
@ -342,9 +347,6 @@ struct ReduceHelper
|
||||
|
||||
VTKM_OPENMP_DIRECTIVE(single)
|
||||
{
|
||||
vtkm::cont::RuntimeDeviceInformation{}
|
||||
.GetRuntimeConfiguration(vtkm::cont::DeviceAdapterTagOpenMP())
|
||||
.GetThreads(numThreads);
|
||||
if (numVals >= numThreads * 2)
|
||||
{
|
||||
doParallel = true;
|
||||
@ -534,15 +536,16 @@ void ReduceByKeyHelper(KeysInArray keysInArray,
|
||||
|
||||
internal::WrappedBinaryOperator<ValueType, BinaryFunctor> f(functor);
|
||||
vtkm::Id outIdx = 0;
|
||||
vtkm::Id numThreads = 0;
|
||||
|
||||
vtkm::cont::RuntimeDeviceInformation{}
|
||||
.GetRuntimeConfiguration(vtkm::cont::DeviceAdapterTagOpenMP())
|
||||
.GetThreads(numThreads);
|
||||
|
||||
VTKM_OPENMP_DIRECTIVE(parallel default(none) firstprivate(keysIn, valuesIn, keysOut, valuesOut, f)
|
||||
shared(outIdx) VTKM_OPENMP_SHARED_CONST(numValues))
|
||||
shared(numThreads, outIdx) VTKM_OPENMP_SHARED_CONST(numValues))
|
||||
{
|
||||
int tid = omp_get_thread_num();
|
||||
vtkm::Id numThreads = 0;
|
||||
vtkm::cont::RuntimeDeviceInformation{}
|
||||
.GetRuntimeConfiguration(vtkm::cont::DeviceAdapterTagOpenMP())
|
||||
.GetThreads(numThreads);
|
||||
|
||||
// Determine bounds for this thread's scan operation:
|
||||
vtkm::Id chunkSize = (numValues + numThreads - 1) / numThreads;
|
||||
|
@ -86,10 +86,18 @@ private:
|
||||
VTKM_CONT vtkm::Id InitializeHardwareMaxThreads() const
|
||||
{
|
||||
vtkm::Id count = 0;
|
||||
VTKM_OPENMP_DIRECTIVE(parallel)
|
||||
|
||||
if (omp_in_parallel())
|
||||
{
|
||||
VTKM_OPENMP_DIRECTIVE(atomic)
|
||||
++count;
|
||||
count = omp_get_num_threads();
|
||||
}
|
||||
else
|
||||
{
|
||||
VTKM_OPENMP_DIRECTIVE(parallel)
|
||||
{
|
||||
VTKM_OPENMP_DIRECTIVE(atomic)
|
||||
++count;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user