Intel® High Level Synthesis Compiler Pro Edition: User Guide

ID 683456
Date 4/03/2023

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

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.

The Loop Analysis report has the following panes:
  • Loop List

    Refer to Loop List Pane for details.

  • Loop Analysis

    Refer to Loop Analysis Pane for details.

  • Bottlenecks

    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.

  • Details

    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 Pane

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
You can also review the following High-Level Design Report tools for additional information about bottlenecks in your components and tasks:
  • System Viewer

    The System Viewer provides information about the isolated failing path and bottleneck type.

  • Schedule Viewer (Beta)

    The Schedule Viewer displays the bottleneck path for variables.