Exemple #1
0
/* 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;
    }
}
Exemple #2
0
/* 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);
    }
Exemple #3
0
/* 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);
    }