forked from OSchip/llvm-project
				
			Deprecate KMP_PLACE_THREADS and rename as KMP_HW_SUBSET
Deprecate KMP_PLACE_THREADS and rename it to KMP_HW_SUBSET due to confusion about its purpose and function among users. KMP_HW_SUBSET is an environment variable which allows users to easily pick a subset of the hardware topology to use. e.g., KMP_HW_SUBSET=30c,2t means use 30 cores, 2 threads per core. Patch by Andrey Churbanov Differential Revision: http://reviews.llvm.org/D21340 llvm-svn: 272937
This commit is contained in:
		
							parent
							
								
									ed44cf6ccd
								
							
						
					
					
						commit
						b9d28fbeb3
					
				| 
						 | 
				
			
			@ -38,7 +38,7 @@ Language "English"
 | 
			
		|||
Country  "USA"
 | 
			
		||||
LangId   "1033"
 | 
			
		||||
Version  "2"
 | 
			
		||||
Revision "20140827"
 | 
			
		||||
Revision "20160405"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -388,10 +388,10 @@ OBSOLETE                     "%1$s: granularity=core will be used."
 | 
			
		|||
EnvLockWarn                  "%1$s must be set prior to first OMP lock call or critical section; ignored."
 | 
			
		||||
FutexNotSupported            "futex system call not supported; %1$s=%2$s ignored."
 | 
			
		||||
AffGranUsing                 "%1$s: granularity=%2$s will be used."
 | 
			
		||||
AffThrPlaceInvalid           "%1$s: invalid value \"%2$s\", valid format is \"Ns[@N],Nc[@N],Nt "
 | 
			
		||||
AffHWSubsetInvalid           "%1$s: invalid value \"%2$s\", valid format is \"Ns[@N],Nc[@N],Nt "
 | 
			
		||||
                             "(nSockets@offset, nCores@offset, nTthreads per core)\"."
 | 
			
		||||
AffThrPlaceUnsupported       "KMP_PLACE_THREADS ignored: unsupported architecture."
 | 
			
		||||
AffThrPlaceManyCores         "KMP_PLACE_THREADS ignored: too many cores requested."
 | 
			
		||||
AffHWSubsetUnsupported       "KMP_HW_SUBSET ignored: unsupported architecture."
 | 
			
		||||
AffHWSubsetManyCores         "KMP_HW_SUBSET ignored: too many cores requested."
 | 
			
		||||
SyntaxErrorUsing             "%1$s: syntax error, using %2$s."
 | 
			
		||||
AdaptiveNotSupported         "%1$s: Adaptive locks are not supported; using queuing."
 | 
			
		||||
EnvSyntaxError               "%1$s: Invalid symbols found. Check the value \"%2$s\"."
 | 
			
		||||
| 
						 | 
				
			
			@ -399,16 +399,17 @@ EnvSpacesNotAllowed          "%1$s: Spaces between digits are not allowed \"%2$s
 | 
			
		|||
BoundToOSProcSet             "%1$s: pid %2$d thread %3$d bound to OS proc set %4$s"
 | 
			
		||||
CnsLoopIncrIllegal           "%1$s error: parallel loop increment and condition are inconsistent."
 | 
			
		||||
NoGompCancellation           "libgomp cancellation is not currently supported."
 | 
			
		||||
AffThrPlaceNonUniform        "KMP_PLACE_THREADS ignored: non-uniform topology."
 | 
			
		||||
AffThrPlaceNonThreeLevel     "KMP_PLACE_THREADS ignored: only three-level topology is supported."
 | 
			
		||||
AffHWSubsetNonUniform        "KMP_HW_SUBSET ignored: non-uniform topology."
 | 
			
		||||
AffHWSubsetNonThreeLevel     "KMP_HW_SUBSET ignored: only three-level topology is supported."
 | 
			
		||||
AffGranTopGroup              "%1$s: granularity=%2$s is not supported with KMP_TOPOLOGY_METHOD=group. Using \"granularity=fine\"."
 | 
			
		||||
AffGranGroupType             "%1$s: granularity=group is not supported with KMP_AFFINITY=%2$s. Using \"granularity=core\"."
 | 
			
		||||
AffThrPlaceManySockets       "KMP_PLACE_THREADS ignored: too many sockets requested."
 | 
			
		||||
AffThrPlaceDeprecated        "KMP_PLACE_THREADS \"o\" offset designator deprecated, please use @ prefix for offset value."
 | 
			
		||||
AffHWSubsetManySockets       "KMP_HW_SUBSET ignored: too many sockets requested."
 | 
			
		||||
AffHWSubsetDeprecated        "KMP_HW_SUBSET \"o\" offset designator deprecated, please use @ prefix for offset value."
 | 
			
		||||
AffUsingHwloc                "%1$s: Affinity capable, using hwloc."
 | 
			
		||||
AffIgnoringHwloc             "%1$s: Ignoring hwloc mechanism."
 | 
			
		||||
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."
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# --------------------------------------------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3390,19 +3390,19 @@ __kmp_apply_thread_places(AddrUnsPair **pAddr, int depth)
 | 
			
		|||
        __kmp_place_num_threads_per_core = __kmp_nThreadsPerCore; // use all HW contexts
 | 
			
		||||
 | 
			
		||||
    if ( !__kmp_affinity_uniform_topology() ) {
 | 
			
		||||
        KMP_WARNING( AffThrPlaceNonUniform );
 | 
			
		||||
        KMP_WARNING( AffHWSubsetNonUniform );
 | 
			
		||||
        return; // don't support non-uniform topology
 | 
			
		||||
    }
 | 
			
		||||
    if ( depth != 3 ) {
 | 
			
		||||
        KMP_WARNING( AffThrPlaceNonThreeLevel );
 | 
			
		||||
        KMP_WARNING( AffHWSubsetNonThreeLevel );
 | 
			
		||||
        return; // don't support not-3-level topology
 | 
			
		||||
    }
 | 
			
		||||
    if (__kmp_place_socket_offset + __kmp_place_num_sockets > nPackages) {
 | 
			
		||||
        KMP_WARNING(AffThrPlaceManySockets);
 | 
			
		||||
        KMP_WARNING(AffHWSubsetManySockets);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    if ( __kmp_place_core_offset + __kmp_place_num_cores > nCoresPerPkg ) {
 | 
			
		||||
        KMP_WARNING( AffThrPlaceManyCores );
 | 
			
		||||
        KMP_WARNING( AffHWSubsetManyCores );
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4274,11 +4274,11 @@ __kmp_stg_print_speculative_statsfile( kmp_str_buf_t * buffer, char const * name
 | 
			
		|||
#endif // KMP_USE_ADAPTIVE_LOCKS
 | 
			
		||||
 | 
			
		||||
// -------------------------------------------------------------------------------------------------
 | 
			
		||||
// KMP_PLACE_THREADS
 | 
			
		||||
// KMP_HW_SUBSET (was KMP_PLACE_THREADS)
 | 
			
		||||
// -------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
__kmp_stg_parse_place_threads( char const * name, char const * value, void * data ) {
 | 
			
		||||
__kmp_stg_parse_hw_subset( char const * name, char const * value, void * data ) {
 | 
			
		||||
    // Value example: 5Cx2Tx15O
 | 
			
		||||
    // Which means "use 5 cores with offset 15, 2 threads per core"
 | 
			
		||||
    // AC: extended to sockets level, examples of
 | 
			
		||||
| 
						 | 
				
			
			@ -4288,12 +4288,32 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
    //     postfix "o" or prefix @ can be offset designator.
 | 
			
		||||
    // Note: not all syntax errors are analyzed, some may be skipped.
 | 
			
		||||
#define CHECK_DELIM(_x)   (*(_x) == ',' || *(_x) == 'x')
 | 
			
		||||
    static int parsed = 0;
 | 
			
		||||
    int         num;
 | 
			
		||||
    int single_warning = 0;
 | 
			
		||||
    int flagS = 0, flagC = 0, flagT = 0, flagSO = 0, flagCO = 0;
 | 
			
		||||
    const char *next = value;
 | 
			
		||||
    const char *prev;
 | 
			
		||||
 | 
			
		||||
    if( strcmp(name, "KMP_PLACE_THREADS") == 0 ) {
 | 
			
		||||
        KMP_INFORM(EnvVarDeprecated,name,"KMP_HW_SUBSET");
 | 
			
		||||
        if( parsed == 1 ) {
 | 
			
		||||
            return; // already parsed KMP_HW_SUBSET
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    parsed = 1;
 | 
			
		||||
 | 
			
		||||
    SKIP_WS(next);  // skip white spaces
 | 
			
		||||
    if (*next == '\0')
 | 
			
		||||
        return;   // no data provided, retain default values
 | 
			
		||||
    if( strcmp(name, "KMP_PLACE_THREADS") == 0 ) {
 | 
			
		||||
        KMP_INFORM(EnvVarDeprecated,name,"KMP_HW_SUBSET");
 | 
			
		||||
        if( parsed == 1 ) {
 | 
			
		||||
            return; // already parsed KMP_HW_SUBSET
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    parsed = 1;
 | 
			
		||||
 | 
			
		||||
    SKIP_WS(next);  // skip white spaces
 | 
			
		||||
    if (*next == '\0')
 | 
			
		||||
        return;   // no data provided, retain default values
 | 
			
		||||
| 
						 | 
				
			
			@ -4311,7 +4331,7 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
                flagSO = 1;
 | 
			
		||||
                prev = ++next;  // don't allow spaces for simplicity
 | 
			
		||||
                if (!(*next >= '0' && *next <= '9')) {
 | 
			
		||||
                    KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
                    KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                SKIP_DIGITS(next);
 | 
			
		||||
| 
						 | 
				
			
			@ -4326,7 +4346,7 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
                flagCO = 1;
 | 
			
		||||
                prev = ++next;  // don't allow spaces for simplicity
 | 
			
		||||
                if (!(*next >= '0' && *next <= '9')) {
 | 
			
		||||
                    KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
                    KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                SKIP_DIGITS(next);
 | 
			
		||||
| 
						 | 
				
			
			@ -4345,11 +4365,11 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
            __kmp_place_num_cores = num;
 | 
			
		||||
            return;   // the only value provided - set num cores
 | 
			
		||||
        } else {
 | 
			
		||||
            KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
            KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
        KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    KMP_DEBUG_ASSERT(flagS); // num sockets should already be set here
 | 
			
		||||
| 
						 | 
				
			
			@ -4376,7 +4396,7 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
                flagCO = 1;
 | 
			
		||||
                prev = ++next;  // don't allow spaces for simplicity
 | 
			
		||||
                if (!(*next >= '0' && *next <= '9')) {
 | 
			
		||||
                    KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
                    KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                SKIP_DIGITS(next);
 | 
			
		||||
| 
						 | 
				
			
			@ -4384,7 +4404,7 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
                __kmp_place_core_offset = num;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (*next == 'o' || *next == 'O') { // offset specified
 | 
			
		||||
            KMP_WARNING(AffThrPlaceDeprecated);
 | 
			
		||||
            KMP_WARNING(AffHWSubsetDeprecated);
 | 
			
		||||
            single_warning = 1;
 | 
			
		||||
            if (flagC) { // whether num_cores already specified (sockets skipped)
 | 
			
		||||
                KMP_DEBUG_ASSERT(!flagCO); // either "o" or @, not both
 | 
			
		||||
| 
						 | 
				
			
			@ -4405,11 +4425,11 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
            __kmp_place_num_threads_per_core = num;
 | 
			
		||||
            return;   // two values provided without letter-designator
 | 
			
		||||
        } else {
 | 
			
		||||
            KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
            KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
        KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    SKIP_WS(next);
 | 
			
		||||
| 
						 | 
				
			
			@ -4440,18 +4460,18 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
            next++;
 | 
			
		||||
            //KMP_DEBUG_ASSERT(*next != '@'); // socket offset used "o" designator
 | 
			
		||||
        } else if (*next == 'o' || *next == 'O') {
 | 
			
		||||
            KMP_WARNING(AffThrPlaceDeprecated);
 | 
			
		||||
            KMP_WARNING(AffHWSubsetDeprecated);
 | 
			
		||||
            single_warning = 1;
 | 
			
		||||
            KMP_DEBUG_ASSERT(flagC);
 | 
			
		||||
            //KMP_DEBUG_ASSERT(!flagSO); // socket offset couldn't use @ designator
 | 
			
		||||
            __kmp_place_core_offset = num;
 | 
			
		||||
            next++;
 | 
			
		||||
        } else {
 | 
			
		||||
            KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
            KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
        KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    KMP_DEBUG_ASSERT(flagC);
 | 
			
		||||
| 
						 | 
				
			
			@ -4471,7 +4491,7 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
        SKIP_WS(next);
 | 
			
		||||
        if (*next == 'o' || *next == 'O') {
 | 
			
		||||
            if (!single_warning) { // warn once
 | 
			
		||||
                KMP_WARNING(AffThrPlaceDeprecated);
 | 
			
		||||
                KMP_WARNING(AffHWSubsetDeprecated);
 | 
			
		||||
            }
 | 
			
		||||
            KMP_DEBUG_ASSERT(!flagSO); // socket offset couldn't use @ designator
 | 
			
		||||
            __kmp_place_core_offset = num;
 | 
			
		||||
| 
						 | 
				
			
			@ -4482,11 +4502,11 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
            flagT = 1;
 | 
			
		||||
            next++; // can have core-offset specified after num threads
 | 
			
		||||
        } else {
 | 
			
		||||
            KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
            KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
        KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    SKIP_WS(next);
 | 
			
		||||
| 
						 | 
				
			
			@ -4505,7 +4525,7 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
        SKIP_WS(next);
 | 
			
		||||
        if (*next == 'o' || *next == 'O') {
 | 
			
		||||
            if (!single_warning) { // warn once
 | 
			
		||||
                KMP_WARNING(AffThrPlaceDeprecated);
 | 
			
		||||
                KMP_WARNING(AffHWSubsetDeprecated);
 | 
			
		||||
            }
 | 
			
		||||
            KMP_DEBUG_ASSERT(flagT);
 | 
			
		||||
            KMP_DEBUG_ASSERT(!flagSO); // socket offset couldn't use @ designator
 | 
			
		||||
| 
						 | 
				
			
			@ -4514,17 +4534,17 @@ __kmp_stg_parse_place_threads( char const * name, char const * value, void * dat
 | 
			
		|||
            KMP_DEBUG_ASSERT(flagT == 0);
 | 
			
		||||
            __kmp_place_num_threads_per_core = num;
 | 
			
		||||
        } else {
 | 
			
		||||
            KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
            KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        KMP_WARNING(AffThrPlaceInvalid, name, value);
 | 
			
		||||
        KMP_WARNING(AffHWSubsetInvalid, name, value);
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
#undef CHECK_DELIM
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
__kmp_stg_print_place_threads( kmp_str_buf_t * buffer, char const * name, void * data ) {
 | 
			
		||||
__kmp_stg_print_hw_subset( kmp_str_buf_t * buffer, char const * name, void * data ) {
 | 
			
		||||
    if (__kmp_place_num_sockets + __kmp_place_num_cores + __kmp_place_num_threads_per_core) {
 | 
			
		||||
        int comma = 0;
 | 
			
		||||
        kmp_str_buf_t buf;
 | 
			
		||||
| 
						 | 
				
			
			@ -4775,7 +4795,8 @@ static kmp_setting_t __kmp_stg_table[] = {
 | 
			
		|||
    { "KMP_SPECULATIVE_STATSFILE",         __kmp_stg_parse_speculative_statsfile,__kmp_stg_print_speculative_statsfile,  NULL, 0, 0 },
 | 
			
		||||
#endif
 | 
			
		||||
#endif // KMP_USE_ADAPTIVE_LOCKS
 | 
			
		||||
    { "KMP_PLACE_THREADS",                 __kmp_stg_parse_place_threads,      __kmp_stg_print_place_threads,      NULL, 0, 0 },
 | 
			
		||||
    { "KMP_PLACE_THREADS",                 __kmp_stg_parse_hw_subset,      __kmp_stg_print_hw_subset,      NULL, 0, 0 },
 | 
			
		||||
    { "KMP_HW_SUBSET",                     __kmp_stg_parse_hw_subset,      __kmp_stg_print_hw_subset,      NULL, 0, 0 },
 | 
			
		||||
#if USE_ITT_BUILD
 | 
			
		||||
    { "KMP_FORKJOIN_FRAMES",               __kmp_stg_parse_forkjoin_frames,    __kmp_stg_print_forkjoin_frames,    NULL, 0, 0 },
 | 
			
		||||
    { "KMP_FORKJOIN_FRAMES_MODE",          __kmp_stg_parse_forkjoin_frames_mode,__kmp_stg_print_forkjoin_frames_mode,  NULL, 0, 0 },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue