MSA: Set PageArray's synchronization reduction client at contribute time
[charm.git] / src / libs / ck-libs / multiphaseSharedArrays / msa-DistPageMgr.ci
1 // emacs mode line -*- mode: c++; tab-width: 4 -*-
2 // this file defines the interfaces for all the type independent
3 // entities in the distributed array implementation
4 module msa
5 {
6     // this is the per processor cache of pages.
7     template<class ENTRY_TYPE, class ENTRY_OPS_CLASS,unsigned int ENTRIES_PER_PAGE> group MSA_CacheGroup
8     {
9         entry MSA_CacheGroup(unsigned int nPages, CkArrayID pageArrayID,
10                          unsigned int max_bytes, unsigned int nEntries, unsigned int numberOfWorkerThreads);
11         entry void AckPage(unsigned int page);
12         entry void ReceivePage(unsigned int page, ENTRY_TYPE pageData[size], int size);
13         entry void ReceivePageWithPUP(unsigned int page, MSA_PageT<ENTRY_TYPE, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE> pageData, int size);
14         entry void enroll(unsigned int numberOfWorkerThreads);
15         entry void enrollAck(int originator);  // internal method
16         entry void enrollDone();  // internal method
17         entry void SyncAck();
18         entry void SyncDone(CkReductionMsg *);
19
20         // Push data to its home and wait for notice that everyone else has caught up
21                 entry [threaded] void FinishSync();
22
23         // for debugging purposes only
24         entry void emitBufferValue(int ID, unsigned int pageNum, unsigned int offset);
25     };
26
27     // this array is the storage for the pages. It in effect
28     // virtualizes the storage for the pages
29     template<class ENTRY_TYPE, class ENTRY_OPS_CLASS,unsigned int ENTRIES_PER_PAGE> array[1D] MSA_PageArray
30     {
31         entry MSA_PageArray(void);
32         entry void setCacheProxy(CProxy_MSA_CacheGroup<ENTRY_TYPE, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE> cache);
33         
34         entry void GetPage(int pe);
35         entry void PAReceivePage(ENTRY_TYPE page[ENTRIES_PER_PAGE], int pe, MSA_Page_Fault_t pageState);
36         entry void PAReceiveRLEPage(MSA_WriteSpan_t spans[nSpans], unsigned int nSpans, ENTRY_TYPE entries[nEntries], unsigned int nEntries, int pe, MSA_Page_Fault_t pageState);
37         entry void PAReceiveRLEPageWithPup(MSA_WriteSpan_t spans[nSpans], unsigned int nSpans, MSA_PageT<ENTRY_TYPE, ENTRY_OPS_CLASS, ENTRIES_PER_PAGE> entries, unsigned int nEntries, int pe, MSA_Page_Fault_t pageState);
38         entry void Sync();
39         
40         // for debugging purposes only
41         entry void emit(int ID, int offset);
42     };
43 };