CN106095396A - 循环折叠cpu流水线优化方法 - Google Patents

循环折叠cpu流水线优化方法 Download PDF

Info

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
Application number
CN201610439760.1A
Other languages
English (en)
Inventor
乔方利
尹训强
赵伟
宋振亚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
First Institute of Oceanography SOA
Original Assignee
First Institute of Oceanography SOA
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by First Institute of Oceanography SOA filed Critical First Institute of Oceanography SOA
Priority to CN201610439760.1A priority Critical patent/CN106095396A/zh
Publication of CN106095396A publication Critical patent/CN106095396A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Abstract

一种循环折叠CPU流水线优化方法,其特征在于,通过对循环结构的改造,增加循环结构的预计算和循环体分解,消除或降低计算的依赖性,实现浮点数多流水线计算,有效提高CPU的使用率,缩短代码运行时间。本发明的优点是:针对存在数据依赖关系的循环结构进行代码级的循环折叠CPU流水线优化,能够有效优化模式的热点代码,增加CPU的使用效率,大幅度提高代码(模式)的运行速度。

Description

循环折叠CPU流水线优化方法
技术领域
本发明涉及一种循环折叠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)改造循环结构:为了消除浮点数计算的数据依赖性,将分的组代码重新排列,在循环体外,将第一个循环周期中第一组的计算移到循环之前,这样,调整后的每个循环周期内的第二组的计算将不依赖该循环周期的第一组,而原来在该循环周期中的第三组计算也移到下一个循环周期完成,以此类推;最后一个循环周期的组也将在循环之后进行;在调整后的每个循环周期中,各组代码的计算将不再存在数据依赖关系,可同时进行计算。
CN201610439760.1A 2016-06-20 2016-06-20 循环折叠cpu流水线优化方法 Pending CN106095396A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 上海大学 一种前瞻多线程并行执行优化方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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