Skip to content

Charm4py projections #3880

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 24 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
8160492
definitions for projections tracing
ZwFink Nov 4, 2020
00c24eb
Link trace-projections instead of trace-converse and don't build hell…
rbuch Nov 5, 2020
bb520b9
include traces
ZwFink Nov 12, 2020
5440982
debugging
ZwFink Nov 13, 2020
b856d1d
EM names now tracked
ZwFink Nov 20, 2020
f667d4d
EM names now tracked
ZwFink Nov 20, 2020
f054631
remove debug traces
ZwFink Nov 23, 2020
cbe9abc
remove extra tracing
ZwFink Nov 23, 2020
15b5074
projections support for groups
ZwFink Nov 24, 2020
bb51a62
'CkRegisterMainChareExt' now registers actual entry method names
ZwFink Dec 2, 2020
4f210fa
added registration for sections
ZwFink Dec 3, 2020
9b1f8e9
add Charm4Py registration for ArrayMaps
ZwFink Dec 17, 2020
efc585e
Charm4Py tracing can now be disabled and enabled
ZwFink Dec 23, 2020
834e942
Add tracemode summary to Charm4Py tracing
ZwFink Dec 28, 2020
aeaf72d
Remove unnecessary change
ZwFink Dec 28, 2020
570058b
Temporarily use the projections_support branch of Charm4Py for testing
ZwFink Dec 28, 2020
e6c1828
fix merge conflict
ZwFink Dec 28, 2020
25b0fd8
Merge branch 'master' into charm4py_projections
ZwFink Dec 28, 2020
d982e01
Merge branch 'main' into charm4py_projections
ZwFink Oct 14, 2021
e5a967d
add user event tracing
ZwFink Oct 14, 2021
e0eb005
merge main and change archive flag
ritvikrao Mar 17, 2025
b0f3f86
fix hello linking
ritvikrao Mar 28, 2025
2b6f1f1
Merge remote-tracking branch 'origin' into charm4py_projections
ritvikrao Mar 28, 2025
0183131
Merge branch 'main' into charm4py_projections
ritvikrao Apr 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -986,14 +986,23 @@ if(${TARGET} STREQUAL "charm4py")
target_link_libraries(charm cudart cudahybridapi)
endif()

if(${TRACING})
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
target_link_libraries(charm trace-summary trace-projections "-Llib/ -standalone -all_load -c++stl -shared")
else()
target_link_libraries(charm trace-summary trace-projections "-Llib/ -standalone -whole-archive -c++stl -shared")
endif()
endif()

add_dependencies(charm hwloc)
endif()

# Check that we are able to build and link an executable
add_executable(ckhello ${CMAKE_SOURCE_DIR}/tests/charm++/simplearrayhello/hello.C)
add_dependencies(ckhello ck ldb-rand memory-default threads-default conv-static
converse ckmain ckqt
moduleNDMeshStreamer modulecompletion)
else()
# Check that we are able to build and link an executable
add_executable(ckhello ${CMAKE_SOURCE_DIR}/tests/charm++/simplearrayhello/hello.C)
add_dependencies(ckhello ck ldb-none memory-default threads-default conv-static
converse ckmain ckqt
moduleNDMeshStreamer modulecompletion)
endif()

# Create conv-mach-opt.sh
set(optfile_sh ${CMAKE_BINARY_DIR}/include/conv-mach-opt.sh)
Expand Down
14 changes: 9 additions & 5 deletions src/ck-core/charm.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ extern void CkStartQDExt_ArrayCallback(int aid, int* idx, int ndims, int epIdx,
extern void CkStartQDExt_SectionCallback(int sid_pe, int sid_cnt, int rootPE, int ep);
extern void registerCreateCallbackMsgExtCallback(void (*cb)(void*, int, int, int, int *, char**, int*));
extern void registerPyReductionExtCallback(int (*cb)(char**, int*, int, char**));
extern int CkTraceRegisterUserEvent(char *EventDesc, int eventID);
extern void CkTraceBeginUserBracketEvent(int eventID);
extern void CkTraceEndUserBracketEvent(int eventID);

#endif
/*********************************************************/
Expand Down Expand Up @@ -226,11 +229,12 @@ extern void CkRegisterBase(int derivedIdx, int baseIdx);
/** Sets the ifNotThere policy of an EP **/
extern void CkRegisterIfNotThere(int epIdx, CkArray_IfNotThere policy);
#if CMK_CHARM4PY
extern void CkRegisterMainChareExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterGroupExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterSectionManagerExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterArrayMapExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterArrayExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx);
void CkRegisterMainChareExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterGroupExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterGroupExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterSectionManagerExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterArrayMapExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterArrayExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx);
extern void CkRegisterReadonlyExt(const char *name, const char *type, size_t msgSize, char *msg);
#endif

Expand Down
13 changes: 13 additions & 0 deletions src/ck-core/ck.C
Original file line number Diff line number Diff line change
Expand Up @@ -2637,6 +2637,19 @@ void CkArrayExtSend_multi(int aid, int *idx, int ndims, int epIdx, int num_bufs,
}
}

int CkTraceRegisterUserEvent(char *EventDesc, int eventNum)
{
return traceRegisterUserEvent(EventDesc, eventNum);
}

void CkTraceBeginUserBracketEvent(int eventID)
{
traceBeginUserBracketEvent(eventID);
}
void CkTraceEndUserBracketEvent(int eventID)
{
traceEndUserBracketEvent(eventID);
}
#endif

//------------------- Message Watcher (record/replay) ----------------
Expand Down
38 changes: 30 additions & 8 deletions src/ck-core/init.C
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,21 @@ extern void QdCreate(int);
extern void QdProcess(int);
#endif

#if CMK_CHARM4PY && CMK_TRACE_ENABLED
extern void _registerTraceProjections();
extern void _registerTraceSummary();
extern void _createTraceprojections(char **argv);
extern void _createTracesummary(char **argv);

void _createTraces(char **argv) { (void)argv;
_createTraceprojections(argv);
_createTracesummary(argv);
}

#elif CMK_CHARM4PY
void _createTraces(char **argv){};
#endif

void CkRestartMain(const char* dirname, CkArgMsg* args);

#define DEBUGF(x) //CmiPrintf x;
Expand Down Expand Up @@ -1524,14 +1539,21 @@ void _initCharm(int unused_argc, char **argv)
_registerCkMemCheckpoint();
#endif
#if CMK_CHARM4PY
/**
Load balancers are currently registered in Charm++ through a C file that is generated and
and compiled by charmc when making an executable. That file contains appropriate calls to
register whatever load balancers are being linked in.
Without an executable (charm4py just uses libcharm.so), the load balancers in libcharm.so
have to somehow be registered during init.
*/
_registerTreeLB();
/**
Load balancers are currently registered in Charm++ through a C file that is generated and
and compiled by charmc when making an executable. That file contains appropriate calls to
register whatever load balancers are being linked in.
Without an executable (charm4py just uses libcharm.so), the load balancers in libcharm.so
have to somehow be registered during init.
*/
_registerTreeLB();

#if CMK_TRACE_ENABLED
_registerTraceProjections();
_registerTraceSummary();
#endif


#endif

/**
Expand Down
39 changes: 24 additions & 15 deletions src/ck-core/register.C
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ void _registerInit(void)
int CkRegisterMsg(const char *name, CkPackFnPtr pack, CkUnpackFnPtr unpack,
CkDeallocFnPtr dealloc, size_t size)
{
auto messageSize = _msgTable.size();
return _msgTable.add(new MsgInfo(name, pack, unpack, dealloc, size));
}

Expand Down Expand Up @@ -101,51 +102,55 @@ void CkRegisterGroupIrr(int chareIndex,int isIrr){
// TODO give a unique name to entry methods when calling CkRegisterEp
// (no need has appeared for this so this is very low priority)

void CkRegisterGroupExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx) {
void CkRegisterGroupExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx) {
int __idx = CkRegisterChare(s, sizeof(GroupExt), TypeGroup);
CkRegisterBase(__idx, CkIndex_IrrGroup::__idx);

int epIdxCtor = CkRegisterEp(s, GroupExt::__GroupExt, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
CkRegisterDefaultCtor(__idx, epIdxCtor);

for (int i=1; i < numEntryMethods; i++)
CkRegisterEp(s, GroupExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
for (int i=emNamesStart + 1; i < emNamesStart+numEntryMethods; i++)
{
CkRegisterEp(emNames[i], GroupExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
}

*chareIdx = __idx;
*startEpIdx = epIdxCtor;
}

void CkRegisterSectionManagerExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx) {
void CkRegisterSectionManagerExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx) {
int __idx = CkRegisterChare(s, sizeof(SectionManagerExt), TypeGroup);
CkRegisterBase(__idx, CkIndex_IrrGroup::__idx);

int epIdxCtor = CkRegisterEp(s, SectionManagerExt::__SectionManagerExt, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
CkRegisterDefaultCtor(__idx, epIdxCtor);

CkRegisterEp(s, SectionManagerExt::__sendToSection, CkMarshallMsg::__idx, __idx, 0);
CkRegisterEp("sendToSection", SectionManagerExt::__sendToSection, CkMarshallMsg::__idx, __idx, 0);

for (int i=2; i < numEntryMethods; i++)
CkRegisterEp(s, SectionManagerExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
for (int i=emNamesStart+2; i < numEntryMethods+emNamesStart; i++)
{
CkRegisterEp(emNames[i], SectionManagerExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
}

*chareIdx = __idx;
*startEpIdx = epIdxCtor;
}

void CkRegisterArrayMapExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx) {
void CkRegisterArrayMapExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx) {
int __idx = CkRegisterChare(s, sizeof(ArrayMapExt), TypeGroup);
CkRegisterBase(__idx, CkIndex_IrrGroup::__idx);

int epIdxCtor = CkRegisterEp(s, ArrayMapExt::__ArrayMapExt, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
CkRegisterDefaultCtor(__idx, epIdxCtor);

for (int i=1; i < numEntryMethods; i++)
CkRegisterEp(s, ArrayMapExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
CkRegisterEp(emNames[i], ArrayMapExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);

*chareIdx = __idx;
*startEpIdx = epIdxCtor;
}

void CkRegisterArrayExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx) {
void CkRegisterArrayExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx) {
int __idx = CkRegisterChare(s, sizeof(ArrayElemExt), TypeArray);
CkRegisterBase(__idx, CkIndex_ArrayElement::__idx);

Expand All @@ -157,8 +162,10 @@ void CkRegisterArrayExt(const char *s, int numEntryMethods, int *chareIdx, int *

CkRegisterEp(s, ArrayElemExt::__AtSyncEntryMethod, 0, __idx, 0);

for (int i=3; i < numEntryMethods; i++)
CkRegisterEp(s, ArrayElemExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
for (int i=emNamesStart+3; i < emNamesStart+numEntryMethods; i++)
{
CkRegisterEp(emNames[i], ArrayElemExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
}

*chareIdx = __idx;
*startEpIdx = epIdxCtor;
Expand All @@ -184,16 +191,18 @@ int CkRegisterMainChare(int chareIdx, int entryIdx)

#if CMK_CHARM4PY

void CkRegisterMainChareExt(const char *s, int numEntryMethods, int *chareIdx, int *startEpIdx) {
void CkRegisterMainChareExt(const char *s, const char **emNames, int emNamesStart, int numEntryMethods, int *chareIdx, int *startEpIdx) {
int __idx = CkRegisterChare(s, sizeof(MainchareExt), TypeMainChare);
CkRegisterBase(__idx, CkIndex_Chare::__idx);

int epIdxCtor = CkRegisterEp(s, MainchareExt::__Ctor_CkArgMsg, CMessage_CkArgMsg::__idx, __idx, 0);
CkRegisterMessagePupFn(epIdxCtor, (CkMessagePupFn)CkArgMsg::ckDebugPup);
CkRegisterMainChare(__idx, epIdxCtor);

for (int i=1; i < numEntryMethods; i++)
CkRegisterEp(s, MainchareExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
for (int i=emNamesStart+1; i < emNamesStart+numEntryMethods; i++)
{
CkRegisterEp(emNames[i], MainchareExt::__entryMethod, CkMarshallMsg::__idx, __idx, 0+CK_EP_NOKEEP);
}

*chareIdx = __idx;
*startEpIdx = epIdxCtor;
Expand Down
6 changes: 2 additions & 4 deletions src/ck-perf/trace-common.C
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@ void traceWriteSTS(FILE *stsfp,int nUserEvents) {
for(i=0;i<_chareTable.size();i++)
fprintf(stsfp, "CHARE %d \"%s\" %d\n", (int)i, _chareTable[i]->name, _chareTable[i]->ndims);
for(i=0;i<_entryTable.size();i++)
fprintf(stsfp, "ENTRY CHARE %d \"%s\" %d %d\n", (int)i, _entryTable[i]->name,
(int)_entryTable[i]->chareIdx, (int)_entryTable[i]->msgIdx);
fprintf(stsfp, "ENTRY CHARE %d \"%s\" %d %d\n", (int)i, _entryTable[i]->name,
(int)_entryTable[i]->chareIdx, (int)_entryTable[i]->msgIdx);
for(i=0;i<_msgTable.size();i++)
fprintf(stsfp, "MESSAGE %d %u\n", (int)i, (int)_msgTable[i]->size);
}
Expand Down Expand Up @@ -487,10 +487,8 @@ static inline void _traceInit(char **argv)
// check if trace is turned on/off for this pe
CkpvAccess(traceOnPe) = checkTraceOnPe(argv);

#if !CMK_CHARM4PY
// defined in moduleInit.C
_createTraces(argv);
#endif

// Now setup the control point tracing module if desired. It is always compiled/linked in, but is not always enabled
// FIXME: make sure it is safe to use argv in SMP version
Expand Down
Loading