forked from OSchip/llvm-project
Prevent monitor thread creation when KMP_BLOCKTIME="infinite"
When users sets envirable KMP_BLOCKTIME to "infinite" (the time one busy-waits at barrieres, etc.), the monitor thread is not useful and can be ignored. This change prevents the creation of the monitor thread when the users sets KMP_BLOCKTIME to "infinite". Differential Revision: http://reviews.llvm.org/D15628 llvm-svn: 256061
This commit is contained in:
parent
6cb33c60bd
commit
4fee5f6416
|
@ -1123,6 +1123,13 @@ __kmp_create_monitor( kmp_info_t *th )
|
|||
int status;
|
||||
int auto_adj_size = FALSE;
|
||||
|
||||
if( __kmp_dflt_blocktime == KMP_MAX_BLOCKTIME ) {
|
||||
// We don't need monitor thread in case of MAX_BLOCKTIME
|
||||
KA_TRACE( 10, ("__kmp_create_monitor: skipping monitor thread because of MAX blocktime\n" ) );
|
||||
th->th.th_info.ds.ds_tid = 0; // this makes reap_monitor no-op
|
||||
th->th.th_info.ds.ds_gtid = 0;
|
||||
return;
|
||||
}
|
||||
KA_TRACE( 10, ("__kmp_create_monitor: try to create monitor\n" ) );
|
||||
|
||||
KMP_MB(); /* Flush all pending memory write invalidates. */
|
||||
|
@ -1291,6 +1298,7 @@ __kmp_reap_monitor( kmp_info_t *th )
|
|||
// If both tid and gtid are KMP_GTID_DNE, the monitor has been shut down.
|
||||
KMP_DEBUG_ASSERT( th->th.th_info.ds.ds_tid == th->th.th_info.ds.ds_gtid );
|
||||
if ( th->th.th_info.ds.ds_gtid != KMP_GTID_MONITOR ) {
|
||||
KA_TRACE( 10, ("__kmp_reap_monitor: monitor did not start, returning\n") );
|
||||
return;
|
||||
}; // if
|
||||
|
||||
|
|
|
@ -1429,6 +1429,14 @@ __kmp_create_monitor( kmp_info_t *th )
|
|||
DWORD idThread;
|
||||
int ideal, new_ideal;
|
||||
|
||||
if( __kmp_dflt_blocktime == KMP_MAX_BLOCKTIME ) {
|
||||
// We don't need monitor thread in case of MAX_BLOCKTIME
|
||||
KA_TRACE( 10, ("__kmp_create_monitor: skipping monitor thread because of MAX blocktime\n" ) );
|
||||
th->th.th_info.ds.ds_tid = 0; // this makes reap_monitor no-op
|
||||
th->th.th_info.ds.ds_gtid = 0;
|
||||
TCW_4( __kmp_init_monitor, 2 ); // Signal to stop waiting for monitor creation
|
||||
return;
|
||||
}
|
||||
KA_TRACE( 10, ("__kmp_create_monitor: try to create monitor\n" ) );
|
||||
|
||||
KMP_MB(); /* Flush all pending memory write invalidates. */
|
||||
|
@ -1613,6 +1621,7 @@ __kmp_reap_monitor( kmp_info_t *th )
|
|||
// If both tid and gtid are KMP_GTID_DNE, the monitor has been shut down.
|
||||
KMP_DEBUG_ASSERT( th->th.th_info.ds.ds_tid == th->th.th_info.ds.ds_gtid );
|
||||
if ( th->th.th_info.ds.ds_gtid != KMP_GTID_MONITOR ) {
|
||||
KA_TRACE( 10, ("__kmp_reap_monitor: monitor did not start, returning\n") );
|
||||
return;
|
||||
}; // if
|
||||
|
||||
|
|
Loading…
Reference in New Issue