CN105808310A - 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 - Google Patents
一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 Download PDFInfo
- Publication number
- CN105808310A CN105808310A CN201610198144.1A CN201610198144A CN105808310A CN 105808310 A CN105808310 A CN 105808310A CN 201610198144 A CN201610198144 A CN 201610198144A CN 105808310 A CN105808310 A CN 105808310A
- Authority
- CN
- China
- Prior art keywords
- vectorization
- code
- gtc
- pushe
- loop
- 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
- 238000000034 method Methods 0.000 title claims abstract description 23
- 230000004087 circulation Effects 0.000 claims abstract description 47
- 230000000903 blocking effect Effects 0.000 claims description 10
- 125000004122 cyclic group Chemical group 0.000 claims description 10
- 238000002955 isolation Methods 0.000 claims description 8
- 230000004992 fission Effects 0.000 claims description 6
- 239000000126 substance Substances 0.000 claims description 6
- 238000000638 solvent extraction Methods 0.000 abstract 2
- 238000004088 simulation Methods 0.000 description 3
- ZACLXWTWERGCLX-MDUHGFIHSA-N dom-1 Chemical compound O([C@@H]1C=C(C([C@@H](O)[C@@]11CO)=O)C)[C@@H]2[C@H](O)C[C@@]1(C)C2=C ZACLXWTWERGCLX-MDUHGFIHSA-N 0.000 description 2
- 230000004927 fusion Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 101000852665 Alopecosa marikovskyi Omega-lycotoxin-Gsp2671a Proteins 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000010429 evolutionary process Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/451—Code distribution
- G06F8/452—Loops
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法,该方法如下:将原GTC软件中核心模块Pushe通过循环分块,对代码进行辨识,将不能向量化的代码隔离出来,对其余部分的代码进行向量化。本发明的一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法和现有技术相比,具有操作方便、易于实现等特点,通过循环分块,隔离不能被向量化的代码,使其不再影响循环其余部分的向量化属性,以此保证对所有可向量化的代码全部向量化,进而提高GTC软件的性能。
Description
技术领域
本发明涉及高性能计算领域,具体地说是一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法。
背景技术
GTC是用来进行非线性回旋动理学湍流模拟的一个大规模并行软件,由普林斯顿大学等离子体实验室研制。是国际热核聚变实验堆(ITER)计划(该实验是对聚变能源探索中至关重要的一步)中模拟高能粒子湍流的关键程序。
GTC通过对等离子体在磁场作用下的输运性质的模拟,可以再现等离子体随时间的运行演化过程,这对于研究磁约束受控核聚变,提高等离子体在Tokamak中的约束时间,从而最终解决人类的能源问题有着非常重要的作用。
Intel在其Xeon及XeonPhi处理器中提供了256位及512位的向量化单元,这些单元可同时执行16个单精度数或8个双精度数的浮点计算。当软件运行在这些处理器上时,软件的向量化程度决定了软件的性能。向量化程度越高,或对向量化单元的利用率越高,软件的性能越好。由于软件执行的过程中,向量化作用于最内层的循环,一旦内层循环中包含着某些不能被向量化的代码,则整个循环都将不能被向量化。
在GTC软件中,Pushe模块的计算时间占GTC软件总计算时间的80.5%,是GTC中最重要的计算模块。Pushe模块中包含了三个主要循环,按照其执行的先后次序以Loop1,Loop2,Loop3标识,其计算时间占Pushe计算时间的比重依次为:9%,36%,50%,其中Loop1可通过高级编译选项如“-O3”可被编译器直接向量化,但Loop2与Loop3中均不可直接向量化。而Loop2与Loop3所占据的计算时间占Pushe模块计算时间的86%。可以预测,通过Loop2及Loop3的向量化将极大的改进Pushe模块的性能。
发明内容
本发明的技术任务是提供一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法。
本发明的技术任务是按以下方式实现的,该方法如下:将原GTC软件中核心模块Pushe通过循环分块,对代码进行辨识,将不能向量化的代码隔离出来,对其余部分的代码进行向量化。
所述的该方法包括四部分内容:
1)循环分块:将原本的单重循环分裂为外层循环和内层循环;
2)辨识不能向量化的代码:借助Intel编译器提供的编译选项,打印出内层循环的向量化结果,进而查找所有不能向量化的循环;
3)隔离不能向量化的代码:确认所有不能向量化的代码,随后将这些代码放置到内层循环内,使其不再影响循环其余部分的向量化属性;
4)将可向量化的代码向量化:将除了上述不能向量化之外的代码放入内层循环内进行向量化。
所述的外层循环仅有一个,而内层循环分为多个内层子循环,每一个内层子循环视为外层循环中的一块。
本发明的一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法和现有技术相比,具有操作方便、易于实现等特点,通过循环分块,隔离不能被向量化的代码,使其不再影响循环其余部分的向量化属性,以此保证对所有可向量化的代码全部向量化,进而提高GTC软件的性能。
具体实施方式
实施例1:
该适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法如下:将原GTC软件中核心模块Pushe通过循环分块,对代码进行辨识,将不能向量化的代码隔离出来,对其余部分的代码进行向量化。
所述的该方法包括四部分内容:
1)循环分块:将原本的单重循环分裂为外层循环和内层循环;外层循环仅有一个,而内层循环分为6个内层子循环,每一个内层子循环视为外层循环中的一块。
2)辨识不能向量化的代码:借助Intel编译器提供的编译选项,打印出内层子循环的向量化结果,进而查找所有不能向量化的循环;
3)隔离不能向量化的代码:确认所有不能向量化的代码,随后将这些代码放置到1个或6个内层子循环内,使其不再影响循环其余部分的向量化属性;
4)将可向量化的代码向量化:将除了上述不能向量化之外的代码放入1个或6个内层子循环内进行向量化。
实施例2:
该适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法包括四部分内容:
1)循环分块:将原本的单重循环分裂为外层循环和内层循环;外层循环仅有一个,而内层循环分为12个内层子循环,每一个内层子循环视为外层循环中的一块。
2)辨识不能向量化的代码:借助Intel编译器提供的编译选项,打印出内层子循环的向量化结果,进而查找所有不能向量化的循环;
3)隔离不能向量化的代码:确认所有不能向量化的代码,随后将这些代码放置到1个或12个内层子循环内,使其不再影响循环其余部分的向量化属性;
4)将可向量化的代码向量化:将除了上述不能向量化之外的代码放入1个或12个内层子循环内进行向量化。
实施例3:
该适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法包括四部分内容:
1)循环分块:将原本的单重循环分裂为外层循环和内层循环;外层循环仅有一个,而内层循环分为36个内层子循环,每一个内层子循环视为外层循环中的一块。
2)辨识不能向量化的代码:借助Intel编译器提供的编译选项,打印出内层子循环的向量化结果,进而查找所有不能向量化的循环;
3)隔离不能向量化的代码:确认所有不能向量化的代码,随后将这些代码放置到1个或36个内层子循环内,使其不再影响循环其余部分的向量化属性;
4)将可向量化的代码向量化:将除了上述不能向量化之外的代码放入1个或36个内层子循环内进行向量化。
实施例4:
该适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法包括四部分内容:
1)循环分块:将原本的单重循环分裂为外层循环和内层循环;外层循环仅有一个,而内层循环分为2个内层子循环,每一个内层子循环视为外层循环中的一块。
对于第1)步,Pushe中的原始循环主要代码如下:
代码1:GTC的原始循环
dom=1,me
psitmp=zelectron(1,m)
……
endo
由代码1可以看到,其循环索引m的起止坐标分别为1与me,现基于m的起止索引,对其分块,分块后的代码如下:
代码2:对GTC原始循环进行分块
NL2C=me/L2C
dom1=1,NL2C+1
if(m1.le.NL2C)then
m2e=L2C
else
m2e=me-NL2C*L2C
if(m2e.le.0.or.m2e.gt.L2C)m2e=0
endif
dom2=1,m2e
m=(m1-1)*L2C+m2
psitmp=zelectron(1,m)
……
enddo
enddo
由代码2可以看到,将原始循环拆分为了内外两层循环,外层循环的索引为m1,范围在[1,NL2C+1]之间;内层循环的索引为m2,范围在[1,m2e]之间。其中内外循环间的if语句是为了处理L2C不能被me整除的情况时对m2e的影响。值得指出的是,尽管对循环进行了分块,但执行部分的代码仍旧在同一循环内。
2)辨识不能向量化的代码:借助Intel编译器提供的编译选项,打印出内层子循环的向量化结果,进而查找所有不能向量化的循环;
具体如下:对拆分后的代码进行编译,利用编译选项“-vec-report”生成向量化报告,基于该报告检验每一个子循环是否可以向量化;如果仍旧不能向量化,则一直拆分下去,直到定位到不可被向量化的语句为止。
3)隔离不能向量化的代码:确认所有不能向量化的代码,随后将这些代码放置1个内层子循环内,使其不再影响循环其余部分的向量化属性;
4)将可向量化的代码向量化:将除了上述不能向量化之外的代码放入内层子循环内进行向量化。
为了详细的描述第3)、4),代码3中给出了实现的GTC代码如下:
代码3:隔离不能向量化的代码
dom1=1,NL2C+1!外层循环
if(m1.le.NL2C)then
m2e=L2C
else
m2e=me-NL2C*L2C
if(m2e.le.0.or.m2e.gt.L2C)m2e=0
endif
!第一个内层子循环,该循环内包含了可以被向量化的代码。
dom2=1,m2e
m=(m1-1)*L2C+m2
psitmp=zelectron(1,m)
isp=max(1,min(lsp-1,ceiling(psitmp*spdpsi_inv)))
dpx=psitmp-spdpsi*real(isp-1)
dp2=dpx*dpx
thetatmp=zelectron(2,m)
jst=max(1,min(lst-1,ceiling(thetatmp*spdtheta_inv)))
dtx=thetatmp-spdtheta*real(jst-1)
dt2=dtx*dtx
rg=rgpsi(1,isp)+rgpsi(2,isp)*dpx+rgpsi(3,isp)*dp2
ii=max(1,min(mpsi,ceiling((rg-rg0)*delr)))!radialgridoninnerfluxsurface
……
enddo
!第二个内层子循环,该循环内包含了不能被向量化的代码。
dom2=1,m2e
isp=isp_b(m2)
jst=jst_b(m2)
qpsi1(m2)=qpsi(1,isp)
qpsi2(m2)=qpsi(2,isp)
qpsi3(m2)=qpsi(3,isp)
gpsi1(m2)=gpsi(1,isp)
gpsi2(m2)=gpsi(2,isp)
gpsi3(m2)=gpsi(3,isp)
gpsi3_isp1(m2)=gpsi(3,isp+1)
cpsi1(m2)=cpsi(1,isp)
cpsi2(m2)=cpsi(2,isp)
cpsi3(m2)=cpsi(3,isp)
cpsi3_isp1(m2)=cpsi(3,isp+1)
ropp1(m2)=ropp(1,isp)
ropp2(m2)=ropp(2,isp)
ropp3(m2)=ropp(3,isp)
erpp1(m2)=erpp(1,isp)
erpp2(m2)=erpp(2,isp)
erpp3(m2)=erpp(3,isp)
rgpsi1(m2)=rgpsi(1,isp)
rgpsi2(m2)=rgpsi(2,isp)
rgpsi3(m2)=rgpsi(3,isp)
……
enddo
!第三个内层子循环,该循环内包含了其余的可以被向量化的代码。
!DEC$simd
dom2=1,m2e
m=(m1-1)*L2C+m2
psitmp=zelectron(1,m)
……
enddo
enddo
上述代码中,感叹号“!”后的语句为注释语句。
该适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法使得Pushe的性能提升了1.6倍。
通过上面具体实施方式,所述技术领域的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的几种具体实施方式。在公开的实施方式的基础上,所述技术领域的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。
Claims (3)
1.一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法,其特征在于,该方法如下:将原GTC软件中核心模块Pushe通过循环分块,对代码进行辨识,将不能向量化的代码隔离出来,对其余部分的代码进行向量化。
2.根据权利要求1所述的一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法,其特征在于,所述的该方法包括四部分内容:
1)循环分块:将原本的单重循环分裂为外层循环和内层循环;
2)辨识不能向量化的代码:借助Intel编译器提供的编译选项,打印出内层循环的向量化结果,进而查找所有不能向量化的循环;
3)隔离不能向量化的代码:确认所有不能向量化的代码,随后将这些代码放置到内层循环内,使其不再影响循环其余部分的向量化属性;
4)将可向量化的代码向量化:将除了上述不能向量化之外的代码放入内层循环内进行向量化。
3.根据权利要求2所述的一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法,其特征在于,所述的外层循环仅有一个,而内层循环分为多个内层子循环,每一个内层子循环视为外层循环中的一块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610198144.1A CN105808310A (zh) | 2016-04-01 | 2016-04-01 | 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610198144.1A CN105808310A (zh) | 2016-04-01 | 2016-04-01 | 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105808310A true CN105808310A (zh) | 2016-07-27 |
Family
ID=56459210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610198144.1A Pending CN105808310A (zh) | 2016-04-01 | 2016-04-01 | 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105808310A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN103440229A (zh) * | 2013-08-12 | 2013-12-11 | 浪潮电子信息产业股份有限公司 | 一种基于mic架构处理器的向量化优化方法 |
CN103530174A (zh) * | 2013-09-27 | 2014-01-22 | 浪潮电子信息产业股份有限公司 | 一种对cpu与mic间数据传输进行优化的方法 |
-
2016
- 2016-04-01 CN CN201610198144.1A patent/CN105808310A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279327A (zh) * | 2013-04-28 | 2013-09-04 | 中国人民解放军信息工程大学 | 面向异构simd扩展部件的自动向量化方法 |
CN103440229A (zh) * | 2013-08-12 | 2013-12-11 | 浪潮电子信息产业股份有限公司 | 一种基于mic架构处理器的向量化优化方法 |
CN103530174A (zh) * | 2013-09-27 | 2014-01-22 | 浪潮电子信息产业股份有限公司 | 一种对cpu与mic间数据传输进行优化的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Maoz et al. | GR (1) synthesis for LTL specification patterns | |
Stephens et al. | The ARM scalable vector extension | |
CN103440229B (zh) | 一种基于mic架构处理器的向量化优化方法 | |
CN102473104B (zh) | 插入用于优化的simd代码的操作-和-指示指令 | |
US20160321039A1 (en) | Technology mapping onto code fragments | |
Lee et al. | A proof system for separation logic with magic wand | |
CN113031954A (zh) | 代码编译方法、装置、电子设备、存储介质及异构系统 | |
Jankovsky et al. | Extension of the ADAPT Framework for Multiple Simulators. | |
CN105302624A (zh) | 一种可重构编译器中循环流水迭代间启动间距自动分析方法 | |
Futatsugi | Generate & check method for verifying transition systems in CafeOBJ | |
CN105808310A (zh) | 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 | |
Pereira et al. | Extending OpenACC for efficient stencil code generation and execution by skeleton frameworks | |
Sun et al. | Using model types to support contract-aware model substitutability | |
McDonell et al. | Embedded pattern matching | |
Balasubramanian et al. | Designing RISC-V Instruction Set Extensions for Artificial Neural Networks: An LLVM Compiler-Driven Perspective | |
Mota et al. | Rapid prototyping of a semantically well founded Circus model checker | |
Buluc et al. | High-performance analysis of filtered semantic graphs | |
Nalepa et al. | A visual edition tool for design and verification of knowledge in rule-based systems | |
CN104615583A (zh) | 基于gpu平台实现数据处理的方法和装置 | |
Brauer et al. | Adaptable value-set analysis for low-level code | |
Pasztor | Non-standard algorithmic and dynamic logic | |
Lukyanov et al. | Formal Verification of Spacecraft Control Programs | |
L. de Carvalho et al. | Acceleration opportunities in linear algebra applications via idiom recognition | |
Yang et al. | PyISOLVER—A Fast Python OOP Implementation of LRDFIT Model | |
JPS59165147A (ja) | コンパイラにおける条件文のベクトル命令化方式 |
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: 20160727 |