X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bc48db087894fd960073b3120cebf90e6b2f8c02..5ca17dc381bb7fba4f2689143e2080f7549ee0ab:/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c diff --git a/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c b/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c index 662cbc81c5..9577b16387 100644 --- a/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c +++ b/teshsuite/smpi/mpich3-test/rma/linked_list_bench_lock_shr.c @@ -19,7 +19,7 @@ #include #include "mpitest.h" -#if HAVE_UNISTD_H +#ifdef HAVE_UNISTD_H #include #endif @@ -33,7 +33,7 @@ /* Linked list pointer */ typedef struct { - int rank; + int rank; MPI_Aint disp; } llist_ptr_t; @@ -44,29 +44,31 @@ typedef struct { } llist_elem_t; static const llist_ptr_t nil = { -1, (MPI_Aint) MPI_BOTTOM }; + static const int verbose = 0; static const int print_perf = 0; /* List of locally allocated list elements. */ static llist_elem_t **my_elems = NULL; -static int my_elems_size = 0; +static int my_elems_size = 0; static int my_elems_count = 0; /* Allocate a new shared linked list element */ -MPI_Aint alloc_elem(int value, MPI_Win win) { +MPI_Aint alloc_elem(int value, MPI_Win win) +{ MPI_Aint disp; llist_elem_t *elem_ptr; /* Allocate the new element and register it with the window */ MPI_Alloc_mem(sizeof(llist_elem_t), MPI_INFO_NULL, &elem_ptr); elem_ptr->value = value; - elem_ptr->next = nil; + elem_ptr->next = nil; MPI_Win_attach(win, elem_ptr, sizeof(llist_elem_t)); /* Add the element to the list of local elements so we can free it later. */ if (my_elems_size == my_elems_count) { my_elems_size += 100; - my_elems = realloc(my_elems, my_elems_size*sizeof(void*)); + my_elems = realloc(my_elems, my_elems_size * sizeof(void *)); } my_elems[my_elems_count] = elem_ptr; my_elems_count++; @@ -75,12 +77,13 @@ MPI_Aint alloc_elem(int value, MPI_Win win) { return disp; } -int main(int argc, char **argv) { - int procid, nproc, i, j, my_nelem; - int pollint = 0; - double time; - MPI_Win llist_win; - llist_ptr_t head_ptr, tail_ptr; +int main(int argc, char **argv) +{ + int procid, nproc, i, j, my_nelem; + int pollint = 0; + double time; + MPI_Win llist_win; + llist_ptr_t head_ptr, tail_ptr; MPI_Init(&argc, &argv); @@ -105,31 +108,33 @@ int main(int argc, char **argv) { else i = 0; - my_nelem = NUM_ELEMS/nproc; + my_nelem = NUM_ELEMS / nproc; if (procid < NUM_ELEMS % nproc) my_nelem++; MPI_Barrier(MPI_COMM_WORLD); time = MPI_Wtime(); - for ( ; i < my_nelem; i++) { + for (; i < my_nelem; i++) { llist_ptr_t new_elem_ptr; int success = 0; + MTEST_VG_MEM_INIT(&new_elem_ptr, sizeof(llist_ptr_t)); + /* Create a new list element and register it with the window */ new_elem_ptr.rank = procid; new_elem_ptr.disp = alloc_elem(procid, llist_win); /* Append the new node to the list. This might take multiple attempts if - others have already appended and our tail pointer is stale. */ + * others have already appended and our tail pointer is stale. */ do { int flag; /* The tail is at my left neighbor, append my element. */ - if (tail_ptr.rank == (procid + nproc-1) % nproc) - { + if (tail_ptr.rank == (procid + nproc - 1) % nproc) { if (verbose) - printf("%d: Appending to <%d, %p>\n", procid, tail_ptr.rank, (void*) tail_ptr.disp); + printf("%d: Appending to <%d, %p>\n", procid, tail_ptr.rank, + (void *) tail_ptr.disp); #ifdef USE_MODE_NOCHECK MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, MPI_MODE_NOCHECK, llist_win); @@ -137,8 +142,8 @@ int main(int argc, char **argv) { MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, 0, llist_win); #endif MPI_Accumulate(&new_elem_ptr, sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank, - (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next), sizeof(llist_ptr_t), - MPI_BYTE, MPI_REPLACE, llist_win); + (MPI_Aint) & (((llist_elem_t *) tail_ptr.disp)->next), + sizeof(llist_ptr_t), MPI_BYTE, MPI_REPLACE, llist_win); MPI_Win_unlock(tail_ptr.rank, llist_win); success = 1; @@ -146,8 +151,7 @@ int main(int argc, char **argv) { } /* Otherwise, chase the tail. */ - else - { + else { llist_ptr_t next_tail_ptr; #ifdef USE_MODE_NOCHECK @@ -155,23 +159,25 @@ int main(int argc, char **argv) { #else MPI_Win_lock(MPI_LOCK_SHARED, tail_ptr.rank, 0, llist_win); #endif - MPI_Get_accumulate( NULL, 0, MPI_DATATYPE_NULL, &next_tail_ptr, - sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank, - (MPI_Aint) &(((llist_elem_t*)tail_ptr.disp)->next), - sizeof(llist_ptr_t), MPI_BYTE, MPI_NO_OP, llist_win); + MPI_Get_accumulate(NULL, 0, MPI_DATATYPE_NULL, &next_tail_ptr, + sizeof(llist_ptr_t), MPI_BYTE, tail_ptr.rank, + (MPI_Aint) & (((llist_elem_t *) tail_ptr.disp)->next), + sizeof(llist_ptr_t), MPI_BYTE, MPI_NO_OP, llist_win); MPI_Win_unlock(tail_ptr.rank, llist_win); if (next_tail_ptr.rank != nil.rank) { if (verbose) - printf("%d: Chasing to <%d, %p>\n", procid, next_tail_ptr.rank, (void*) next_tail_ptr.disp); + printf("%d: Chasing to <%d, %p>\n", procid, next_tail_ptr.rank, + (void *) next_tail_ptr.disp); tail_ptr = next_tail_ptr; - pollint = MAX(MIN_NPROBE, pollint/2); + pollint = MAX(MIN_NPROBE, pollint / 2); } else { for (j = 0; j < pollint; j++) - MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, MPI_STATUS_IGNORE); + MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, + MPI_STATUS_IGNORE); - pollint = MIN(MAX_NPROBE, pollint*2); + pollint = MIN(MAX_NPROBE, pollint * 2); } } } while (!success); @@ -181,12 +187,12 @@ int main(int argc, char **argv) { time = MPI_Wtime() - time; /* Traverse the list and verify that all processes inserted exactly the correct - number of elements. */ + * number of elements. */ if (procid == 0) { - int errors = 0; + int errors = 0; int *counts, count = 0; - counts = (int*) malloc(sizeof(int) * nproc); + counts = (int *) malloc(sizeof(int) * nproc); assert(counts != NULL); for (i = 0; i < nproc; i++) @@ -222,18 +228,19 @@ int main(int argc, char **argv) { MPI_Win_unlock_all(llist_win); if (verbose) - printf("\n\n"); + printf("\n\n"); /* Verify the counts we collected */ for (i = 0; i < nproc; i++) { int expected; - expected = NUM_ELEMS/nproc; + expected = NUM_ELEMS / nproc; if (i < NUM_ELEMS % nproc) expected++; if (counts[i] != expected) { - printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], expected); + printf("Error: Rank %d inserted %d elements, expected %d\n", i, counts[i], + expected); errors++; } } @@ -248,15 +255,16 @@ int main(int argc, char **argv) { MPI_Reduce(&time, &max_time, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD); if (procid == 0) { - printf("Total time = %0.2f sec, elem/sec = %0.2f, sec/elem = %0.2f usec\n", max_time, NUM_ELEMS/max_time, max_time/NUM_ELEMS*1.0e6); + printf("Total time = %0.2f sec, elem/sec = %0.2f, sec/elem = %0.2f usec\n", max_time, + NUM_ELEMS / max_time, max_time / NUM_ELEMS * 1.0e6); } } MPI_Win_free(&llist_win); /* Free all the elements in the list */ - for ( ; my_elems_count > 0; my_elems_count--) - MPI_Free_mem(my_elems[my_elems_count-1]); + for (; my_elems_count > 0; my_elems_count--) + MPI_Free_mem(my_elems[my_elems_count - 1]); MPI_Finalize(); return 0;