void PARMCI_Fence(int proc) { int i; #if defined(DATA_SERVER) && !(defined(GM) && defined(ACK_FENCE)) // printf("%d [cp] fence_arr(%d)=%d\n",armci_me,proc,FENCE_ARR(proc)); if(FENCE_ARR(proc) && (armci_nclus >1)){ int cluster = armci_clus_id(proc); int master=armci_clus_info[cluster].master; armci_rem_ack(cluster); /* one ack per cluster node suffices */ /* note, in multi-threaded case it will only clear for current thread */ bzero(&FENCE_ARR(master),armci_clus_info[cluster].nslave); } #elif defined(BGML) BGML_WaitProc(proc); MEM_FENCE; #else FENCE_NODE(proc); MEM_FENCE; #endif }
void armci_update_fence_array(int proc, int inc) { if (inc) FENCE_ARR(proc)++; else FENCE_ARR(proc)--; }
void PARMCI_Fence(int proc) { #if defined(DATA_SERVER) && !(defined(GM) && defined(ACK_FENCE)) if(FENCE_ARR(proc) && (armci_nclus >1)){ int cluster = armci_clus_id(proc); int master = armci_clus_info[cluster].master; armci_rem_ack(cluster); bzero(&FENCE_ARR(master), armci_clus_info[cluster].nslave); } #elif defined(ARMCIX) ARMCIX_Fence (proc); #elif defined(BGML) BGML_WaitProc(proc); MEM_FENCE; #else FENCE_NODE(proc); MEM_FENCE; #endif }