00001
00002
00003
00004
00005 #ifndef _MIDDLE_BLUE_H_
00006 #define _MIDDLE_BLUE_H_
00007
00008 #include <memory.h>
00009 #include "converse.h"
00010 #include "blue.h"
00011
00012 #undef CkMyPe
00013 #undef CkNumPes
00014 #undef CkMyRank
00015 #undef CkMyNode
00016 #undef CkNumNodes
00017 #undef CkMyNodeSize
00018 #undef CkNodeOf
00019 #undef CkNodeSize
00020 #undef CkNodeFirst
00021
00022 #undef CmiSyncSend
00023 #undef CmiSyncSendAndFree
00024 #undef CmiSyncBroadcast
00025 #undef CmiSyncBroadcastAndFree
00026 #undef CmiSyncBroadcastAll
00027 #undef CmiSyncBroadcastAllAndFree
00028
00029 #undef CmiSyncNodeSend
00030 #undef CmiSyncNodeSendAndFree
00031 #undef CmiSyncNodeBroadcast
00032 #undef CmiSyncNodeBroadcastAndFree
00033 #undef CmiSyncNodeBroadcastAll
00034 #undef CmiSyncNodeBroadcastAllAndFree
00035
00036
00037 #undef CkWallTimer
00038 #undef CkCpuTimer
00039 #define CkWallTimer BgGetTime
00040 #define CkCpuTimer BgGetTime
00041 #define CkVTimer BgGetTime
00042 #define CkElapse BgElapse
00043
00044 #define CkRegisterHandler(x) BgRegisterHandler((BgHandler)(x))
00045 #define CkNumberHandler(n, x) BgNumberHandler(n, (BgHandler)(x))
00046 #define CkNumberHandlerEx(n, x, p) BgNumberHandlerEx(n, (BgHandlerEx)(x), p)
00047
00048 #define ConverseExit BgCharmExit
00049
00054 #if CMK_BIGSIM_NODE
00055
00056 #define CkpvDeclare BnvDeclare
00057 #define CkpvExtern BnvExtern
00058 #define CkpvStaticDeclare BnvStaticDeclare
00059 #define CkpvInitialize BnvInitialize
00060 #define CkpvInitialized BnvInitialized
00061 #define CkpvAccess BnvAccess
00062 #define CkpvAccessOther BnvAccessOther
00063
00064 namespace BGConverse {
00065
00066 inline int CkMyPe() { return BgMyNode(); }
00067 inline int CkNumPes() { int x,y,z; BgGetSize(&x, &y, &z); return (x*y*z); }
00068 inline int CkMyRank() { return 0; }
00069 inline int BgNodeRank() { return BgMyRank(); }
00070 inline int CkMyNodeSize() { return 1; }
00071
00072 #if 0
00073 static inline void CmiSyncSend(int pe, int nb, char *m)
00074 {
00075 int x,y,z;
00076 char *dupm = (char *)CmiAlloc(nb);
00077
00078
00079 memcpy(dupm, m, nb);
00080 BgGetXYZ(pe, &x, &y, &z);
00081 BgSendPacket(x,y,z, ANYTHREAD, CmiGetHandler(m), LARGE_WORK, nb, dupm);
00082 }
00083
00084 static inline void CmiSyncSendAndFree(int pe, int nb, char *m)
00085 {
00086 int x,y,z;
00087
00088 BgGetXYZ(pe, &x, &y, &z);
00089 BgSendPacket(x,y,z, ANYTHREAD, CmiGetHandler(m), LARGE_WORK, nb, m);
00090 }
00091
00092 static inline void CmiSyncBroadcast(int nb, char *m)
00093 {
00094 char *dupm = (char *)CmiAlloc(nb);
00095
00096 memcpy(dupm, m, nb);
00097 BgBroadcastPacketExcept(CkMyPe(), ANYTHREAD, CmiGetHandler(m), LARGE_WORK, nb, dupm);
00098 }
00099
00100 static inline void CmiSyncBroadcastAndFree(int nb, char *m)
00101 {
00102
00103 BgBroadcastPacketExcept(CkMyPe(), ANYTHREAD, CmiGetHandler(m), LARGE_WORK, nb, m);
00104 }
00105
00106 static inline void CmiSyncBroadcastAll(int nb, char *m)
00107 {
00108 char *dupm = (char *)CmiAlloc(nb);
00109
00110 memcpy(dupm, m, nb);
00111 BgBroadcastAllPacket(CmiGetHandler(m), LARGE_WORK, nb, dupm);
00112 }
00113
00114 static inline void CmiSyncBroadcastAllAndFree(int nb, char *m)
00115 {
00116
00117
00118 BgBroadcastAllPacket(CmiGetHandler(m), LARGE_WORK, nb, m);
00119 }
00120 #endif
00121
00122 }
00123
00124
00125 #else
00126
00132 #define CkpvDeclare BpvDeclare
00133 #define CkpvExtern BpvExtern
00134 #define CkpvStaticDeclare BpvStaticDeclare
00135 #define CkpvInitialize BpvInitialize
00136 #define CkpvInitialized BpvInitialized
00137 #define CkpvAccess BpvAccess
00138 #define CkpvAccessOther BpvAccessOther
00139
00140 #define CksvDeclare BnvDeclare
00141 #define CksvExtern BnvExtern
00142 #define CksvStaticDeclare BnvStaticDeclare
00143 #define CksvInitialize BnvInitialize
00144 #define CksvAccess BnvAccess
00145
00146 namespace BGConverse {
00147
00148 static inline int CkMyPe() { return BgGetGlobalWorkerThreadID(); }
00149 static inline int CkNumPes() { return BgNumNodes()*BgGetNumWorkThread(); }
00150 static inline int CkMyRank() { return BgGetThreadID(); }
00151 static inline int BgNodeRank() { return BgMyRank()*BgGetNumWorkThread()+BgGetThreadID(); }
00152 static inline int CkMyNode() { return BgMyNode(); }
00153 static inline int CkNodeOf(int pe) { return pe / BgGetNumWorkThread(); }
00154 static inline int CkNumNodes() { return BgNumNodes(); }
00155 static inline int CkMyNodeSize() { return BgGetNumWorkThread(); }
00156 static inline int CkNodeSize(int node) { return BgGetNumWorkThread(); }
00157 static inline int CkNodeFirst(int node) { return BgGetNumWorkThread()*node; }
00158
00159 static inline void CksdScheduler(int ret) { BgScheduler(ret); }
00160 static inline void CksdExitScheduler() { BgExitScheduler(); }
00161 static inline void CkDeliverMsgs(int nmsg) { BgDeliverMsgs(nmsg); }
00162
00163 #ifdef __cplusplus
00164 extern "C"
00165 #endif
00166 void CkReduce(void *msg, int size, CmiReduceMergeFn mergeFn);
00167
00168 }
00169
00170 #endif
00171
00172 #define CmiSyncSend BgSyncSend
00173 #define CmiSyncSendAndFree BgSyncSendAndFree
00174 #define CmiSyncBroadcast BgSyncBroadcast
00175 #define CmiSyncBroadcastAndFree BgSyncBroadcastAndFree
00176 #define CmiSyncBroadcastAll BgSyncBroadcastAll
00177 #define CmiSyncBroadcastAllAndFree BgSyncBroadcastAllAndFree
00178
00179 #define CmiSyncNodeSend BgSyncNodeSend
00180 #define CmiSyncNodeSendAndFree BgSyncNodeSendAndFree
00181 #define CmiSyncNodeBroadcast BgSyncNodeBroadcast
00182 #define CmiSyncNodeBroadcastAndFree BgSyncNodeBroadcastAndFree
00183 #define CmiSyncNodeBroadcastAll BgSyncNodeBroadcastAll
00184 #define CmiSyncNodeBroadcastAllAndFree BgSyncNodeBroadcastAllAndFree
00185
00186 #undef CmiSyncListSendAndFree
00187 #define CmiSyncListSendAndFree BgSyncListSendAndFree
00188
00189 #define CmiMultipleSend BgMultipleSend
00190
00191 #undef CsdEnqueueLifo
00192
00193 #define CsdEnqueueLifo(m) BgEnqueue((char*)m)
00194
00195 #undef CmiNodeAllBarrier
00196 #define CmiNodeAllBarrier()
00197
00198 #undef CmiBarrier
00199 #define CmiBarrier()
00200
00202 namespace BGConverse {
00203
00204 static inline void BgCharmExit()
00205 {
00206
00207 if (CkMyPe() == 0) BgShutdown();
00208 }
00209
00210 }
00211
00212
00213 #endif