ZHCUAU3J January 2018 – March 2024
--debug_software_pipeline 选项在生成的汇编文件中放置额外的软件流水线反馈。
如果给定循环的软件流水线成功,并且在编译过程中使用了 --debug_software_pipeline 选项,那么将在生成的汇编代码中的软件流水线信息注释块中添加寄存器使用表。
每行上的数字代表循环内核中的周期号。
每一列代表 C7000 上的一个寄存器。寄存器标记在寄存器使用表的前三行,应逐列读取。
表条目中的 * 表示列标头所指示的寄存器位于内核执行数据包中,内核执行包由标记每一行的周期号指示。
寄存器使用表的一个示例如下:
;* Register Usage Tables:
;*
;* +----------------------------------+----------------------------------+
;* | ASIDE | BSIDE |
;* +----------------+--------+--------+----------------+--------+--------+
;* | "Axx" | "ALx" | "AMx" | "VBxx" | "VBLx" | "VBMx" |
;* +----------------|--------|--------|----------------|--------|--------+
;* |0000000000111111|00000000|00000000|0000000000111111|00000000|00000000|
;* |0123456789012345|01234567|01234567|0123456789012345|01234567|01234567|
;* +----------------|--------|--------|----------------|--------|--------+
;* 0: |* *** |* |*** | * |*** |******* |
;* 1: |* *** |** | ** | ** |*** |* ***** |
;* 2: |* **** |* |*** | * ** |*** |* **** |
;* 3: |****** |* | ** | ** ** |** |* **** |
;* 4: |** *** |* | ** |****** |*** | **** |
;* 5: |** *** |* | ** |*** ** |** |** **** |
;* 6: |* *** |* | ** |*** ** |* |******* |
;* 7: |* *** |* |*** |* ** |** |******* |
;* +----------------+--------+--------+----------------+--------+--------+
;*
;* +----------------+ +--------+ +-------+
;* | "Dxx" | | "Px" | |"CUCRx"|
;* +----------------+ +--------+ +-------+
;* |0000000000111111| |00000000| |0000 |
;* |0123456789012345| |01234567| |0123 |
;* +----------------+ +--------+ +-------+
;* 0: |* | | | | |
;* 1: |* | | | | |
;* 2: |* | | | | |
;* 3: |* | | | | |
;* 4: |* | | | | |
;* 5: |* | | | | |
;* 6: |* | | | | |
;* 7: |* | | | | |
;* +----------------+ +--------+ +-------+
此示例显示在循环内核的第 0 个周期(第一个执行数据包)上,寄存器 A0、A3、A4、A5、A6、AL0、AM0、AM1、AM2、VB5、VBL0、VBL1、VBL2、VBM0、VBM1、VBM2、VBM3、VBM4、VBM5、VBM6 和 D0 全都在这个周期内全都处于激活状态。