A.3.1. Loop Analysis Report
The Loops Analysis report in the High-Level Design Reports (<result>.prj/reports/report.html) contains information about all the loops (coalesced, unrolled, and fused loops) in your design and their unroll statuses. This report helps you examine whether the Intel® HLS Compiler Pro Edition can maximize the throughput of your component.
To access the report, click Throughput Analysis > Loop Analysis.
- Loop List
Refer to Loop List Pane for details.
- Loop Analysis
Refer to Loop Analysis Pane for details.
Refer to Bottlenecks Pane for details.
- Code view
When you click a link under Source Location in the Loop Analysis pane, the code view pane highlights the statement in your code that analysis applies to.
When you click a row in the Loop Analysis pane, the Details pane provides additional details.
Loop List Pane
The left-hand Loop List pane displays the following types of loops:
- Fused loops
- Fused subloops
- Coalesced loops
- Fully unrolled loops
- Partial unrolled loops
- Regular loops
Loop Analysis Pane
The Loops Analysis report captures the following key performance metrics on all blocks:
- Source Location: Indicates the loop location in the source code.
- Pipelined: Indicates whether the body of a loop is pipelined. Pipelining allows for many data items to be processed concurrently (in the same clock cycle) while making efficient use of the hardware in the datapath by keeping it occupied.
- II: Shows the sustainable initiation interval (II) of the loop. Processing data in loops is an additional source of pipeline parallelism. When you pipeline a loop, the next iteration of the loop begins before previous iterations complete.
Dependencies between loop iterations can affect II. The Intel® HLS Compiler automatically identifies dependencies between iterations and builds hardware to resolve dependencies while minimizing the II.
- Scheduled f MAX : Shows an early estimate of the maximum clock frequency (fMAX) at which the loop operates. This estimate does not account for the effects of placing and routing.
- Latency: Shows the number of clock cycles a loop takes to complete one or more instructions. Typically, you want to have low latency. However, lowering latency often results in decreased fMAX.
- Speculated Iterations: Shows the loop speculation. Loop speculation is an optimization technique that enables more efficient loop pipelining by allowing future iterations to be initiated before determining whether the loop was exited already.
For more information, refer to Loop Iteration Speculation (speculated_iterations Pragma) in the Intel HLS Compiler Reference Manual.
- Max Interleaving Iterations: Indicates the number of interleaved invocations of an inner loop that can be executed simultaneously.
For more information, refer to Loop Interleaving Control (max_interleaving Pragma) in the Intel HLS Compiler Reference Manual.
Bottlenecks in a loop mean that one or more loop-carried dependencies cause the loop to have an II greater than 1 or cause the fMAX of your component to be lowered to achieve a loop II of 1.
The Bottlenecks pane identifies the following categories of loop bottlenecks in your components and tasks:
- fMAX-reduction, II-increase, or both
- Compiler-applied bottlenecks (private copies set to 1 on local memory)
- Bottlenecks caused due to the pragmas or attributes that you apply to a loop
- Concurrency-limiter bottleneck