From: Julien Gossa Date: Fri, 4 Mar 2016 17:08:01 +0000 (+0100) Subject: Merge branch 'master' of git+ssh://scm.gforge.inria.fr/gitroot/simgrid/simgrid X-Git-Tag: v3_13~561^2^2~1 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/8f34741f2ecbd5b008788605bdec0333ef365007?hp=76c121ea258e9b3a5f7330efcb2babc6811c9314 Merge branch 'master' of git+ssh://scm.gforge.inria.fr/gitroot/simgrid/simgrid I AM THE KING OF THE BINDINGS! FEAR MY POWER! (and no test has been armed during these commits... Just some cleaning...) --- diff --git a/.gitignore b/.gitignore index 752821955e..34a055fca5 100644 --- a/.gitignore +++ b/.gitignore @@ -313,8 +313,7 @@ teshsuite/simdag/platforms/graphicator 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 @@ -331,11 +330,7 @@ teshsuite/smpi/alltoallv/alltoallv_coll 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 @@ -343,8 +338,7 @@ teshsuite/smpi/dsend 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 diff --git a/CMakeLists.txt b/CMakeLists.txt index 914ee76c7c..eec70e6182 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,13 +280,12 @@ CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN_IN_LIBDL) 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") diff --git a/include/xbt/xbt_os_thread.h b/include/xbt/xbt_os_thread.h index b7d7d95d64..93efd01143 100644 --- a/include/xbt/xbt_os_thread.h +++ b/include/xbt/xbt_os_thread.h @@ -27,13 +27,10 @@ typedef struct xbt_os_thread_ *xbt_os_thread_t; #ifdef _XBT_WIN32 /* defined if this is a windows system, 32bits or 64bits) */ #include -typedef DWORD xbt_os_thread_key_t; -#else /* assume that every non-windows system is POSIX-compatible */ +#endif #include 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: diff --git a/src/simix/BoostContext.cpp b/src/simix/BoostContext.cpp index 3b4e63f94b..3a7ea342f9 100644 --- a/src/simix/BoostContext.cpp +++ b/src/simix/BoostContext.cpp @@ -55,7 +55,7 @@ public: 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; @@ -245,8 +245,8 @@ void BoostParallelContext::suspend() } 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( workers_context_[worker_id]); } @@ -269,7 +269,7 @@ void BoostParallelContext::stop() 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 = diff --git a/src/simix/BoostContext.hpp b/src/simix/BoostContext.hpp index 62b6066b57..032e116e91 100644 --- a/src/simix/BoostContext.hpp +++ b/src/simix/BoostContext.hpp @@ -31,7 +31,7 @@ protected: // static static bool parallel_; static xbt_parmap_t parmap_; static std::vector 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_; diff --git a/src/simix/RawContext.cpp b/src/simix/RawContext.cpp index 9cbb2df74d..bb1af0a2ee 100644 --- a/src/simix/RawContext.cpp +++ b/src/simix/RawContext.cpp @@ -85,7 +85,7 @@ ContextFactory* raw_factory() #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 @@ -440,10 +440,10 @@ void RawContext::suspend_parallel() 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); } @@ -469,11 +469,11 @@ void RawContext::resume_serial() 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 diff --git a/src/simix/UContext.cpp b/src/simix/UContext.cpp index 1669ed8c14..6d583168d0 100644 --- a/src/simix/UContext.cpp +++ b/src/simix/UContext.cpp @@ -68,7 +68,7 @@ namespace simix { #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 @@ -316,7 +316,7 @@ void ParallelUContext::resume() { #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: @@ -373,8 +373,8 @@ void ParallelUContext::suspend() 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 diff --git a/src/xbt/xbt_os_thread.c b/src/xbt/xbt_os_thread.c index 78c47333eb..4914b24d0b 100644 --- a/src/xbt/xbt_os_thread.c +++ b/src/xbt/xbt_os_thread.c @@ -30,8 +30,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_sync_os, xbt, "Synchronization mechanism (OS-level)"); /* ********************************* PTHREAD IMPLEMENTATION ************************************ */ -#ifndef _XBT_WIN32 - #include #include #include @@ -699,568 +697,6 @@ void xbt_os_sem_get_value(xbt_os_sem_t sem, int *svalue) strerror(errno)); } -/* ********************************* WINDOWS IMPLEMENTATION ************************************ */ - -#elif defined(_XBT_WIN32) - -#include - -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) { diff --git a/teshsuite/smpi/CMakeLists.txt b/teshsuite/smpi/CMakeLists.txt index 6b946c1e8b..530c91ad7c 100644 --- a/teshsuite/smpi/CMakeLists.txt +++ b/teshsuite/smpi/CMakeLists.txt @@ -6,7 +6,7 @@ if(enable_smpi) 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}) @@ -14,7 +14,19 @@ if(enable_smpi) 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() diff --git a/teshsuite/smpi/allgather/CMakeLists.txt b/teshsuite/smpi/allgather/CMakeLists.txt deleted file mode 100644 index 115a5216f6..0000000000 --- a/teshsuite/smpi/allgather/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -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) diff --git a/teshsuite/smpi/bcast/CMakeLists.txt b/teshsuite/smpi/bcast/CMakeLists.txt deleted file mode 100644 index 9789588162..0000000000 --- a/teshsuite/smpi/bcast/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -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) diff --git a/teshsuite/smpi/bcast/bcast.c b/teshsuite/smpi/bcast/bcast.c deleted file mode 100644 index e0bff2db7f..0000000000 --- a/teshsuite/smpi/bcast/bcast.c +++ /dev/null @@ -1,40 +0,0 @@ -/* 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 -#include - -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; -} diff --git a/teshsuite/smpi/bcast/bcast.tesh b/teshsuite/smpi/bcast/bcast.tesh deleted file mode 100644 index 52b639a3a9..0000000000 --- a/teshsuite/smpi/bcast/bcast.tesh +++ /dev/null @@ -1,44 +0,0 @@ -# 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' diff --git a/teshsuite/smpi/allgather/allgather_coll.c b/teshsuite/smpi/coll-allgather/coll-allgather.c similarity index 99% rename from teshsuite/smpi/allgather/allgather_coll.c rename to teshsuite/smpi/coll-allgather/coll-allgather.c index 045154b4cc..753aef82b4 100644 --- a/teshsuite/smpi/allgather/allgather_coll.c +++ b/teshsuite/smpi/coll-allgather/coll-allgather.c @@ -48,7 +48,6 @@ int main(int argc, char *argv[]) printf("%d ", rb[i]); printf("]\n"); - if (rank == 0) { if (status != MPI_SUCCESS) { printf("allgather returned %d\n", status); diff --git a/teshsuite/smpi/allgather/allgather_coll.tesh b/teshsuite/smpi/coll-allgather/coll-allgather.tesh similarity index 97% rename from teshsuite/smpi/allgather/allgather_coll.tesh rename to teshsuite/smpi/coll-allgather/coll-allgather.tesh index d727e4f8dd..6778ee1c5c 100644 --- a/teshsuite/smpi/allgather/allgather_coll.tesh +++ b/teshsuite/smpi/coll-allgather/coll-allgather.tesh @@ -3,7 +3,7 @@ ! 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 diff --git a/teshsuite/smpi/bcast/bcast_coll.c b/teshsuite/smpi/coll-bcast/coll-bcast.c similarity index 88% rename from teshsuite/smpi/bcast/bcast_coll.c rename to teshsuite/smpi/coll-bcast/coll-bcast.c index bceaf4087c..0e22735ee8 100644 --- a/teshsuite/smpi/bcast/bcast_coll.c +++ b/teshsuite/smpi/coll-bcast/coll-bcast.c @@ -11,14 +11,12 @@ int main(int argc, char **argv) { 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; @@ -39,16 +37,13 @@ int main(int argc, char **argv) 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); diff --git a/teshsuite/smpi/bcast/bcast_coll.tesh b/teshsuite/smpi/coll-bcast/coll-bcast.tesh similarity index 96% rename from teshsuite/smpi/bcast/bcast_coll.tesh rename to teshsuite/smpi/coll-bcast/coll-bcast.tesh index d4201b9bce..9155454d25 100644 --- a/teshsuite/smpi/bcast/bcast_coll.tesh +++ b/teshsuite/smpi/coll-bcast/coll-bcast.tesh @@ -2,7 +2,7 @@ p Test Broadcast with more processes than hosts ! 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 diff --git a/teshsuite/smpi/indexed/CMakeLists.txt b/teshsuite/smpi/indexed/CMakeLists.txt deleted file mode 100644 index c0b9b2e545..0000000000 --- a/teshsuite/smpi/indexed/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -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) diff --git a/teshsuite/smpi/indexed/indexed_test.c b/teshsuite/smpi/type-indexed/type-indexed.c similarity index 94% rename from teshsuite/smpi/indexed/indexed_test.c rename to teshsuite/smpi/type-indexed/type-indexed.c index 4ceed68d32..aba7275ca9 100644 --- a/teshsuite/smpi/indexed/indexed_test.c +++ b/teshsuite/smpi/type-indexed/type-indexed.c @@ -18,8 +18,7 @@ int main(int argc, char *argv[]) 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; @@ -31,15 +30,13 @@ int main(int argc, char *argv[]) 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); diff --git a/teshsuite/smpi/indexed/indexed.tesh b/teshsuite/smpi/type-indexed/type-indexed.tesh similarity index 94% rename from teshsuite/smpi/indexed/indexed.tesh rename to teshsuite/smpi/type-indexed/type-indexed.tesh index 75053c409d..7ee71b54d7 100644 --- a/teshsuite/smpi/indexed/indexed.tesh +++ b/teshsuite/smpi/type-indexed/type-indexed.tesh @@ -1,7 +1,7 @@ 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' diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 0ea82f69d2..03265d66de 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -1052,16 +1052,13 @@ set(CMAKEFILES_TXT 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 diff --git a/tools/cmake/Tests.cmake b/tools/cmake/Tests.cmake index 772a7c6f89..14da841929 100644 --- a/tools/cmake/Tests.cmake +++ b/tools/cmake/Tests.cmake @@ -173,7 +173,6 @@ IF(NOT enable_memcheck) #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 @@ -257,7 +256,6 @@ IF(NOT enable_memcheck) 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 @@ -307,9 +305,7 @@ IF(NOT enable_memcheck) # 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) @@ -317,11 +313,7 @@ IF(NOT enable_memcheck) 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() @@ -345,11 +337,7 @@ IF(NOT enable_memcheck) 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() @@ -425,9 +413,7 @@ IF(NOT enable_memcheck) ### 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") @@ -466,7 +452,6 @@ IF(NOT enable_memcheck) ENDIF() ENDIF() - ## OTHER ## ADD_TEST(testall ${CMAKE_BINARY_DIR}/testall)