一种基于OpenMP对天文学软件Gridding的优化方法

文档序号:6635949阅读:213来源:国知局
一种基于OpenMP对天文学软件Gridding的优化方法
【专利摘要】本发明公开了一种基于OpenMP对天文学软件Gridding的优化方法,其具体实现过程为:通过将计算数据预先排序,随后将排序后的数据依次分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同,最后对核心计算部分进行向量化。该一种基于OpenMP对天文学软件Gridding的优化方法与现有技术相比,避免了原Gridding软件中的数据依赖性问题,及由此导致的访存冲突,及难以向量化的问题;采用本发明的方法,Gridding的性能提升为原软件的5.5倍。
【专利说明】—种基于OpenMP对天文学软件Gr i dd i ng的优化方法

【技术领域】
[0001]本发明涉及计算机信息【技术领域】,具体地说是一种实用性强、基于OpenMP对天文学软件Gridding的优化方法。

【背景技术】
[0002]Gridding软件是天文学中非常重要的一个软件。以即将建成的世界上最大的天文射电望远镜-平方公里阵列(SKA)项目为例,Gridding的计算量占总计算量的25%左右。SKA产生的数据量非常庞大,完全处理这些数据需要百亿亿次级(Exa-scale)的超级计算机,计算量是目前世界上最快的超级计算机天河2号(广州,中国)的20倍。可以看到,如果在优化后Gridding软件的计算性能能成倍的增长,则可节省庞大的计算量,这对SKA项目,及世界天文学界是非常有意义的。
[0003]本发明提供一种基于OpenMP实现的针对天文学软件Gridding的高性能优化方法,该方法通过排序有效的改进了访存命中率,同时通过数据在OpenMP线程间的分块,有效的避免了线程间的数据依赖性,并通过向量化指令,使得核心计算部分完全向量化,这些手段极大的提升了 Gridding程序的性能。


【发明内容】

[0004]本发明的技术任务是针对以上不足之处,提供一种实用性强、基于OpenMP对天文学软件Gridding的优化方法。
[0005]—种基于OpenMP对天文学软件Gridding的优化方法,其具体实现过程为:
一、首先将计算数据预先排序,这里的计算数据是Gridding软件中随机生成的,排序即为将具有相同值的数据元素聚集在一起,使无序的数据序列变为有序;
二、将排序后的数据分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同:将数据分割为若干块,各块的大小相同,每一个OpenMP线程根据自身的线程编号分得其对应的一块;
三、对核心计算部分OpenMP进行向量化:通过IntelAVX指令,将核心计算部分OpenMP分块,数据块的长度匹配向量化处理单元VPU的线宽,利用硬件资源使向量化处理单元VPU发挥其性能。
[0006]所述预先排序过程采用快速排序算法,该快速排序算法的过程为:按列输入数据,然后按照由小到大的次序对其进行排序,输出排序后的结果。
[0007]所述核心计算部分进行向量化之前,核心计算的OpenMP先进行并行化,其过程为:在开始计算之前,启动OpenMP线程;随后各个线程照步骤二得到各自的数据块;最后各线程针对各自的数据块进行计算。
[0008]所述步骤三中Intel Xeon CPU中VPU的线宽为256位,Intel Xeon Phi中VPU的线宽为512位。
[0009]本发明的一种基于OpenMP对天文学软件Gridding的优化方法,具有以下优点: 该发明的一种基于OpenMP对天文学软件Gridding的优化方法具有高扩展性、高效率、易于编程的特点;通过对计算数据的排序,避免了内存内的数据跳跃访问,从而有效的降低了访存缺失,最大程度的利用硬件资源,提升Gridding代码的性能;该方法避免了原Gridding软件中的数据依赖性问题,及由此导致的访存冲突,及难以向量化的问题,Gridding的性能提升为原软件的5.5倍,实用性较强,适用范围广泛,易于推广。

【专利附图】

【附图说明】
[0010]附图1为未排序的计算数据在各个线程之间的分配图。
[0011]附图2为排序后的计算数据在各个线程之间的分配图。

【具体实施方式】
[0012]下面结合附图和具体实施例对本发明作进一步说明。
[0013]本发明提供一种基于OpenMP对天文学软件Gridding的优化方法,该方法是一种可获得多倍性能加速的基于OpenMP实现的针对天文学软件Gridding的高性能的优化方法。其具体过程为:通过将计算数据预先排序,随后将排序后的数据依次分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同,最后对核心计算部分进行向量化。该方法避免了原Gridding软件中的数据依赖性问题,及由此导致的访存冲突,及难以向量化的问题。对计算数据的预先排序是该方法的基础,原Gridding软件中计算数据是随机生成的,这就使得具有相同值的数据元素可能出现在数据序列的不同位置,当经过排序后,这些值相同的数据将会聚集在一起。这样可极大的提升访存的连续性,从而可显著的提升程序的性能。尽管排序算法本身会消耗部分计算时间,但是这与其带来的性能的提升而言是非常值得的。为了进一步的降低排序过程的时间消耗,本方法采用了快速排序算法。排序后的数据需要依次分配给不同的线程,这是本方法的核心。数据分配后将使得不同的线程间拥有的大部分数据是不同的,同时也保证了具有线程间的相同值的数据在CPU计算中处于不同的时刻,这就保证了计算中不会出现多个线程同时访问一个数据的情况,也就避免了由于数据依赖性带来的访存冲突。
[0014]进一步的,其具体实现过程为:
一、首先将计算数据预先排序,由于对计算数据的排序将引入额外的计算时间,为了将该部分时间降至最低,本发明采用了当前性能最好的快速排序算法将内存中无需的数据序列变为有序,该算法的具体内容为:对于一列输入数据,算法按照由小到大的次序对其进行排序,输出为排序后的结果。该算法不增加额外的内存。
[0015]二、由于计算数据序列中存在着多个具有相同值的数据元素,线程之间的访存冲突,即多个线程同时访问具有相同值的数据元素,这些数据元素指向同一内存地址,如果多个线程对同一内存地址进行操作,将导致计算的不确定,从而导致计算失效。为了避免线程之间的访存冲突,需要设计数据在OpenMP各个线程之间的分配过程。
[0016]将排序后的数据分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同:将数据分割为若干块,各块的大小相同,每一个OpenMP线程根据自身的线程编号分得其对应的一块。
[0017]该过程与排序过程结合在一起,即可避免线程之间的访存冲突问题。下面将结合附图1与图2讲述其原理。
[0018]在图1中给出了未排序的计算数据在各个线程之间的分配,可以看到,计算数据gind中存在着一些具有相同值的元素,3、6、8、13。当将gind分配至三个线程Thread O、Thread 1、及Thread 2中时,可以看到元素3均出现在线程Thread O与Thread I的第一个位置,由于线程Thread O与Thread I将同时开始计算,这将导致这两个线程将对同一个内存地址进行操作(因为gind中相同的元素值指向同一内存地址),即产生了访存冲突。
[0019]在图2中给出排序后的计算数据在各个线程之间的分配图,当对计算数据gind排序后,各线程之间的数据如该附图2所示。由图2可以看到,此时具有相同值的元素或者位于同一线程内,比如元素3全部位于Thread O中,元素13全部位于Thread 2中;或者位于前一线程的末尾及后一线程的开端,如元素6分别位于Thread O线程的末尾及Thread I线程的开头。由于所有的线程同时开始计算,这样元素6就不会被Thread O线程及ThreadI线程同时访问。对于元素3由于他们均位于Thread O线程内,线程内部一次只能访问一个元素,因此不会出现对元素3的同时访问问题,元素13于此类同。此时可以看到,通过排序及各个线程之间的依次分配数据,有效的避免了访存的冲突。
[0020]三、核心计算的OpenMP先进行并行化,其过程为:在开始计算之前,启动OpenMP线程;随后各个线程照步骤二得到各自的数据块;最后各线程针对各自的数据块进行计算。
[0021]四、对核心计算部分OpenMP进行向量化:将核心计算分块,数据块的长度匹配向量化处理单元(VPU)的线宽,其中Intel Xeon CPU中VPU的线宽为256位,Intel Xeon Phi中VPU的线宽为512位。并采用Intel AVX指令,对核心代码重新编程,使向量化处理单元(VPU)发挥其最大的性能。
[0022]针对上述四个步骤,其通过代码具体实现的过程为:
对于第一步,采用快速排序算法对计算数据进行排序,其中快速排序算法的伪代码如下:
算法1:快速排序算法的伪代码
Void quicksort(int A[], int q, int r)
{
Ints, X
If (q<r){
x=A[q];
s=q;
for (inti = q+1; i〈=r; i ++) {
if(A[i]<=x) {
s=s+l;

swap (&A[s], &A[i]);
}//endif
}//endfori
swap(&A[q], &A[s]);
quicksort (A, q, s~l);
quicksort (A, s+1, r);
}//endif(q〈r)
}
Void swap (int * a,int * b)
{
Inttmp;
tmp=氺b;
氺b=氺a;
氺a=tmp;
}
算法I结束。
[0023]对于第二步,将排序后的数据分配至各个OpenMP线程间,该过程的伪代码如下: 算法2 =OpenMP各线程间的数据划分过程:
#define BL0CK_L0ff (id, ρ, η) ((id) * (η) / (ρ))
#define BL0CK_HIGH(id, ρ, η) (BL0CK_L0ff ((id) +1, ρ, η) -1)
#pragma omp parallel private(gind, cind)
{
int id=omp_get_thread_num();
intbs=BL0CK_L0ff(id, Num_threads, samSize);
int be=BLOCK_HIGH(id, Num_threads, samSize);
}
算法2结束。
[0024]算法2中,首先得到各个OpenMP各线程的身份表示,id。随后基于该id,得到每个线程内数据的起始索引bs与be。随后各个线程内的计算由bs开始,be结束。
[0025]对于第三步,核心计算的OpenMP并行化,其过程为:在开始计算之前,启动OpenMP线程;随后各个线程照算法2得到各自的数据块;最后各线程针对各自的数据块进行计算。内核的计算共包含3层循环,伪代码如下:
for (intsuppv = O; suppv<sSize; suppv++) {
for (intdind = bs; dind<= be; ++dind) {
for (intsuppu = 0; suppu〈sSize; suppu++) {

}

}
}
其中在循环suppu内进行计算。各线程之间计算任务的控制由第二个循环(循环索引为dind)进行控制。
[0026]对于第四步,核心计算的向量化。本发明编写了基于Intel Xeon CPU的AVX指令,其代码如下:
—m512 sam = _mm512_load_ps(( Real *) &Cc[suppu_i_s]); 一m512 ^gridptr = (一m512 木)&gptr[suppu];
—m512 data—r = _mm512_setl_ps (d.real ());
—m512 data—i = _mm512_setl_ps (d.1magO);
—m512 t7 = —mm512—mul—ps(data—r, sam);
—m512 t6 = —mm512—mul—ps(data—i, sam);
—m512 t8 = —mm512—swizzle—ps(t6,—MM—SWIZ—REG—CDAB);
—m512 t7c= t7;
—m512 t9 = —mm512—mask—sub—ps(t7c, 0x5555, t7, t8);
—m512 t9c= t9;
—m512 tlO= —mm512—mask—add—ps(t9c, OxAAAAj t9, t8); gridptr[0] = _mm512_add_ps(gridptr[0], tlO)。
[0027]以上为核心计算的AVX代码。至此完成了基于OpenMP的天文学软件Gridding的性能优化方法的说明。釆用本发明的方法,Gridding的性能提升为原软件的5.5倍。
[0028]上述【具体实施方式】仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述【具体实施方式】,任何符合本发明的一种基于OpenMP对天文学软件Gridding的优化方法的权利要求书的且任何所述【技术领域】的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。
【权利要求】
1.一种基于OpenMP对天文学软件Gridding的优化方法,其特征在于,其具体实现过程为: 一、首先将计算数据预先排序,这里的计算数据是Gridding软件中随机生成的,排序即为将具有相同值的数据元素聚集在一起,使无序的数据序列变为有序; 二、将排序后的数据分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同:将数据分割为若干块,各块的大小相同,每一个OpenMP线程根据自身的线程编号分得其对应的一块; 三、对核心计算部分OpenMP进行向量化:通过IntelAVX指令,将核心计算部分OpenMP分块,数据块的长度匹配向量化处理单元VPU的线宽,利用硬件资源使向量化处理单元VPU发挥其性能。
2.根据权利要求1所述的一种基于OpenMP对天文学软件Gridding的优化方法,其特征在于,所述预先排序过程采用快速排序算法,该快速排序算法的过程为:按列输入数据,然后按照由小到大的次序对其进行排序,输出排序后的结果。
3.根据权利要求1所述的一种基于OpenMP对天文学软件Gridding的优化方法,其特征在于,所述核心计算部分进行向量化之前,核心计算的OpenMP先进行并行化,其过程为:在开始计算之前,启动OpenMP线程;随后各个线程照步骤二得到各自的数据块;最后各线程针对各自的数据块进行计算。
4.根据权利要求1所述的一种基于OpenMP对天文学软件Gridding的优化方法,其特征在于,所述步骤三中Intel Xeon CPU中VPU的线宽为256位,Intel Xeon Phi中VPU的线宽为512位。
【文档编号】G06F9/44GK104375838SQ201410694217
【公开日】2015年2月25日 申请日期:2014年11月27日 优先权日:2014年11月27日
【发明者】吴韶华, 张广勇, 沈铂, 卢晓伟, 王亚娟, 吴庆, 张清 申请人:浪潮电子信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1