Intel® Advisor Help

Minimizing Data Collection, Result Size, and Execution Time (Dependencies)

For medium-large targets, several methods are available to minimize the amount of data collected and target execution time. Minimizing the data collected reduces the amount of data you need to examine in the Dependencies Report; it also reduces the size of the generated result. To minimize execution time with the Dependencies tool, consider reducing the data set processed by the application.

Using Pause or Stop Buttons to Minimize Data Collection

After you initiate data collection with the button under Check Dependencies in the Advisor Workflow tab, you can click the nearby button to pause data collection. To continue the collection, use the Start analysis with data collection paused button.

Click the button under Check Dependencies in the Advisor Workflow tab to stop data collection, finalize, and display the partially collected data. You might click this button if you already see many types of problems reported during collection and do not wish to wait for additional analysis to occur.

Using Pause Collection and Resume Collection Annotations to Minimize Data Collection

The Dependencies tool recognizes all annotations, including:

Place Pause Collection and Resume Collection annotations outside the parallel site code regions, which are defined by parallel site begin and parallel site end annotations.

Reducing the Input Data Set with Adequate Code Coverage in Parallel Sites

When you run your program with the Dependencies tool, it is very important that you choose appropriate input data for the specified parallel sites. There are two concerns:

For example, consider this code:

int best_thing(thing *array, int size)
{
    int best = array[0];
    ANNOTATE_SITE_BEGIN(site_array);
    for (int i = 1; i < size; ++i) {
        ANNOTATE_ITERATION_TASK(task_array);
        if (better(array[i], array[best])) best = array[i];
    }
    ANNOTATE_SITE_END();
    return best;
}

This code has a potential conflict between the write to best in one task and the write to best in any other task, and a potential conflict between the read of best in one task and the write to best in any other task. Intel Advisor will report these conflicts - if the write to best is executed.

But what will happen if, with the input data provided for the Dependencies tool run, the first thing in the array is the best thing? In that case, there will be no writes to best executed in any iteration of the loop. Since the Dependencies tool will not see any writes to best, it will not be able to report the potential conflicts.

So, you should choose input data for your Dependencies run that will thoroughly exercise your program's control flow paths, but will not make your program run any longer than necessary.

See Also