[Openmp-commits] [openmp] r280519 - Use 'critical' reduction method when 'atomic' is not available but requested.
Jonathan Peyton via Openmp-commits
openmp-commits at lists.llvm.org
Fri Sep 2 11:29:45 PDT 2016
Author: jlpeyton
Date: Fri Sep 2 13:29:45 2016
New Revision: 280519
URL: http://llvm.org/viewvc/llvm-project?rev=280519&view=rev
Log:
Use 'critical' reduction method when 'atomic' is not available but requested.
In case atomic reduction method is not available (the compiler can't generate
it) the assertion failure occurred if KMP_FORCE_REDUCTION=atomic was specified.
This change replaces the assertion with a warning and sets the reduction method
to the default one - 'critical'.
Patch by Olga Malysheva
Differential Revision: https://reviews.llvm.org/D23990
Modified:
openmp/trunk/runtime/src/i18n/en_US.txt
openmp/trunk/runtime/src/kmp_runtime.c
Modified: openmp/trunk/runtime/src/i18n/en_US.txt
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/i18n/en_US.txt?rev=280519&r1=280518&r2=280519&view=diff
==============================================================================
--- openmp/trunk/runtime/src/i18n/en_US.txt (original)
+++ openmp/trunk/runtime/src/i18n/en_US.txt Fri Sep 2 13:29:45 2016
@@ -38,7 +38,7 @@ Language "English"
Country "USA"
LangId "1033"
Version "2"
-Revision "20160405"
+Revision "20160714"
@@ -410,6 +410,7 @@ AffIgnoringHwloc "%1$s: Igno
AffHwlocErrorOccurred "%1$s: Hwloc failed in %2$s. Relying on internal affinity mechanisms."
EnvSerialWarn "%1$s must be set prior to OpenMP runtime library initialization; ignored."
EnvVarDeprecated "%1$s variable deprecated, please use %2$s instead."
+RedMethodNotSupported "KMP_FORCE_REDUCTION: %1$s method is not supported; using critical."
# --------------------------------------------------------------------------------------------------
Modified: openmp/trunk/runtime/src/kmp_runtime.c
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/kmp_runtime.c?rev=280519&r1=280518&r2=280519&view=diff
==============================================================================
--- openmp/trunk/runtime/src/kmp_runtime.c (original)
+++ openmp/trunk/runtime/src/kmp_runtime.c Fri Sep 2 13:29:45 2016
@@ -7585,27 +7585,34 @@ __kmp_determine_reduction_method( ident_
// method and stay with the unsynchronized method (empty_reduce_block)
if( __kmp_force_reduction_method != reduction_method_not_defined && team_size != 1) {
- PACKED_REDUCTION_METHOD_T forced_retval;
+ PACKED_REDUCTION_METHOD_T forced_retval = critical_reduce_block;
int atomic_available, tree_available;
switch( ( forced_retval = __kmp_force_reduction_method ) )
{
- case critical_reduce_block:
+ case critical_reduce_block:
KMP_ASSERT( lck ); // lck should be != 0
break;
case atomic_reduce_block:
atomic_available = FAST_REDUCTION_ATOMIC_METHOD_GENERATED;
- KMP_ASSERT( atomic_available ); // atomic_available should be != 0
+ if( ! atomic_available ) {
+ KMP_WARNING(RedMethodNotSupported, "atomic");
+ forced_retval = critical_reduce_block;
+ }
break;
case tree_reduce_block:
tree_available = FAST_REDUCTION_TREE_METHOD_GENERATED;
- KMP_ASSERT( tree_available ); // tree_available should be != 0
- #if KMP_FAST_REDUCTION_BARRIER
- forced_retval = TREE_REDUCE_BLOCK_WITH_REDUCTION_BARRIER;
- #endif
+ if( ! tree_available ) {
+ KMP_WARNING(RedMethodNotSupported, "tree");
+ forced_retval = critical_reduce_block;
+ } else {
+ #if KMP_FAST_REDUCTION_BARRIER
+ forced_retval = TREE_REDUCE_BLOCK_WITH_REDUCTION_BARRIER;
+ #endif
+ }
break;
default:
More information about the Openmp-commits
mailing list