/* File format * 1 numberOfThreads numberOfRegions * 2 regionID:regionTag0 * 3 regionID:regionTag1 * 4 regionID threadID countersvalues(space separated) * 5 regionID threadID countersvalues */ void likwid_markerClose(void) { FILE *file = NULL; LikwidResults* results = NULL; int numberOfThreads; int numberOfRegions; if ( ! likwid_init ) { return; } hashTable_finalize(&numberOfThreads, &numberOfRegions, &results); file = fopen(getenv("LIKWID_FILEPATH"),"w"); if (file != NULL) { fprintf(file,"%d %d\n",numberOfThreads,numberOfRegions); for (int i=0; i<numberOfRegions; i++) { fprintf(file,"%d:%s\n",i,bdata(results[i].tag)); } for (int i=0; i<numberOfRegions; i++) { for (int j=0; j<numberOfThreads; j++) { fprintf(file,"%d ",i); fprintf(file,"%d ",j); fprintf(file,"%u ",results[i].count[j]); fprintf(file,"%e ",results[i].time[j]); for (int k=0; k<NUM_PMC; k++) { fprintf(file,"%e ",results[i].counters[j][k]); } fprintf(file,"\n"); } } fclose(file); } for (int i=0;i<numberOfRegions; i++) { for (int j=0;j<numberOfThreads; j++) { free(results[i].counters[j]); } free(results[i].time); bdestroy(results[i].tag); free(results[i].count); free(results[i].counters); } if (results != NULL) { free(results); } msr_finalize(); pci_finalize(); for (int i=0; i<MAX_NUM_THREADS; i++) { accessClient_finalize(thread_socketFD[i]); thread_socketFD[i] = -1; } }
/* File format * 1 numberOfThreads numberOfRegions * 2 regionID:regionTag0 * 3 regionID:regionTag1 * 4 regionID threadID countersvalues(space separated) * 5 regionID threadID countersvalues */ void likwid_markerClose(void) { FILE *file = NULL; LikwidResults* results = NULL; int numberOfThreads = 0; int numberOfRegions = 0; char* markerfile = NULL; int lineidx = 0; char line[1024]; if ( ! likwid_init ) { fprintf(stderr, "LIKWID not properly initialized\n"); return; } hashTable_finalize(&numberOfThreads, &numberOfRegions, &results); if ((numberOfThreads == 0)||(numberOfThreads == 0)) { fprintf(stderr, "No threads or regions defined in hash table\n"); return; } markerfile = getenv("LIKWID_FILEPATH"); if (markerfile == NULL) { fprintf(stderr, "Is the application executed with LIKWID wrapper? No file path for the Marker API output defined.\n"); return; } file = fopen(markerfile,"w"); if (file != NULL) { DEBUG_PRINT(DEBUGLEV_DEVELOP, Creating Marker file %s with %d regions %d groups and %d threads, markerfile, numberOfRegions, numberOfGroups, numberOfThreads); fprintf(file,"%d %d %d\n",numberOfThreads, numberOfRegions, numberOfGroups); DEBUG_PRINT(DEBUGLEV_DEVELOP, %d %d %d, numberOfThreads, numberOfRegions, numberOfGroups); for (int i=0; i<numberOfRegions; i++) { fprintf(file,"%d:%s\n",i,bdata(results[i].tag)); DEBUG_PRINT(DEBUGLEV_DEVELOP, %d:%s, i,bdata(results[i].tag)); } for (int i=0; i<numberOfRegions; i++) { for (int j=0; j<numberOfThreads; j++) { fprintf(file,"%d ",i); fprintf(file,"%d ",results[i].groupID); fprintf(file,"%d ",threads2Cpu[j]); fprintf(file,"%u ",results[i].count[j]); fprintf(file,"%e ",results[i].time[j]); fprintf(file,"%d ",groupSet->groups[results[i].groupID].numberOfEvents); lineidx = sprintf(&(line[0]), "%d %d %d %u %e %d ", i, results[i].groupID, threads2Cpu[j],results[i].count[j],results[i].time[j],groupSet->groups[results[i].groupID].numberOfEvents); for (int k=0; k<groupSet->groups[results[i].groupID].numberOfEvents; k++) { fprintf(file,"%e ",results[i].counters[j][k]); lineidx += sprintf(&(line[lineidx]), "%e ", results[i].counters[j][k]); } fprintf(file,"\n"); DEBUG_PRINT(DEBUGLEV_DEVELOP, %s,line); } } fclose(file); }
/* File format * 1 numberOfThreads numberOfRegions * 2 regionID:regionTag0 * 3 regionID:regionTag1 * 4 regionID threadID countersvalues(space separated) * 5 regionID threadID countersvalues */ void likwid_markerClose(void) { FILE *file = NULL; LikwidResults* results = NULL; int numberOfThreads = 0; int numberOfRegions = 0; char* markerfile = NULL; int lineidx = 0; char line[1024]; int* validRegions = NULL; if ( ! likwid_init ) { return; } hashTable_finalize(&numberOfThreads, &numberOfRegions, &results); if ((numberOfThreads == 0)||(numberOfRegions == 0)) { fprintf(stderr, "No threads or regions defined in hash table\n"); return; } markerfile = getenv("LIKWID_FILEPATH"); if (markerfile == NULL) { fprintf(stderr, "Is the application executed with LIKWID wrapper? No file path for the Marker API output defined.\n"); return; } validRegions = (int*)malloc(numberOfRegions*sizeof(int)); if (!validRegions) { return; } for (int i=0; i<numberOfRegions; i++) { validRegions[i] = 0; } file = fopen(markerfile,"w"); if (file != NULL) { int newNumberOfRegions = 0; int newRegionID = 0; for (int i=0; i<numberOfRegions; i++) { for (int j=0; j<numberOfThreads; j++) { validRegions[i] += results[i].count[j]; } if (validRegions[i] > 0) newNumberOfRegions++; else fprintf(stderr, "WARN: Skipping region %s for evaluation.\n", bdata(results[i].tag)); } if (newNumberOfRegions < numberOfRegions) { fprintf(stderr, "WARN: Regions are skipped because:\n"); fprintf(stderr, " - The region was only registered\n"); fprintf(stderr, " - The region was started but never stopped\n"); fprintf(stderr, " - The region was never started but stopped\n"); } DEBUG_PRINT(DEBUGLEV_DEVELOP, Creating Marker file %s with %d regions %d groups and %d threads, markerfile, newNumberOfRegions, numberOfGroups, numberOfThreads); fprintf(file,"%d %d %d\n",numberOfThreads, newNumberOfRegions, numberOfGroups); DEBUG_PRINT(DEBUGLEV_DEVELOP, %d %d %d, numberOfThreads, newNumberOfRegions, numberOfGroups); for (int i=0; i<numberOfRegions; i++) { if (validRegions[i] == 0) continue; fprintf(file,"%d:%s\n",newRegionID,bdata(results[i].tag)); DEBUG_PRINT(DEBUGLEV_DEVELOP, %d:%s, newRegionID,bdata(results[i].tag)); newRegionID++; } newRegionID = 0; for (int i=0; i<numberOfRegions; i++) { if (validRegions[i] == 0) continue; for (int j=0; j<numberOfThreads; j++) { fprintf(file,"%d ",newRegionID); fprintf(file,"%d ",results[i].groupID); fprintf(file,"%d ",results[i].cpulist[j]); fprintf(file,"%u ",results[i].count[j]); fprintf(file,"%e ",results[i].time[j]); fprintf(file,"%d ",groupSet->groups[results[i].groupID].numberOfEvents); lineidx = sprintf(&(line[0]), "%d %d %d %u %e %d ", newRegionID, results[i].groupID,results[i].cpulist[j],results[i].count[j], results[i].time[j],groupSet->groups[results[i].groupID].numberOfEvents); for (int k=0; k<groupSet->groups[results[i].groupID].numberOfEvents; k++) { fprintf(file,"%e ",results[i].counters[j][k]); lineidx += sprintf(&(line[lineidx]), "%e ", results[i].counters[j][k]); } fprintf(file,"\n"); DEBUG_PRINT(DEBUGLEV_DEVELOP, %s,line); } newRegionID++; } fclose(file); }