Understanding Feedback
1-11
Introduction
1.4.2
Stage 2: Collect Loop Resource and Dependency Graph Information
The second stage of software pipelining a loop is collecting loop resource and
dependency graph information. The results of stage 2 will be displayed in the
feedback window as follows:
Example 1–3.Stage 2 Feedback
;* Loop Carried Dependency Bound(^) : 4
;* Unpartitioned Resource Bound : 4
;* Partitioned Resource Bound(*) : 5
;* Resource Partition:
;* A–side B–side
;* .L units 2 3
;* .S units 4 4
;* .D units 1 0
;* .M units 0 0
;* .X cross paths 1 3
;* .T address paths 1 0
;* Long read paths 0 0
;* Long write paths 0 0
;* Logical ops (.LS) 0 1 (.L or .S unit)
;* Addition ops (.LSD) 6 3 (.L or .S or .D unit)
;* Bound(.L .S .LS) 3 4
;* Bound(.L .S .D .LS .LSD) 5* 4
-
Loop carried dependency bound. The distance of the largest loop carry
path, if one exists. A loop carry path occurs when one iteration of a loop
writes a value that must be read in a future iteration. Instructions that are
part of the loop carry bound are marked with the ^ symbol in the assembly
code saved with the –k option in the *.asm file. The number shown for the
loop carried dependency bound is the minimum iteration interval due to a
loop carry dependency bound for the loop.
Often, this loop carried dependency bound is due to lack of knowledge by
the compiler about certain pointer variables. When exact values of point-
ers are not known, the compiler must assume that any two pointers might
point to the same location. Thus, loads from one pointer have an implied
dependency to another pointer performing a store and vice versa. This can
create large (and usually unnecessary) dependency paths. When the
Loop Carried Dependency Bound is larger than the Resource Bound, this
is often the culprit. Potential solutions for this are shown in Appendix A,
Feedback Solutions.