CN103902362B - 一种对gtc软件shift模块串行代码并行化的方法 - Google Patents

一种对gtc软件shift模块串行代码并行化的方法 Download PDF

Info

Publication number
CN103902362B
CN103902362B CN201410175864.7A CN201410175864A CN103902362B CN 103902362 B CN103902362 B CN 103902362B CN 201410175864 A CN201410175864 A CN 201410175864A CN 103902362 B CN103902362 B CN 103902362B
Authority
CN
China
Prior art keywords
data
thread
serial code
particle
gtc
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.)
Active
Application number
CN201410175864.7A
Other languages
English (en)
Other versions
CN103902362A (zh
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 CN201410175864.7A priority Critical patent/CN103902362B/zh
Publication of CN103902362A publication Critical patent/CN103902362A/zh
Application granted granted Critical
Publication of CN103902362B publication Critical patent/CN103902362B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)

Abstract

本发明公开了一种对GTC软件SHIFT模块串行代码并行化的方法,通过排它性扫描有效的实现了SHIFT模块原有串行代码的并行化,即利用排它性扫描对每个线程的数据在整体数据中的位置进行标定,各个线程依据标定的位置,直接进行后续的计算,避免了原串行代码中将散布在内存中不同位置的数据聚合到一个连续的内存空间的过程,并实现了填充空洞过程的并行化,显著的缩短了GTC程序运行时间,有效的改进了GTC程序的性能。

Description

一种对GTC软件SHIFT模块串行代码并行化的方法
技术领域
本发明涉及高性能计算领域中的并行程序设计及优化,尤其涉及一种对GTC软件SHIFT模块串行代码并行化的方法。
背景技术
高性能计算通常是指利用许多计算资源,如很多的CPU或协处理器,来完成单个CPU所不能完成的计算任务。为使程序运行在多个计算设备上,需要将原本是串行的程序并行化。我们所讲的串行程序是指由于程序自身算法的限制,使得其在计算时仅能采用单个进程或线程运行的程序。而并行程序是指程序在运行时可以利用多个进程在多个设备上同时执行。
GTC是用来进行非线性回旋动理学湍流模拟的一个大规模并行软件,由普林斯顿大学等离子体实验室研制,是国际热核聚变实验堆(ITER)计划中模拟高能粒子湍流的关键程序。GTC通过对等离子体在磁场作用下的输运性质的模拟,可以再现等离子体随时间的运行演化过程,这对于研究磁约束受控核聚变,提高等离子体在Tokamak装置中的约束时间有着非常重要的意义。SHIFT模块是GTC软件最耗时的模块之一,其根源在于该模块中存在着大量的串行代码,通过将该部分的串行代码并行化将极大的提升GTC程序整体的性能。
在串行程序的并行化过程中,首先需要考虑的是采用何种方式来并行化原有的串行程序。设计并行算法一般有三种策略:a)检测和开拓现有串行算法中的固有并行性而直接将其并行化,它虽不是对所有问题总是可行的,但对很多应用问题仍不失为一种有效的方法;b)从问题本身的描述出发,根据问题固有的属性,从头开始设计一种全新的并行算法,它虽有一定的难度,但所设计的并行算法通常是高效的;c)借用已有的并行算法使之可求解新的一类问题,采用该方法往往有可能产生一个很优秀的并行算法。本发明中采用排它性扫描对GTC软件的SHIFT模块进行并行化的方法即属于该类方法。
排它性扫描是指这样的一个过程:假设数组a中共有N个元素,它们依次为:
a={a1,a2,a3,a4,……,aN}
经过排它性扫描后,得到的数组b中同样具有N个元素,它们依次为:
b={0,a1,a1+a2,a1+a2+a3,……,a1+a2+…+aN-1}
可以看到,b中第1个元素的值为0,第i>1个元素的值是a中前i-1个元素之和。以上的过程即为排它性扫描。如果a中的第i个元素代表在i位置处需要操作的数据的个数,那么b中的第i个元素的意义是a(i)在整个数据序列中的位移。
发明内容
本发明针对GTC软件中SHIFT模块由于大部分的串行执行过程导致的程序效率低下的问题,提出了利用排它性扫描进行GTC软件SHIFT模块中串行代码并行化的方法。
本发明公开了一种对GTC软件SHIFT模块串行代码并行化的方法,其解决所述技术问题采用的技术方案如下:
由于SHIFT模块是GTC软件最耗时的模块之一,对GTC程序的性能有着重要的影响,其根源在于SHIFT模块中存在着大量的串行代码,SHIFT模块中串行代码主要来自两个计算部分:a为粒子的挑选过程;b为填充空洞的过程;其中a部分中仅有部分串行代码,而b部分中完全是串行代码;通过本发明所述方法对SHIFT模块中a、b两部分的串行代码进行并行化,其内容主要包括:利用排它性扫描对每个线程的数据在整体数据中的位置进行标定,各个线程依据标定的位置,直接进行后续的计算,避免了原串行代码中将散布在内存中不同位置的数据聚合到一个连续的内存空间的过程,同时将填充空洞过程并行化。
本发明公开的对GTC软件SHIFT模块串行代码并行化的方法的有益效果是:
使用本发明所述对GTC软件SHIFT模块串行代码并行化的方法,通过排它性扫描有效的实现了SHIFT模块原有串行代码的并行化,即利用排它性扫描对每个线程的数据在整体数据中的位置进行标定,各个线程依据标定的位置,直接进行后续的计算,避免了原串行代码中将散布在内存中不同位置的数据聚合到一个连续的内存空间的过程,并实现了填充空洞过程的并行化,显著的缩短了GTC程序运行时间,有效的改进了GTC程序的性能,从而达到提升程序整体性能的目的。
具体实施方式
下面通过实施例,对本发明所述对GTC软件SHIFT模块串行代码并行化的方法做进一步详细说明,并不造成对本发明的限制。
SHIFT模块是GTC软件的热点模块之一,对GTC程序的性能有着重要的影响。SHIFT模块的主要求解代码均为串行代码,这导致了GTC软件求解效率较低,这样通过对SHIFT这两个过程串行部分的并行化,就能有效的提升GTC软件的性能。
本发明给出了采用排它性扫描进行GTC软件SHIFT模块中串行代码并行化的方法,SHIFT模块中串行代码主要来自两个计算部分:a为将需要向左侧或右侧发送的粒子挑选出来的过程(粒子的挑选过程);b为填充空洞的过程;其中a部分中仅有部分串行代码,而b部分中完全是串行代码;通过本方法对a、b两部分中串行代码进行并行化,可有效的提升GTC软件的性能,从而达到提升程序整体性能的目的;
排它性扫描是一种数组元素分段求和的方法,在并行程序设计中有着较为广泛的使用。在SHIFT模块采用排它性扫描,可避免a中原串行代码中将散布在内存中不同位置的数据聚合到一个连续的内存空间的过程,并可将SHIFT模块b填充空洞的过程并行化。
本发明所述对GTC软件SHIFT模块串行代码并行化的方法中,SHIFT模块的a部分中仅有部分代码是并行执行的,其串行部分是将各线程中散布在不同内存位置的数据收集到一个连续的内存空间内,该部分是b部分计算的基础。当进行a部分的并行化设计时,必须同时考虑b部分的并行化方法;
当对SHIFT模块的a部分采用排它性扫描时,必然要求b部分也能采用排它性扫描的结果,这样才能实现最优的并行策略;
当SHIFT模块的b部分也采用排它性扫描的结果时,可降低对a部分计算结果的依赖性,从而可取消a中的串行部分,即取消将各线程中散布在不同内存位置的数据收集到一个连续的内存空间内的操作;
即对GTC软件SHIFT模块采用排它性扫描后,SHIFT模块的b部分可实现并行化。
对a部分中串行代码的并行化过程分包括以下的5个部分:
1)均衡的对全部的粒子数据进行划分,每个线程仅处理本线程分到的任务;
2)采用leftflag与rightflag两个数组来标识本线程内需要发送的粒子,如果粒子需要向左侧发送,则leftflag=1;如果粒子需要向右侧发送,rightflag=1;
3)采用leftcount与rightcount两个数组来标识本线程内需要向左侧及右侧发送的粒子总数;
4)对leftcount与rightcount采用排它性扫描,并将扫描的结果分别放置在leftoffset与rightoffset中。以向左侧发送为例,扫描leftcount结束后,得到的leftoffset中存放了每一个线程的数据在全部线程拥有的数据中的位移;
5)基于leftflag与rightflag两个数组将需要发送的粒子数据拷贝到发送缓冲区中。
以上完成了对数据挑选过程的并行化,对b部分中串行代码的并行化分过程包括以下的4个部分:
1)在各线程中将数据均匀的划分;
2)将各线程中需要发送的数据的索引存入fillerpos数组中;
3)将fillerpos数组中各线程的数据按照线程的先后次序重新进行排列;
4)基于a中第4步排它性扫描的结果leftoffset与rightoffset,得到需要填充的空洞的索引,并将位于总粒子序列末尾的数据填入该位置。
为了更明确的阐述本发明的技术方案和优越性,下面结合具体的案例和伪代码,对本发明做出详细说明。
GTC软件中SHIFT模块可以简单表示成以下的伪代码:
1.a粒子挑选过程
2.$omp parallel…!以下的代码采用openmp并行化
3.iam=omp_get_thread_num()!得到当前线程的索引
4.…
5.mbeg=m0+min(iam,i)*(delm+1)+max(0,(iam-i))*delm!对数据进行划分
6.mend=mbeg+delm+(min((iam+1),i)/(iam+1))-1!对数据进行划分
7.…
8.do m=mbeg,mend
9.…
10.if(zetaright*zetaleft> 0)then
11.…
12.msright(3,iam)=msright(3,iam)+1
13.kzparticle(mbeg+msright(3,iam)-1)=m!记录各线程需要发送的数据索引
14.if(zetaright< 0.5)then
15.msright(1,iam)=msright(1,iam)+1!得到各线程向右发送数据的个数
16.iright(mbeg+msright(1,iam)-1)=m!记录向右发送数据的索引
17.else
18.msleft(1,iam)=msleft(1,iam)+1!得到各线程向左发送的数据个数
19.ileft(mbeg+msleft(1,iam)-1)=m!记录向左发送数据的索引
20.endif
21.endif
22.enddo!结束OpenMP并行
23.以下为a中串行的代码
24.do m=0,gnthreads-1!其中gnthreads为总线程的个数
25.…
26.do i=1,msleft(1,m)
27.ileft(msendleft(1)+i)=ileft(mbeg+i-1)!将内存中分散的数据聚合到一起
28.enddo
29.…
30.do i=1,msright(1,m)
31.iright(msendright(1)+i)=iright(mbeg+i-1)!将内存中分散的数据聚合到一起
32.enddo
33.…
34.do i=1,msright(3,m)
35.kzparticle(msend+i)=kzparticle(mbeg+i-1)!将内存中分散的数据聚合到一起
36.enddo
37.…
38.enddo
39.b 填充空洞的过程
40.do i=1,msend
41.m=kzparticle(i)
42.if (m >mp) exit
43.do while(mtop == kzparticle(lasth))
44.mtop=mtop-1
45.lasth=lasth-1
46.enddo
47.zelectron(1:nparam,m)=zelectron(1:nparam,mtop)!填洞
48.zelectron0(1:nparam,m)=zelectron0(1:nparam,mtop)!填洞
49.mtop=mtop-1
50.if (mtop == mp) exit
51.enddo
52.!b部分结束。
在上面GTC软件中SHIFT模块的伪代码中,a部分中串行代码自24行开始至38行结束,目的是将各线程散布于内存中不同位置的数据有顺序的存放到一个连续的内存空间内。b部分的代码自40行始,至51行结束,完全是串行的。正是由于这些串行的部分导致了SHIFT模块执行效率低下。采用排它性扫描对以上的串行部分进行并行化,并行化后的SHIFT模块可表示成以下的伪代码:
1.a粒子挑选过程
2.!$omp parallel!以下的代码采用OpenMP并行化
3.…
4.iam=omp_get_thread_num()!得到当前线程的索引
5.…
6.mbeg=m0+min(iam,i)*(delm+1)+max(0,(iam-i))*delm!对数据进行划分
7.mend=mbeg+delm+(min((iam+1),i)/(iam+1))-1!对数据进行划分
8.…
9.do m=mbeg,mend
10.…
11.if(zetaright*zetaleft> 0)then!满足该条件的粒子需要挑选出来
12.…
13.if(zetaright< 0.5)then
14.leftflag(index_local,iam)=1!标记向左侧发送的粒子
15.leftcount(iam)= leftcount(iam)+1!计算向左侧发送的粒子个数
16.else
17.rightflag(index_local,iam)=1!标记向右侧发送的粒子
18.rightcount(iam)= rightcount(iam)+1!计算向右侧发送的粒子个数
19.endif
20.endif
21.enddo!结束openmp并行部分
22.!对leftcount与rightcount进行排它性扫描
23.do i=1,gnthreads-1
24.leftoffset(i)=leftoffset(i-1)+leftcount(i-1)
25.rightoffset(i)=rightoffset(i-1)+rightcount(i-1)
26.enddo
27.…
28.b 填充空洞的过程
29.!$omp parallel!下面的代码开始OpenMP并行
30.do m=mbeg,mend
31.…
32.if(zetaright*zetaleft .le. 0)then
33.nfiller=nfiller+1
34.fillerpos(mbeg+nfiller-1)=m
35.endif
36.Enddo
37.mfiller(iam)=nfiller
38.!结束OpenMP并行
39.!下面的代码是串行执行的
40.do iam=0,gnthreads-1
41.…
42.Do i=1,mfiller(iam)
43.fillerpos(nfiller+i)=fillerpos(mbeg+i-1)
44.enddo
45.Endd
46.!$omp parallel!下面的代码重新开始OpenMP并行
47.do m=mbeg,mend
48.if(m .le. mremain)then
49.index_local=m-mbeg+1
50.if((leftflag(index_local,iam).eq.1) .or. (rightflag(index_local,iam).eq.1))then
51.pos=pos+1
52.zpos=fillerpos(nfiller-pos+1)
53.zelectron(1:nparam,m)=zelectron(1:nparam,zpos)
54.zelectron0(1:nparam,m)=zelectron0(1:nparam,zpos)
55.endif
56.endif
57.Enddo
58.!$omp end parallel结束OpenMP并行。
可以看到,上述伪代码实现了a部分:粒子的挑选过程与b部分:填充空洞的过程的并行化。在并行化之前,a部分自24行至38行的串行部分将各线程散布于内存中不同位置的数据有顺序的存放到一个连续的内存空间内,执行时间占据a部分总执行时间的1/2左右。而当采用了排它性扫描后,并行化后的代码中不再需要该部分的计算,这直接将a部分的计算效率提升了1倍。并行化之前,b部分只能串行执行,其计算时间是SHIFT模块整体计算时间的1/2,且随着计算规模的增大,该部分的计算时间所占的比重随之增大。而并行化之后,对于小规模的算例,SHIFT部分的计算时间缩短至原来的1/2。在大规模计算的情况下,SHIFT部分的性能提升了4倍。通过上述实例分析可见,采用排它性扫描方法进行代码的并行化后程序的性能有了很大的提升。
以上所述仅为本发明的具体实施而已,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (1)

1.一种对GTC软件SHIFT模块串行代码并行化的方法,SHIFT模块中串行代码主要来自两个计算部分:a为粒子的挑选过程;b为填充空洞的过程;其中a部分中仅有部分串行代码,而b部分中完全是串行代码,其特征在于,通过该方法对SHIFT模块中a、b两部分的串行代码进行并行化,其内容主要包括:利用排它性扫描对每个线程的数据在整体数据中的位置进行标定,各个线程依据标定的位置,直接进行后续的计算,避免了原串行代码中将散布在内存中不同位置的数据聚合到一个连续的内存空间的过程,同时将填充空洞过程并行化;
对SHIFT模块中a部分的串行代码并行化过程主要包括:
1)均衡的对全部的粒子数据进行划分,每个线程仅处理本线程分到的任务;
2)采用leftflag与rightflag两个数组来标识本线程内需要发送的粒子,若粒子需要向左侧发送,则leftflag=1;若粒子需要向右侧发送,rightflag=1;
3)采用leftcount与rightcount两个数组来标识本线程内需要向左侧及右侧发送的粒子总数;
4)对leftcount与rightcount采用排它性扫描,并将扫描的结果分别放置在leftoffset与rightoffset中;对向左侧发送扫描leftcount结束后,得到的leftoffset中存放了每一个线程的数据在全部线程拥有的数据中的位移;
5)基于leftflag与rightflag两个数组将需要发送的粒子数据拷贝到发送缓冲区中;
对SHIFT模块中b部分的串行代码并行化过程主要包括:
1)在各线程中将数据均匀的划分;
2)将各线程中需要发送的数据的索引存入fillerpos数组中;
3)将fillerpos数组中各线程的数据按照线程的先后次序重新进行排列;
基于a部分排它性扫描的结果leftoffset与rightoffset,得到需要填充的空洞的索引,并将位于总粒子序列末尾的数据填入该位置。
CN201410175864.7A 2014-04-29 2014-04-29 一种对gtc软件shift模块串行代码并行化的方法 Active CN103902362B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410175864.7A CN103902362B (zh) 2014-04-29 2014-04-29 一种对gtc软件shift模块串行代码并行化的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410175864.7A CN103902362B (zh) 2014-04-29 2014-04-29 一种对gtc软件shift模块串行代码并行化的方法

Publications (2)

Publication Number Publication Date
CN103902362A CN103902362A (zh) 2014-07-02
CN103902362B true CN103902362B (zh) 2018-05-18

Family

ID=50993701

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410175864.7A Active CN103902362B (zh) 2014-04-29 2014-04-29 一种对gtc软件shift模块串行代码并行化的方法

Country Status (1)

Country Link
CN (1) CN103902362B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113553142B (zh) * 2021-09-18 2022-01-25 云宏信息科技股份有限公司 云平台的存储空间整理方法、配置方法及可读存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4777633A (en) * 1987-08-14 1988-10-11 International Mobile Machines Corp. Base station for wireless digital telephone system
CN1687897A (zh) * 2005-06-09 2005-10-26 上海交通大学 用户指导的程序半自动并行化方法
CN1932766A (zh) * 2006-10-12 2007-03-21 上海交通大学 面向串行程序代码量大的领域的半自动并行化方法
CN101694628A (zh) * 2009-10-21 2010-04-14 中国人民解放军国防科学技术大学 一种串行与并行模拟相结合的并行计算机系统性能模拟方法
CN103080900A (zh) * 2010-09-03 2013-05-01 西门子公司 并行化自动控制程序的方法及编译器
CN103246541A (zh) * 2013-04-27 2013-08-14 中国人民解放军信息工程大学 自动并行化多级并行代价评估方法
CN103377035A (zh) * 2012-04-12 2013-10-30 浙江大学 针对粗颗粒度流应用的流水并行化方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6758398B1 (en) * 1998-09-11 2004-07-06 L.V. Partners, L.P. Optical reader with ultraviolet wavelength capability

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4777633A (en) * 1987-08-14 1988-10-11 International Mobile Machines Corp. Base station for wireless digital telephone system
CN1687897A (zh) * 2005-06-09 2005-10-26 上海交通大学 用户指导的程序半自动并行化方法
CN1932766A (zh) * 2006-10-12 2007-03-21 上海交通大学 面向串行程序代码量大的领域的半自动并行化方法
CN101694628A (zh) * 2009-10-21 2010-04-14 中国人民解放军国防科学技术大学 一种串行与并行模拟相结合的并行计算机系统性能模拟方法
CN103080900A (zh) * 2010-09-03 2013-05-01 西门子公司 并行化自动控制程序的方法及编译器
CN103377035A (zh) * 2012-04-12 2013-10-30 浙江大学 针对粗颗粒度流应用的流水并行化方法
CN103246541A (zh) * 2013-04-27 2013-08-14 中国人民解放军信息工程大学 自动并行化多级并行代价评估方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
串行程序并行化中计算代码与同步通信代码的自动生成;龚雪容等;《计算机应用与软件》;20080131;第25卷(第1期);第91-92页 *
基于子字并行的串行图像处理算法表示方法;唐文胜等;《计算机工程与应用》;20071231;第35卷(第43期);第86-88页 *

Also Published As

Publication number Publication date
CN103902362A (zh) 2014-07-02

Similar Documents

Publication Publication Date Title
Shao et al. A novel discrete water wave optimization algorithm for blocking flow-shop scheduling problem with sequence-dependent setup times
CN104933245B (zh) 基于神经网络和遗传算法的船用反应堆屏蔽设计优化方法
CN108596403A (zh) 一种车间多行布局的建模和求解方法
Halyo et al. GPU Enhancement of the Trigger to Extend Physics Reach at the LHC
Basu et al. Compiler generation and autotuning of communication-avoiding operators for geometric multigrid
Yazdi Decomposition based multi objective evolutionary algorithms for design of large-scale water distribution networks
CN105005675A (zh) 基于多目标遗传算法的复合绝缘子电场优化方法
CN105630797B (zh) 数据处理方法及系统
Yin et al. DFGNet: Mapping dataflow graph onto CGRA by a deep learning approach
Checconi et al. Massive data analytics: The graph 500 on ibm blue gene/q
CN103902362B (zh) 一种对gtc软件shift模块串行代码并行化的方法
CN102799960B (zh) 面向数据模型的并行业务流程异常检测方法
CN106484532B (zh) 面向sph流体模拟的gpgpu并行计算方法
CN109472734A (zh) 一种基于fpga的目标检测网络及其实现方法
CN110163255A (zh) 一种基于密度峰值的数据流聚类方法及装置
CN108038304A (zh) 一种利用时间局部性的格子玻尔兹曼方法并行加速方法
CN109740763B (zh) 一种量子线路近邻化二维网格形态选择方法
CN116562166A (zh) 一种基于ihba的配电网分布式电源选址定容方法
CN102981886A (zh) 一种优化的memset标准库函数汇编代码生成方法
Richter et al. Heliostat Field Layout Optimization with Evolutionary Algorithms.
Zhong et al. Memory-aware scheduling for complex wired networks with iterative graph optimization
CN107529638B (zh) 线性求解器的加速方法、存储数据库及gpu系统
Yin et al. An improved artificial bee colony algorithm for staged search
Shang et al. A parallel local reconnection approach for tetrahedral mesh improvement
Chin et al. Implementing and evaluating multithreaded triad census algorithms on the Cray XMT

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant