CN105808310A - 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 - Google Patents

一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 Download PDF

Info

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
Application number
CN201610198144.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.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Inspur Electronic Information Industry Co Ltd
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 Inspur Electronic Information Industry Co Ltd filed Critical Inspur Electronic Information Industry Co Ltd
Priority to CN201610198144.1A priority Critical patent/CN105808310A/zh
Publication of CN105808310A publication Critical patent/CN105808310A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable 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的核心模块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的高效向量化方法,其特征在于,所述的外层循环仅有一个,而内层循环分为多个内层子循环,每一个内层子循环视为外层循环中的一块。
CN201610198144.1A 2016-04-01 2016-04-01 一种适用于大规模并行软件GTC的核心模块Pushe的高效向量化方法 Pending CN105808310A (zh)

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)

* Cited by examiner, † Cited by third party
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间数据传输进行优化的方法

Patent Citations (3)

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