-
Notifications
You must be signed in to change notification settings - Fork 229
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
DaCe + Likwid #475
Comments
Hi Lukas, thanks for the great news!
Thanks for your efforts to integrate LIKWID in such a important framework. Best regards, |
Thanks for the feedback!
We already had a flag PAPI_Counters, so we kept it consistent. But we're considering changing it to make it cleaner.
Good point, I'll add a method to retrieve the list of the available groups from python.
We're currently just passing the variable on to Likwid (as in the internal-markerAPI example). According to my tests, it doesn't support this right now
This is indeed the most critical feature that we want to support. I guess, since we only support a single group right now, it is not too come complex (the currently active group is the only one measured). Would be cool to see how we can get this through perfmon calls.
Good point, I will add a figure to the docu that we're currently creating and some minimal excerpt to the sample.
LIKWID_EVENTS is read at the code generation (sdfg.compile in the python code), so you can actually set it in python before calling .compile. We're currently converting the maps in our intermediate representation to loops with OMP pragmas, but we can only set the number of threads globally with OMP_NUM_THREADS. We're working on supporting more dynamic schemas in the future. Whenever you run a DaCe program that calls .compile, you can inspect the generated code in the .dacecache/src/*.cpp file of your current working directory. |
The internal-markerAPI example contains '|' between groups/eventsets. So it's already possible to specify them but DaCe has to switch between them.
After you read in the MarkerAPI file, you can use the common functions: err = perfmon_readMarkerFile(getenv("LIKWID_FILEPATH"));
for (t = 0; t < NUM_THREADS; t++) {
for (i = 0; i < perfmon_getNumberOfRegions(); i++) {
int gid = perfmon_getGroupOfRegion(i);
for (k = 0; k < perfmon_getNumberOfMetrics(gid); k++) {
char* metric_name = perfmon_getMetricName(gid, k);
double result = metric_value = perfmon_getMetricOfRegionThread(i, k, t);
}
}
} see https://github.com/RRZE-HPC/likwid/blob/master/examples/C-internalMarkerAPI.c#L436 |
Hello,
I just wanted to let you know that we integrated Likwid into the codegen of our parallel programing framework DaCe. This means that users can now instrument their DaCe programs by just setting a flag on the SDFG (our intermediate representation). We're working on a new docu for DaCe, but you might want to check out our sample.
The whole integration is still experimental and was just merged into main. We would be very happy to receive comments/feedback. Thanks for your awesome tool!
Cheers,
Lukas
The text was updated successfully, but these errors were encountered: