CN106095396A - 循环折叠cpu流水线优化方法 - Google Patents
循环折叠cpu流水线优化方法 Download PDFInfo
- Publication number
- CN106095396A CN106095396A CN201610439760.1A CN201610439760A CN106095396A CN 106095396 A CN106095396 A CN 106095396A CN 201610439760 A CN201610439760 A CN 201610439760A CN 106095396 A CN106095396 A CN 106095396A
- Authority
- CN
- China
- Prior art keywords
- loop
- code
- cycle period
- calculating
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000005457 optimization Methods 0.000 title claims abstract description 19
- 238000000034 method Methods 0.000 title claims abstract description 17
- 230000009466 transformation Effects 0.000 claims abstract description 8
- 238000004458 analytical method Methods 0.000 claims description 6
- 230000001351 cycling effect Effects 0.000 claims description 3
- 230000008901 benefit Effects 0.000 abstract description 2
- 238000004364 calculation method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
Abstract
一种循环折叠CPU流水线优化方法,其特征在于,通过对循环结构的改造,增加循环结构的预计算和循环体分解,消除或降低计算的依赖性,实现浮点数多流水线计算,有效提高CPU的使用率,缩短代码运行时间。本发明的优点是:针对存在数据依赖关系的循环结构进行代码级的循环折叠CPU流水线优化,能够有效优化模式的热点代码,增加CPU的使用效率,大幅度提高代码(模式)的运行速度。
Description
技术领域
本发明涉及一种循环折叠CPU流水线优化方法,主要用于。本发明针对当前主流的高性能计算机架构的CPU流水线多指令发射的功能,提出了代码级(Fortran、C或汇编等)的循环折叠CPU流水线优化方法,主要针对浮点数计算进行优化。该方法通用性较好,可以应用于优化大多数计算代码/模式的热点代码,可有效提高浮点计算速度2-5倍。
背景技术
当前的高性能计算机的CPU大多都支持多指令流水线功能,称为多流水线技术。理论上,浮点数计算流水线在每个时钟周期内可以完成1个浮点数计算,即1次向量的乘加运算。但是由于多数代码的计算存在依赖性,经常出现流水线阻塞,导致浮点数计算的流水线处于空闲等待状态。虽然现有的编译器能够在一定程度上可自动实现部分浮点数计算流水线的优化,但在循环结构中,编译器的自动流水线优化效果比较差,需要对代码(Fortran、C或汇编等)针对流水线计算的特点进行手工优化。本发明针对这个问题提出了一种循环折叠的CPU流水线优化方法。图1给出了1个典型例子,循环体分为三部分,分别记为Part-A,Part-B和Part-C。在Part-A中包含数据在数组/内存中的读入和部分计算;在Part-B中,大部分计算,但该部分的计算依赖于Part-A的计算结果;而Part-C包含部分计算和数据写入数组/内存,其计算也依赖于Part-B的计算结果。图1中间2个箭头表示了3部分计算的数据依赖关系:Part-A需要从数组中进行数据读取,Part-B依赖于Part-A的结果,而Part-C依赖于Part-B,而Part-C需要在每一个循环周期内将最终结果记录在一个数组中。该循环体的计算存在典型的数据依赖关系,编译器很难自动实现流水线优化。
发明内容
本发明旨在提供一种针对存在数据依赖的循环结构在代码级的浮点数流水线计算优化方法,以改进CPU使用效率,提高代码(模式)运行速度。
本发明的技术方案是:一种循环折叠CPU流水线优化方法,其特征在于,通过对循环结构的改造,增加循环结构的预计算和循环体分解,消除或降低计算的依赖性,实现浮点数多流水线计算,有效提高CPU的使用率,缩短代码运行时间。
该方法包括以下步骤:
(1)循环体分析与合并:分析相邻的多个循环体,若它们之间不存在依赖关系,对其进行合并,以便同时进行优化;
(2)分析循环结构的数据依赖关系,并对代码语句进行分组:对于原始的循环体分析浮点数计算语句之间存在的数据依赖关系,根据依赖关系对代码语句进行分组;
(3)改造循环结构:为了消除浮点数计算的数据依赖性,将分的组代码重新排列,在循环体外,将第一个循环周期中第一组的计算移到循环之前,这样,调整后的每个循环周期内的第二组的计算将不依赖该循环周期的第一组,而原来在该循环周期中的第三组计算也移到下一个循环周期完成,以此类推;最后一个循环周期的组也将在循环之后进行;在调整后的每个循环周期中,各组代码的计算将不再存在数据依赖关系,可同时进行计算。
本发明的优点是:针对存在数据依赖关系的循环结构进行代码级的循环折叠CPU流水线优化,能够有效优化模式的热点代码,增加CPU的使用效率,大幅度提高代码(模式)的运行速度。
附图说明
图1是本发明现有技术代码计算过程中的数据依赖关系示意图;(图中:Loop:循环体;data:数据;60 clock cycle:60个时钟周期)。
图2是优化后代码计算过程中的数据依赖关系示意图(图中:Loop 1:第1循环周期;data:数据;task:计算任务;time:时间;21 clock cycle:21个时钟周期)。
具体实施方式
参见图2,本发明一种针对存在数据依赖的循环结构在代码级的浮点数流水线计算优化方法,其特征在于,通过对循环结构的改造,增加循环结构的预计算和循环体分解,消除或降低计算的依赖性,实现浮点数多流水线计算,有效提高CPU的使用率,缩短代码运行时间。包括如下步骤:
(1)循环体分析与合并。由于该方法适用于单个循环体的优化,而多个循环体可进行合并,然后进行下面的优化过程。分析相邻的多个循环体,若它们之间不存在依赖关系,对其进行合并,以便同时进行优化。
(2)分析循环结构的数据依赖关系并对代码语句进行分组。对于原始的循环体分析浮点数计算语句之间存在的数据依赖关系,根据依赖关系对代码语句进行分组。
(3)改造循环结构。为了消除浮点数计算的数据依赖性,我们将三部分代码重新排列,如图2所示。在循环体外,增加Part-A的预计算,即将第一个循环周期中Part-A的计算移到循环之前。这样,调整后的每个循环周期内的Part-B的计算将不依赖该循环周期的Part-A,而原来在该循环周期中的Part-C计算也移到下一个循环周期完成。最后一个循环周期的Part-C也将在循环之后进行。在调整后的每个循环周期中,三部分代码的计算将不再存在数据依赖关系,可同时进行计算。图2中斜向下的箭头表示了代码优化后的数据依赖关系,每个循环周期内的计算仅依赖于上一个循环周期内的计算。在多流水线发射的CPU上,改造后的循环体可以实现浮点数计算的流水线并发计算。
以MASNUM海浪模式中的热点计算为例,优化调整前的代码为:
for(j=0;j<jnthet;j++,pkjps+=24){
PPET(pe2,pe0,0);//调整pe00 ...,pe0,pe2数据相同,对齐不同
for(k=1;k<klv;k++){
e0=pe[k];
e1=wka00*pe00[k]+wka01*pe00[k-mkjpv]
+ wka02*pe02[k]+wka03*pe02[k-mkjpv];
e2=wka10*pe10[k]+wka11*pe10[k-mkjpv]
+wka12*pe12[k]+wka13*pe12[k-mkjpv];
pse[k]+=e0*Coff*(e0*(e1+e2)+e1*e2);
}
}
这段代码是一个两重循环,内循环中的代码存在上述所说的典型数据依赖关系。按照上述方法对其进行优化后的代码如下:
PPET(pe2,pe0,0);pkjps+=24;//adjust pe00 ...
k=0;jt=0;
v01=pe00[k-mkjpv];v03=pe02[k-mkjpv];
v11=pe10[k-mkjpv];v13=pe12[k-mkjpv];
e1=( (wka00*pe00[k]+wka01*v01)+(wka02*pe02[k]+wka03*v03));
e2=( (wka10*pe10[k]+wka11*v11)+(wka12*pe12[k]+wka13*v13));
v01=pe00[k+1-mkjpv];v03=pe02[k+1-mkjpv];
v11=pe10[k+1-mkjpv];v13=pe12[k+1-mkjpv];
e0=Coffe0*pe[jt];jt++;
et=pse[-1]; //for redundant write
for(j=jnthet-1;;j--){// * resonate 0
for(k=1;k<klv;k++){// * resonate 0
em12=e1*e2;ea12=e1+e2;ect=e0*Coff;
e1=( (wka00*pe00[k]+wka01*v01)+(wka02*pe02[k]+wka03*v03));
e2=( (wka10*pe10[k]+wka11*v11)+(wka12*pe12[k]+wka13*v13));
v01=pe00[k+1-mkjpv];v03=pe02[k+1-mkjpv];
v11=pe10[k+1-mkjpv]; v13=pe12[k+1-mkjpv];
pse[jt-2]=et;//in first time is redundant write
et=pse[jt-1]+(ect)*(e0*(ea12)+em12);
e0=Coffe0*pe[jt];
jt++;
}
if(j){
em12=e1*e2; ea12=e1+e2;ect=e0*Coff; pse[jt-2]=et;
et=pe[jt-1]+(ect)*(e0*(ea12)+em12);
PPET(pe2,pe0,0);pkjps+=24;//adjust pe00 ...
k=0;
v01=pe00[k -mkjpv]; v03=pe02[k -mkjpv ];
v11=pe10[k -mkjpv ]; v13=pe12[k -mkjpv];
e1=( (wka00*pe00[k]+wka01*v01)+(wka02*pe02[k]+wka03*v03));
e2=( (wka10*pe10[k]+wka11*v11)+(wka12*pe12[k]+wka13*v13));
v01=pe00[k+1-mkjpv]; v03=pe02[k+1-mkjpv];
v11=pe10[k+1-mkjpv]; v13=pe12[k+1-mkjpv];
e0=Coffe0*pe[jt];jt++;
}else{
em12=e1*e2;ea12=e1+e2;ect=e0*Coff;
pse[jt-2]=et;
et=pse[jt-1]+(ect)*(e0*(ea12)+em12);
pse[jt-1]=et;
break;
}
}
从优化后的代码中,可以看到原来在单次循环周期中的数据依赖关系改变为只依赖上一个循环周期的计算结果,循环的前后分别增加了预处理和后处理的部分语句。我们对该部分代码优化的试验结果显示,对流水线化作业的改进使得每个循环平均计算时间由60个时钟周期降到了21个时钟周期,计算速度的提高约为2.7倍。
Claims (2)
1.一种循环折叠CPU流水线优化方法,其特征在于,通过对循环结构的改造,增加循环结构的预计算和循环体分解,消除或降低计算的依赖性,实现浮点数多流水线计算,有效提高CPU的使用率,缩短代码运行时间。
2.根据权利要求1所述的循环折叠CPU流水线优化方法,其特征在于,该方法包括以下步骤:
(1)循环体分析与合并:分析相邻的多个循环体,若它们之间不存在依赖关系,对其进行合并,以便同时进行优化;
(2)分析循环结构的数据依赖关系,并对代码语句进行分组:对于原始的循环体分析浮点数计算语句之间存在的数据依赖关系,根据依赖关系对代码语句进行分组;
(3)改造循环结构:为了消除浮点数计算的数据依赖性,将分的组代码重新排列,在循环体外,将第一个循环周期中第一组的计算移到循环之前,这样,调整后的每个循环周期内的第二组的计算将不依赖该循环周期的第一组,而原来在该循环周期中的第三组计算也移到下一个循环周期完成,以此类推;最后一个循环周期的组也将在循环之后进行;在调整后的每个循环周期中,各组代码的计算将不再存在数据依赖关系,可同时进行计算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610439760.1A CN106095396A (zh) | 2016-06-20 | 2016-06-20 | 循环折叠cpu流水线优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610439760.1A CN106095396A (zh) | 2016-06-20 | 2016-06-20 | 循环折叠cpu流水线优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106095396A true CN106095396A (zh) | 2016-11-09 |
Family
ID=57236641
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610439760.1A Pending CN106095396A (zh) | 2016-06-20 | 2016-06-20 | 循环折叠cpu流水线优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106095396A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112528224A (zh) * | 2020-12-28 | 2021-03-19 | 上海微波技术研究所(中国电子科技集团公司第五十研究所) | 一种矩阵特征值分解分组循环迭代流水实现方法及系统 |
CN114153494A (zh) * | 2021-12-02 | 2022-03-08 | 中国核动力研究设计院 | 一种基于热力图的热点代码优化方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430654A (zh) * | 2008-12-12 | 2009-05-13 | 北京科技大学 | Sor的并行通信优化方法 |
CN101515231A (zh) * | 2009-03-23 | 2009-08-26 | 浙江大学 | 基于数据流分析的单线程程序并行化的实现方法 |
CN101807144A (zh) * | 2010-03-17 | 2010-08-18 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
-
2016
- 2016-06-20 CN CN201610439760.1A patent/CN106095396A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430654A (zh) * | 2008-12-12 | 2009-05-13 | 北京科技大学 | Sor的并行通信优化方法 |
CN101515231A (zh) * | 2009-03-23 | 2009-08-26 | 浙江大学 | 基于数据流分析的单线程程序并行化的实现方法 |
CN101807144A (zh) * | 2010-03-17 | 2010-08-18 | 上海大学 | 一种前瞻多线程并行执行优化方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112528224A (zh) * | 2020-12-28 | 2021-03-19 | 上海微波技术研究所(中国电子科技集团公司第五十研究所) | 一种矩阵特征值分解分组循环迭代流水实现方法及系统 |
CN114153494A (zh) * | 2021-12-02 | 2022-03-08 | 中国核动力研究设计院 | 一种基于热力图的热点代码优化方法及装置 |
CN114153494B (zh) * | 2021-12-02 | 2024-02-13 | 中国核动力研究设计院 | 一种基于热力图的热点代码优化方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109086678B (zh) | 一种基于深度监督学习提取图像多级特征的行人检测方法 | |
CN108564168B (zh) | 一种对支持多精度卷积神经网络处理器的设计方法 | |
CN103324774B (zh) | 一种基于时钟规划偏差算法的处理器性能优化方法 | |
US8438521B1 (en) | Methods and apparatus for implementing application specific processors | |
US8046511B2 (en) | Implementing signal processing cores as application specific processors | |
CN108537331A (zh) | 一种基于异步逻辑的可重构卷积神经网络加速电路 | |
CN111897580B (zh) | 一种可重构阵列处理器的指令调度系统及方法 | |
CN106095396A (zh) | 循环折叠cpu流水线优化方法 | |
Shi et al. | MG-WFBP: Merging gradients wisely for efficient communication in distributed deep learning | |
CN104408019A (zh) | 一种基于mic平台实现gmres算法并行加速的方法 | |
Wang et al. | Trainer: An energy-efficient edge-device training processor supporting dynamic weight pruning | |
CN101055606A (zh) | 多时钟系统的集成电路平面布局规划方法 | |
CN110929850A (zh) | 基于申威处理器的深度学习算子自动优化系统及方法 | |
CN105302624A (zh) | 一种可重构编译器中循环流水迭代间启动间距自动分析方法 | |
CN112527393A (zh) | 面向主从融合架构处理器的指令调度优化装置和方法 | |
Zong-ling et al. | The design of lightweight and multi parallel CNN accelerator based on FPGA | |
CN101908087A (zh) | 基于gpu的集成电路电源地线网络的并行仿真方法 | |
Vieira et al. | Reshape: A run-time dataflow hardware-based mapping for cgra overlays | |
Sun et al. | Accelerating HMMer on FPGAs using systolic array based architecture | |
Nepomnyashchy et al. | Methods and algorithms for a high-level synthesis of the very-large-scale integration | |
CN102156258A (zh) | SoC测试中的基于平均值余量的测试封装扫描链平衡方法 | |
CN111143208B (zh) | 基于处理器技术辅助fpga实现ai算法的验证方法 | |
CN114117896A (zh) | 面向超长simd管线的二值规约优化实现方法及系统 | |
Park et al. | ShortcutFusion++: optimizing an end-to-end CNN accelerator for high PE utilization | |
CN103885819A (zh) | 一种针对fpga面积优化的优先级资源共享方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20161109 |