Explorar o código

Fix initial TSD value for create threads: libpthread would set it to 0, we want that to mean STARPU_NMAX_SCHED_CTXS

Samuel Thibault %!s(int64=6) %!d(string=hai) anos
pai
achega
8c62dbd4b4
Modificáronse 1 ficheiros con 7 adicións e 4 borrados
  1. 7 4
      src/core/sched_ctx.c

+ 7 - 4
src/core/sched_ctx.c

@@ -1441,7 +1441,6 @@ int _starpu_nworkers_able_to_execute_task(struct starpu_task *task, struct _star
 void _starpu_init_all_sched_ctxs(struct _starpu_machine_config *config)
 {
 	STARPU_PTHREAD_KEY_CREATE(&sched_ctx_key, NULL);
-	STARPU_PTHREAD_SETSPECIFIC(sched_ctx_key, (void*)(uintptr_t)STARPU_NMAX_SCHED_CTXS);
 	window_size = starpu_get_env_float_default("STARPU_WINDOW_TIME_SIZE", 0.0);
 	nobind = starpu_get_env_number("STARPU_WORKERS_NOBIND");
 
@@ -1660,14 +1659,18 @@ int _starpu_wait_for_no_ready_of_sched_ctx(unsigned sched_ctx_id)
 void starpu_sched_ctx_set_context(unsigned *sched_ctx)
 {
 	if (sched_ctx)
-		STARPU_PTHREAD_SETSPECIFIC(sched_ctx_key, (void*)(uintptr_t)*sched_ctx);
+		STARPU_PTHREAD_SETSPECIFIC(sched_ctx_key, (void*)(uintptr_t)(*sched_ctx + 1));
 	else
-		STARPU_PTHREAD_SETSPECIFIC(sched_ctx_key, (void*)(uintptr_t)STARPU_NMAX_SCHED_CTXS);
+		STARPU_PTHREAD_SETSPECIFIC(sched_ctx_key, (void*)(uintptr_t) 0);
 }
 
 unsigned starpu_sched_ctx_get_context()
 {
-	return (unsigned)(uintptr_t)STARPU_PTHREAD_GETSPECIFIC(sched_ctx_key);
+	unsigned id = (unsigned)(uintptr_t)STARPU_PTHREAD_GETSPECIFIC(sched_ctx_key);
+	if (id == 0)
+		return STARPU_NMAX_SCHED_CTXS;
+	else
+		return id - 1;
 }
 
 unsigned _starpu_sched_ctx_get_current_context()