Intel® Advisor Help

Loop Markup to Minimize Analysis Overhead

Issue

Running your target application with the Intel® Advisor can take substantially longer than running your target application without the Intel® Advisor. Depending on an accuracy level and analyses you choose for a perspective, different overhead is added to your application execution time. For example:

Runtime Overhead / Analysis

Survey

Characterization

Dependencies

MAP

Target application runtime with Intel® Advisor compared to runtime without Intel® Advisor

1.1x longer

2 - 55x longer

5 - 100x longer

5 - 20x longer

Solutions

Use the following techniques to skip uninteresting loops and analyze only interesting loops.

Select Loops by ID

Goal: Minimize collection overhead.

Applicable analyses: Characterization with Trip Counts and FLOP collection enabled, Dependencies, Memory Access Patterns.

Use when...

Prerequisites:

  1. Run a Survey analysis.

  2. advisor CLI environment: Identify the loop IDs for the loops of interest.

    advisor --report=survey --project-dir=./myAdvisorProj -- ./bin/myTargetApplication

    In the report, the first column is the loop IDs.

Tip

Intel® Advisor reports tend to be very wide. Do one of the following to generate readable reports:

  • Set your console width appropriately to avoid line wrapping.

  • Pipe your report using the appropriate truncation command if you care only about the first few report columns.

After performing the prerequisites, do one of the following:

Note

There are different ways to select loops is in the CLI environment:

  • The advisor CLI action options --mark-up-list=<string> and --select=<string> merely simulate enabling a GUI checkbox when used within -collect action. They are active only for the duration of the --collect command.

  • The same options used with advisor CLI action --mark-up-loops actually enable a GUI checkbox. They are active beyond the duration of the -mark-up-loops command and applies to all downstream analyses, such as Characterization with Trip Counts and FLOP collection enabled, Dependencies, Memory Access Patterns.

Select Loops by Source File/Line Number

Minimize collection overhead.

Applicable analyses: Characterization with Trip Counts and FLOP collection enabled, Dependencies, Memory Access Patterns.

Use when...

Prerequisites:

  1. Run a Survey analysis.

  2. advisor CLI environment: If necessary, identify the source file and line number for the loops of interest.

    advisor --report=survey --project-dir=./myAdvisorProj -- ./bin/myTargetApplication

After performing the prerequisites, do one of the following:

Note

  • There is essentially no difference between selecting loops by ID and selecting loops by source file/line in the GUI environment. The difference is in the advisor CLI environment:

    • The advisor CLI action option--mark-up-list=<string> merely simulates enabling a GUI checkbox; therefore it persists only for the duration of the --collect command.

    • The advisor CLI action--mark-up-loops and action option --select=<string> actually enables a GUI checkbox; therefore it persists beyond the duration of the --mark-up-loops command and applies to downstream analyses, such as Characterization with Trip Counts and FLOP collection enabled, Dependencies, and Memory Access Patterns.

  • If you use the --mark-up-loops CLI action to mark up loops, you can append and remove source file/line numbers for an analysis run after it using the advisor CLI action option --append=<string> and --remove=<string> respectively.

Select Loops by Criteria

Goal: Minimize collection overhead.

Applicable analyses: Dependencies, Memory Access Patterns.

Use when you want to perform a deeper analysis on loops chosen by criteria instead of by human input, such as when you are running the Intel® Advisor in batch mode or using automated scripts.

To implement in the advisor CLI environment, run the commands similar to the following one by one from the command line or create a script similar to the following examples and run it to execute the commands automatically. Use the --select (recommended) or --loops option to select loops by criteria.

For example, to analyze loop-carried dependencies in loops/functions that have the Assumes dependency present issue, use one of the following:

Select Loops by Markup Algorithm

Goal: Minimize collection overhead.

Applicable analyses: Characterization with Trip Counts and FLOP collection enabled, Dependencies, Memory Access Patterns.

Note

This is only applicable to the Offload Modeling perspective.

Use --select=r:markup=<algorithm> when you want to perform a deeper analysis on loops chosen by a pre-defined markup algorithm based on a programming model used and/or estimated offload profitability.

If you analyze an application that runs on a CPU, use the gpu_generic algorithm. This algorithm selects all potentially profitable loops/functions for additional analyses to collect more data and make sure they can be safely offloaded.

If you analyze code regions that are already offloaded and use a specific programming model, use one of the following algorithms:

For example, to run the Offload Modeling and analyze potentially profitable code regions in details:

Note

Currently, there is no GUI equivalent of the markup strategies. The gpu_generic strategy is used by default.

See Also