Parcourir la source

Bypass parallel blocking detection when no worker has ever entered parallel blocking

Samuel Thibault il y a 7 ans
Parent
commit
ae9486fa92
2 fichiers modifiés avec 8 ajouts et 0 suppressions
  1. 5 0
      src/core/workers.c
  2. 3 0
      src/core/workers.h

+ 5 - 0
src/core/workers.c

@@ -67,6 +67,8 @@ struct _starpu_machine_config _starpu_config STARPU_ATTRIBUTE_INTERNAL;
 
 static int check_entire_platform;
 
+int _starpu_worker_parallel_blocks;
+
 /* Pointers to argc and argv
  */
 static int *my_argc = 0;
@@ -1148,6 +1150,7 @@ int starpu_initialize(struct starpu_conf *user_conf, int *argc, char ***argv)
 	/* This initializes _starpu_silent, thus needs to be early */
 	_starpu_util_init();
 
+	STARPU_HG_DISABLE_CHECKING(_starpu_worker_parallel_blocks);
 #ifdef STARPU_SIMGRID
 	/* This initializes the simgrid thread library, thus needs to be early */
 	_starpu_simgrid_init_early(argc, argv);
@@ -1712,6 +1715,8 @@ unsigned starpu_worker_get_count(void)
 
 unsigned starpu_worker_is_blocked_in_parallel(int workerid)
 {
+	if (!_starpu_worker_parallel_blocks)
+		return 0;
 	int relax_own_observation_state = 0;
 	struct _starpu_worker *worker = _starpu_get_worker_struct(workerid);
 	STARPU_ASSERT(worker != NULL);

+ 3 - 0
src/core/workers.h

@@ -436,6 +436,8 @@ struct _starpu_machine_config
 	starpu_pthread_mutex_t submitted_mutex;
 };
 
+extern int _starpu_worker_parallel_blocks;
+
 extern struct _starpu_machine_config _starpu_config STARPU_ATTRIBUTE_INTERNAL;
 extern int _starpu_keys_initialized STARPU_ATTRIBUTE_INTERNAL;
 extern starpu_pthread_key_t _starpu_worker_key STARPU_ATTRIBUTE_INTERNAL;
@@ -654,6 +656,7 @@ struct _starpu_sched_ctx* _starpu_worker_get_ctx_stream(unsigned stream_workerid
  */
 static inline void _starpu_worker_request_blocking_in_parallel(struct _starpu_worker * const worker)
 {
+	_starpu_worker_parallel_blocks = 1;
 	/* flush pending requests to start on a fresh transaction epoch */
 	while (worker->state_unblock_in_parallel_req)
 		STARPU_PTHREAD_COND_WAIT(&worker->sched_cond, &worker->sched_mutex);