Skip to Content.
Sympa Menu

charm - [charm] CKLOOP fix for POWERPC

charm AT lists.cs.illinois.edu

Subject: Charm++ parallel programming system

List archive

[charm] CKLOOP fix for POWERPC


Chronological Thread 
  • From: "Sameer Kumar12" <sameer_km AT in.ibm.com>
  • To: "Charm Mailing List" <charm AT cs.illinois.edu>
  • Subject: [charm] CKLOOP fix for POWERPC
  • Date: Mon, 12 Jun 2017 14:27:45 +0530

Hi,

Can we integrate the following CKLOOP fix? The current implementation has no memory fence calls and heavily relies on the processor not reordering memory stores (e.g. in an X86 processors).

diff --git a/src/libs/ck-libs/ckloop/CkLoop.C b/src/libs/ck-libs/ckloop/CkLoop.C
index a9efec7..bcb45f9 100644
--- a/src/libs/ck-libs/ckloop/CkLoop.C
+++ b/src/libs/ck-libs/ckloop/CkLoop.C
@@ -563,6 +563,7 @@ void CurLoopInfo::stealWork() {
}

fnPtr(first, last, redBufs[nextChunkId], paramNum, param);
+ CmiMemoryWriteFence(); //Wait for shared data to be updated.
execTimes++;
nextChunkId = getNextChunkIdx();
}
diff --git a/src/libs/ck-libs/ckloop/CkLoop.h b/src/libs/ck-libs/ckloop/CkLoop.h
index 80ab125..950a22e 100644
--- a/src/libs/ck-libs/ckloop/CkLoop.h
+++ b/src/libs/ck-libs/ckloop/CkLoop.h
@@ -83,7 +83,8 @@ public:
void waitLoopDone(int sync) {
//while(!__sync_bool_compare_and_swap(&finishFlag, numChunks, 0));
if (sync) while (finishFlag!=numChunks);
- //finishFlag = 0;
+ CmiMemoryReadFence();
+ //finishFlag = 0;
CmiLock(loop_info_inited_lock);
inited = 0;
CmiUnlock(loop_info_inited_lock);
@@ -117,11 +118,14 @@ public:
#endif
#else
__sync_add_and_fetch(&finishFlag, counter);
+ CmiMemoryWriteFence(); //optional..
#endif
}

int isFree() {
- return finishFlag == numChunks;
+ int fin = finishFlag == numChunks;
+ CmiMemoryReadFence();
+ return fin;
}

void **getRedBufs() {



  • [charm] CKLOOP fix for POWERPC, Sameer Kumar12, 06/12/2017

Archive powered by MHonArc 2.6.19.

Top of Page