Intel® Advisor Help

Viewing Data from the Dependencies Tool

The Dependencies tool performs extensive analysis of your running program to predict data sharing problems.

Using the Dependencies Report Window

Once data collection and analysis have been completed, data for the loops that you select for deeper analysis appears in the Dependencies Report. You can also find overview information about dependencies (if any) found for loop/site in the Site Report pane under theRefinement Reports tab, and in the Summary tab.

To view the complete Dependencies Report,

The Dependencies Report tab includes the Problems and Messages and Code Locations panes. The Code Locations pane shows details about the loop or site currently selected in the Site Report window. If the Dependencies tool did not detect any Problems, a No Problems Detected message appears in the Site Report window.

To reduce the Problems and Messages displayed, use the Filter pane. Click the All button to display all problems for that category.

In the Problems and Messages pane, the column shows the severity of each problem, such as an informational remark (), warning (), or error (). For example, parallel site and task annotations are reported as informational remarks.

Each Code Location identifies source where something of interest occurs. For example, one code location might be a source line that reads a memory location in task 1, and another code location might be a source line that writes a memory location in task 2. The read and the write, taken together, might be a data sharing problem.

To view the source code associated with a Code Location,

Viewing Recommendations

Once you finish running the Dependencies analysis, you can view the Intel Advisor recommendations in the Recommendations tab next to the Memory Access Patterns and Dependencies report tabs. The Recommendations tab suggests the next steps to consider when adding SIMD Parallelism or Threading to your source code.

Using the Dependencies Source Window

The Dependencies Source window displays the Focus Code Location at the top, one or more Related Code Locations, and a list of all Code Locations at the bottom.

Unlike problems reported in serial programming, which often have a single cause, problems in parallel programming usually involve multiple code locations. For example, consider the case where three different code locations allocate, initialize, and access the same memory location - and each is executed by two or more tasks. In the parallel version of the program, these allocate-initialize-access actions could occur in any order. Because the problem is caused by different source locations, the Dependencies Report window shows a Focus Code Location and Related Code Locations.

In the list of Code Locations, the focus code location is identified with a red icon () and related code locations with a blue icon (). Additional related code locations may be shown in the list at the bottom-left. To the right of each group, you will see their associated call stacks. Use the Call Stack pane to view different code locations in the call stack.

You will see the code locations which, taken together, explain the problem. Use the information in the Dependencies Sources window, together with your understanding of your program, to help you determine the sharing pattern that causes this problem, and perhaps other problems in the same problem set. To help you decide how to fix reported problems, see About Fixing Sharing Problems (use the link below under See Also).

To explore the source code related to a problem, navigate within the selected Focus Code Location or Related Code Location, or use the corresponding Call Stack pane to view other sources.

To edit your code at the corresponding location, double-click within the Focus Code Location or Related Code Location (or right-click and select Edit Source from the context menu). Later, to return to the Result tab, click Result .

To return from the Dependencies Source window to the Dependencies Report window, click Dependencies Report.

The Dependencies Report , Dependencies Source, and other Intel Advisor windows appear within the Result tab. There is a separate Result tab for each project.

Tips on Understanding Sharing Problems

If the Dependencies Report shows problems, you need to investigate these problems. Fix the problems by either restructuring your program's use of the shared data or by adding lock annotations. Start at the top, select a problem, look at its code locations and its call stack, and examine the source code. Repeat this process to investigate each reported problem. The different types of problems and messages are listed in About Problem and Message Types. In the next workflow step, you fix the data sharing problems.

Although a problem can represent a collection of related problems, you may find that multiple problems fall into a family, and it may be possible to find a solution that solves all of them. For example, two different problem sets might be related to accesses to different fields of some object, and the best solution might be to deal with all uses of the object. On the other hand, if the Dependencies tool reports an enormous number of problems, trying to deal with all of them at once may be overwhelming. In this case, your best strategy may be to look for one or more simpler problems to fix and then rerun the Dependencies tool. As you clean away the simpler problems, the overall structure of the remaining sharing problems should become apparent.

If you have trouble understanding exactly what the conflict is between two complicated source lines, you might try splitting one or both of them into simpler statements, rebuild, and run the Dependencies tool again. For example, consider this line:

a[i++] = (b *= 3.0/x) / c[--k];

You could change it into the following:

temp1 = c[--k]; 
b *= 3.0 / x; 
temp2 = i++; 
a[temp2] = b / temp1;

In contrast, if the Dependencies Report does not identify any problems, view the high-level summary of annotations in the Annotation Report window to help you decide whether to modify or keep the annotations. In most cases, you should fix the sharing problems before you proceed to the add parallelism step.

To prevent the Dependencies tool from reporting certain data sharing problems or to request additional analysis for a specific memory region, see the help topic Special-purpose Annotations.

See Also