Просмотр исходного кода

Drop useless dereference on each get_context call

Samuel Thibault лет назад: 6
Родитель
Сommit
b164d1db6e
1 измененных файлов с 8 добавлено и 7 удалено
  1. 8 7
      src/core/sched_ctx.c

+ 8 - 7
src/core/sched_ctx.c

@@ -3,7 +3,7 @@
  * Copyright (C) 2011-2018                                Inria
  * Copyright (C) 2017                                     Arthur Chevalier
  * Copyright (C) 2012-2019                                CNRS
- * Copyright (C) 2012-2018                                Université de Bordeaux
+ * Copyright (C) 2012-2019                                Université de Bordeaux
  * Copyright (C) 2016                                     Uppsala University
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -1443,6 +1443,7 @@ 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");
 
@@ -1654,18 +1655,18 @@ int _starpu_wait_for_no_ready_of_sched_ctx(unsigned sched_ctx_id)
 	return 0;
 }
 
+/*
+ * FIXME: This should rather be
+ * void starpu_sched_ctx_set_context(unsigned sched_ctx)
+ */
 void starpu_sched_ctx_set_context(unsigned *sched_ctx)
 {
-	STARPU_PTHREAD_SETSPECIFIC(sched_ctx_key, (void*)sched_ctx);
+	STARPU_PTHREAD_SETSPECIFIC(sched_ctx_key, (void*)(uintptr_t)*sched_ctx);
 }
 
 unsigned starpu_sched_ctx_get_context()
 {
-	unsigned *sched_ctx = (unsigned*)STARPU_PTHREAD_GETSPECIFIC(sched_ctx_key);
-	if(sched_ctx == NULL)
-		return STARPU_NMAX_SCHED_CTXS;
-	STARPU_ASSERT(*sched_ctx < STARPU_NMAX_SCHED_CTXS);
-	return *sched_ctx;
+	return (unsigned)(uintptr_t)STARPU_PTHREAD_GETSPECIFIC(sched_ctx_key);
 }
 
 unsigned _starpu_sched_ctx_get_current_context()