Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Reimplement parmap using futex based barriers.
[simgrid.git] / src / xbt / parmap_private.h
index 283b025..02da424 100644 (file)
 #include "xbt/dynar.h"
 #include "xbt/log.h"
 
 #include "xbt/dynar.h"
 #include "xbt/log.h"
 
+
 typedef enum{
 typedef enum{
-  PARMAP_WAIT = 0,
-  PARMAP_WORK,
-  PARMAP_DESTROY,
+  PARMAP_WORK = 0,
+  PARMAP_DESTROY
 } e_xbt_parmap_flag_t;
 
 } e_xbt_parmap_flag_t;
 
+typedef struct s_xbt_barrier{
+  int futex;
+  unsigned int thread_count;
+  unsigned int threads_to_wait;
+} s_xbt_barrier_t, *xbt_barrier_t;
+
+/* Wait for at least num_threads threads to arrive to the barrier */
+void xbt_barrier_init(xbt_barrier_t barrier, unsigned int threads_to_wait);
+void xbt_barrier_wait(xbt_barrier_t barrier);
+
+
 typedef struct s_xbt_parmap {
 typedef struct s_xbt_parmap {
-  xbt_os_mutex_t mutex;           /* pool's mutex */
-  xbt_os_cond_t job_posted;       /* job is posted */
-  xbt_os_cond_t all_done;         /* job is done */
-  e_xbt_parmap_flag_t *flags;     /* Per thread flag + lastone for the parmap */
+  e_xbt_parmap_flag_t status;
+  xbt_barrier_t workers_ready;
+  xbt_barrier_t workers_done;
   unsigned int num_workers;
   unsigned int num_workers;
-  unsigned int num_idle_workers;
   unsigned int workers_max_id;
   void_f_pvoid_t fun;
   xbt_dynar_t data;
 } s_xbt_parmap_t;
 
   unsigned int workers_max_id;
   void_f_pvoid_t fun;
   xbt_dynar_t data;
 } s_xbt_parmap_t;
 
+
 #endif
 #endif