int main(int argc, char ** argv) { int rank, nproc, val, i; void **base_ptrs; MPI_Init(&argc, &argv); ARMCI_Init(); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nproc); if (rank == 0) printf("Starting ARMCI mutex read-modify-write test with %d processes\n", nproc); base_ptrs = malloc(nproc*sizeof(void*)); ARMCI_Create_mutexes(rank == 0 ? 1 : 0); ARMCI_Malloc(base_ptrs, (rank == 0) ? sizeof(int) : 0); // Proc 0 has a shared int if (rank == 0) { val = 0; ARMCI_Put(&val, base_ptrs[0], sizeof(int), 0); } ARMCI_Barrier(); for (i = 0; i < NITER; i++) { ARMCI_Lock(0, 0); ARMCI_Get(base_ptrs[0], &val, sizeof(int), 0); val += ADDIN; ARMCI_Put(&val, base_ptrs[0], sizeof(int), 0); ARMCI_Unlock(0, 0); } printf(" + %3d done\n", rank); fflush(NULL); ARMCI_Barrier(); if (rank == 0) { ARMCI_Get(base_ptrs[0], &val, sizeof(int), 0); if (val == ADDIN*nproc*NITER) printf("Test complete: PASS.\n"); else printf("Test complete: FAIL. Got %d, expected %d.\n", val, ADDIN*nproc*NITER); } ARMCI_Free(base_ptrs[rank]); ARMCI_Destroy_mutexes(); free(base_ptrs); ARMCI_Finalize(); MPI_Finalize(); return 0; }
/** @see ddi_armci.h */ void DDI_ARMCI_Memory_finalize() { int code; code = ARMCI_Free(gv(dda_index)); if (code != 0) { fprintf(DDI_STDERR, "%s: ARMCI_Free(%p) returned %i\n", DDI_Id(), gv(dda_index), code); DDI_Error(DDI_ARMCI_MEMORY_FINALIZE_ERROR, DDI_ARMCI_MEMORY_FINALIZE_ERROR_MESSAGE); } code = ARMCI_Destroy_mutexes(); if (code != 0) { fprintf(DDI_STDERR, "%s: ARMCI_Destroy_mutexes() returned %i\n", DDI_Id(), code); DDI_Error(DDI_ARMCI_MEMORY_FINALIZE_ERROR, DDI_ARMCI_MEMORY_FINALIZE_ERROR_MESSAGE); } }
void DDI_ARMCI_Finalize() { int code; const DDI_Comm *comm = (const DDI_Comm *) Comm_find(DDI_COMM_WORLD); #if defined DDI_ARMCI_FREE code = ARMCI_Free((void*)(gv(armci_mem_addr)[comm->me])); if (code > 0) fprintf(stderr,"ARMCI_Free(%p) failed: %i",gv(armci_mem_addr)[comm->me]); code = ARMCI_Free((void*)(gv(armci_cnt_addr)[comm->me])); if (code > 0) fprintf(stderr,"ARMCI_Free(%p) failed: %i",gv(armci_cnt_addr)[comm->me]); #endif code = ARMCI_Destroy_mutexes(); if (code > 0) fprintf(stderr,"ARMCI_Destory_mutexes failed: %i",code); ARMCI_Finalize(); }