teshsuite/simdag/platforms/is_router_test
teshsuite/simix/check_defaults/check_defaults
teshsuite/simix/stack_overflow/stack_overflow
-teshsuite/smpi/allgather/allgather_coll
-teshsuite/smpi/allgather_coll
+teshsuite/smpi/coll-allgather/coll-allgather
teshsuite/smpi/allgatherv/allgatherv_coll
teshsuite/smpi/allgatherv_coll
teshsuite/smpi/allreduce/allreduce
teshsuite/smpi/alltoallv_coll
teshsuite/smpi/barrier/barrier_coll
teshsuite/smpi/barrier_coll
-teshsuite/smpi/bcast/bcast
-teshsuite/smpi/bcast/bcast_coll
-teshsuite/smpi/bcast_coll
-teshsuite/smpi/compute2
-teshsuite/smpi/compute3
+teshsuite/smpi/coll-bcast/coll-bcast
teshsuite/smpi/compute/compute
teshsuite/smpi/compute/compute2
teshsuite/smpi/compute/compute3
teshsuite/smpi/gather_coll
teshsuite/smpi/gather/gather_coll
teshsuite/smpi/type-hvector/type-hvector
-teshsuite/smpi/indexed/indexed_test
-teshsuite/smpi/indexed_test
+teshsuite/smpi/type-indexed/type-indexed
teshsuite/smpi/isp/umpire/abort
teshsuite/smpi/isp/umpire/abort1
teshsuite/smpi/isp/umpire/abort2
CHECK_LIBRARY_EXISTS(execinfo backtrace "" HAVE_BACKTRACE_IN_LIBEXECINFO)
CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
-if(NOT WIN32) # We don't want to have winpthread-1.dll in the jarfile
- CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
- CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB)
- CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB)
- CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB)
- CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB)
-endif()
+CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_PTHREAD)
+CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB)
+CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB)
+CHECK_LIBRARY_EXISTS(pthread sem_timedwait "" HAVE_SEM_TIMEDWAIT_LIB)
+CHECK_LIBRARY_EXISTS(pthread pthread_mutex_timedlock "" HAVE_MUTEX_TIMEDLOCK_LIB)
+
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
#ifdef _XBT_WIN32 /* defined if this is a windows system, 32bits or 64bits) */
#include <windows.h>
-typedef DWORD xbt_os_thread_key_t;
-#else /* assume that every non-windows system is POSIX-compatible */
+#endif
#include <pthread.h>
typedef pthread_key_t xbt_os_thread_key_t;
-#endif
-
/** Calls pthread_atfork() if present, and raise an exception otherwise.
*
* The only known user of this wrapper is mmalloc_preinit(), but it is absolutely mandatory there:
bool BoostContext::parallel_ = false;
xbt_parmap_t BoostContext::parmap_ = nullptr;
-unsigned long BoostContext::threads_working_ = 0;
+uintptr_t BoostContext::threads_working_ = 0;
xbt_os_thread_key_t BoostContext::worker_id_key_;
unsigned long BoostContext::process_index_ = 0;
BoostContext* BoostContext::maestro_context_ = nullptr;
}
else {
XBT_DEBUG("No more processes to run");
- unsigned long worker_id =
- (unsigned long) xbt_os_thread_get_specific(worker_id_key_);
+ uintptr_t worker_id =
+ (uintptr_t) xbt_os_thread_get_specific(worker_id_key_);
next_context = static_cast<BoostParallelContext*>(
workers_context_[worker_id]);
}
void BoostParallelContext::resume()
{
- unsigned long worker_id = __sync_fetch_and_add(&threads_working_, 1);
+ uintptr_t worker_id = __sync_fetch_and_add(&threads_working_, 1);
xbt_os_thread_set_specific(worker_id_key_, (void*) worker_id);
BoostParallelContext* worker_context =
static bool parallel_;
static xbt_parmap_t parmap_;
static std::vector<BoostContext*> workers_context_;
- static unsigned long threads_working_;
+ static uintptr_t threads_working_;
static xbt_os_thread_key_t worker_id_key_;
static unsigned long process_index_;
static BoostContext* maestro_context_;
#ifdef HAVE_THREAD_CONTEXTS
static xbt_parmap_t raw_parmap;
static simgrid::simix::RawContext** raw_workers_context; /* space to save the worker context in each thread */
-static unsigned long raw_threads_working; /* number of threads that have started their work */
+static uintptr_t raw_threads_working; /* number of threads that have started their work */
static xbt_os_thread_key_t raw_worker_id_key; /* thread-specific storage for the thread id */
#endif
#ifdef ADAPTIVE_THRESHOLD
else {
/* all processes were run, go to the barrier */
XBT_DEBUG("No more processes to run");
- unsigned long worker_id = (unsigned long)(uintptr_t)
+ uintptr_t worker_id = (uintptr_t)
xbt_os_thread_get_specific(raw_worker_id_key);
next_context = (RawContext*) raw_workers_context[worker_id];
- XBT_DEBUG("Restoring worker stack %lu (working threads = %lu)",
+ XBT_DEBUG("Restoring worker stack %zu (working threads = %zu)",
worker_id, raw_threads_working);
}
void RawContext::resume_parallel()
{
#ifdef HAVE_THREAD_CONTEXTS
- unsigned long worker_id = __sync_fetch_and_add(&raw_threads_working, 1);
- xbt_os_thread_set_specific(raw_worker_id_key, (void*)(uintptr_t) worker_id);
+ uintptr_t worker_id = __sync_fetch_and_add(&raw_threads_working, 1);
+ xbt_os_thread_set_specific(raw_worker_id_key, (void*) worker_id);
RawContext* worker_context = (RawContext*) SIMIX_context_self();
raw_workers_context[worker_id] = worker_context;
- XBT_DEBUG("Saving worker stack %lu", worker_id);
+ XBT_DEBUG("Saving worker stack %zu", worker_id);
SIMIX_context_set_current(this);
raw_swapcontext(&worker_context->stack_top_, this->stack_top_);
#else
#ifdef HAVE_THREAD_CONTEXTS
static xbt_parmap_t sysv_parmap;
static simgrid::simix::ParallelUContext** sysv_workers_context; /* space to save the worker's context in each thread */
-static unsigned long sysv_threads_working; /* number of threads that have started their work */
+static uintptr_t sysv_threads_working; /* number of threads that have started their work */
static xbt_os_thread_key_t sysv_worker_id_key; /* thread-specific storage for the thread id */
#endif
static unsigned long sysv_process_index = 0; /* index of the next process to run in the
{
#ifdef HAVE_THREAD_CONTEXTS
// What is my containing body?
- unsigned long worker_id = __sync_fetch_and_add(&sysv_threads_working, 1);
+ uintptr_t worker_id = __sync_fetch_and_add(&sysv_threads_working, 1);
// Store the number of my containing body in os-thread-specific area :
xbt_os_thread_set_specific(sysv_worker_id_key, (void*) worker_id);
// Get my current soul:
XBT_DEBUG("No more processes to run");
// Get back the identity of my body that was stored when starting
// the scheduling round
- unsigned long worker_id =
- (unsigned long) xbt_os_thread_get_specific(sysv_worker_id_key);
+ uintptr_t worker_id =
+ (uintptr_t) xbt_os_thread_get_specific(sysv_worker_id_key);
// Deduce the initial soul of that body
next_context = (ParallelUContext*) sysv_workers_context[worker_id];
// When given that soul, the body will wait for the next scheduling round
"Synchronization mechanism (OS-level)");
/* ********************************* PTHREAD IMPLEMENTATION ************************************ */
-#ifndef _XBT_WIN32
-
#include <pthread.h>
#include <limits.h>
#include <semaphore.h>
strerror(errno));
}
-/* ********************************* WINDOWS IMPLEMENTATION ************************************ */
-
-#elif defined(_XBT_WIN32)
-
-#include <math.h>
-
-typedef struct xbt_os_thread_ {
- char *name;
- HANDLE handle; /* the win thread handle */
- unsigned long id; /* the win thread id */
- pvoid_f_pvoid_t start_routine;
- void *param;
- void *extra_data;
-} s_xbt_os_thread_t;
-
-/* so we can specify the size of the stack of the threads */
-#ifndef STACK_SIZE_PARAM_IS_A_RESERVATION
-#define STACK_SIZE_PARAM_IS_A_RESERVATION 0x00010000
-#endif
-
-/* the default size of the stack of the threads (in bytes)*/
-#define XBT_DEFAULT_THREAD_STACK_SIZE 4096
-static int stack_size=0;
-/* key to the TLS containing the xbt_os_thread_t structure */
-static unsigned long xbt_self_thread_key;
-
-void xbt_os_thread_mod_preinit(void)
-{
- xbt_self_thread_key = TlsAlloc();
-
- xbt_os_thread_t main_thread = xbt_new0(s_xbt_os_thread_t, 1);
- main_thread->name = (char *) "main";
- main_thread->start_routine = NULL;
- main_thread->param = NULL;
-
- if (!TlsSetValue(xbt_self_thread_key, main_thread))
- THROWF(system_error, (int)GetLastError(),
- "Impossible to set the SimGrid identity descriptor to the main thread (TlsSetValue() failed)");
-
-}
-
-void xbt_os_thread_mod_postexit(void)
-{
-
- if (!TlsFree(xbt_self_thread_key))
- THROWF(system_error, (int) GetLastError(),
- "TlsFree() failed to cleanup the thread submodule");
-}
-
-int xbt_os_thread_atfork(void (*prepare)(void),
- void (*parent)(void), void (*child)(void))
-{
- return 0;
-}
-
-static DWORD WINAPI wrapper_start_routine(void *s)
-{
- xbt_os_thread_t t = (xbt_os_thread_t) s;
- DWORD *rv;
-
- if (!TlsSetValue(xbt_self_thread_key, t))
- THROWF(system_error, (int) GetLastError(),
- "TlsSetValue of data describing the created thread failed");
-
- rv = (DWORD *) ((t->start_routine) (t->param));
-
- return rv ? *rv : 0;
-
-}
-
-
-xbt_os_thread_t xbt_os_thread_create(const char *name,
- pvoid_f_pvoid_t start_routine,
- void *param,
- void *extra_data)
-{
-
- xbt_os_thread_t t = xbt_new(s_xbt_os_thread_t, 1);
-
- t->name = xbt_strdup(name);
- t->start_routine = start_routine;
- t->param = param;
- t->extra_data = extra_data;
- t->handle = CreateThread(NULL, stack_size==0 ? XBT_DEFAULT_THREAD_STACK_SIZE : stack_size,
- (LPTHREAD_START_ROUTINE) wrapper_start_routine,
- t, STACK_SIZE_PARAM_IS_A_RESERVATION, &(t->id));
-
- if (!t->handle) {
- xbt_free(t);
- THROWF(system_error, (int) GetLastError(), "CreateThread failed");
- }
-
- return t;
-}
-
-void xbt_os_thread_setstacksize(int size)
-{
- stack_size = size;
-}
-
-void xbt_os_thread_setguardsize(int size)
-{
- XBT_WARN("xbt_os_thread_setguardsize is not implemented (%d)", size);
-}
-
-const char *xbt_os_thread_name(xbt_os_thread_t t)
-{
- return t->name;
-}
-
-const char *xbt_os_thread_self_name(void)
-{
- xbt_os_thread_t t = xbt_os_thread_self();
- return t ? t->name : "main";
-}
-
-void xbt_os_thread_join(xbt_os_thread_t thread, void **thread_return)
-{
-
- if (WAIT_OBJECT_0 != WaitForSingleObject(thread->handle, INFINITE))
- THROWF(system_error, (int) GetLastError(),
- "WaitForSingleObject failed");
-
- if (thread_return) {
-
- if (!GetExitCodeThread(thread->handle, (DWORD *) (*thread_return)))
- THROWF(system_error, (int) GetLastError(),
- "GetExitCodeThread failed");
- }
-
- CloseHandle(thread->handle);
-
- free(thread->name);
-
- free(thread);
-}
-
-void xbt_os_thread_exit(int *retval)
-{
- if (retval)
- ExitThread(*retval);
- else
- ExitThread(0);
-}
-
-void xbt_os_thread_key_create(xbt_os_thread_key_t* key) {
-
- *key = TlsAlloc();
-}
-
-void xbt_os_thread_set_specific(xbt_os_thread_key_t key, void* value) {
-
- if (!TlsSetValue(key, value))
- THROWF(system_error, (int) GetLastError(), "TlsSetValue() failed");
-}
-
-void* xbt_os_thread_get_specific(xbt_os_thread_key_t key) {
- return TlsGetValue(key);
-}
-
-void xbt_os_thread_detach(xbt_os_thread_t thread)
-{
- THROW_UNIMPLEMENTED;
-}
-
-
-xbt_os_thread_t xbt_os_thread_self(void)
-{
- return TlsGetValue(xbt_self_thread_key);
-}
-
-void *xbt_os_thread_getparam(void)
-{
- xbt_os_thread_t t = xbt_os_thread_self();
- return t->param;
-}
-
-
-void xbt_os_thread_yield(void)
-{
- Sleep(0);
-}
-
-void xbt_os_thread_cancel(xbt_os_thread_t t)
-{
- if (!TerminateThread(t->handle, 0))
- THROWF(system_error, (int) GetLastError(), "TerminateThread failed");
-}
-
-/****** mutex related functions ******/
-typedef struct xbt_os_mutex_ {
- /* KEEP IT IN SYNC WITH xbt_thread.c */
- CRITICAL_SECTION lock;
-} s_xbt_os_mutex_t;
-
-xbt_os_mutex_t xbt_os_mutex_init(void)
-{
- xbt_os_mutex_t res = xbt_new(s_xbt_os_mutex_t, 1);
-
- /* initialize the critical section object */
- InitializeCriticalSection(&(res->lock));
-
- return res;
-}
-
-void xbt_os_mutex_acquire(xbt_os_mutex_t mutex)
-{
- EnterCriticalSection(&mutex->lock);
-}
-
-void xbt_os_mutex_timedacquire(xbt_os_mutex_t mutex, double delay)
-{
- THROW_UNIMPLEMENTED;
-}
-
-void xbt_os_mutex_release(xbt_os_mutex_t mutex)
-{
-
- LeaveCriticalSection(&mutex->lock);
-
-}
-
-void xbt_os_mutex_destroy(xbt_os_mutex_t mutex)
-{
-
- if (!mutex)
- return;
-
- DeleteCriticalSection(&mutex->lock);
- free(mutex);
-}
-
-/***** condition related functions *****/
-enum { /* KEEP IT IN SYNC WITH xbt_thread.c */
- SIGNAL = 0,
- BROADCAST = 1,
- MAX_EVENTS = 2
-};
-
-typedef struct xbt_os_cond_ {
- /* KEEP IT IN SYNC WITH xbt_thread.c */
- HANDLE events[MAX_EVENTS];
-
- unsigned int waiters_count; /* the number of waiters */
- CRITICAL_SECTION waiters_count_lock; /* protect access to waiters_count */
-} s_xbt_os_cond_t;
-
-xbt_os_cond_t xbt_os_cond_init(void)
-{
-
- xbt_os_cond_t res = xbt_new0(s_xbt_os_cond_t, 1);
-
- memset(&res->waiters_count_lock, 0, sizeof(CRITICAL_SECTION));
-
- /* initialize the critical section object */
- InitializeCriticalSection(&res->waiters_count_lock);
-
- res->waiters_count = 0;
-
- /* Create an auto-reset event */
- res->events[SIGNAL] = CreateEvent(NULL, FALSE, FALSE, NULL);
-
- if (!res->events[SIGNAL]) {
- DeleteCriticalSection(&res->waiters_count_lock);
- free(res);
- THROWF(system_error, 0, "CreateEvent failed for the signals");
- }
-
- /* Create a manual-reset event. */
- res->events[BROADCAST] = CreateEvent(NULL, TRUE, FALSE, NULL);
-
- if (!res->events[BROADCAST]) {
-
- DeleteCriticalSection(&res->waiters_count_lock);
- CloseHandle(res->events[SIGNAL]);
- free(res);
- THROWF(system_error, 0, "CreateEvent failed for the broadcasts");
- }
-
- return res;
-}
-
-void xbt_os_cond_wait(xbt_os_cond_t cond, xbt_os_mutex_t mutex)
-{
-
- unsigned long wait_result;
- int is_last_waiter;
-
- /* lock the threads counter and increment it */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count++;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* unlock the mutex associate with the condition */
- LeaveCriticalSection(&mutex->lock);
-
- /* wait for a signal (broadcast or no) */
- wait_result = WaitForMultipleObjects(2, cond->events, FALSE, INFINITE);
-
- if (wait_result == WAIT_FAILED)
- THROWF(system_error, 0,
- "WaitForMultipleObjects failed, so we cannot wait on the condition");
-
- /* we have a signal lock the condition */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count--;
-
- /* it's the last waiter or it's a broadcast ? */
- is_last_waiter = ((wait_result == WAIT_OBJECT_0 + BROADCAST - 1)
- && (cond->waiters_count == 0));
-
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* yes it's the last waiter or it's a broadcast
- * only reset the manual event (the automatic event is reset in the WaitForMultipleObjects() function
- * by the system.
- */
- if (is_last_waiter)
- if (!ResetEvent(cond->events[BROADCAST]))
- THROWF(system_error, 0, "ResetEvent failed");
-
- /* relock the mutex associated with the condition in accordance with the posix thread specification */
- EnterCriticalSection(&mutex->lock);
-}
-
-void xbt_os_cond_timedwait(xbt_os_cond_t cond, xbt_os_mutex_t mutex,
- double delay)
-{
-
- unsigned long wait_result = WAIT_TIMEOUT;
- int is_last_waiter;
- unsigned long end = (unsigned long) (delay * 1000);
-
-
- if (delay < 0) {
- xbt_os_cond_wait(cond, mutex);
- } else {
- XBT_DEBUG("xbt_cond_timedwait(%p,%p,%lu)", &(cond->events),
- &(mutex->lock), end);
-
- /* lock the threads counter and increment it */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count++;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* unlock the mutex associate with the condition */
- LeaveCriticalSection(&mutex->lock);
- /* wait for a signal (broadcast or no) */
-
- wait_result = WaitForMultipleObjects(2, cond->events, FALSE, end);
-
- switch (wait_result) {
- case WAIT_TIMEOUT:
- THROWF(timeout_error, GetLastError(),
- "condition %p (mutex %p) wasn't signaled before timeout (%f)",
- cond, mutex, delay);
- case WAIT_FAILED:
- THROWF(system_error, GetLastError(),
- "WaitForMultipleObjects failed, so we cannot wait on the condition");
- }
-
- /* we have a signal lock the condition */
- EnterCriticalSection(&cond->waiters_count_lock);
- cond->waiters_count--;
-
- /* it's the last waiter or it's a broadcast ? */
- is_last_waiter = ((wait_result == WAIT_OBJECT_0 + BROADCAST - 1)
- && (cond->waiters_count == 0));
-
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- /* yes it's the last waiter or it's a broadcast
- * only reset the manual event (the automatic event is reset in the WaitForMultipleObjects() function
- * by the system.
- */
- if (is_last_waiter)
- if (!ResetEvent(cond->events[BROADCAST]))
- THROWF(system_error, 0, "ResetEvent failed");
-
- /* relock the mutex associated with the condition in accordance with the posix thread specification */
- EnterCriticalSection(&mutex->lock);
- }
- /*THROW_UNIMPLEMENTED; */
-}
-
-void xbt_os_cond_signal(xbt_os_cond_t cond)
-{
- int have_waiters;
-
- EnterCriticalSection(&cond->waiters_count_lock);
- have_waiters = cond->waiters_count > 0;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- if (have_waiters)
- if (!SetEvent(cond->events[SIGNAL]))
- THROWF(system_error, 0, "SetEvent failed");
-
- xbt_os_thread_yield();
-}
-
-void xbt_os_cond_broadcast(xbt_os_cond_t cond)
-{
- int have_waiters;
-
- EnterCriticalSection(&cond->waiters_count_lock);
- have_waiters = cond->waiters_count > 0;
- LeaveCriticalSection(&cond->waiters_count_lock);
-
- if (have_waiters)
- SetEvent(cond->events[BROADCAST]);
-}
-
-void xbt_os_cond_destroy(xbt_os_cond_t cond)
-{
- int error = 0;
-
- if (!cond)
- return;
-
- if (!CloseHandle(cond->events[SIGNAL]))
- error = 1;
-
- if (!CloseHandle(cond->events[BROADCAST]))
- error = 1;
-
- DeleteCriticalSection(&cond->waiters_count_lock);
-
- xbt_free(cond);
-
- if (error)
- THROWF(system_error, 0, "Error while destroying the condition");
-}
-
-typedef struct xbt_os_sem_ {
- HANDLE h;
- unsigned int value;
- CRITICAL_SECTION value_lock; /* protect access to value of the semaphore */
-} s_xbt_os_sem_t;
-
-#ifndef INT_MAX
-# define INT_MAX 32767 /* let's be safe by underestimating this value: this is for 16bits only */
-#endif
-
-xbt_os_sem_t xbt_os_sem_init(unsigned int value)
-{
- xbt_os_sem_t res;
-
- if (value > INT_MAX)
- THROWF(arg_error, value,
- "Semaphore initial value too big: %ud cannot be stored as a signed int",
- value);
-
- res = (xbt_os_sem_t) xbt_new0(s_xbt_os_sem_t, 1);
-
- if (!(res->h = CreateSemaphore(NULL, value, (long) INT_MAX, NULL))) {
- THROWF(system_error, GetLastError(), "CreateSemaphore() failed: %s",
- strerror(GetLastError()));
- return NULL;
- }
-
- res->value = value;
-
- InitializeCriticalSection(&(res->value_lock));
-
- return res;
-}
-
-void xbt_os_sem_acquire(xbt_os_sem_t sem)
-{
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot acquire the NULL semaphore");
-
- /* wait failure */
- if (WAIT_OBJECT_0 != WaitForSingleObject(sem->h, INFINITE))
- THROWF(system_error, GetLastError(),
- "WaitForSingleObject() failed: %s", strerror(GetLastError()));
- EnterCriticalSection(&(sem->value_lock));
- sem->value--;
- LeaveCriticalSection(&(sem->value_lock));
-}
-
-void xbt_os_sem_timedacquire(xbt_os_sem_t sem, double timeout)
-{
- long seconds;
- long milliseconds;
- double end = timeout + xbt_os_time();
-
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot acquire the NULL semaphore");
-
- if (timeout < 0) {
- xbt_os_sem_acquire(sem);
- } else { /* timeout can be zero <-> try acquire ) */
-
-
- seconds = (long) floor(end);
- milliseconds = (long) ((end - seconds) * 1000);
- milliseconds += (seconds * 1000);
-
- switch (WaitForSingleObject(sem->h, milliseconds)) {
- case WAIT_OBJECT_0:
- EnterCriticalSection(&(sem->value_lock));
- sem->value--;
- LeaveCriticalSection(&(sem->value_lock));
- return;
-
- case WAIT_TIMEOUT:
- THROWF(timeout_error, GetLastError(),
- "semaphore %p wasn't signaled before timeout (%f)", sem,
- timeout);
- return;
-
- default:
- THROWF(system_error, GetLastError(),
- "WaitForSingleObject(%p,%f) failed: %s", sem, timeout,
- strerror(GetLastError()));
- }
- }
-}
-
-void xbt_os_sem_release(xbt_os_sem_t sem)
-{
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot release the NULL semaphore");
-
- if (!ReleaseSemaphore(sem->h, 1, NULL))
- THROWF(system_error, GetLastError(), "ReleaseSemaphore() failed: %s",
- strerror(GetLastError()));
- EnterCriticalSection(&(sem->value_lock));
- sem->value++;
- LeaveCriticalSection(&(sem->value_lock));
-}
-
-void xbt_os_sem_destroy(xbt_os_sem_t sem)
-{
- if (!sem)
- THROWF(arg_error, EINVAL, "Cannot destroy the NULL semaphore");
-
- if (!CloseHandle(sem->h))
- THROWF(system_error, GetLastError(), "CloseHandle() failed: %s",
- strerror(GetLastError()));
-
- DeleteCriticalSection(&(sem->value_lock));
-
- xbt_free(sem);
-
-}
-
-void xbt_os_sem_get_value(xbt_os_sem_t sem, int *svalue)
-{
- if (!sem)
- THROWF(arg_error, EINVAL,
- "Cannot get the value of the NULL semaphore");
-
- EnterCriticalSection(&(sem->value_lock));
- *svalue = sem->value;
- LeaveCriticalSection(&(sem->value_lock));
-}
-
-
-#endif
-
/** @brief Returns the amount of cores on the current host */
int xbt_os_get_numcores(void) {
endif()
include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
- foreach(x type-hvector type-struct type-vector)
+ foreach(x coll-allgather coll-bcast type-hvector type-indexed type-struct type-vector)
add_executable (${x} ${x}/${x}.c)
target_link_libraries(${x} simgrid)
set_target_properties(${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${x})
set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.tesh)
set(teshsuite_src ${teshsuite_src} ${CMAKE_CURRENT_SOURCE_DIR}/${x}/${x}.c)
- ADD_TESH_FACTORIES(tesh-smpi-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/${x} ${x}.tesh)
+ ADD_TESH_FACTORIES(tesh-smpi-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/${x} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/${x} ${x}.tesh)
+ endforeach()
+
+ foreach (ALLGATHER_COLL 2dmesh 3dmesh bruck GB loosely_lr NTSLR_NB pair rdb rhv ring SMP_NTS smp_simple
+ spreading_simple ompi mpich ompi_neighborexchange mvapich2 mvapich2_smp impi)
+ ADD_TESH(tesh-smpi-coll-allgather-${ALLGATHER_COLL} --cfg smpi/allgather:${ALLGATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/coll-allgather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/coll-allgather coll-allgather.tesh)
+ endforeach()
+
+ foreach (BCAST_COLL arrival_pattern_aware arrival_pattern_aware_wait arrival_scatter binomial_tree flattree
+ flattree_pipeline NTSB NTSL NTSL_Isend scatter_LR_allgather scatter_rdb_allgather SMP_binary
+ SMP_binomial SMP_linear ompi mpich ompi_split_bintree ompi_pipeline mvapich2 mvapich2_intra_node
+ mvapich2_knomial_intra_node impi)
+ ADD_TESH(tesh-smpi-coll-bcast-${BCAST_COLL} --cfg smpi/bcast:${BCAST_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/coll-bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/coll-bcast coll-bcast.tesh)
endforeach()
endif()
+++ /dev/null
-if(enable_smpi)
- if(WIN32)
- set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
- else()
- set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
- endif()
- include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-
- add_executable (allgather_coll allgather_coll.c)
- target_link_libraries(allgather_coll simgrid)
-endif()
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.tesh
- PARENT_SCOPE)
-set(examples_src
- ${examples_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.c
- PARENT_SCOPE)
+++ /dev/null
-if(enable_smpi)
- if(WIN32)
- set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
- else()
- set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
- endif()
- include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-
- add_executable (bcast bcast.c)
- target_link_libraries(bcast simgrid)
- add_executable (bcast_coll bcast_coll.c)
- target_link_libraries(bcast_coll simgrid)
-endif()
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast.tesh
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.tesh
- PARENT_SCOPE)
-set(examples_src
- ${examples_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast.c
- ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.c
- PARENT_SCOPE)
+++ /dev/null
-/* Copyright (c) 2009, 2012-2014. The SimGrid Team.
- * All rights reserved. */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include <stdio.h>
-#include <mpi.h>
-
-int main(int argc, char **argv)
-{
- int size, rank;
- int value = 3;
- double start_timer;
- int quiet = 0;
-
- MPI_Init(&argc, &argv);
- MPI_Comm_size(MPI_COMM_WORLD, &size);
- MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-
- if (argc > 1 && !strcmp(argv[1], "-q"))
- quiet = 1;
-
- start_timer = MPI_Wtime();
-
- if (0 == rank) {
- value = 17;
- }
- MPI_Bcast(&value, 1, MPI_INT, 0, MPI_COMM_WORLD);
- if (value != 17) {
- printf("node %d has value %d after broadcast\n", rank, value);
- }
-
- MPI_Barrier(MPI_COMM_WORLD);
- if (0 == rank && !quiet)
- printf("Elapsed time on rank %d: %f s\n", rank,
- MPI_Wtime() - start_timer);
- MPI_Finalize();
- return 0;
-}
+++ /dev/null
-# use the tested library, not the installed one
-# (since we want to pass it to the child, it has to be redefined before each command)
-# Go for the first test
-p Test Broadcast with less processes than hosts
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 3 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning
-> [rank 0] -> Tremblay
-> [rank 1] -> Tremblay
-> [rank 2] -> Tremblay
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
-
-# second test
-p Test Broadcast with as much processes than hosts
-! setenv LD_LIBRARY_PATH=../../lib
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 5 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning
-> [rank 0] -> Tremblay
-> [rank 1] -> Tremblay
-> [rank 2] -> Tremblay
-> [rank 3] -> Tremblay
-> [rank 4] -> Jupiter
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
-
-# Another test
-p Test Broadcast with more processes than hosts
-! setenv LD_LIBRARY_PATH=../../lib
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 12 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning
-> [rank 0] -> Tremblay
-> [rank 1] -> Tremblay
-> [rank 2] -> Tremblay
-> [rank 3] -> Tremblay
-> [rank 4] -> Jupiter
-> [rank 5] -> Jupiter
-> [rank 6] -> Jupiter
-> [rank 7] -> Jupiter
-> [rank 8] -> Fafard
-> [rank 9] -> Fafard
-> [rank 10] -> Fafard
-> [rank 11] -> Fafard
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
printf("%d ", rb[i]);
printf("]\n");
-
if (rank == 0) {
if (status != MPI_SUCCESS) {
printf("allgather returned %d\n", status);
! output sort
p Test all to all
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allgather_coll --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/coll-allgather --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
> [rank 0] -> Tremblay
> [rank 1] -> Tremblay
> [rank 2] -> Tremblay
{
int i, size, rank;
int count = 2048;
- int *values;
- int status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-
- values = (int *) xbt_malloc(count * sizeof(int));
+
+ int *values = (int *) xbt_malloc(count * sizeof(int));
for (i = 0; i < count; i++)
values[i] = (0 == rank) ? 17 : 3;
for (i = 0; i < count; i++)
values[i] = (size -1 == rank) ? 17 : 3;
- status = MPI_Bcast(values, count, MPI_INT, size-1, MPI_COMM_WORLD);
+ int status = MPI_Bcast(values, count, MPI_INT, size-1, MPI_COMM_WORLD);
good = 0;
for (i = 0; i < count; i++)
if (values[i]==17) good++;
printf("[%d] number of values equals to 17: %d\n", rank, good);
-
-
-
if (rank == 0) {
if (status != MPI_SUCCESS) {
printf("bcast returned %d\n", status);
! setenv LD_LIBRARY_PATH=../../lib
! output sort
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/bcast_coll --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/coll-bcast --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
> [rank 0] -> Tremblay
> [rank 1] -> Tremblay
> [rank 2] -> Tremblay
+++ /dev/null
-if(enable_smpi)
- if(WIN32)
- set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h")
- else()
- set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
- endif()
- include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-
- add_executable (indexed_test indexed_test.c)
- target_link_libraries(indexed_test simgrid)
-endif()
-
-set(tesh_files
- ${tesh_files}
- ${CMAKE_CURRENT_SOURCE_DIR}/indexed.tesh
- PARENT_SCOPE)
-set(examples_src
- ${examples_src}
- ${CMAKE_CURRENT_SOURCE_DIR}/indexed_test.c
- PARENT_SCOPE)
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
- if (size < 2)
- {
+ if (size < 2) {
printf("Please run with 2 processes.\n");
MPI_Finalize();
return 1;
MPI_Type_indexed(3, blocklen, displacement, type2, &type);
MPI_Type_commit(&type);
- if (rank == 0)
- {
+ if (rank == 0) {
for (i=0; i<27; i++)
buffer[i] = i;
MPI_Send(buffer, 1, type, 1, 123, MPI_COMM_WORLD);
}
- if (rank == 1)
- {
+ if (rank == 1) {
for (i=0; i<27; i++)
buffer[i] = -1;
MPI_Recv(buffer, 1, type, 0, 123, MPI_COMM_WORLD, &status);
p Test indexed
! setenv LD_LIBRARY_PATH=../../lib
! output sort
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/platforms/small_platform.xml -np 2 ${bindir:=.}/indexed_test -q --log=smpi_kernel.thres:warning
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/platforms/small_platform.xml -np 2 ${bindir:=.}/type-indexed -q --log=smpi_kernel.thres:warning
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI'
> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304'
teshsuite/simix/stack_overflow/CMakeLists.txt
teshsuite/smpi/CMakeLists.txt
- teshsuite/smpi/allgather/CMakeLists.txt
teshsuite/smpi/allgatherv/CMakeLists.txt
teshsuite/smpi/allreduce/CMakeLists.txt
teshsuite/smpi/alltoall/CMakeLists.txt
teshsuite/smpi/alltoallv/CMakeLists.txt
teshsuite/smpi/barrier/CMakeLists.txt
- teshsuite/smpi/bcast/CMakeLists.txt
teshsuite/smpi/compute/CMakeLists.txt
teshsuite/smpi/gather/CMakeLists.txt
- teshsuite/smpi/indexed/CMakeLists.txt
teshsuite/smpi/pingpong/CMakeLists.txt
teshsuite/smpi/reduce/CMakeLists.txt
teshsuite/smpi/scatter/CMakeLists.txt
#ADD_TESH(test-xbt-parmap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parmap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench parmap_bench.tesh)
# END TESH TESTS
-
## INTERFACES ##
### MSG ###
# BEGIN TESH TESTS
ADD_TESH_FACTORIES(s4u-basic "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u/basic --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/basic s4u_basic.tesh)
ADD_TESH_FACTORIES(s4u-io "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/s4u/io --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/io s4u_io.tesh)
-
### SIMDAG ###
# BEGIN TESH TESTS
# these tests need the assertion mechanism
# BEGIN TESH TESTS
# smpi examples
ADD_TESH_FACTORIES(tesh-smpi-pt2pt "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/pingpong --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong pt2pt.tesh)
- ADD_TESH_FACTORIES(tesh-smpi-bcast "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast bcast.tesh)
ADD_TESH_FACTORIES(tesh-smpi-reduce "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce.tesh)
- ADD_TESH_FACTORIES(tesh-smpi-indexed "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/indexed --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/indexed indexed.tesh)
ADD_TESH_FACTORIES(tesh-smpi-compute "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/compute --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/compute compute.tesh)
# smpi broken usage
ADD_TESH_FACTORIES(tesh-smpi-broken "thread" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/pingpong --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong broken_hostfiles.tesh)
FOREACH (GATHER_COLL default ompi mpich ompi_basic_linear ompi_linear_sync ompi_binomial mvapich2 mvapich2_two_level impi)
ADD_TESH(tesh-smpi-gather-coll-${GATHER_COLL} --cfg smpi/gather:${GATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/gather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/gather gather_coll.tesh)
ENDFOREACH()
- FOREACH (ALLGATHER_COLL default 2dmesh 3dmesh bruck GB loosely_lr
- NTSLR NTSLR_NB pair rdb rhv ring SMP_NTS
- smp_simple spreading_simple ompi mpich ompi_neighborexchange mvapich2 mvapich2_smp impi)
- ADD_TESH(tesh-smpi-allgather-coll-${ALLGATHER_COLL} --cfg smpi/allgather:${ALLGATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allgather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgather allgather_coll.tesh)
- ENDFOREACH()
+
FOREACH (ALLGATHERV_COLL default GB pair ring ompi mpich ompi_neighborexchange ompi_bruck mpich_rdb mpich_ring mvapich2 impi)
ADD_TESH(tesh-smpi-allgatherv-coll-${ALLGATHERV_COLL} --cfg smpi/allgatherv:${ALLGATHERV_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allgatherv --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgatherv allgatherv_coll.tesh)
ENDFOREACH()
ring_mpi_barrier ring_one_barrier bruck ompi mpich mvapich2 ompi_basic_linear impi)
ADD_TESH(tesh-smpi-alltoallv-coll-${ALLTOALLV_COLL} --cfg smpi/alltoallv:${ALLTOALLV_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/alltoallv --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv alltoallv_coll.tesh)
ENDFOREACH()
- FOREACH (BCAST_COLL default arrival_pattern_aware arrival_pattern_aware_wait arrival_scatter
- binomial_tree flattree flattree_pipeline NTSB NTSL NTSL_Isend scatter_LR_allgather
- scatter_rdb_allgather SMP_binary SMP_binomial SMP_linear ompi mpich ompi_split_bintree ompi_pipeline mvapich2 mvapich2_intra_node mvapich2_knomial_intra_node impi)
- ADD_TESH(tesh-smpi-bcast-coll-${BCAST_COLL} --cfg smpi/bcast:${BCAST_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast bcast_coll.tesh)
- ENDFOREACH()
+
FOREACH (REDUCE_COLL default arrival_pattern_aware binomial flat_tree NTSL scatter_gather ompi mpich ompi_chain ompi_binary ompi_basic_linear ompi_binomial ompi_in_order_binary mvapich2 mvapich2_knomial mvapich2_two_level impi rab)
ADD_TESH(tesh-smpi-reduce-coll-${REDUCE_COLL} --cfg smpi/reduce:${REDUCE_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce_coll.tesh)
ENDFOREACH()
### LUA ###
# BEGIN TESH TESTS
IF(HAVE_LUA)
- # Tests testing simulation from C but using lua for platform files. Executed
- # like this
- #
+ # Tests testing simulation from C but using lua for platform files. Executed like this
# ~$ ./masterslave platform.lua deploy.lua
ADD_TESH(lua-platform-masterslave --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/lua --cd ${CMAKE_BINARY_DIR}/examples/lua ${CMAKE_HOME_DIRECTORY}/teshsuite/lua/lua_platforms.tesh)
SET_TESTS_PROPERTIES(lua-platform-masterslave PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so")
ENDIF()
ENDIF()
-
## OTHER ##
ADD_TEST(testall ${CMAKE_BINARY_DIR}/testall)