Forráskód Böngészése

Define new public API starpu_pthread which is similar to the pthread API.

It is provided with 2 implementations: a pthread one and a Simgrid one.

Applications using StarPU and wishing to use the Simgrid StarPU
features should use it.
Nathalie Furmento 12 éve
szülő
commit
7f792e3082
81 módosított fájl, 793 hozzáadás és 602 törlés
  1. 5 0
      ChangeLog
  2. 4 5
      examples/audio/starpu_audio_processing.c
  3. 4 5
      examples/sched_ctx/sched_ctx.c
  4. 16 16
      examples/sched_ctx_utils/sched_ctx_utils.c
  5. 12 13
      examples/scheduler/dummy_sched.c
  6. 1 0
      include/starpu.h
  7. 178 0
      include/starpu_thread.h
  8. 8 7
      mpi/src/starpu_mpi.c
  9. 2 4
      mpi/src/starpu_mpi_private.h
  10. 2 2
      mpi/tests/mpi_irecv_detached.c
  11. 3 3
      mpi/tests/mpi_isend_detached.c
  12. 2 2
      mpi/tests/mpi_probe.c
  13. 1 0
      src/Makefile.am
  14. 2 1
      src/common/barrier.c
  15. 4 5
      src/common/barrier.h
  16. 1 0
      src/common/barrier_counter.c
  17. 2 2
      src/common/starpu_spinlock.c
  18. 2 3
      src/common/starpu_spinlock.h
  19. 205 0
      src/common/thread.c
  20. 87 216
      src/common/thread.h
  21. 2 2
      src/common/utils.c
  22. 2 2
      src/core/debug.c
  23. 3 3
      src/core/dependencies/cg.h
  24. 1 1
      src/core/dependencies/tags.c
  25. 3 3
      src/core/jobs.h
  26. 1 3
      src/core/perfmodel/perfmodel.h
  27. 1 2
      src/core/perfmodel/perfmodel_history.c
  28. 2 3
      src/core/progress_hook.c
  29. 8 8
      src/core/sched_ctx.c
  30. 6 6
      src/core/sched_ctx.h
  31. 4 43
      src/core/simgrid.c
  32. 10 0
      src/core/simgrid.h
  33. 3 3
      src/core/task.c
  34. 1 0
      src/core/task_bundle.c
  35. 2 6
      src/core/task_bundle.h
  36. 1 1
      src/core/topology.c
  37. 18 26
      src/core/workers.c
  38. 11 13
      src/core/workers.h
  39. 3 3
      src/datawizard/coherency.h
  40. 3 3
      src/datawizard/copy_driver.h
  41. 2 2
      src/datawizard/data_request.c
  42. 2 2
      src/datawizard/interfaces/data_interface.c
  43. 2 2
      src/datawizard/malloc.c
  44. 1 1
      src/datawizard/memalloc.c
  45. 2 3
      src/datawizard/memory_nodes.c
  46. 4 4
      src/datawizard/memory_nodes.h
  47. 2 2
      src/datawizard/user_interactions.c
  48. 3 4
      src/drivers/gordon/driver_gordon.c
  49. 1 1
      src/drivers/opencl/driver_opencl.c
  50. 1 1
      src/profiling/bound.c
  51. 2 2
      src/profiling/profiling.c
  52. 15 15
      src/sched_policies/deque_modeling_policy_data_aware.c
  53. 2 2
      src/sched_policies/deque_queues.c
  54. 1 1
      src/sched_policies/deque_queues.h
  55. 6 6
      src/sched_policies/eager_central_policy.c
  56. 8 8
      src/sched_policies/eager_central_priority_policy.c
  57. 7 7
      src/sched_policies/parallel_eager.c
  58. 14 14
      src/sched_policies/parallel_heft.c
  59. 2 2
      src/sched_policies/random_policy.c
  60. 3 3
      src/sched_policies/stack_queues.c
  61. 2 2
      src/sched_policies/stack_queues.h
  62. 11 11
      src/sched_policies/work_stealing_policy.c
  63. 3 4
      src/top/starpu_top.c
  64. 5 5
      src/top/starpu_top_connection.c
  65. 1 2
      src/top/starpu_top_message_queue.h
  66. 2 3
      tests/datawizard/dsm_stress.c
  67. 8 8
      tests/datawizard/mpi_like.c
  68. 11 12
      tests/datawizard/mpi_like_async.c
  69. 2 3
      tests/datawizard/sync_with_data_with_mem_non_blocking.c
  70. 2 3
      tests/datawizard/sync_with_data_with_mem_non_blocking_implicit.c
  71. 8 9
      tests/experiments/latency/cuda_latency.c
  72. 9 10
      tests/main/driver_api/run_driver.c
  73. 2 3
      tests/main/execute_on_a_specific_worker.c
  74. 3 5
      tests/main/multithreaded.c
  75. 5 6
      tests/main/multithreaded_init.c
  76. 2 3
      tests/main/regenerate.c
  77. 2 3
      tests/main/subgraph_repeat.c
  78. 2 3
      tests/main/subgraph_repeat_regenerate.c
  79. 2 3
      tests/main/subgraph_repeat_regenerate_tag.c
  80. 3 4
      tests/main/subgraph_repeat_tag.c
  81. 2 3
      tests/overlap/overlap.c

+ 5 - 0
ChangeLog

@@ -109,6 +109,11 @@ New features:
   * starpu_malloc calls starpu_malloc_flags with a value of flag set
     to STARPU_MALLOC_PINNED
   * Define new function starpu_free_flags similarly to starpu_malloc_flags
+  * Define new public API starpu_pthread which is similar to the
+    pthread API. It is provided with 2 implementations: a pthread one
+    and a Simgrid one. Applications using StarPU and wishing to use
+    the Simgrid StarPU features should use it.
+
 
 Small features:
   * Add starpu_worker_get_by_type and starpu_worker_get_by_devid

+ 4 - 5
examples/audio/starpu_audio_processing.c

@@ -2,7 +2,7 @@
  *
  * Copyright (C) 2010-2012  Université de Bordeaux 1
  * Copyright (C) 2010  Mehdi Juhoor <mjuhoor@gmail.com>
- * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -20,7 +20,6 @@
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
-#include <pthread.h>
 #include <sys/types.h>
 #include <sys/time.h>
 
@@ -216,7 +215,7 @@ static void band_filter_kernel_gpu(void *descr[], __attribute__((unused)) void *
 }
 #endif
 
-static pthread_mutex_t fftw_mutex = PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t fftw_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void band_filter_kernel_cpu(void *descr[], __attribute__((unused)) void *arg)
 {
@@ -231,7 +230,7 @@ static void band_filter_kernel_cpu(void *descr[], __attribute__((unused)) void *
 		plans[workerid].Acopy = malloc(nsamples*sizeof(float));
 
 		/* create plans, only "fftwf_execute" is thread safe in FFTW ... */
-		pthread_mutex_lock(&fftw_mutex);
+		starpu_pthread_mutex_lock(&fftw_mutex);
 		plans[workerid].plan_cpu = fftwf_plan_dft_r2c_1d(nsamples,
 					plans[workerid].Acopy,
 					plans[workerid].localout_cpu,
@@ -240,7 +239,7 @@ static void band_filter_kernel_cpu(void *descr[], __attribute__((unused)) void *
 					plans[workerid].localout_cpu,
 					plans[workerid].Acopy,
 					FFTW_ESTIMATE);
-		pthread_mutex_unlock(&fftw_mutex);
+		starpu_pthread_mutex_unlock(&fftw_mutex);
 
 		plans[workerid].is_initialized = 1;
 	}

+ 4 - 5
examples/sched_ctx/sched_ctx.c

@@ -16,7 +16,6 @@
  */
 
 #include <starpu.h>
-#include <pthread.h>
 
 #ifdef STARPU_QUICK_CHECK
 #define NTASKS 64
@@ -25,13 +24,13 @@
 #endif
 
 int tasks_executed = 0;
-pthread_mutex_t mut;
+starpu_pthread_mutex_t mut;
 
 static void sched_ctx_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
 {
-	pthread_mutex_lock(&mut);
+	starpu_pthread_mutex_lock(&mut);
 	tasks_executed++;
-	pthread_mutex_unlock(&mut);
+	starpu_pthread_mutex_unlock(&mut);
 }
 
 static struct starpu_codelet sched_ctx_codelet =
@@ -54,7 +53,7 @@ int main(int argc, char **argv)
 		return 77;
 	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
 
-	pthread_mutex_init(&mut, NULL);
+	starpu_pthread_mutex_init(&mut, NULL);
 	int nprocs1 = 1;
 	int nprocs2 = 1;
 	int procs1[20], procs2[20];

+ 16 - 16
examples/sched_ctx_utils/sched_ctx_utils.c

@@ -47,11 +47,11 @@ struct retvals
 
 #define NSAMPLES 1
 int first = 1;
-pthread_mutex_t mut;
+starpu_pthread_mutex_t mut;
 struct retvals rv[2];
 struct params p1, p2;
 
-pthread_key_t key;
+starpu_pthread_key_t key;
 
 void init()
 {
@@ -75,12 +75,12 @@ void init()
 
 	p1.id = 0;
 	p2.id = 1;
-	pthread_key_create(&key, NULL);
+	starpu_pthread_key_create(&key, NULL);
 }
 
 void update_sched_ctx_timing_results(double flops, double avg_timing)
 {
-	unsigned *id = pthread_getspecific(key);
+	unsigned *id = starpu_pthread_getspecific(key);
 	rv[*id].flops += flops;
 	rv[*id].avg_timing += avg_timing;
 }
@@ -90,7 +90,7 @@ void* start_bench(void *val)
 	struct params *p = (struct params*)val;
 	int i;
 
-	pthread_setspecific(key, &p->id);
+	starpu_pthread_setspecific(key, &p->id);
 
 	if(p->ctx != 0)
 		starpu_sched_ctx_set_context(&p->ctx);
@@ -100,14 +100,14 @@ void* start_bench(void *val)
 
 	if(p->ctx != 0)
 	{
-		pthread_mutex_lock(&mut);
+		starpu_pthread_mutex_lock(&mut);
 		if(first)
 		{
 			starpu_sched_ctx_delete(p->ctx);
 		}
 
 		first = 0;
-		pthread_mutex_unlock(&mut);
+		starpu_pthread_mutex_unlock(&mut);
 	}
 
 	rv[p->id].flops /= NSAMPLES;
@@ -128,23 +128,23 @@ void start_2benchs(void (*bench)(unsigned, unsigned))
 	printf("size %d\n", size2);
 	p2.nblocks = nblocks2;
 
-	pthread_t tid[2];
-	pthread_mutex_init(&mut, NULL);
+	starpu_pthread_t tid[2];
+	starpu_pthread_mutex_init(&mut, NULL);
 
 	struct timeval start;
 	struct timeval end;
 
 	gettimeofday(&start, NULL);
 
-	pthread_create(&tid[0], NULL, (void*)start_bench, (void*)&p1);
-	pthread_create(&tid[1], NULL, (void*)start_bench, (void*)&p2);
+	starpu_pthread_create(&tid[0], NULL, (void*)start_bench, (void*)&p1);
+	starpu_pthread_create(&tid[1], NULL, (void*)start_bench, (void*)&p2);
 
-	pthread_join(tid[0], NULL);
-	pthread_join(tid[1], NULL);
+	starpu_pthread_join(tid[0], NULL);
+	starpu_pthread_join(tid[1], NULL);
 
 	gettimeofday(&end, NULL);
 
-	pthread_mutex_destroy(&mut);
+	starpu_pthread_mutex_destroy(&mut);
 
 	double timing = (double)((end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec));
 	timing /= 1000000;
@@ -169,7 +169,7 @@ void start_1stbench(void (*bench)(unsigned, unsigned))
 
 	gettimeofday(&end, NULL);
 
-	pthread_mutex_destroy(&mut);
+	starpu_pthread_mutex_destroy(&mut);
 
 	double timing = (double)((end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec));
 	timing /= 1000000;
@@ -193,7 +193,7 @@ void start_2ndbench(void (*bench)(unsigned, unsigned))
 
 	gettimeofday(&end, NULL);
 
-	pthread_mutex_destroy(&mut);
+	starpu_pthread_mutex_destroy(&mut);
 
 	double timing = (double)((end.tv_sec - start.tv_sec)*1000000 + (end.tv_usec - start.tv_usec));
 	timing /= 1000000;

+ 12 - 13
examples/scheduler/dummy_sched.c

@@ -15,7 +15,6 @@
  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  */
 
-#include <pthread.h>
 #include <starpu.h>
 
 #define NTASKS	32000
@@ -24,7 +23,7 @@
 struct dummy_sched_data
 {
 	struct starpu_task_list sched_list;
-	pthread_mutex_t policy_mutex;
+     	starpu_pthread_mutex_t policy_mutex;
 };
 
 static void init_dummy_sched(unsigned sched_ctx_id)
@@ -39,7 +38,7 @@ static void init_dummy_sched(unsigned sched_ctx_id)
 
 	starpu_sched_ctx_set_policy_data(sched_ctx_id, (void*)data);
 
-	pthread_mutex_init(&data->policy_mutex, NULL);
+	starpu_pthread_mutex_init(&data->policy_mutex, NULL);
 	FPRINTF(stderr, "Initialising Dummy scheduler\n");
 }
 
@@ -51,7 +50,7 @@ static void deinit_dummy_sched(unsigned sched_ctx_id)
 
 	starpu_sched_ctx_delete_worker_collection(sched_ctx_id);
 
-	pthread_mutex_destroy(&data->policy_mutex);
+	starpu_pthread_mutex_destroy(&data->policy_mutex);
 
 	free(data);
 
@@ -69,12 +68,12 @@ static int push_task_dummy(struct starpu_task *task)
 
 	/* lock all workers when pushing tasks on a list where all
 	   of them would pop for tasks */
-        pthread_mutex_lock(&data->policy_mutex);
+        starpu_pthread_mutex_lock(&data->policy_mutex);
 
 	starpu_task_list_push_front(&data->sched_list, task);
 
 	starpu_push_task_end(task);
-	pthread_mutex_unlock(&data->policy_mutex);
+	starpu_pthread_mutex_unlock(&data->policy_mutex);
 
 
         /*if there are no tasks block */
@@ -89,12 +88,12 @@ static int push_task_dummy(struct starpu_task *task)
 	while(workers->has_next(workers, &it))
         {
                 worker = workers->get_next(workers, &it);
-		pthread_mutex_t *sched_mutex;
-                pthread_cond_t *sched_cond;
+		starpu_pthread_mutex_t *sched_mutex;
+                starpu_pthread_cond_t *sched_cond;
                 starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
-		pthread_mutex_lock(sched_mutex);
-                pthread_cond_signal(sched_cond);
-                pthread_mutex_unlock(sched_mutex);
+		starpu_pthread_mutex_lock(sched_mutex);
+                starpu_pthread_cond_signal(sched_cond);
+                starpu_pthread_mutex_unlock(sched_mutex);
         }
 
 	return 0;
@@ -109,9 +108,9 @@ static struct starpu_task *pop_task_dummy(unsigned sched_ctx_id)
 	 * the calling worker. So we just take the head of the list and give it
 	 * to the worker. */
 	struct dummy_sched_data *data = (struct dummy_sched_data*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
-	pthread_mutex_lock(&data->policy_mutex);
+	starpu_pthread_mutex_lock(&data->policy_mutex);
 	struct starpu_task *task = starpu_task_list_pop_back(&data->sched_list);
-	pthread_mutex_unlock(&data->policy_mutex);
+	starpu_pthread_mutex_unlock(&data->policy_mutex);
 	return task;
 }
 

+ 1 - 0
include/starpu.h

@@ -39,6 +39,7 @@ typedef unsigned long long uint64_t;
 #include <starpu_opencl.h>
 #endif
 
+#include <starpu_thread.h>
 #include <starpu_util.h>
 #include <starpu_data.h>
 #include <starpu_data_interfaces.h>

+ 178 - 0
include/starpu_thread.h

@@ -0,0 +1,178 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2010, 2012-2013  Université de Bordeaux 1
+ * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
+ *
+ * StarPU is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#ifndef __STARPU_THREAD_H__
+#define __STARPU_THREAD_H__
+
+#include <starpu.h>
+
+#ifdef STARPU_SIMGRID
+#include <xbt/synchro_core.h>
+#include <msg/msg.h>
+#else
+#include <pthread.h>
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*
+ * Encapsulation of the pthread_create function.
+ */
+
+#ifdef STARPU_SIMGRID
+
+typedef int starpu_pthread_t;
+typedef int starpu_pthread_attr_t;
+
+int starpu_pthread_create(starpu_pthread_t *thread, const starpu_pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
+int starpu_pthread_join(starpu_pthread_t thread, void **retval);
+int starpu_pthread_attr_init(starpu_pthread_attr_t *attr);
+int starpu_pthread_attr_destroy(starpu_pthread_attr_t *attr);
+int starpu_pthread_attr_setdetachstate(starpu_pthread_attr_t *attr, int detachstate);
+
+#else /* STARPU_SIMGRID */
+
+typedef pthread_t starpu_pthread_t;
+typedef pthread_attr_t starpu_pthread_attr_t;
+
+#define starpu_pthread_create pthread_create
+#define starpu_pthread_join pthread_join
+#define starpu_pthread_attr_init pthread_attr_init
+#define starpu_pthread_attr_destroy pthread_attr_destroy
+#define starpu_pthread_attr_setdetachstate pthread_attr_setdetachstate
+
+#endif /* STARPU_SIMGRID */
+/*
+ * Encapsulation of the pthread_mutex_* functions.
+ */
+
+#ifdef STARPU_SIMGRID
+typedef xbt_mutex_t starpu_pthread_mutex_t;
+typedef int starpu_pthread_mutexattr_t;
+
+#define STARPU_PTHREAD_MUTEX_INITIALIZER NULL
+
+int starpu_pthread_mutex_init(starpu_pthread_mutex_t *mutex, const starpu_pthread_mutexattr_t *mutexattr);
+int starpu_pthread_mutex_destroy(starpu_pthread_mutex_t *mutex);
+int starpu_pthread_mutex_lock(starpu_pthread_mutex_t *mutex);
+int starpu_pthread_mutex_unlock(starpu_pthread_mutex_t *mutex);
+int starpu_pthread_mutex_trylock(starpu_pthread_mutex_t *mutex);
+
+#else /* !STARPU_SIMGRID */
+
+typedef pthread_mutex_t starpu_pthread_mutex_t;
+typedef pthread_mutexattr_t starpu_pthread_mutexattr_t;
+
+#define starpu_pthread_mutex_init pthread_mutex_init
+#define starpu_pthread_mutex_destroy pthread_mutex_destroy
+#define starpu_pthread_mutex_lock pthread_mutex_lock
+#define starpu_pthread_mutex_unlock pthread_mutex_unlock
+#define starpu_pthread_mutex_trylock pthread_mutex_trylock
+
+#define STARPU_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
+#endif /* STARPU_SIMGRID */
+
+/*
+ * Encapsulation of the pthread_key_* functions.
+ */
+#ifdef STARPU_SIMGRID
+
+typedef int starpu_pthread_key_t;
+int starpu_pthread_key_create(starpu_pthread_key_t *key, void (*destr_function) (void *));
+int starpu_pthread_key_delete(starpu_pthread_key_t key);
+int starpu_pthread_setspecific(starpu_pthread_key_t key, const void *pointer);
+void *starpu_pthread_getspecific(starpu_pthread_key_t key);
+
+#else /* STARPU_SIMGRID */
+
+typedef pthread_key_t starpu_pthread_key_t;
+
+#define starpu_pthread_key_create pthread_key_create
+#define starpu_pthread_key_delete pthread_key_delete
+#define starpu_pthread_setspecific pthread_setspecific
+#define starpu_pthread_getspecific pthread_getspecific
+
+#endif /* STARPU_SIMGRID */
+
+/*
+ * Encapsulation of the pthread_cond_* functions.
+ */
+
+#ifdef STARPU_SIMGRID
+typedef xbt_cond_t starpu_pthread_cond_t;
+typedef int starpu_pthread_condattr_t;
+#define STARPU_PTHREAD_COND_INITIALIZER NULL
+
+int starpu_pthread_cond_init(starpu_pthread_cond_t *cond, starpu_pthread_condattr_t *cond_attr);
+int starpu_pthread_cond_signal(starpu_pthread_cond_t *cond);
+int starpu_pthread_cond_broadcast(starpu_pthread_cond_t *cond);
+int starpu_pthread_cond_wait(starpu_pthread_cond_t *cond, starpu_pthread_mutex_t *mutex);
+int starpu_pthread_cond_timedwait(starpu_pthread_cond_t *cond, starpu_pthread_mutex_t *mutex, const struct timespec *abstime);
+int starpu_pthread_cond_destroy(starpu_pthread_cond_t *cond);
+
+#else /* STARPU_SIMGRID */
+typedef pthread_cond_t starpu_pthread_cond_t;
+typedef pthread_condattr_t starpu_pthread_condattr_t;
+#define STARPU_PTHREAD_COND_INITIALIZER PTHREAD_COND_INITIALIZER
+
+#define starpu_pthread_cond_init pthread_cond_init
+#define starpu_pthread_cond_signal pthread_cond_signal
+#define starpu_pthread_cond_broadcast pthread_cond_broadcast
+#define starpu_pthread_cond_wait pthread_cond_wait
+#define starpu_pthread_cond_timedwait pthread_cond_timedwait
+#define starpu_pthread_cond_destroy pthread_cond_destroy
+
+#endif /* STARPU_SIMGRID */
+
+
+/*
+ * Encapsulation of the pthread_rwlock_* functions.
+ */
+
+#ifdef STARPU_SIMGRID
+typedef xbt_mutex_t starpu_pthread_rwlock_t;
+typedef int starpu_pthread_rwlockattr_t;
+
+int starpu_pthread_rwlock_init(starpu_pthread_rwlock_t *rwlock, const starpu_pthread_rwlockattr_t *attr);
+int starpu_pthread_rwlock_destroy(starpu_pthread_rwlock_t *rwlock);
+int starpu_pthread_rwlock_rdlock(starpu_pthread_rwlock_t *rwlock);
+int starpu_pthread_rwlock_wrlock(starpu_pthread_rwlock_t *rwlock);
+int starpu_pthread_rwlock_unlock(starpu_pthread_rwlock_t *rwlock);
+
+#else /* STARPU_SIMGRID */
+
+typedef pthread_rwlock_t starpu_pthread_rwlock_t;
+typedef pthread_rwlockattr_t starpu_pthread_rwlockattr_t;
+
+#define starpu_pthread_rwlock_init pthread_rwlock_init
+#define starpu_pthread_rwlock_destroy pthread_rwlock_destroy
+#define starpu_pthread_rwlock_rdlock pthread_rwlock_rdlock
+#define starpu_pthread_rwlock_wrlock pthread_rwlock_wrlock
+#define starpu_pthread_rwlock_unlock pthread_rwlock_unlock
+
+#endif /* STARPU_SIMGRID */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STARPU_THREAD_H__ */
+
+

+ 8 - 7
mpi/src/starpu_mpi.c

@@ -23,6 +23,7 @@
 #include <starpu_mpi_stats.h>
 #include <starpu_mpi_insert_task.h>
 #include <common/config.h>
+#include <common/thread.h>
 
 static void _starpu_mpi_submit_new_mpi_request(void *arg);
 static void _starpu_mpi_handle_request_termination(struct _starpu_mpi_req *req);
@@ -40,18 +41,18 @@ static struct _starpu_mpi_req_list *new_requests;
 
 /* The list of detached requests that have already been submitted to MPI */
 static struct _starpu_mpi_req_list *detached_requests;
-static _starpu_pthread_mutex_t detached_requests_mutex;
+static starpu_pthread_mutex_t detached_requests_mutex;
 
 /* Condition to wake up progression thread */
-static _starpu_pthread_cond_t cond_progression;
+static starpu_pthread_cond_t cond_progression;
 /* Condition to wake up waiting for all current MPI requests to finish */
-static _starpu_pthread_cond_t cond_finished;
-static _starpu_pthread_mutex_t mutex;
-static pthread_t progress_thread;
+static starpu_pthread_cond_t cond_finished;
+static starpu_pthread_mutex_t mutex;
+static starpu_pthread_t progress_thread;
 static int running = 0;
 
 /* Count requests posted by the application and not yet submitted to MPI, i.e pushed into the new_requests list */
-static _starpu_pthread_mutex_t mutex_posted_requests;
+static starpu_pthread_mutex_t mutex_posted_requests;
 static int posted_requests = 0, newer_requests, barrier_running = 0;
 
 #define _STARPU_MPI_INC_POSTED_REQUESTS(value) { _STARPU_PTHREAD_MUTEX_LOCK(&mutex_posted_requests); posted_requests += value; _STARPU_PTHREAD_MUTEX_UNLOCK(&mutex_posted_requests); }
@@ -1068,7 +1069,7 @@ int starpu_mpi_shutdown(void)
 	_STARPU_PTHREAD_COND_BROADCAST(&cond_progression);
 	_STARPU_PTHREAD_MUTEX_UNLOCK(&mutex);
 
-	pthread_join(progress_thread, &value);
+	starpu_pthread_join(progress_thread, &value);
 
 #ifdef STARPU_MPI_ACTIVITY
 	starpu_progression_hook_deregister(hookid);

+ 2 - 4
mpi/src/starpu_mpi_private.h

@@ -23,8 +23,6 @@
 #include "starpu_mpi.h"
 #include "starpu_mpi_fxt.h"
 #include <common/list.h>
-#include <common/thread.h>
-#include <pthread.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -102,8 +100,8 @@ LIST_TYPE(_starpu_mpi_req,
 	int *flag;
 
 	int ret;
-	_starpu_pthread_mutex_t req_mutex;
-	_starpu_pthread_cond_t req_cond;
+	starpu_pthread_mutex_t req_mutex;
+	starpu_pthread_cond_t req_cond;
 
 	enum _starpu_mpi_request_type request_type; /* 0 send, 1 recv */
 

+ 2 - 2
mpi/tests/mpi_irecv_detached.c

@@ -29,8 +29,8 @@
 float *tab;
 starpu_data_handle_t tab_handle;
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 void callback(void *arg __attribute__((unused)))
 {

+ 3 - 3
mpi/tests/mpi_isend_detached.c

@@ -17,7 +17,7 @@
 
 #include <starpu_mpi.h>
 #include <common/thread.h>
-#include <pthread.h>
+
 #include "helper.h"
 
 #ifdef STARPU_QUICK_CHECK
@@ -27,8 +27,8 @@
 #endif
 #define SIZE	16
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 void callback(void *arg)
 {

+ 2 - 2
mpi/tests/mpi_probe.c

@@ -29,8 +29,8 @@
 float *tab;
 starpu_data_handle_t tab_handle;
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 void callback(void *arg __attribute__((unused)))
 {

+ 1 - 0
src/Makefile.am

@@ -131,6 +131,7 @@ libstarpu_@STARPU_EFFECTIVE_VERSION@_la_SOURCES = 						\
 	common/timing.c						\
 	common/fxt.c						\
 	common/utils.c						\
+	common/thread.c						\
 	core/jobs.c						\
 	core/task.c						\
 	core/task_bundle.c					\

+ 2 - 1
src/common/barrier.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010,2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010,2011,2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -16,6 +16,7 @@
 
 #include <common/barrier.h>
 #include <common/utils.h>
+#include <common/thread.h>
 
 int _starpu_barrier_init(struct _starpu_barrier *barrier, int count)
 {

+ 4 - 5
src/common/barrier.h

@@ -22,17 +22,16 @@
 #undef PTHREAD_BARRIER_SERIAL_THREAD
 #endif
 
-#include <pthread.h>
-#include <common/thread.h>
+#include <starpu_thread.h>
 
 struct _starpu_barrier
 {
 	int count;
 	int reached_start;
 	int reached_exit;
-	_starpu_pthread_mutex_t mutex;
-	_starpu_pthread_mutex_t mutex_exit;
-	_starpu_pthread_cond_t cond;
+	starpu_pthread_mutex_t mutex;
+	starpu_pthread_mutex_t mutex_exit;
+	starpu_pthread_cond_t cond;
 };
 
 int _starpu_barrier_init(struct _starpu_barrier *barrier, int count);

+ 1 - 0
src/common/barrier_counter.c

@@ -15,6 +15,7 @@
  */
 
 #include <common/barrier_counter.h>
+#include <common/thread.h>
 
 int _starpu_barrier_counter_init(struct _starpu_barrier_counter *barrier_c, int count)
 {

+ 2 - 2
src/common/starpu_spinlock.c

@@ -111,7 +111,7 @@ int _starpu_spin_checklocked(struct _starpu_spinlock *lock)
 	STARPU_ASSERT(lock->taken);
 	return !lock->taken;
 #elif defined(STARPU_SPINLOCK_CHECK)
-	int ret = _STARPU_PTHREAD_MUTEX_TRYLOCK(&lock->errcheck_lock);
+	int ret = starpu_pthread_mutex_trylock(&lock->errcheck_lock);
 	STARPU_ASSERT(ret != 0);
 	return ret == 0;
 #elif defined(HAVE_PTHREAD_SPIN_LOCK)
@@ -133,7 +133,7 @@ int _starpu_spin_trylock(struct _starpu_spinlock *lock)
 	lock->taken = 1;
 	return 0;
 #elif defined(STARPU_SPINLOCK_CHECK)
-	int ret = _STARPU_PTHREAD_MUTEX_TRYLOCK(&lock->errcheck_lock);
+	int ret = starpu_pthread_mutex_trylock(&lock->errcheck_lock);
 	STARPU_ASSERT(!ret || (ret == EBUSY));
 	return ret;
 #elif defined(HAVE_PTHREAD_SPIN_LOCK)

+ 2 - 3
src/common/starpu_spinlock.h

@@ -21,15 +21,14 @@
 #include <stdint.h>
 #include <pthread.h>
 #include <common/config.h>
-#include <common/thread.h>
 
 struct _starpu_spinlock
 {
 #ifdef STARPU_SIMGRID
 	int taken;
 #elif defined(STARPU_SPINLOCK_CHECK)
-	pthread_mutexattr_t errcheck_attr;
-	_starpu_pthread_mutex_t errcheck_lock;
+	starpu_pthread_mutexattr_t errcheck_attr;
+	starpu_pthread_mutex_t errcheck_lock;
 #elif defined(HAVE_PTHREAD_SPIN_LOCK)
 	_starpu_pthread_spinlock_t lock;
 #else

+ 205 - 0
src/common/thread.c

@@ -0,0 +1,205 @@
+/* StarPU --- Runtime system for heterogeneous multicore architectures.
+ *
+ * Copyright (C) 2010, 2012-2013  Université de Bordeaux 1
+ * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
+ *
+ * StarPU is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * StarPU is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * See the GNU Lesser General Public License in COPYING.LGPL for more details.
+ */
+
+#include <starpu.h>
+#include <common/thread.h>
+#include <core/simgrid.h>
+
+#ifdef STARPU_SIMGRID
+#include <xbt/synchro_core.h>
+#endif
+
+#ifdef STARPU_SIMGRID
+
+extern int _starpu_simgrid_thread_start(int argc, char *argv[]);
+
+int _starpu_pthread_create_on(char *name, starpu_pthread_t *thread, const starpu_pthread_attr_t *attr, void *(*start_routine) (void *), void *arg, int where)
+{
+	struct _starpu_pthread_args *_args = malloc(sizeof(*_args));
+	xbt_dynar_t _hosts;
+	_args->f = start_routine;
+	_args->arg = arg;
+	_hosts = MSG_hosts_as_dynar();
+	MSG_process_create(name, _starpu_simgrid_thread_start, _args,
+			   xbt_dynar_get_as(_hosts, (where), msg_host_t));
+	xbt_dynar_free(&_hosts);
+	return 0;
+}
+
+int starpu_pthread_create(starpu_pthread_t *thread, const starpu_pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
+{
+	return _starpu_pthread_create_on("", thread, attr, start_routine, arg, 0);
+}
+
+int starpu_pthread_join(starpu_pthread_t thread, void **retval)
+{
+#ifdef STARPU_DEVEL
+#warning TODO: use a simgrid_join when it becomes available
+#endif
+	MSG_process_sleep(1);
+	return 0;
+}
+
+int starpu_pthread_attr_init(starpu_pthread_attr_t *attr)
+{
+	return 0;
+}
+
+int starpu_pthread_attr_destroy(starpu_pthread_attr_t *attr)
+{
+	return 0;
+}
+
+int starpu_pthread_attr_setdetachstate(starpu_pthread_attr_t *attr, int detachstate)
+{
+	return 0;
+}
+
+int starpu_pthread_mutex_init(starpu_pthread_mutex_t *mutex, const starpu_pthread_mutexattr_t *mutexattr)
+{
+	*mutex = xbt_mutex_init();
+	return 0;
+}
+
+int starpu_pthread_mutex_destroy(starpu_pthread_mutex_t *mutex)
+{
+	if (*mutex)
+		xbt_mutex_destroy(*mutex);
+	return 0;
+}
+
+int starpu_pthread_mutex_lock(starpu_pthread_mutex_t *mutex)
+{
+	if (!*mutex) _STARPU_PTHREAD_MUTEX_INIT(mutex, NULL);
+	xbt_mutex_acquire(*mutex);
+	return 0;
+}
+
+int starpu_pthread_mutex_unlock(starpu_pthread_mutex_t *mutex)
+{
+	xbt_mutex_release(*mutex);
+	return 0;
+}
+
+int starpu_pthread_mutex_trylock(starpu_pthread_mutex_t *mutex)
+{
+	xbt_mutex_acquire(*mutex);
+	return 0;
+}
+
+static int used_key[MAX_TSD];
+
+int starpu_pthread_key_create(starpu_pthread_key_t *key, void (*destr_function) (void *))
+{
+	unsigned i;
+
+	/* Note: no synchronization here, we are actually monothreaded anyway. */
+	for (i = 0; i < MAX_TSD; i++)
+		if (!used_key[i])
+		{
+			used_key[i] = 1;
+			break;
+		}
+	STARPU_ASSERT(i < MAX_TSD);
+	*key = i;
+	return 0;
+}
+
+int starpu_pthread_key_delete(starpu_pthread_key_t key)
+{
+	used_key[key] = 0;
+	return 0;
+}
+
+int starpu_pthread_setspecific(starpu_pthread_key_t key, const void *pointer)
+{
+	void **array = MSG_host_get_data(MSG_host_self());
+	array[key] = pointer;
+	return 0;
+}
+
+void* starpu_pthread_getspecific(starpu_pthread_key_t key)
+{
+	void **array = MSG_host_get_data(MSG_host_self());
+	return array[key];
+}
+
+int starpu_pthread_cond_init(starpu_pthread_cond_t *cond, starpu_pthread_condattr_t *cond_attr)
+{
+	*cond = xbt_cond_init();
+	return 0;
+}
+
+int starpu_pthread_cond_signal(starpu_pthread_cond_t *cond)
+{
+	if (!*cond)
+		_STARPU_PTHREAD_COND_INIT(cond, NULL);
+	xbt_cond_signal(*cond);
+	return 0;
+}
+
+int starpu_pthread_cond_broadcast(starpu_pthread_cond_t *cond)
+{
+	if (!*cond)
+		_STARPU_PTHREAD_COND_INIT(cond, NULL);
+	xbt_cond_broadcast(*cond);
+	return 0;
+}
+
+int starpu_pthread_cond_wait(starpu_pthread_cond_t *cond, starpu_pthread_mutex_t *mutex)
+{
+	if (!*cond)
+		_STARPU_PTHREAD_COND_INIT(cond, NULL);
+	xbt_cond_wait(*cond, *mutex);
+	return 0;
+}
+
+int starpu_pthread_cond_destroy(starpu_pthread_cond_t *cond)
+{
+	if (*cond)
+		xbt_cond_destroy(*cond);
+	return 0;
+}
+
+int starpu_pthread_rwlock_init(starpu_pthread_rwlock_t *restrict rwlock, const starpu_pthread_rwlockattr_t *restrict attr)
+{
+	return starpu_pthread_mutex_init(rwlock, attr);
+}
+
+int starpu_pthread_rwlock_destroy(starpu_pthread_rwlock_t *rwlock)
+{
+	return starpu_pthread_mutex_destroy(rwlock);
+}
+
+int starpu_pthread_rwlock_rdlock(starpu_pthread_rwlock_t *rwlock)
+{
+	return starpu_pthread_mutex_lock(rwlock);
+}
+
+int starpu_pthread_rwlock_wrlock(starpu_pthread_rwlock_t *rwlock)
+{
+	return starpu_pthread_mutex_lock(rwlock);
+}
+
+int starpu_pthread_rwlock_unlock(starpu_pthread_rwlock_t *rwlock)
+{
+	return starpu_pthread_mutex_unlock(rwlock);
+}
+
+
+
+#endif /* STARPU_SIMGRID */

+ 87 - 216
src/common/thread.h

@@ -19,351 +19,222 @@
 #define __COMMON_THREAD_H__
 
 #include <starpu.h>
-#include <pthread.h>
-#ifdef STARPU_SIMGRID
-#include <xbt/synchro_core.h>
-#include <msg/msg.h>
-#endif
 
-#ifdef STARPU_SIMGRID
-typedef xbt_mutex_t _starpu_pthread_mutex_t;
-#else
-typedef pthread_mutex_t _starpu_pthread_mutex_t;
-#endif
+/*
+ * Encapsulation of the starpu_pthread_create_* functions.
+ */
 
-int _starpu_check_mutex_deadlock(_starpu_pthread_mutex_t *mutex);
-
-struct _starpu_pthread_args {
-	void *(*f)(void*);
-	void *arg;
-};
-
-int _starpu_simgrid_thread_start(int argc, char *argv[]);
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_CREATE_ON(name, thread, attr, routine, threadarg, where) do {\
-	struct _starpu_pthread_args *_args = malloc(sizeof(*_args));           \
-	xbt_dynar_t _hosts;                                                    \
-	_args->f = routine;                                                    \
-	_args->arg = threadarg;                                                \
-	_hosts = MSG_hosts_as_dynar();                                         \
-	MSG_process_create((name), _starpu_simgrid_thread_start, _args,        \
-			xbt_dynar_get_as(_hosts, (where), msg_host_t));        \
-	xbt_dynar_free(&_hosts);                                               \
+#define _STARPU_PTHREAD_CREATE_ON(name, thread, attr, routine, arg, where) do {		\
+	int p_ret =  starpu_pthread_create((thread), (attr), (routine), (arg));		\
+	if (STARPU_UNLIKELY(p_ret != 0)) {						\
+		fprintf(stderr,                         		                \
+			"%s:%d starpu_pthread_create: %s\n",                   		\
+			__FILE__, __LINE__, strerror(p_ret));                  		\
+	}                                                                      		\
 } while (0)
-#else
-#define _STARPU_PTHREAD_CREATE_ON(name, thread, attr, routine, arg, where) do {\
-	int p_ret = pthread_create((thread), (attr), (routine), (arg));	       \
-	if (STARPU_UNLIKELY(p_ret != 0)) {                                     \
-		fprintf(stderr,                                                \
-			"%s:%d pthread_create: %s\n",                          \
-			__FILE__, __LINE__, strerror(p_ret));                  \
-	}                                                                      \
-} while (0)
-#endif
-#define _STARPU_PTHREAD_CREATE(name, thread, attr, routine, arg)               \
+
+#define _STARPU_PTHREAD_CREATE(name, thread, attr, routine, arg)               		\
 	_STARPU_PTHREAD_CREATE_ON(name, thread, attr, routine, arg, 0)
 
 /*
- * Encapsulation of the pthread_key_* functions.
+ * Encapsulation of the starpu_pthread_mutex_* functions.
  */
-#ifdef STARPU_SIMGRID
-typedef int _starpu_pthread_key_t;
-int _starpu_pthread_key_create(_starpu_pthread_key_t *key);
-#define _STARPU_PTHREAD_KEY_CREATE(key, destr) _starpu_pthread_key_create(key)
-int _starpu_pthread_key_delete(_starpu_pthread_key_t key);
-#define _STARPU_PTHREAD_KEY_DELETE(key) _starpu_pthread_key_delete(key)
-int _starpu_pthread_setspecific(_starpu_pthread_key_t key, void *ptr);
-#define _STARPU_PTHREAD_SETSPECIFIC(key, ptr) _starpu_pthread_setspecific(key, ptr)
-void *_starpu_pthread_getspecific(_starpu_pthread_key_t key);
-#define _STARPU_PTHREAD_GETSPECIFIC(key) _starpu_pthread_getspecific(key)
-#else
-typedef pthread_key_t _starpu_pthread_key_t;
-#define _STARPU_PTHREAD_KEY_CREATE(key, destr) do {                            \
-	int p_ret = pthread_key_create((key), (destr));	                       \
-	if (STARPU_UNLIKELY(p_ret != 0)) {                                     \
-		fprintf(stderr,                                                \
-			"%s:%d pthread_key_create: %s\n",                      \
-			__FILE__, __LINE__, strerror(p_ret));                  \
-	}                                                                      \
-} while (0)
 
-#define _STARPU_PTHREAD_KEY_DELETE(key) do {                                   \
-	int p_ret = pthread_key_delete((key));	                               \
-	if (STARPU_UNLIKELY(p_ret != 0)) {                                     \
+#define _STARPU_PTHREAD_MUTEX_INIT(mutex, attr) do {                           \
+	int p_ret = starpu_pthread_mutex_init((mutex), (attr));                \
+	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_key_delete: %s\n",                      \
+			"%s:%d starpu_pthread_mutex_init: %s\n",               \
 			__FILE__, __LINE__, strerror(p_ret));                  \
+		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
 
-#define _STARPU_PTHREAD_SETSPECIFIC(key, ptr) do {                             \
-	int p_ret = pthread_setspecific((key), (ptr));	                       \
-	if (STARPU_UNLIKELY(p_ret != 0)) {                                     \
+#define _STARPU_PTHREAD_MUTEX_DESTROY(mutex) do {                              \
+	int p_ret = starpu_pthread_mutex_destroy(mutex);                       \
+	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_setspecific: %s\n",                     \
+			"%s:%d starpu_pthread_mutex_destroy: %s\n",            \
 			__FILE__, __LINE__, strerror(p_ret));                  \
-	};                                                                     \
-} while (0)
-
-#define _STARPU_PTHREAD_GETSPECIFIC(key) pthread_getspecific((key))
-#endif
+		STARPU_ABORT();                                                \
+	}                                                                      \
+} while(0)
 
-/*
- * Encapsulation of the pthread_mutex_* functions.
- */
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_MUTEX_INITIALIZER NULL
-#define _STARPU_PTHREAD_MUTEX_INIT(mutex, attr) do {                           \
-	(*mutex) = xbt_mutex_init();                                           \
-} while (0)
-#else
-#define _STARPU_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
-#define _STARPU_PTHREAD_MUTEX_INIT(mutex, attr) do {                           \
-	int p_ret = pthread_mutex_init((mutex), (attr));                       \
+#define _STARPU_PTHREAD_MUTEX_LOCK(mutex) do {                                 \
+	int p_ret = starpu_pthread_mutex_lock(mutex);                          \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_mutex_init: %s\n",                      \
+			"%s:%d starpu_pthread_mutex_lock: %s\n",               \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_MUTEX_DESTROY(mutex) do {                              \
-	if (*mutex)                                                            \
-		xbt_mutex_destroy((*mutex));                                   \
-} while (0)
-#else
-#define _STARPU_PTHREAD_MUTEX_DESTROY(mutex) do {                              \
-	int p_ret = pthread_mutex_destroy(mutex);                              \
+#define _STARPU_PTHREAD_MUTEX_TRYLOCK(mutex) do {                              \
+	int p_ret = starpu_pthread_mutex_trylock(mutex);                       \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_mutex_destroy: %s\n",                   \
+			"%s:%d starpu_pthread_mutex_trylock: %s\n",            \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
-} while(0)
-#endif
-
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_MUTEX_LOCK(mutex) do {                                 \
-	if (!(*mutex)) _STARPU_PTHREAD_MUTEX_INIT((mutex), NULL);              \
-	xbt_mutex_acquire((*mutex));                                           \
 } while (0)
-#else
-#define _STARPU_PTHREAD_MUTEX_LOCK(mutex) do {                                 \
-	int p_ret = pthread_mutex_lock(mutex);                                 \
+
+#define _STARPU_PTHREAD_MUTEX_UNLOCK(mutex) do {                               \
+	int p_ret = starpu_pthread_mutex_unlock(mutex);                        \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_mutex_lock: %s\n",                      \
+			"%s:%d starpu_pthread_mutex_unlock: %s\n",             \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_MUTEX_TRYLOCK(mutex) (xbt_mutex_acquire(*mutex), 0)
-#else
-#define _STARPU_PTHREAD_MUTEX_TRYLOCK(mutex) pthread_mutex_trylock(mutex)
-#endif
+int _starpu_check_mutex_deadlock(starpu_pthread_mutex_t *mutex);
 
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_MUTEX_UNLOCK(mutex) do {                               \
-	xbt_mutex_release((*mutex));                                           \
+/*
+ * Encapsulation of the starpu_pthread_key_* functions.
+ */
+#define _STARPU_PTHREAD_KEY_CREATE(key, destr) do {                            \
+	int p_ret = starpu_pthread_key_create((key), (destr));	               \
+	if (STARPU_UNLIKELY(p_ret != 0)) {                                     \
+		fprintf(stderr,                                                \
+			"%s:%d starpu_pthread_key_create: %s\n",               \
+			__FILE__, __LINE__, strerror(p_ret));                  \
+	}                                                                      \
 } while (0)
-#else
-#define _STARPU_PTHREAD_MUTEX_UNLOCK(mutex) do {                               \
-	int p_ret = pthread_mutex_unlock(mutex);                               \
-	if (STARPU_UNLIKELY(p_ret)) {                                          \
+
+#define _STARPU_PTHREAD_KEY_DELETE(key) do {                                   \
+	int p_ret = starpu_pthread_key_delete((key));	                       \
+	if (STARPU_UNLIKELY(p_ret != 0)) {                                     \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_mutex_unlock: %s\n",                    \
+			"%s:%d starpu_pthread_key_delete: %s\n",               \
 			__FILE__, __LINE__, strerror(p_ret));                  \
-		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-typedef xbt_mutex_t _starpu_pthread_rwlock_t;
-#else
-typedef pthread_rwlock_t _starpu_pthread_rwlock_t;
-#endif
+#define _STARPU_PTHREAD_SETSPECIFIC(key, ptr) do {                             \
+	int p_ret = starpu_pthread_setspecific((key), (ptr));	               \
+	if (STARPU_UNLIKELY(p_ret != 0)) {                                     \
+		fprintf(stderr,                                                \
+			"%s:%d starpu_pthread_setspecific: %s\n",              \
+			__FILE__, __LINE__, strerror(p_ret));                  \
+	};                                                                     \
+} while (0)
+
+#define _STARPU_PTHREAD_GETSPECIFIC(key) starpu_pthread_getspecific((key))
+
 /*
- * Encapsulation of the pthread_rwlock_* functions.
+ * Encapsulation of the starpu_pthread_rwlock_* functions.
  */
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_RWLOCK_INIT(rwlock, attr) _STARPU_PTHREAD_MUTEX_INIT(rwlock, attr)
-#else
 #define _STARPU_PTHREAD_RWLOCK_INIT(rwlock, attr) do {                         \
-	int p_ret = pthread_rwlock_init((rwlock), (attr));                     \
+	int p_ret = starpu_pthread_rwlock_init((rwlock), (attr));              \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_rwlock_init: %s\n",                     \
+			"%s:%d starpu_pthread_rwlock_init: %s\n",              \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_RWLOCK_RDLOCK(rwlock) _STARPU_PTHREAD_MUTEX_LOCK(rwlock)
-#else
 #define _STARPU_PTHREAD_RWLOCK_RDLOCK(rwlock) do {                             \
-	int p_ret = pthread_rwlock_rdlock(rwlock);                             \
+	int p_ret = starpu_pthread_rwlock_rdlock(rwlock);                      \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_rwlock_rdlock: %s\n",                   \
+			"%s:%d starpu_pthread_rwlock_rdlock: %s\n",            \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_RWLOCK_WRLOCK(rwlock) _STARPU_PTHREAD_MUTEX_LOCK(rwlock)
-#else
 #define _STARPU_PTHREAD_RWLOCK_WRLOCK(rwlock) do {                             \
-	int p_ret = pthread_rwlock_wrlock(rwlock);                             \
+	int p_ret = starpu_pthread_rwlock_wrlock(rwlock);                      \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_rwlock_wrlock: %s\n",                   \
+			"%s:%d starpu_pthread_rwlock_wrlock: %s\n",            \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_RWLOCK_UNLOCK(rwlock) _STARPU_PTHREAD_MUTEX_UNLOCK(rwlock)
-#else
 #define _STARPU_PTHREAD_RWLOCK_UNLOCK(rwlock) do {                             \
-	int p_ret = pthread_rwlock_unlock(rwlock);                             \
+	int p_ret = starpu_pthread_rwlock_unlock(rwlock);                      \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_rwlock_unlock: %s\n",                   \
+			"%s:%d starpu_pthread_rwlock_unlock: %s\n",            \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_RWLOCK_DESTROY(rwlock) _STARPU_PTHREAD_MUTEX_DESTROY(rwlock)
-#else
 #define _STARPU_PTHREAD_RWLOCK_DESTROY(rwlock) do {                            \
-	int p_ret = pthread_rwlock_destroy(rwlock);                            \
+	int p_ret = starpu_pthread_rwlock_destroy(rwlock);                     \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_rwlock_destroy: %s\n",                  \
+			"%s:%d starpu_pthread_rwlock_destroy: %s\n",           \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
-typedef xbt_cond_t _starpu_pthread_cond_t;
-#else
-typedef pthread_cond_t _starpu_pthread_cond_t;
-#endif
 /*
- * Encapsulation of the pthread_cond_* functions.
+ * Encapsulation of the starpu_pthread_cond_* functions.
  */
-#ifdef STARPU_SIMGRID
-#define _STARPU_PTHREAD_COND_INITIALIZER NULL
 #define _STARPU_PTHREAD_COND_INIT(cond, attr) do {                             \
-	(*cond) = xbt_cond_init();                                             \
-} while (0)
-#else
-#define _STARPU_PTHREAD_COND_INITIALIZER PTHREAD_COND_INITIALIZER
-#define _STARPU_PTHREAD_COND_INIT(cond, attr) do {                             \
-	int p_ret = pthread_cond_init((cond), (attr));                         \
+	int p_ret = starpu_pthread_cond_init((cond), (attr));                  \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_cond_init: %s\n",                       \
+			"%s:%d starpu_pthread_cond_init: %s\n",                \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
 #define _STARPU_PTHREAD_COND_DESTROY(cond) do {                                \
-	if (*cond)                                                             \
-		xbt_cond_destroy((*cond));                                     \
-} while (0)
-#else
-#define _STARPU_PTHREAD_COND_DESTROY(cond) do {                                \
-	int p_ret = pthread_cond_destroy(cond);                                \
+	int p_ret = starpu_pthread_cond_destroy(cond);                         \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_cond_destroy: %s\n",                    \
+			"%s:%d starpu_pthread_cond_destroy: %s\n",             \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 			STARPU_ABORT();                                        \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
 #define _STARPU_PTHREAD_COND_SIGNAL(cond) do {                                 \
-	if (!*cond)                                                            \
-		_STARPU_PTHREAD_COND_INIT(cond, NULL);                         \
-	xbt_cond_signal((*cond));                                              \
-} while (0)
-#else
-#define _STARPU_PTHREAD_COND_SIGNAL(cond) do {                                 \
-	int p_ret = pthread_cond_signal(cond);                                 \
+	int p_ret = starpu_pthread_cond_signal(cond);                          \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_cond_signal: %s\n",                     \
+			"%s:%d starpu_pthread_cond_signal: %s\n",              \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
 #define _STARPU_PTHREAD_COND_BROADCAST(cond) do {                              \
-	if (!*cond)                                                            \
-		_STARPU_PTHREAD_COND_INIT(cond, NULL);                         \
-	xbt_cond_broadcast((*cond));                                           \
-} while (0)
-#else
-#define _STARPU_PTHREAD_COND_BROADCAST(cond) do {                              \
-	int p_ret = pthread_cond_broadcast(cond);                              \
+	int p_ret = starpu_pthread_cond_broadcast(cond);                       \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_cond_broadcast: %s\n",                  \
+			"%s:%d starpu_pthread_cond_broadcast: %s\n",           \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#ifdef STARPU_SIMGRID
 #define _STARPU_PTHREAD_COND_WAIT(cond, mutex) do {                            \
-	if (!*cond)                                                            \
-		_STARPU_PTHREAD_COND_INIT(cond, NULL);                         \
-	xbt_cond_wait((*cond), (*mutex));                                      \
-} while (0)
-#else
-#define _STARPU_PTHREAD_COND_WAIT(cond, mutex) do {                            \
-	int p_ret = pthread_cond_wait((cond), (mutex));                        \
+	int p_ret = starpu_pthread_cond_wait((cond), (mutex));                 \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \
 		fprintf(stderr,                                                \
-			"%s:%d pthread_cond_wait: %s\n",                       \
+			"%s:%d starpu_pthread_cond_wait: %s\n",                \
 			__FILE__, __LINE__, strerror(p_ret));                  \
 		STARPU_ABORT();                                                \
 	}                                                                      \
 } while (0)
-#endif
 
-#define _starpu_pthread_barrier_t pthread_barrier_t
 /*
- * Encapsulation of the pthread_barrier_* functions.
+ * Encapsulation of the starpu_pthread_barrier_* functions.
  */
+#define _starpu_pthread_barrier_t pthread_barrier_t
+
 #define _STARPU_PTHREAD_BARRIER_INIT(barrier, attr, count) do {                \
 	int p_ret = pthread_barrier_init((barrier), (attr), (count));          \
 	if (STARPU_UNLIKELY(p_ret)) {                                          \

+ 2 - 2
src/common/utils.c

@@ -103,10 +103,10 @@ void _starpu_mkpath_and_check(const char *path, mode_t mode)
 	}
 }
 
-int _starpu_check_mutex_deadlock(_starpu_pthread_mutex_t *mutex)
+int _starpu_check_mutex_deadlock(starpu_pthread_mutex_t *mutex)
 {
 	int ret;
-	ret = _STARPU_PTHREAD_MUTEX_TRYLOCK(mutex);
+	ret = starpu_pthread_mutex_trylock(mutex);
 	if (!ret)
 	{
 		_STARPU_PTHREAD_MUTEX_UNLOCK(mutex);

+ 2 - 2
src/core/debug.c

@@ -21,7 +21,7 @@
 
 #ifdef STARPU_VERBOSE
 /* we want a single writer at the same time to have a log that is readable */
-static _starpu_pthread_mutex_t logfile_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t logfile_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 static FILE *logfile;
 #endif
 
@@ -76,7 +76,7 @@ struct ayudame_codelet
 	struct starpu_codelet *cl;
 } *codelets;
 static unsigned ncodelets, ncodelets_alloc;
-static _starpu_pthread_mutex_t ayudame_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t ayudame_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
 int64_t _starpu_ayudame_get_func_id(struct starpu_codelet *cl)
 {
 	unsigned i;

+ 3 - 3
src/core/dependencies/cg.h

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010, 2012-2013  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -90,8 +90,8 @@ struct _starpu_cg
 		struct
 		{
 			unsigned completed;
-			_starpu_pthread_mutex_t cg_mutex;
-			_starpu_pthread_cond_t cg_cond;
+			starpu_pthread_mutex_t cg_mutex;
+			starpu_pthread_cond_t cg_cond;
 		} succ_apps;
 	} succ;
 };

+ 1 - 1
src/core/dependencies/tags.c

@@ -39,7 +39,7 @@ struct _starpu_tag_table
 #define HASH_FIND_UINT64_T(head,find,out) HASH_FIND(hh,head,find,sizeof(uint64_t),out)
 
 static struct _starpu_tag_table *tag_htbl = NULL;
-static _starpu_pthread_rwlock_t tag_global_rwlock;
+static starpu_pthread_rwlock_t tag_global_rwlock;
 
 static struct _starpu_cg *create_cg_apps(unsigned ntags)
 {

+ 3 - 3
src/core/jobs.h

@@ -27,7 +27,6 @@
 #include <unistd.h>
 #include <string.h>
 #include <stdarg.h>
-#include <pthread.h>
 #include <common/config.h>
 #include <common/timing.h>
 #include <common/list.h>
@@ -38,6 +37,7 @@
 #include <core/errorcheck.h>
 #include <common/barrier.h>
 #include <common/utils.h>
+#include <common/thread.h>
 
 #ifdef STARPU_USE_CUDA
 #include <cuda.h>
@@ -63,8 +63,8 @@ LIST_TYPE(_starpu_job,
 
 	/* These synchronization structures are used to wait for the job to be
 	 * available or terminated for instance. */
-	_starpu_pthread_mutex_t sync_mutex;
-	_starpu_pthread_cond_t sync_cond;
+	starpu_pthread_mutex_t sync_mutex;
+	starpu_pthread_cond_t sync_cond;
 
 	/* To avoid deadlocks, we reorder the different buffers accessed to by
 	 * the task so that we always grab the rw-lock associated to the

+ 1 - 3
src/core/perfmodel/perfmodel.h

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2009-2012  Université de Bordeaux 1
- * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  * Copyright (C) 2011  Télécom-SudParis
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -21,9 +21,7 @@
 
 #include <common/config.h>
 #include <starpu.h>
-#include <starpu_perfmodel.h>
 #include <core/task_bundle.h>
-#include <pthread.h>
 #include <stdio.h>
 
 struct _starpu_perfmodel_list

+ 1 - 2
src/core/perfmodel/perfmodel_history.c

@@ -25,7 +25,6 @@
 #include <core/perfmodel/perfmodel.h>
 #include <core/jobs.h>
 #include <core/workers.h>
-#include <pthread.h>
 #include <datawizard/datawizard.h>
 #include <core/perfmodel/regression.h>
 #include <common/config.h>
@@ -50,7 +49,7 @@ struct starpu_perfmodel_history_table
 #define VALID_REGRESSION(reg_model) \
 	((reg_model)->minx < (9*(reg_model)->maxx)/10 && (reg_model)->nsample >= _STARPU_CALIBRATION_MINIMUM)
 
-static _starpu_pthread_rwlock_t registered_models_rwlock;
+static starpu_pthread_rwlock_t registered_models_rwlock;
 static struct _starpu_perfmodel_list *registered_models = NULL;
 
 size_t _starpu_job_get_data_size(struct starpu_perfmodel *model, enum starpu_perf_archtype arch, unsigned nimpl, struct _starpu_job *j)

+ 2 - 3
src/core/progress_hook.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010  Université de Bordeaux 1
- * Copyright (C) 2010-2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010-2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -15,7 +15,6 @@
  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  */
 
-#include <pthread.h>
 #include <core/workers.h>
 #include <common/utils.h>
 #include <core/progress_hook.h>
@@ -30,7 +29,7 @@ struct progression_hook
 };
 
 /* protect the hook table */
-static _starpu_pthread_rwlock_t progression_hook_rwlock;
+static starpu_pthread_rwlock_t progression_hook_rwlock;
 
 static struct progression_hook hooks[NMAXHOOKS] = {{NULL, NULL, 0}};
 static int active_hook_cnt = 0;

+ 8 - 8
src/core/sched_ctx.c

@@ -18,13 +18,13 @@
 #include <core/sched_ctx.h>
 #include <common/utils.h>
 
-_starpu_pthread_mutex_t changing_ctx_mutex[STARPU_NMAX_SCHED_CTXS];
+starpu_pthread_mutex_t changing_ctx_mutex[STARPU_NMAX_SCHED_CTXS];
 
 extern struct starpu_worker_collection worker_list;
-static _starpu_pthread_mutex_t sched_ctx_manag = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_mutex_t finished_submit_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t sched_ctx_manag = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t finished_submit_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 struct starpu_task stop_submission_task = STARPU_TASK_INITIALIZER;
-pthread_key_t sched_ctx_key;
+starpu_pthread_key_t sched_ctx_key;
 unsigned with_hypervisor = 0;
 double max_time_worker_on_ctx = -1.0;
 
@@ -641,7 +641,7 @@ void starpu_sched_ctx_remove_workers(int *workers_to_remove, int nworkers_to_rem
 /* unused sched_ctx have the id STARPU_NMAX_SCHED_CTXS */
 void _starpu_init_all_sched_ctxs(struct _starpu_machine_config *config)
 {
-	pthread_key_create(&sched_ctx_key, NULL);
+	starpu_pthread_key_create(&sched_ctx_key, NULL);
 
 	unsigned i;
 	for(i = 0; i < STARPU_NMAX_SCHED_CTXS; i++)
@@ -767,12 +767,12 @@ void _starpu_increment_nsubmitted_tasks_of_sched_ctx(unsigned sched_ctx_id)
 
 void starpu_sched_ctx_set_context(unsigned *sched_ctx)
 {
-	pthread_setspecific(sched_ctx_key, (void*)sched_ctx);
+	starpu_pthread_setspecific(sched_ctx_key, (void*)sched_ctx);
 }
 
 unsigned starpu_sched_ctx_get_context()
 {
-	unsigned *sched_ctx = (unsigned*)pthread_getspecific(sched_ctx_key);
+	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);
@@ -883,7 +883,7 @@ int starpu_get_workers_of_sched_ctx(unsigned sched_ctx_id, int *pus, enum starpu
 	return npus;
 }
 
-_starpu_pthread_mutex_t* starpu_sched_ctx_get_changing_ctx_mutex(unsigned sched_ctx_id)
+starpu_pthread_mutex_t* starpu_sched_ctx_get_changing_ctx_mutex(unsigned sched_ctx_id)
 {
 	return &changing_ctx_mutex[sched_ctx_id];
 }

+ 6 - 6
src/core/sched_ctx.h

@@ -30,7 +30,7 @@
 
 
 /* used when changes (delete, modify) are applyed to contexts */
-//extern _starpu_pthread_mutex_t _changing_ctx_mutex[];
+//extern starpu_pthread_mutex_t _changing_ctx_mutex[];
 
 struct _starpu_sched_ctx
 {
@@ -55,16 +55,16 @@ struct _starpu_sched_ctx
 	struct _starpu_barrier_counter tasks_barrier;
 
 	/* cond to block push when there are no workers in the ctx */
-	_starpu_pthread_cond_t no_workers_cond;
+	starpu_pthread_cond_t no_workers_cond;
 
 	/* mutex to block push when there are no workers in the ctx */
-	_starpu_pthread_mutex_t no_workers_mutex;
+	starpu_pthread_mutex_t no_workers_mutex;
 
 	/*ready tasks that couldn't be pushed because the ctx has no workers*/
 	struct starpu_task_list empty_ctx_tasks;
 
 	/* mutext protecting empty_ctx_tasks list */
-	_starpu_pthread_mutex_t empty_ctx_mutex;
+	starpu_pthread_mutex_t empty_ctx_mutex;
 
 	/* min CPUs to execute*/
 	int min_ncpus;
@@ -128,7 +128,7 @@ int _starpu_get_index_in_ctx_of_workerid(unsigned sched_ctx, unsigned workerid);
 unsigned _starpu_get_nsched_ctxs();
 
 /* Get the mutex corresponding to the global workerid */
-_starpu_pthread_mutex_t *_starpu_get_sched_mutex(struct _starpu_sched_ctx *sched_ctx, int worker);
+starpu_pthread_mutex_t *_starpu_get_sched_mutex(struct _starpu_sched_ctx *sched_ctx, int worker);
 
 /* Get workers belonging to a certain context, it returns the number of workers
  take care: no mutex taken, the list of workers might not be updated */
@@ -147,7 +147,7 @@ void _starpu_sched_ctx_call_poped_task_cb(int workerid, struct starpu_task *task
 #endif //STARPU_USE_SCHED_CTX_HYPERVISOR
 
 #if defined(_MSC_VER) || defined(STARPU_SIMGRID)
-_starpu_pthread_mutex_t* starpu_sched_ctx_get_changing_ctx_mutex(unsigned sched_ctx_id);
+starpu_pthread_mutex_t* starpu_sched_ctx_get_changing_ctx_mutex(unsigned sched_ctx_id);
 #endif
 
 #endif // __SCHED_CONTEXT_H__

+ 4 - 43
src/core/simgrid.c

@@ -24,8 +24,6 @@
 #ifdef STARPU_SIMGRID
 #include <msg/msg.h>
 
-#define MAX_TSD 16
-
 #pragma weak starpu_main
 extern int starpu_main(int argc, char *argv[]);
 
@@ -132,8 +130,8 @@ LIST_TYPE(transfer,
 
 	/* communication termination signalization */
 	unsigned *finished;
-	_starpu_pthread_mutex_t *mutex;
-	_starpu_pthread_cond_t *cond;
+	starpu_pthread_mutex_t *mutex;
+	starpu_pthread_cond_t *cond;
 
 	/* transfers which wait for this transfer */
 	struct transfer **wake;
@@ -282,8 +280,8 @@ int _starpu_simgrid_transfer(size_t size, unsigned src_node, unsigned dst_node,
 	msg_host_t *hosts = calloc(2, sizeof(*hosts));
 	double *computation = calloc(2, sizeof(*computation));
 	double *communication = calloc(4, sizeof(*communication));
-	_starpu_pthread_mutex_t mutex;
-	_starpu_pthread_cond_t cond;
+	starpu_pthread_mutex_t mutex;
+	starpu_pthread_cond_t cond;
 	unsigned finished;
 
 	hosts[0] = _starpu_simgrid_memory_node_get_host(src_node);
@@ -345,43 +343,6 @@ int _starpu_simgrid_transfer(size_t size, unsigned src_node, unsigned dst_node,
 	}
 }
 
-static int used_key[MAX_TSD];
-
-int _starpu_pthread_key_create(_starpu_pthread_key_t *key)
-{
-	unsigned i;
-
-	/* Note: no synchronization here, we are actually monothreaded anyway. */
-	for (i = 0; i < MAX_TSD; i++)
-		if (!used_key[i])
-		{
-			used_key[i] = 1;
-			break;
-		}
-	STARPU_ASSERT(i < MAX_TSD);
-	*key = i;
-	return 0;
-}
-
-int _starpu_pthread_key_delete(_starpu_pthread_key_t key)
-{
-	used_key[key] = 0;
-	return 0;
-}
-
-int _starpu_pthread_setspecific(_starpu_pthread_key_t key, void *ptr)
-{
-	void **array = MSG_host_get_data(MSG_host_self());
-	array[key] = ptr;
-	return 0;
-}
-
-void* _starpu_pthread_getspecific(_starpu_pthread_key_t key)
-{
-	void **array = MSG_host_get_data(MSG_host_self());
-	return array[key];
-}
-
 int
 _starpu_simgrid_thread_start(int argc STARPU_ATTRIBUTE_UNUSED, char *argv[] STARPU_ATTRIBUTE_UNUSED)
 {

+ 10 - 0
src/core/simgrid.h

@@ -17,9 +17,19 @@
 #ifndef __SIMGRID_H__
 #define __SIMGRID_H__
 
+#include <datawizard/data_request.h>
+
 #ifdef STARPU_SIMGRID
 #include <msg/msg.h>
 
+struct _starpu_pthread_args
+{
+	void *(*f)(void*);
+	void *arg;
+};
+
+#define MAX_TSD 16
+
 void _starpu_simgrid_execute_job(struct _starpu_job *job, enum starpu_perf_archtype perf_arch, double length);
 int _starpu_simgrid_transfer(size_t size, unsigned src_node, unsigned dst_node, struct _starpu_data_request *req);
 /* Return the number of hosts prefixed by PREFIX */

+ 3 - 3
src/core/task.c

@@ -35,8 +35,8 @@
 /* XXX this should be reinitialized when StarPU is shutdown (or we should make
  * sure that no task remains !) */
 /* TODO we could make this hierarchical to avoid contention ? */
-static _starpu_pthread_cond_t submitted_cond = _STARPU_PTHREAD_COND_INITIALIZER;
-static _starpu_pthread_mutex_t submitted_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t submitted_cond = STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t submitted_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 static long int nsubmitted = 0, nready = 0;
 
 static void _starpu_increment_nsubmitted_tasks(void);
@@ -45,7 +45,7 @@ static void _starpu_increment_nsubmitted_tasks(void);
  * cannot use the worker structure to store that information because it is
  * possible that we have a task with a NULL codelet, which means its callback
  * could be executed by a user thread as well. */
-static _starpu_pthread_key_t current_task_key;
+static starpu_pthread_key_t current_task_key;
 
 void starpu_task_init(struct starpu_task *task)
 {

+ 1 - 0
src/core/task_bundle.c

@@ -23,6 +23,7 @@
 #include <common/config.h>
 #include <common/utils.h>
 #include <common/list.h>
+#include <common/thread.h>
 
 /* Initialize a task bundle */
 void starpu_task_bundle_create(starpu_task_bundle_t *bundle)

+ 2 - 6
src/core/task_bundle.h

@@ -19,11 +19,7 @@
 #ifndef __CORE_TASK_BUNDLE_H__
 #define __CORE_TASK_BUNDLE_H__
 
-#if ! defined(_MSC_VER)
-#  include <pthread.h>
-#endif
-
-#include <common/thread.h>
+#include <starpu_thread.h>
 
 /* struct _starpu_task_bundle_entry
  * ================================
@@ -70,7 +66,7 @@ struct _starpu_task_bundle
 #if defined(_MSC_VER)
 	void *mutex;
 #else
-	_starpu_pthread_mutex_t mutex;
+	starpu_pthread_mutex_t mutex;
 #endif
 
 	struct _starpu_task_bundle_entry *list;

+ 1 - 1
src/core/topology.c

@@ -684,7 +684,7 @@ _starpu_bind_thread_on_cpu (
 	CPU_ZERO(&aff_mask);
 	CPU_SET(cpuid, &aff_mask);
 
-	pthread_t self = pthread_self();
+	starpu_pthread_t self = pthread_self();
 
 	ret = pthread_setaffinity_np(self, sizeof(aff_mask), &aff_mask);
 	if (ret)

+ 18 - 26
src/core/workers.c

@@ -42,12 +42,12 @@
 #endif
 
 /* acquire/release semantic for concurrent initialization/de-initialization */
-static _starpu_pthread_mutex_t init_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t init_cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t init_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t init_cond = STARPU_PTHREAD_COND_INITIALIZER;
 static int init_count = 0;
 static enum { UNINITIALIZED, CHANGING, INITIALIZED } initialized = UNINITIALIZED;
 
-static _starpu_pthread_key_t worker_key;
+static starpu_pthread_key_t worker_key;
 
 static struct _starpu_machine_config config;
 
@@ -257,8 +257,8 @@ int starpu_combined_worker_can_execute_task(unsigned workerid, struct starpu_tas
 
 static void _starpu_init_worker_queue(struct _starpu_worker *workerarg)
 {
-	_starpu_pthread_cond_t *cond = &workerarg->sched_cond;
-	_starpu_pthread_mutex_t *mutex = &workerarg->sched_mutex;
+	starpu_pthread_cond_t *cond = &workerarg->sched_cond;
+	starpu_pthread_mutex_t *mutex = &workerarg->sched_mutex;
 
 	unsigned memory_node = workerarg->memory_node;
 
@@ -843,23 +843,17 @@ static void _starpu_terminate_workers(struct _starpu_machine_config *pconfig)
 			if (!set->joined)
 			{
 #ifdef STARPU_SIMGRID
-#ifdef STARPU_DEVEL
-#warning TODO: use a simgrid_join when it becomes available
-#endif
-				MSG_process_sleep(1);
+				status = starpu_pthread_join(set->worker_thread, NULL);
 #else
 				if (!pthread_equal(pthread_self(), set->worker_thread))
-				{
-					status = pthread_join(set->worker_thread, NULL);
-#ifdef STARPU_VERBOSE
-					if (status)
-					{
-						_STARPU_DEBUG("pthread_join -> %d\n", status);
-                                        }
+					status = starpu_pthread_join(set->worker_thread, NULL);
 #endif
+#ifdef STARPU_VERBOSE
+				if (status)
+				{
+					_STARPU_DEBUG("starpu_pthread_join -> %d\n", status);
 				}
 #endif
-
 				set->joined = 1;
 			}
 		}
@@ -869,17 +863,15 @@ static void _starpu_terminate_workers(struct _starpu_machine_config *pconfig)
 				goto out;
 
 #ifdef STARPU_SIMGRID
-			MSG_process_sleep(1);
+			status = starpu_pthread_join(set->worker_thread, NULL);
 #else
 			if (!pthread_equal(pthread_self(), worker->worker_thread))
-			{
-				status = pthread_join(worker->worker_thread, NULL);
-#ifdef STARPU_VERBOSE
-				if (status)
-				{
-					_STARPU_DEBUG("pthread_join -> %d\n", status);
-                                }
+				status = starpu_pthread_join(worker->worker_thread, NULL);
 #endif
+#ifdef STARPU_VERBOSE
+			if (status)
+			{
+				_STARPU_DEBUG("starpu_pthread_join -> %d\n", status);
 			}
 #endif
 		}
@@ -1261,7 +1253,7 @@ void _starpu_worker_set_status(int workerid, enum _starpu_worker_status status)
 	config.workers[workerid].status = status;
 }
 
-void starpu_worker_get_sched_condition(int workerid, _starpu_pthread_mutex_t **sched_mutex, _starpu_pthread_cond_t **sched_cond)
+void starpu_worker_get_sched_condition(int workerid, starpu_pthread_mutex_t **sched_mutex, starpu_pthread_cond_t **sched_cond)
 {
 	*sched_cond = &config.workers[workerid].sched_cond;
 	*sched_mutex = &config.workers[workerid].sched_mutex;

+ 11 - 13
src/core/workers.h

@@ -20,9 +20,7 @@
 #define __WORKERS_H__
 
 #include <starpu.h>
-#include <starpu_scheduler.h>
 #include <common/config.h>
-#include <pthread.h>
 #include <common/timing.h>
 #include <common/fxt.h>
 #include <core/jobs.h>
@@ -48,22 +46,22 @@
 struct _starpu_worker
 {
 	struct _starpu_machine_config *config;
-        _starpu_pthread_mutex_t mutex;
+        starpu_pthread_mutex_t mutex;
 	enum starpu_archtype arch; /* what is the type of worker ? */
 	uint32_t worker_mask; /* what is the type of worker ? */
 	enum starpu_perf_archtype perf_arch; /* in case there are different models of the same arch */
-	pthread_t worker_thread; /* the thread which runs the worker */
+	starpu_pthread_t worker_thread; /* the thread which runs the worker */
 	unsigned devid; /* which cpu/gpu/etc is controlled by the worker ? */
 	int bindid; /* which cpu is the driver bound to ? (logical index) */
 	int workerid; /* uniquely identify the worker among all processing units types */
 	int combined_workerid; /* combined worker currently using this worker */
 	int current_rank; /* current rank in case the worker is used in a parallel fashion */
 	int worker_size; /* size of the worker in case we use a combined worker */
-	_starpu_pthread_cond_t started_cond; /* indicate when the worker is ready */
-	_starpu_pthread_cond_t ready_cond; /* indicate when the worker is ready */
+	starpu_pthread_cond_t started_cond; /* indicate when the worker is ready */
+	starpu_pthread_cond_t ready_cond; /* indicate when the worker is ready */
 	unsigned memory_node; /* which memory node is the worker associated with ? */
-	_starpu_pthread_cond_t sched_cond; /* condition variable used when the worker waits for tasks. */
-	_starpu_pthread_mutex_t sched_mutex; /* mutex protecting sched_cond */
+	starpu_pthread_cond_t sched_cond; /* condition variable used when the worker waits for tasks. */
+        starpu_pthread_mutex_t sched_mutex; /* mutex protecting sched_cond */
 	struct starpu_task_list local_tasks; /* this queue contains tasks that have been explicitely submitted to that queue */
 	struct starpu_task *current_task; /* task currently executed by this worker */
 	struct _starpu_worker_set *set; /* in case this worker belongs to a set */
@@ -117,13 +115,13 @@ struct _starpu_combined_worker
  * accelerators (eg. Gordon for n SPUs) */
 struct _starpu_worker_set
 {
-        _starpu_pthread_mutex_t mutex;
-	pthread_t worker_thread; /* the thread which runs the worker */
+        starpu_pthread_mutex_t mutex;
+	starpu_pthread_t worker_thread; /* the thread which runs the worker */
 	unsigned nworkers;
 	unsigned joined; /* only one thread may call pthread_join*/
 	void *retval;
 	struct _starpu_worker *workers;
-        _starpu_pthread_cond_t ready_cond; /* indicate when the set is ready */
+        starpu_pthread_cond_t ready_cond; /* indicate when the set is ready */
 	unsigned set_is_initialized;
 };
 
@@ -199,7 +197,7 @@ unsigned _starpu_worker_can_block(unsigned memnode);
 /* This function must be called to block a worker. It puts the worker in a
  * sleeping state until there is some event that forces the worker to wake up.
  * */
-void _starpu_block_worker(int workerid, _starpu_pthread_cond_t *cond, _starpu_pthread_mutex_t *mutex);
+void _starpu_block_worker(int workerid, starpu_pthread_cond_t *cond, starpu_pthread_mutex_t *mutex);
 
 /* The _starpu_worker structure describes all the state of a StarPU worker.
  * This function sets the pthread key which stores a pointer to this structure.
@@ -246,7 +244,7 @@ int starpu_worker_get_nids_by_type(enum starpu_archtype type, int *workerids, in
 int starpu_worker_get_nids_ctx_free_by_type(enum starpu_archtype type, int *workerids, int maxsize);
 
 #if defined(_MSC_VER) || defined(STARPU_SIMGRID)
-void starpu_worker_get_sched_condition(int workerid, _starpu_pthread_mutex_t **sched_mutex, _starpu_pthread_cond_t **sched_cond);
+void starpu_worker_get_sched_condition(int workerid, starpu_pthread_mutex_t **sched_mutex, starpu_pthread_cond_t **sched_cond);
 #endif
 
 #endif // __WORKERS_H__

+ 3 - 3
src/datawizard/coherency.h

@@ -117,8 +117,8 @@ struct _starpu_data_state
 	unsigned busy_count;
 	/* Is starpu_data_unregister waiting for busy_count? */
 	unsigned busy_waiting;
-	_starpu_pthread_mutex_t busy_mutex;
-	_starpu_pthread_cond_t busy_cond;
+	starpu_pthread_mutex_t busy_mutex;
+	starpu_pthread_cond_t busy_cond;
 
 	/* In case we user filters, the handle may describe a sub-data */
 	struct _starpu_data_state *root_handle; /* root of the tree */
@@ -156,7 +156,7 @@ struct _starpu_data_state
 
 	/* This lock should protect any operation to enforce
 	 * sequential_consistency */
-	_starpu_pthread_mutex_t sequential_consistency_mutex;
+	starpu_pthread_mutex_t sequential_consistency_mutex;
 
 	/* The last submitted task (or application data request) that declared
 	 * it would modify the piece of data ? Any task accessing the data in a

+ 3 - 3
src/datawizard/copy_driver.h

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010, 2012  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -44,8 +44,8 @@ union _starpu_async_channel_event
 #ifdef STARPU_SIMGRID
 	struct {
 		unsigned finished;
-		_starpu_pthread_mutex_t mutex;
-		_starpu_pthread_cond_t cond;
+		starpu_pthread_mutex_t mutex;
+		starpu_pthread_cond_t cond;
 	};
 #endif
 #ifdef STARPU_USE_CUDA

+ 2 - 2
src/datawizard/data_request.c

@@ -23,11 +23,11 @@
 /* requests that have not been treated at all */
 static struct _starpu_data_request_list *data_requests[STARPU_MAXNODES];
 static struct _starpu_data_request_list *prefetch_requests[STARPU_MAXNODES];
-static _starpu_pthread_mutex_t data_requests_list_mutex[STARPU_MAXNODES];
+static starpu_pthread_mutex_t data_requests_list_mutex[STARPU_MAXNODES];
 
 /* requests that are not terminated (eg. async transfers) */
 static struct _starpu_data_request_list *data_requests_pending[STARPU_MAXNODES];
-static _starpu_pthread_mutex_t data_requests_pending_list_mutex[STARPU_MAXNODES];
+static starpu_pthread_mutex_t data_requests_pending_list_mutex[STARPU_MAXNODES];
 
 void _starpu_init_data_request_lists(void)
 {

+ 2 - 2
src/datawizard/interfaces/data_interface.c

@@ -386,8 +386,8 @@ struct _starpu_unregister_callback_arg
 	unsigned memory_node;
 	starpu_data_handle_t handle;
 	unsigned terminated;
-	_starpu_pthread_mutex_t mutex;
-	_starpu_pthread_cond_t cond;
+	starpu_pthread_mutex_t mutex;
+	starpu_pthread_cond_t cond;
 };
 
 /* Check whether we should tell starpu_data_unregister that the data handle is

+ 2 - 2
src/datawizard/malloc.c

@@ -335,8 +335,8 @@ int starpu_free(void *A)
 }
 
 #ifdef STARPU_SIMGRID
-static _starpu_pthread_mutex_t cuda_alloc_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_mutex_t opencl_alloc_mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t cuda_alloc_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t opencl_alloc_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 #endif
 
 uintptr_t

+ 1 - 1
src/datawizard/memalloc.c

@@ -22,7 +22,7 @@
 
 /* This per-node RW-locks protect mc_list and memchunk_cache entries */
 /* Note: handle header lock is always taken before this */
-static _starpu_pthread_rwlock_t mc_rwlock[STARPU_MAXNODES];
+static starpu_pthread_rwlock_t mc_rwlock[STARPU_MAXNODES];
 
 /* This per-node spinlock protect lru_list */
 static struct _starpu_spinlock lru_rwlock[STARPU_MAXNODES];

+ 2 - 3
src/datawizard/memory_nodes.c

@@ -15,7 +15,6 @@
  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  */
 
-#include <pthread.h>
 #include <common/config.h>
 #include <core/sched_policy.h>
 #include <datawizard/datastats.h>
@@ -25,7 +24,7 @@
 #include "memalloc.h"
 
 static struct _starpu_memory_node_descr descr;
-static _starpu_pthread_key_t memory_node_key;
+static starpu_pthread_key_t memory_node_key;
 
 void _starpu_memory_nodes_init(void)
 {
@@ -139,7 +138,7 @@ msg_host_t _starpu_simgrid_memory_node_get_host(unsigned node)
 /* TODO move in a more appropriate file  !! */
 /* Register a condition variable associated to worker which is associated to a
  * memory node itself. */
-void _starpu_memory_node_register_condition(_starpu_pthread_cond_t *cond, _starpu_pthread_mutex_t *mutex, unsigned nodeid)
+void _starpu_memory_node_register_condition(starpu_pthread_cond_t *cond, starpu_pthread_mutex_t *mutex, unsigned nodeid)
 {
 	unsigned cond_id;
 	unsigned nconds_total, nconds;

+ 4 - 4
src/datawizard/memory_nodes.h

@@ -34,8 +34,8 @@
 
 struct _starpu_cond_and_mutex
 {
-        _starpu_pthread_cond_t *cond;
-        _starpu_pthread_mutex_t *mutex;
+        starpu_pthread_cond_t *cond;
+        starpu_pthread_mutex_t *mutex;
 };
 
 struct _starpu_memory_node_descr
@@ -58,7 +58,7 @@ struct _starpu_memory_node_descr
 	 * multiple worker share the same condition variable, so we maintain a
 	 * list of all these condition variables so that we can wake up all
 	 * worker attached to a memory node that are waiting on a task. */
-	_starpu_pthread_rwlock_t conditions_rwlock;
+	starpu_pthread_rwlock_t conditions_rwlock;
 	struct _starpu_cond_and_mutex conditions_attached_to_node[STARPU_MAXNODES][STARPU_NMAXWORKERS];
 	struct _starpu_cond_and_mutex conditions_all[STARPU_MAXNODES*STARPU_NMAXWORKERS];
 	/* the number of queues attached to each node */
@@ -79,7 +79,7 @@ msg_host_t _starpu_simgrid_memory_node_get_host(unsigned node);
 #endif
 unsigned _starpu_memory_node_register(enum starpu_node_kind kind, int devid);
 //void _starpu_memory_node_attach_queue(struct starpu_jobq_s *q, unsigned nodeid);
-void _starpu_memory_node_register_condition(_starpu_pthread_cond_t *cond, _starpu_pthread_mutex_t *mutex, unsigned memory_node);
+void _starpu_memory_node_register_condition(starpu_pthread_cond_t *cond, starpu_pthread_mutex_t *mutex, unsigned memory_node);
 
 int _starpu_memory_node_get_devid(unsigned node);
 

+ 2 - 2
src/datawizard/user_interactions.c

@@ -51,8 +51,8 @@ struct user_interaction_wrapper
 	starpu_data_handle_t handle;
 	enum starpu_access_mode mode;
 	unsigned node;
-	_starpu_pthread_cond_t cond;
-	_starpu_pthread_mutex_t lock;
+	starpu_pthread_cond_t cond;
+	starpu_pthread_mutex_t lock;
 	unsigned finished;
 	unsigned async;
 	void (*callback)(void *);

+ 3 - 4
src/drivers/gordon/driver_gordon.c

@@ -20,7 +20,6 @@
 #define _GNU_SOURCE
 #endif
 #include <sched.h>
-#include <pthread.h>
 #include <semaphore.h>
 #include <common/utils.h>
 #include "driver_gordon.h"
@@ -29,10 +28,10 @@
 
 static unsigned progress_thread_is_inited = 0;
 
-pthread_t progress_thread;
+starpu_pthread_t progress_thread;
 
-_starpu_pthread_cond_t progress_cond;
-_starpu_pthread_mutex_t progress_mutex;
+starpu_pthread_cond_t progress_cond;
+starpu_pthread_mutex_t progress_mutex;
 
 struct gordon_task_wrapper_s
 {

+ 1 - 1
src/drivers/opencl/driver_opencl.c

@@ -37,7 +37,7 @@
 static int nb_devices = -1;
 static int init_done = 0;
 
-static _starpu_pthread_mutex_t big_lock = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t big_lock = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
 static size_t global_mem[STARPU_MAXOPENCLDEVS];
 

+ 1 - 1
src/profiling/bound.c

@@ -120,7 +120,7 @@ int _starpu_bound_recording;
 static int recorddeps;
 static int recordprio;
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
 /* Initialization */
 void starpu_bound_start(int deps, int prio)

+ 2 - 2
src/profiling/profiling.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2013  Université de Bordeaux 1
- * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -26,7 +26,7 @@
 #include <errno.h>
 
 static struct starpu_worker_profiling_info worker_info[STARPU_NMAXWORKERS];
-static _starpu_pthread_mutex_t worker_info_mutex[STARPU_NMAXWORKERS];
+static starpu_pthread_mutex_t worker_info_mutex[STARPU_NMAXWORKERS];
 
 /* In case the worker is still sleeping when the user request profiling info,
  * we need to account for the time elasped while sleeping. */

+ 15 - 15
src/sched_policies/deque_modeling_policy_data_aware.c

@@ -239,8 +239,8 @@ static struct starpu_task *dmda_pop_every_task(unsigned sched_ctx_id)
 	int workerid = starpu_worker_get_id();
 	struct _starpu_fifo_taskq *fifo = dt->queue_array[workerid];
 
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
 	_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 	new_list = _starpu_fifo_pop_every_task(fifo, workerid);
@@ -271,8 +271,8 @@ static int push_task_on_best_worker(struct starpu_task *task, int best_workerid,
 
 	struct _starpu_fifo_taskq *fifo = dt->queue_array[best_workerid];
 
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 	starpu_worker_get_sched_condition(best_workerid, &sched_mutex, &sched_cond);
 
 #ifdef STARPU_USE_SCHED_CTX_HYPERVISOR
@@ -398,8 +398,8 @@ static int _dm_push_task(struct starpu_task *task, unsigned prio, unsigned sched
 			}
 
 			double exp_end;
-			_starpu_pthread_mutex_t *sched_mutex;
-			_starpu_pthread_cond_t *sched_cond;
+			starpu_pthread_mutex_t *sched_mutex;
+			starpu_pthread_cond_t *sched_cond;
 			starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 
 			/* Sometimes workers didn't take the tasks as early as we expected */
@@ -518,8 +518,8 @@ static void compute_all_performance_predictions(struct starpu_task *task,
 			}
 
 			/* Sometimes workers didn't take the tasks as early as we expected */
-			_starpu_pthread_mutex_t *sched_mutex;
-			_starpu_pthread_cond_t *sched_cond;
+			starpu_pthread_mutex_t *sched_mutex;
+			starpu_pthread_cond_t *sched_cond;
 			starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 
 			STARPU_ASSERT_MSG(fifo != NULL, "worker %d ctx %d\n", worker, sched_ctx_id);
@@ -723,7 +723,7 @@ static int dmda_push_sorted_task(struct starpu_task *task)
 #warning TODO: after defining a scheduling window, use that instead of empty_ctx_tasks
 #endif
 	unsigned sched_ctx_id = task->sched_ctx;
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
 	int ret_val = -1;
 
@@ -744,7 +744,7 @@ static int dmda_push_sorted_task(struct starpu_task *task)
 static int dm_push_task(struct starpu_task *task)
 {
 	unsigned sched_ctx_id = task->sched_ctx;
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
 	int ret_val = -1;
 
@@ -764,7 +764,7 @@ static int dm_push_task(struct starpu_task *task)
 static int dmda_push_task(struct starpu_task *task)
 {
 	unsigned sched_ctx_id = task->sched_ctx;
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
 	int ret_val = -1;
 
@@ -893,8 +893,8 @@ static void dmda_pre_exec_hook(struct starpu_task *task)
 	double model = task->predicted;
 	double transfer_model = task->predicted_transfer;
 
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
 
 	/* Once the task is executing, we can update the predicted amount
@@ -921,8 +921,8 @@ static void dmda_push_task_notify(struct starpu_task *task, int workerid, unsign
 			_starpu_get_job_associated_to_task(task)->nimpl);
 
 	double predicted_transfer = starpu_task_expected_data_transfer_time(memory_node, task);
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
 
 

+ 2 - 2
src/sched_policies/deque_queues.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2011  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2013  Centre National de la Recherche Scientifique
  * Copyright (C) 2011  Télécom-SudParis
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -88,7 +88,7 @@ struct starpu_task *_starpu_deque_pop_task(struct _starpu_deque_jobq *deque_queu
 	return NULL;
 }
 
-struct _starpu_job_list *_starpu_deque_pop_every_task(struct _starpu_deque_jobq *deque_queue, _starpu_pthread_mutex_t *sched_mutex, int workerid)
+struct _starpu_job_list *_starpu_deque_pop_every_task(struct _starpu_deque_jobq *deque_queue, starpu_pthread_mutex_t *sched_mutex, int workerid)
 {
 	struct _starpu_job_list *new_list, *old_list;
 

+ 1 - 1
src/sched_policies/deque_queues.h

@@ -44,7 +44,7 @@ struct _starpu_deque_jobq *_starpu_create_deque(void);
 void _starpu_destroy_deque(struct _starpu_deque_jobq *deque);
 
 struct starpu_task *_starpu_deque_pop_task(struct _starpu_deque_jobq *deque_queue, int workerid);
-struct _starpu_job_list *_starpu_deque_pop_every_task(struct _starpu_deque_jobq *deque_queue, _starpu_pthread_mutex_t *sched_mutex, int workerid);
+struct _starpu_job_list *_starpu_deque_pop_every_task(struct _starpu_deque_jobq *deque_queue, starpu_pthread_mutex_t *sched_mutex, int workerid);
 
 unsigned _starpu_get_deque_njobs(struct _starpu_deque_jobq *deque_queue);
 int _starpu_get_deque_nprocessed(struct _starpu_deque_jobq *deque_queue);

+ 6 - 6
src/sched_policies/eager_central_policy.c

@@ -27,7 +27,7 @@
 struct _starpu_eager_center_policy_data
 {
 	struct _starpu_fifo_taskq *fifo;
-	_starpu_pthread_mutex_t policy_mutex;
+	starpu_pthread_mutex_t policy_mutex;
 };
 
 static void initialize_eager_center_policy(unsigned sched_ctx_id)
@@ -63,7 +63,7 @@ static int push_task_eager_policy(struct starpu_task *task)
  {
 	unsigned sched_ctx_id = task->sched_ctx;
 	struct _starpu_eager_center_policy_data *data = (struct _starpu_eager_center_policy_data*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
 	int ret_val = -1;
 
@@ -95,8 +95,8 @@ static int push_task_eager_policy(struct starpu_task *task)
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
-		_starpu_pthread_mutex_t *sched_mutex;
-		_starpu_pthread_cond_t *sched_cond;
+		starpu_pthread_mutex_t *sched_mutex;
+		starpu_pthread_cond_t *sched_cond;
 		starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 		_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 		_STARPU_PTHREAD_COND_SIGNAL(sched_cond);
@@ -113,8 +113,8 @@ static struct starpu_task *pop_every_task_eager_policy(unsigned sched_ctx_id)
 	struct _starpu_eager_center_policy_data *data = (struct _starpu_eager_center_policy_data*)starpu_sched_ctx_get_policy_data(sched_ctx_id);
 	int workerid = starpu_worker_get_id();
 	
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
 	
 	_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);

+ 8 - 8
src/sched_policies/eager_central_priority_policy.c

@@ -45,7 +45,7 @@ struct _starpu_priority_taskq
 struct _starpu_eager_central_prio_data
 {
 	struct _starpu_priority_taskq *taskq;
-	_starpu_pthread_mutex_t policy_mutex;
+	starpu_pthread_mutex_t policy_mutex;
 };
 
 /*
@@ -110,7 +110,7 @@ static int _starpu_priority_push_task(struct starpu_task *task)
 	struct _starpu_priority_taskq *taskq = data->taskq;
 
 	/* if the context has no workers return */
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
 	int ret_val = -1;
 	
@@ -144,8 +144,8 @@ static int _starpu_priority_push_task(struct starpu_task *task)
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
-		_starpu_pthread_mutex_t *sched_mutex;
-		_starpu_pthread_cond_t *sched_cond;
+		starpu_pthread_mutex_t *sched_mutex;
+		starpu_pthread_cond_t *sched_cond;
 		starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 		_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 		_STARPU_PTHREAD_COND_SIGNAL(sched_cond);
@@ -181,8 +181,8 @@ static struct starpu_task *_starpu_priority_pop_task(unsigned sched_ctx_id)
 	VALGRIND_HG_MUTEX_UNLOCK_POST(&data->policy_mutex);
 
 	/* release this mutex before trying to wake up other workers */
-	_starpu_pthread_mutex_t *curr_sched_mutex;
-	_starpu_pthread_cond_t *curr_sched_cond;
+	starpu_pthread_mutex_t *curr_sched_mutex;
+	starpu_pthread_cond_t *curr_sched_cond;
 	starpu_worker_get_sched_condition(workerid, &curr_sched_mutex, &curr_sched_cond);
 	_STARPU_PTHREAD_MUTEX_UNLOCK(curr_sched_mutex);
 	
@@ -234,8 +234,8 @@ static struct starpu_task *_starpu_priority_pop_task(unsigned sched_ctx_id)
 			worker = workers->get_next(workers, &it);
 			if(worker != workerid)
 			{
-				_starpu_pthread_mutex_t *sched_mutex;
-				_starpu_pthread_cond_t *sched_cond;
+				starpu_pthread_mutex_t *sched_mutex;
+				starpu_pthread_cond_t *sched_cond;
 				starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 				_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 				_STARPU_PTHREAD_COND_SIGNAL(sched_cond);

+ 7 - 7
src/sched_policies/parallel_eager.c

@@ -153,7 +153,7 @@ static void deinitialize_peager_policy(unsigned sched_ctx_id)
 static int push_task_peager_policy(struct starpu_task *task)
 {
 	unsigned sched_ctx_id = task->sched_ctx;
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
 	int ret_val = -1;
 	
@@ -181,8 +181,8 @@ static int push_task_peager_policy(struct starpu_task *task)
 		/* If this is not a CPU, then the worker simply grabs tasks from the fifo */
 		if (starpu_worker_get_type(worker) != STARPU_CPU_WORKER  || master == worker)
 		{
-			_starpu_pthread_mutex_t *sched_mutex;
-			_starpu_pthread_cond_t *sched_cond;
+			starpu_pthread_mutex_t *sched_mutex;
+			starpu_pthread_cond_t *sched_cond;
 			starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 			_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 		}
@@ -199,8 +199,8 @@ static int push_task_peager_policy(struct starpu_task *task)
 		/* If this is not a CPU, then the worker simply grabs tasks from the fifo */
 		if (starpu_worker_get_type(worker) != STARPU_CPU_WORKER  || master == worker)
 		{
-			_starpu_pthread_mutex_t *sched_mutex;
-			_starpu_pthread_cond_t *sched_cond;
+			starpu_pthread_mutex_t *sched_mutex;
+			starpu_pthread_cond_t *sched_cond;
 			starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 			_STARPU_PTHREAD_COND_SIGNAL(sched_cond);
 			_STARPU_PTHREAD_MUTEX_UNLOCK(sched_mutex);
@@ -289,8 +289,8 @@ static struct starpu_task *pop_task_peager_policy(unsigned sched_ctx_id)
 				struct starpu_task *alias = _starpu_create_task_alias(task);
 				int local_worker = combined_workerid[i];
 				
-				_starpu_pthread_mutex_t *sched_mutex;
-				_starpu_pthread_cond_t *sched_cond;
+				starpu_pthread_mutex_t *sched_mutex;
+				starpu_pthread_cond_t *sched_cond;
 				starpu_worker_get_sched_condition(local_worker, &sched_mutex, &sched_cond);
 
 				_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);

+ 14 - 14
src/sched_policies/parallel_heft.c

@@ -47,7 +47,7 @@ struct _starpu_pheft_data
 	double idle_power;
 /* When we push a task on a combined worker we need all the cpu workers it contains
  * to be locked at once */
-	_starpu_pthread_mutex_t global_push_mutex;
+	starpu_pthread_mutex_t global_push_mutex;
 };
 
 static double worker_exp_start[STARPU_NMAXWORKERS];
@@ -72,8 +72,8 @@ static void parallel_heft_pre_exec_hook(struct starpu_task *task)
 	if (isnan(model))
 		model = 0.0;
 
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
 	/* Once we have executed the task, we can update the predicted amount
 	 * of work. */
@@ -106,8 +106,8 @@ static int push_task_on_best_worker(struct starpu_task *task, int best_workerid,
 		task->predicted = exp_end_predicted - worker_exp_end[best_workerid];
 		/* TODO */
 		task->predicted_transfer = 0;
-		_starpu_pthread_mutex_t *sched_mutex;
-		_starpu_pthread_cond_t *sched_cond;
+		starpu_pthread_mutex_t *sched_mutex;
+		starpu_pthread_cond_t *sched_cond;
 		starpu_worker_get_sched_condition(best_workerid, &sched_mutex, &sched_cond);
 
 		_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
@@ -160,8 +160,8 @@ static int push_task_on_best_worker(struct starpu_task *task, int best_workerid,
 			alias->predicted = exp_end_predicted - worker_exp_end[local_worker];
 			/* TODO */
 			alias->predicted_transfer = 0;
-			_starpu_pthread_mutex_t *sched_mutex;
-			_starpu_pthread_cond_t *sched_cond;
+			starpu_pthread_mutex_t *sched_mutex;
+			starpu_pthread_cond_t *sched_cond;
 			starpu_worker_get_sched_condition(local_worker, &sched_mutex, &sched_cond);
 			_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 			worker_exp_len[local_worker] += alias->predicted;
@@ -185,8 +185,8 @@ static int push_task_on_best_worker(struct starpu_task *task, int best_workerid,
 
 static double compute_expected_end(int workerid, double length)
 {
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 
 	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
 
@@ -234,8 +234,8 @@ static double compute_expected_end(int workerid, double length)
 static double compute_ntasks_end(int workerid)
 {
 	enum starpu_perf_archtype perf_arch = starpu_worker_get_perf_archtype(workerid);
-	_starpu_pthread_mutex_t *sched_mutex;
-	_starpu_pthread_cond_t *sched_cond;
+	starpu_pthread_mutex_t *sched_mutex;
+	starpu_pthread_cond_t *sched_cond;
 
 	starpu_worker_get_sched_condition(workerid, &sched_mutex, &sched_cond);
 
@@ -321,8 +321,8 @@ static int _parallel_heft_push_task(struct starpu_task *task, unsigned prio, uns
 
 		if(!starpu_worker_is_combined_worker(worker))
 		{
-			_starpu_pthread_mutex_t *sched_mutex;
-			_starpu_pthread_cond_t *sched_cond;
+			starpu_pthread_mutex_t *sched_mutex;
+			starpu_pthread_cond_t *sched_cond;
 			starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 			/* Sometimes workers didn't take the tasks as early as we expected */
 			_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
@@ -489,7 +489,7 @@ static int _parallel_heft_push_task(struct starpu_task *task, unsigned prio, uns
 static int parallel_heft_push_task(struct starpu_task *task)
 {
 	unsigned sched_ctx_id = task->sched_ctx;
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
 	int ret_val = -1;
 

+ 2 - 2
src/sched_policies/random_policy.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2012  Université de Bordeaux 1
- * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -84,7 +84,7 @@ static int _random_push_task(struct starpu_task *task, unsigned prio)
 static int random_push_task(struct starpu_task *task)
 {
 	unsigned sched_ctx_id = task->sched_ctx;
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
 	unsigned nworkers;
         int ret_val = -1;
 

+ 3 - 3
src/sched_policies/stack_queues.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2012  Université de Bordeaux 1
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -57,7 +57,7 @@ unsigned _starpu_get_stack_nprocessed(struct _starpu_stack_jobq *stack_queue)
 	return stack_queue->nprocessed;
 }
 
-void _starpu_stack_push_task(struct _starpu_stack_jobq *stack_queue, _starpu_pthread_mutex_t *sched_mutex, _starpu_pthread_cond_t *sched_cond, struct _starpu_job *task)
+void _starpu_stack_push_task(struct _starpu_stack_jobq *stack_queue, starpu_pthread_mutex_t *sched_mutex, starpu_pthread_cond_t *sched_cond, struct _starpu_job *task)
 {
 	_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 	total_number_of_jobs++;
@@ -73,7 +73,7 @@ void _starpu_stack_push_task(struct _starpu_stack_jobq *stack_queue, _starpu_pth
 	_STARPU_PTHREAD_MUTEX_UNLOCK(sched_mutex);
 }
 
-struct _starpu_job *_starpu_stack_pop_task(struct _starpu_stack_jobq *stack_queue, _starpu_pthread_mutex_t *sched_mutex, int workerid __attribute__ ((unused)))
+struct _starpu_job *_starpu_stack_pop_task(struct _starpu_stack_jobq *stack_queue, starpu_pthread_mutex_t *sched_mutex, int workerid __attribute__ ((unused)))
 {
 	struct _starpu_job *j = NULL;
 

+ 2 - 2
src/sched_policies/stack_queues.h

@@ -42,9 +42,9 @@ struct _starpu_stack_jobq
 
 struct _starpu_stack_jobq *_starpu_create_stack(void);
 
-void _starpu_stack_push_task(struct _starpu_stack_jobq *stack, _starpu_pthread_mutex_t *sched_mutex, _starpu_pthread_cond_t *sched_cond, struct _starpu_job *task);
+void _starpu_stack_push_task(struct _starpu_stack_jobq *stack, starpu_pthread_mutex_t *sched_mutex, starpu_pthread_cond_t *sched_cond, struct _starpu_job *task);
 
-struct _starpu_job *_starpu_stack_pop_task(struct _starpu_stack_jobq *stack, _starpu_pthread_mutex_t *sched_mutex, int workerid);
+struct _starpu_job *_starpu_stack_pop_task(struct _starpu_stack_jobq *stack, starpu_pthread_mutex_t *sched_mutex, int workerid);
 
 void _starpu_init_stack_queues_mechanisms(void);
 

+ 11 - 11
src/sched_policies/work_stealing_policy.c

@@ -59,8 +59,8 @@ static unsigned select_victim_round_robin(unsigned sched_ctx_id)
 	unsigned worker = ws->last_pop_worker;
 	unsigned nworkers = starpu_sched_ctx_get_nworkers(sched_ctx_id);
 
-	_starpu_pthread_mutex_t *victim_sched_mutex;
-	_starpu_pthread_cond_t *victim_sched_cond;
+	starpu_pthread_mutex_t *victim_sched_mutex;
+	starpu_pthread_cond_t *victim_sched_cond;
 
 	/* If the worker's queue is empty, let's try
 	 * the next ones */
@@ -280,8 +280,8 @@ static struct starpu_task *ws_pop_task(unsigned sched_ctx_id)
 		q->njobs--;
 		return task;
 	}
-	_starpu_pthread_mutex_t *worker_sched_mutex;
-	_starpu_pthread_cond_t *worker_sched_cond;
+	starpu_pthread_mutex_t *worker_sched_mutex;
+	starpu_pthread_cond_t *worker_sched_cond;
 	starpu_worker_get_sched_condition(workerid, &worker_sched_mutex, &worker_sched_cond);
 	_STARPU_PTHREAD_MUTEX_UNLOCK(worker_sched_mutex);
        
@@ -289,8 +289,8 @@ static struct starpu_task *ws_pop_task(unsigned sched_ctx_id)
 	/* we need to steal someone's job */
 	unsigned victim = select_victim(sched_ctx_id);
 
-	_starpu_pthread_mutex_t *victim_sched_mutex;
-	_starpu_pthread_cond_t *victim_sched_cond;
+	starpu_pthread_mutex_t *victim_sched_mutex;
+	starpu_pthread_cond_t *victim_sched_cond;
 
 	starpu_worker_get_sched_condition(victim, &victim_sched_mutex, &victim_sched_cond);
 	_STARPU_PTHREAD_MUTEX_LOCK(victim_sched_mutex);
@@ -336,7 +336,7 @@ int ws_push_task(struct starpu_task *task)
 	struct _starpu_job *j = _starpu_get_job_associated_to_task(task);
 	int workerid = starpu_worker_get_id();
 
-	_starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
+	starpu_pthread_mutex_t *changing_ctx_mutex = starpu_sched_ctx_get_changing_ctx_mutex(sched_ctx_id);
         unsigned nworkers;
         int ret_val = -1;
 
@@ -358,8 +358,8 @@ int ws_push_task(struct starpu_task *task)
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
-		_starpu_pthread_mutex_t *sched_mutex;
-		_starpu_pthread_cond_t *sched_cond;
+		starpu_pthread_mutex_t *sched_mutex;
+		starpu_pthread_cond_t *sched_cond;
 		starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 		_STARPU_PTHREAD_MUTEX_LOCK(sched_mutex);
 	}
@@ -387,8 +387,8 @@ int ws_push_task(struct starpu_task *task)
 	while(workers->has_next(workers, &it))
 	{
 		worker = workers->get_next(workers, &it);
-		_starpu_pthread_mutex_t *sched_mutex;
-		_starpu_pthread_cond_t *sched_cond;
+		starpu_pthread_mutex_t *sched_mutex;
+		starpu_pthread_cond_t *sched_cond;
 		starpu_worker_get_sched_condition(worker, &sched_mutex, &sched_cond);
 		_STARPU_PTHREAD_COND_SIGNAL(sched_cond);
 		_STARPU_PTHREAD_MUTEX_UNLOCK(sched_mutex);

+ 3 - 4
src/top/starpu_top.c

@@ -24,9 +24,8 @@
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
-#include <pthread.h>
 #include <common/timing.h>
-#include <common/utils.h>
+#include <common/thread.h>
 #include <common/config.h>
 
 extern struct _starpu_top_message_queue*  _starpu_top_mt;
@@ -40,8 +39,8 @@ struct starpu_top_data** starpu_top_datas;
 struct starpu_top_param** starpu_top_params;
 
 sem_t starpu_top_wait_for_go;
-_starpu_pthread_mutex_t starpu_top_wait_for_continue_mutex;
-_starpu_pthread_cond_t starpu_top_wait_for_continue_cond = _STARPU_PTHREAD_COND_INITIALIZER;
+starpu_pthread_mutex_t starpu_top_wait_for_continue_mutex;
+starpu_pthread_cond_t starpu_top_wait_for_continue_cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 #undef _starpu_top_status_get
 int _starpu_top_status_get(void)

+ 5 - 5
src/top/starpu_top_connection.c

@@ -100,9 +100,9 @@ void * message_to_ui(void * p)
 
 void _starpu_top_communications_threads_launcher(void)
 {
-	pthread_t from_ui;
-	pthread_t to_ui;
-	pthread_attr_t threads_attr;
+	starpu_pthread_t from_ui;
+	starpu_pthread_t to_ui;
+	starpu_pthread_attr_t threads_attr;
 
 
 	//Connection to UI & Socket Initilization
@@ -159,8 +159,8 @@ void _starpu_top_communications_threads_launcher(void)
 
 	//Threads creation
 	fprintf(stderr,"Threads Creation\n");
-	pthread_attr_init(&threads_attr);
-	pthread_attr_setdetachstate(&threads_attr, PTHREAD_CREATE_DETACHED);
+	starpu_pthread_attr_init(&threads_attr);
+	starpu_pthread_attr_setdetachstate(&threads_attr, PTHREAD_CREATE_DETACHED);
 
 	_STARPU_PTHREAD_CREATE("StarPU-Top from", &from_ui, &threads_attr, message_from_ui, NULL);
 	_STARPU_PTHREAD_CREATE("StarPU-Top to", &to_ui, &threads_attr, message_to_ui, NULL);

+ 1 - 2
src/top/starpu_top_message_queue.h

@@ -17,7 +17,6 @@
 
 #include <sys/types.h>
 #include <semaphore.h>
-#include <pthread.h>
 #include <common/thread.h>
 
 #ifndef __STARPU_TOP_MESSAGE_QUEUE_H__
@@ -34,7 +33,7 @@ struct _starpu_top_message_queue
 	struct _starpu_top_message_queue_item* head;
 	struct _starpu_top_message_queue_item* tail;
 	sem_t semaphore;
-	_starpu_pthread_mutex_t mutex;
+	starpu_pthread_mutex_t mutex;
 };
 
 

+ 2 - 3
tests/datawizard/dsm_stress.c

@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <starpu.h>
 #include <stdlib.h>
-#include <pthread.h>
 #include "../helper.h"
 #include <common/thread.h>
 
@@ -32,8 +31,8 @@
 
 #define VECTORSIZE	1024
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 static unsigned finished = 0;
 

+ 8 - 8
tests/datawizard/mpi_like.c

@@ -18,25 +18,25 @@
 #include <config.h>
 #include <starpu.h>
 #include <errno.h>
-#include <pthread.h>
 #include "../helper.h"
+#warning enlever la ligne ci dessous, aussi dans les autres fichiers en dehors de src
 #include <common/thread.h>
 
 #define NTHREADS	4
 #define NITER		2
 
-//static pthread_cond_t cond;
-//static pthread_mutex_t mutex;
+//static starpu_pthread_cond_t cond;
+//static starpu_pthread_mutex_t mutex;
 
 struct thread_data
 {
 	unsigned index;
 	unsigned val;
 	starpu_data_handle_t handle;
-	pthread_t thread;
+	starpu_pthread_t thread;
 
-	_starpu_pthread_cond_t recv_cond;
-	_starpu_pthread_mutex_t recv_mutex;
+	starpu_pthread_cond_t recv_cond;
+	starpu_pthread_mutex_t recv_mutex;
 	unsigned recv_flag; // set when a message is received
 	unsigned recv_buf;
 	struct thread_data *neighbour;
@@ -199,14 +199,14 @@ int main(int argc, char **argv)
 
 	for (t = 0; t < NTHREADS; t++)
 	{
-		ret = pthread_create(&problem_data[t].thread, NULL, thread_func, &problem_data[t]);
+		ret = starpu_pthread_create(&problem_data[t].thread, NULL, thread_func, &problem_data[t]);
 		STARPU_ASSERT(!ret);
 	}
 
 	for (t = 0; t < NTHREADS; t++)
 	{
 		void *retval;
-		ret = pthread_join(problem_data[t].thread, &retval);
+		ret = starpu_pthread_join(problem_data[t].thread, &retval);
 		STARPU_ASSERT(!ret);
 		STARPU_ASSERT(retval == NULL);
 	}

+ 11 - 12
tests/datawizard/mpi_like_async.c

@@ -17,7 +17,6 @@
 
 #include <config.h>
 #include <starpu.h>
-#include <pthread.h>
 #include "../helper.h"
 #include <common/thread.h>
 
@@ -34,17 +33,17 @@ static unsigned niter = NITER_DEFAULT;
 
 //#define DEBUG_MESSAGES	1
 
-//static pthread_cond_t cond;
-//static pthread_mutex_t mutex;
+//static starpu_pthread_cond_t cond;
+//static starpu_pthread_mutex_t mutex;
 
 struct thread_data
 {
 	unsigned index;
 	unsigned val;
 	starpu_data_handle_t handle;
-	pthread_t thread;
+	starpu_pthread_t thread;
 
-	_starpu_pthread_mutex_t recv_mutex;
+	starpu_pthread_mutex_t recv_mutex;
 	unsigned recv_flag; // set when a message is received
 	unsigned recv_buf;
 	struct thread_data *neighbour;
@@ -57,8 +56,8 @@ struct data_req
 	struct data_req *next;
 };
 
-static _starpu_pthread_mutex_t data_req_mutex;
-static _starpu_pthread_cond_t data_req_cond;
+static starpu_pthread_mutex_t data_req_mutex;
+static starpu_pthread_cond_t data_req_cond;
 struct data_req *data_req_list;
 unsigned progress_thread_running;
 
@@ -331,7 +330,7 @@ int main(int argc, char **argv)
 #endif
 
 	/* Create a thread to perform blocking calls */
-	pthread_t progress_thread;
+	starpu_pthread_t progress_thread;
 	_STARPU_PTHREAD_MUTEX_INIT(&data_req_mutex, NULL);
 	_STARPU_PTHREAD_COND_INIT(&data_req_cond, NULL);
 	data_req_list = NULL;
@@ -347,7 +346,7 @@ int main(int argc, char **argv)
 		problem_data[t].neighbour = &problem_data[(t+1)%nthreads];
 	}
 
-	pthread_create(&progress_thread, NULL, progress_func, NULL);
+	starpu_pthread_create(&progress_thread, NULL, progress_func, NULL);
 
 	_STARPU_PTHREAD_MUTEX_LOCK(&data_req_mutex);
 	while (!progress_thread_running)
@@ -356,13 +355,13 @@ int main(int argc, char **argv)
 
 	for (t = 0; t < nthreads; t++)
 	{
-		ret = pthread_create(&problem_data[t].thread, NULL, thread_func, &problem_data[t]);
+		ret = starpu_pthread_create(&problem_data[t].thread, NULL, thread_func, &problem_data[t]);
 		STARPU_ASSERT(!ret);
 	}
 
 	for (t = 0; t < nthreads; t++)
 	{
-		ret = pthread_join(problem_data[t].thread, &retval);
+		ret = starpu_pthread_join(problem_data[t].thread, &retval);
 		STARPU_ASSERT(!ret);
 		STARPU_ASSERT(retval == NULL);
 	}
@@ -372,7 +371,7 @@ int main(int argc, char **argv)
 	_STARPU_PTHREAD_COND_SIGNAL(&data_req_cond);
 	_STARPU_PTHREAD_MUTEX_UNLOCK(&data_req_mutex);
 
-	ret = pthread_join(progress_thread, &retval);
+	ret = starpu_pthread_join(progress_thread, &retval);
 	STARPU_ASSERT(!ret);
 	STARPU_ASSERT(retval == NULL);
 

+ 2 - 3
tests/datawizard/sync_with_data_with_mem_non_blocking.c

@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <starpu.h>
 #include <stdlib.h>
-#include <pthread.h>
 #include "../helper.h"
 #include <common/thread.h>
 
@@ -66,8 +65,8 @@ int use_handle(starpu_data_handle_t handle)
 	return ret;
 }
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 static unsigned n_synced_buffers;
 
 void callback_sync_data(void *arg __attribute__ ((unused)))

+ 2 - 3
tests/datawizard/sync_with_data_with_mem_non_blocking_implicit.c

@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <starpu.h>
 #include <stdlib.h>
-#include <pthread.h>
 #include "../helper.h"
 #include <common/thread.h>
 
@@ -66,8 +65,8 @@ int use_handle(starpu_data_handle_t handle)
 	return ret;
 }
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 static unsigned n_synced_buffers;
 
 void callback_sync_data(void *arg __attribute__ ((unused)))

+ 8 - 9
tests/experiments/latency/cuda_latency.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
- * Copyright (C) 2010, 2011  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -14,7 +14,6 @@
  * See the GNU Lesser General Public License in COPYING.LGPL for more details.
  */
 
-#include <pthread.h>
 #include <stdio.h>
 #include <cuda.h>
 #include <cuda_runtime.h>
@@ -22,24 +21,24 @@
 #include <sys/types.h>
 #include <sys/time.h>
 
-static pthread_t thread[2];
+static starpu_pthread_t thread[2];
 static unsigned thread_is_initialized[2];
 
-static _starpu_pthread_cond_t cond;
-static _starpu_pthread_mutex_t mutex;
+static starpu_pthread_cond_t cond;
+static starpu_pthread_mutex_t mutex;
 
 static size_t buffer_size = 4;
 static void *cpu_buffer;
 static void *gpu_buffer[2];
 
-static pthread_cond_t cond_go;
+static starpu_pthread_cond_t cond_go;
 static unsigned ready = 0;
 static unsigned nready_gpu = 0;
 
 static unsigned niter = 250000;
 
-static _starpu_pthread_cond_t cond_gpu;
-static _starpu_pthread_mutex_t mutex_gpu;
+static starpu_pthread_cond_t cond_gpu;
+static starpu_pthread_mutex_t mutex_gpu;
 static unsigned data_is_available[2];
 
 static cudaStream_t stream[2];
@@ -172,7 +171,7 @@ int main(int argc, char **argv)
 	for (id = 0; id < 2; id++)
 	{
 		thread_is_initialized[id] = 0;
-		pthread_create(&thread[0], NULL, launch_gpu_thread, &id);
+		starpu_pthread_create(&thread[0], NULL, launch_gpu_thread, &id);
 
 		_STARPU_PTHREAD_MUTEX_LOCK(&mutex);
 		while (!thread_is_initialized[id])

+ 9 - 10
tests/main/driver_api/run_driver.c

@@ -15,7 +15,6 @@
  */
 
 #include <starpu.h>
-#include <pthread.h>
 
 #include "../../helper.h"
 
@@ -63,7 +62,7 @@ static int
 test_cpu(void)
 {
 	int ret, var = 0;
-	static pthread_t driver_thread;
+	static starpu_pthread_t driver_thread;
 	struct starpu_conf conf;
 	struct starpu_driver d =
 	{
@@ -82,7 +81,7 @@ test_cpu(void)
 		return STARPU_TEST_SKIPPED;
 	}
 
-	ret = pthread_create(&driver_thread, NULL, run_driver, &d);
+	ret = starpu_pthread_create(&driver_thread, NULL, run_driver, &d);
 	if (ret != 0)
 	{
 		ret = 1;
@@ -108,7 +107,7 @@ test_cpu(void)
 
 out:
 	starpu_drivers_request_termination();
-	if (pthread_join(driver_thread, NULL) != 0)
+	if (starpu_pthread_join(driver_thread, NULL) != 0)
 		return 1;
 	starpu_shutdown();
 	return ret;
@@ -120,7 +119,7 @@ static int
 test_cuda(void)
 {
 	int ret, var = 0;
-	static pthread_t driver_thread;
+	static starpu_pthread_t driver_thread;
 	struct starpu_conf conf;
 	struct starpu_driver d =
 	{
@@ -139,7 +138,7 @@ test_cuda(void)
 		return STARPU_TEST_SKIPPED;
 	}
 
-	ret = pthread_create(&driver_thread, NULL, run_driver, &d);
+	ret = starpu_pthread_create(&driver_thread, NULL, run_driver, &d);
 	if (ret == -1)
 	{
 		ret = 1;
@@ -165,7 +164,7 @@ test_cuda(void)
 
 out:
 	starpu_drivers_request_termination();
-	if (pthread_join(driver_thread, NULL) != 0)
+	if (starpu_pthread_join(driver_thread, NULL) != 0)
 		return 1;
 	starpu_shutdown();
 	return ret;
@@ -177,7 +176,7 @@ static int
 test_opencl(void)
 {
 	int ret, var = 0;
-	static pthread_t driver_thread;
+	static starpu_pthread_t driver_thread;
 	struct starpu_conf conf;
 
 	cl_int err;
@@ -222,7 +221,7 @@ test_opencl(void)
 		return STARPU_TEST_SKIPPED;
 	}
 
-	ret = pthread_create(&driver_thread, NULL, run_driver, &d);
+	ret = starpu_pthread_create(&driver_thread, NULL, run_driver, &d);
 	if (ret == -1)
 	{
 		ret = 1;
@@ -248,7 +247,7 @@ test_opencl(void)
 
 out:
 	starpu_drivers_request_termination();
-	if (pthread_join(driver_thread, NULL) != 0)
+	if (starpu_pthread_join(driver_thread, NULL) != 0)
 		return 1;
 	starpu_shutdown();
 	return ret;

+ 2 - 3
tests/main/execute_on_a_specific_worker.c

@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <starpu.h>
 #include <stdlib.h>
-#include <pthread.h>
 #include "../helper.h"
 #include <common/thread.h>
 
@@ -32,8 +31,8 @@
 
 #define VECTORSIZE	1024
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 static unsigned finished = 0;
 

+ 3 - 5
tests/main/multithreaded.c

@@ -17,15 +17,13 @@
  */
 
 #include <sys/time.h>
-#include <pthread.h>
 #include <stdio.h>
 #include <unistd.h>
-#include <pthread.h>
 
 #include <starpu.h>
 #include "../helper.h"
 
-pthread_t threads[16];
+starpu_pthread_t threads[16];
 
 #ifdef STARPU_QUICK_CHECK
 static unsigned ntasks = 64;
@@ -116,13 +114,13 @@ int main(int argc, char **argv)
 	unsigned t;
 	for (t = 0; t < nthreads; t++)
 	{
-		ret = pthread_create(&threads[t], NULL, thread_func, NULL);
+		ret = starpu_pthread_create(&threads[t], NULL, thread_func, NULL);
 		STARPU_ASSERT(ret == 0);
 	}
 
 	for (t = 0; t < nthreads; t++)
 	{
-		ret = pthread_join(threads[t], NULL);
+		ret = starpu_pthread_join(threads[t], NULL);
 		STARPU_ASSERT(ret == 0);
 	}
 

+ 5 - 6
tests/main/multithreaded_init.c

@@ -16,7 +16,6 @@
  */
 #include <sys/time.h>
 #include <stdio.h>
-#include <pthread.h>
 #include <starpu.h>
 #include "../helper.h"
 
@@ -47,19 +46,19 @@ int main(int argc, char **argv)
 	struct timeval start;
 	struct timeval end;
 
-	pthread_t threads[NUM_THREADS];
+	starpu_pthread_t threads[NUM_THREADS];
 
 	gettimeofday(&start, NULL);
 
 	for (i = 0; i < NUM_THREADS; ++i)
 	{
-		int ret = pthread_create(&threads[i], NULL, launch_starpu, NULL);
+		int ret = starpu_pthread_create(&threads[i], NULL, launch_starpu, NULL);
 		STARPU_ASSERT(ret == 0);
 	}
 
 	for (i = 0; i < NUM_THREADS; ++i)
 	{
-		int ret = pthread_join(threads[i], NULL);
+		int ret = starpu_pthread_join(threads[i], NULL);
 		STARPU_ASSERT(ret == 0);
 	}
 
@@ -73,13 +72,13 @@ int main(int argc, char **argv)
 
 	for (i = 0; i < NUM_THREADS; i++)
 	{
-		int ret = pthread_create(&threads[i], NULL, shutdown_starpu, NULL);
+		int ret = starpu_pthread_create(&threads[i], NULL, shutdown_starpu, NULL);
 		STARPU_ASSERT(ret == 0);
 	}
 
 	for (i = 0; i < NUM_THREADS; i++)
 	{
-		int ret = pthread_join(threads[i], NULL);
+		int ret = starpu_pthread_join(threads[i], NULL);
 		STARPU_ASSERT(ret == 0);
 	}
 

+ 2 - 3
tests/main/regenerate.c

@@ -18,7 +18,6 @@
 #include <sys/time.h>
 #include <stdio.h>
 #include <unistd.h>
-#include <pthread.h>
 #include <starpu.h>
 #include "../helper.h"
 #include <common/thread.h>
@@ -31,8 +30,8 @@ static unsigned ntasks = 65536;
 static unsigned cnt = 0;
 
 static unsigned completed = 0;
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 static void callback(void *arg __attribute__ ((unused)))
 {

+ 2 - 3
tests/main/subgraph_repeat.c

@@ -17,7 +17,6 @@
 
 #include <sys/time.h>
 #include <starpu.h>
-#include <pthread.h>
 #include <common/thread.h>
 
 #include "../helper.h"
@@ -47,8 +46,8 @@ static struct starpu_task taskA, taskB, taskC, taskD;
 
 static unsigned loop_cnt = 0;
 static unsigned check_cnt = 0;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
 static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
 {

+ 2 - 3
tests/main/subgraph_repeat_regenerate.c

@@ -17,7 +17,6 @@
 
 #include <sys/time.h>
 #include <starpu.h>
-#include <pthread.h>
 #include <common/thread.h>
 
 #include "../helper.h"
@@ -47,8 +46,8 @@ static struct starpu_task taskA, taskB, taskC, taskD;
 
 static unsigned loop_cnt = 0;
 static unsigned check_cnt = 0;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
 static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
 {

+ 2 - 3
tests/main/subgraph_repeat_regenerate_tag.c

@@ -17,7 +17,6 @@
 
 #include <sys/time.h>
 #include <starpu.h>
-#include <pthread.h>
 #include <common/thread.h>
 
 #include "../helper.h"
@@ -53,8 +52,8 @@ static struct starpu_task taskA, taskB, taskC, taskD;
 
 static unsigned loop_cnt = 0;
 static unsigned check_cnt = 0;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
 static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
 {

+ 3 - 4
tests/main/subgraph_repeat_tag.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2010-2012  Université de Bordeaux 1
- * Copyright (C) 2010, 2011, 2012  Centre National de la Recherche Scientifique
+ * Copyright (C) 2010, 2011, 2012, 2013  Centre National de la Recherche Scientifique
  *
  * StarPU is free software; you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
@@ -17,7 +17,6 @@
 
 #include <sys/time.h>
 #include <starpu.h>
-#include <pthread.h>
 
 #include "../helper.h"
 
@@ -46,8 +45,8 @@ static struct starpu_task taskA, taskB, taskC, taskD;
 
 static unsigned loop_cnt = 0;
 static unsigned check_cnt = 0;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
 
 static void dummy_func(void *descr[] __attribute__ ((unused)), void *arg __attribute__ ((unused)))
 {

+ 2 - 3
tests/overlap/overlap.c

@@ -22,7 +22,6 @@
 #include <errno.h>
 #include <starpu.h>
 #include <stdlib.h>
-#include <pthread.h>
 #include "../helper.h"
 #include <common/thread.h>
 
@@ -36,8 +35,8 @@
 
 #define SYMBOL	"sleep"
 
-static _starpu_pthread_mutex_t mutex = _STARPU_PTHREAD_MUTEX_INITIALIZER;
-static _starpu_pthread_cond_t cond = _STARPU_PTHREAD_COND_INITIALIZER;
+static starpu_pthread_mutex_t mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+static starpu_pthread_cond_t cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 static unsigned finished = 0;
 static unsigned cnt = NTASKS;