Selaa lähdekoodia

Use S4U semaphores when available

Samuel Thibault 5 vuotta sitten
vanhempi
commit
f89665fb72
3 muutettua tiedostoa jossa 32 lisäystä ja 0 poistoa
  1. 1 0
      include/starpu_config.h.in
  2. 7 0
      include/starpu_thread.h
  3. 24 0
      src/common/thread.c

+ 1 - 0
include/starpu_config.h.in

@@ -44,6 +44,7 @@
 #undef STARPU_SIMGRID_HAVE_XBT_BARRIER_INIT
 #undef STARPU_HAVE_SIMGRID_MSG_H
 #undef STARPU_HAVE_SIMGRID_ACTOR_H
+#undef STARPU_HAVE_SIMGRID_SEMAPHORE_H
 #undef STARPU_HAVE_XBT_SYNCHRO_H
 #undef STARPU_HAVE_VALGRIND_H
 #undef STARPU_HAVE_MEMCHECK_H

+ 7 - 0
include/starpu_thread.h

@@ -33,6 +33,9 @@
 #ifdef STARPU_HAVE_SIMGRID_ACTOR_H
 #include <simgrid/actor.h>
 #endif
+#ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
+#include <simgrid/semaphore.h>
+#endif
 #ifdef STARPU_HAVE_SIMGRID_MSG_H
 #include <simgrid/msg.h>
 #else
@@ -422,7 +425,11 @@ int starpu_pthread_wait_destroy(starpu_pthread_wait_t *w);
 
 #ifdef STARPU_SIMGRID
 
+#ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
+typedef sg_sem_t starpu_sem_t;
+#else
 typedef msg_sem_t starpu_sem_t;
+#endif
 int starpu_sem_destroy(starpu_sem_t *);
 int starpu_sem_getvalue(starpu_sem_t *, int *);
 int starpu_sem_init(starpu_sem_t *, int, unsigned);

+ 24 - 0
src/common/thread.c

@@ -929,32 +929,52 @@ void _starpu_pthread_spin_do_unlock(starpu_pthread_spinlock_t *lock)
 
 int starpu_sem_destroy(starpu_sem_t *sem)
 {
+#ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
+	sg_sem_destroy(*sem);
+#else
 	MSG_sem_destroy(*sem);
+#endif
 	return 0;
 }
 
 int starpu_sem_init(starpu_sem_t *sem, int pshared, unsigned value)
 {
 	STARPU_ASSERT_MSG(pshared == 0, "pshared semaphores not supported under simgrid");
+#ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
+	*sem = sg_sem_init(value);
+#else
 	*sem = MSG_sem_init(value);
+#endif
 	return 0;
 }
 
 int starpu_sem_post(starpu_sem_t *sem)
 {
+#ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
+	sg_sem_release(*sem);
+#else
 	MSG_sem_release(*sem);
+#endif
 	return 0;
 }
 
 int starpu_sem_wait(starpu_sem_t *sem)
 {
+#ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
+	sg_sem_acquire(*sem);
+#else
 	MSG_sem_acquire(*sem);
+#endif
 	return 0;
 }
 
 int starpu_sem_trywait(starpu_sem_t *sem)
 {
+#ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
+	if (sg_sem_would_block(*sem))
+#else
 	if (MSG_sem_would_block(*sem))
+#endif
 		return EAGAIN;
 	starpu_sem_wait(sem);
 	return 0;
@@ -963,7 +983,11 @@ int starpu_sem_trywait(starpu_sem_t *sem)
 int starpu_sem_getvalue(starpu_sem_t *sem, int *sval)
 {
 #if SIMGRID_VERSION > 31300
+#  ifdef STARPU_HAVE_SIMGRID_SEMAPHORE_H
 	*sval = MSG_sem_get_capacity(*sem);
+#  else
+	*sval = sg_sem_get_capacity(*sem);
+#  endif
 	return 0;
 #else
 	(void) sem;