CN104375838A - 一种基于OpenMP对天文学软件Gridding的优化方法 - Google Patents
一种基于OpenMP对天文学软件Gridding的优化方法 Download PDFInfo
- Publication number
- CN104375838A CN104375838A CN201410694217.7A CN201410694217A CN104375838A CN 104375838 A CN104375838 A CN 104375838A CN 201410694217 A CN201410694217 A CN 201410694217A CN 104375838 A CN104375838 A CN 104375838A
- Authority
- CN
- China
- Prior art keywords
- data
- openmp
- thread
- sequence
- gridding
- 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.)
- Granted
Links
Landscapes
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于OpenMP对天文学软件Gridding的优化方法,其具体实现过程为:通过将计算数据预先排序,随后将排序后的数据依次分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同,最后对核心计算部分进行向量化。该一种基于OpenMP对天文学软件Gridding的优化方法与现有技术相比,避免了原Gridding软件中的数据依赖性问题,及由此导致的访存冲突,及难以向量化的问题;采用本发明的方法,Gridding的性能提升为原软件的5.5倍。
Description
技术领域
本发明涉及计算机信息技术领域,具体地说是一种实用性强、基于OpenMP对天文学软件Gridding的优化方法。
背景技术
Gridding软件是天文学中非常重要的一个软件。以即将建成的世界上最大的天文射电望远镜-平方公里阵列(SKA)项目为例,Gridding的计算量占总计算量的25%左右。SKA产生的数据量非常庞大,完全处理这些数据需要百亿亿次级(Exa-scale)的超级计算机,计算量是目前世界上最快的超级计算机天河2号(广州,中国)的20倍。可以看到,如果在优化后Gridding软件的计算性能能成倍的增长,则可节省庞大的计算量,这对SKA项目,及世界天文学界是非常有意义的。
本发明提供一种基于OpenMP实现的针对天文学软件Gridding的高性能优化方法,该方法通过排序有效的改进了访存命中率,同时通过数据在OpenMP线程间的分块,有效的避免了线程间的数据依赖性,并通过向量化指令,使得核心计算部分完全向量化,这些手段极大的提升了Gridding程序的性能。
发明内容
本发明的技术任务是针对以上不足之处,提供一种实用性强、基于OpenMP对天文学软件Gridding的优化方法。
一种基于OpenMP对天文学软件Gridding的优化方法,其具体实现过程为:
一、首先将计算数据预先排序,这里的计算数据是Gridding软件中随机生成的,排序即为将具有相同值的数据元素聚集在一起,使无序的数据序列变为有序;
二、将排序后的数据分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同:将数据分割为若干块,各块的大小相同,每一个OpenMP线程根据自身的线程编号分得其对应的一块;
三、对核心计算部分OpenMP进行向量化:通过Intel AVX指令,将核心计算部分OpenMP分块,数据块的长度匹配向量化处理单元VPU的线宽,利用硬件资源使向量化处理单元VPU发挥其性能。
所述预先排序过程采用快速排序算法,该快速排序算法的过程为:按列输入数据,然后按照由小到大的次序对其进行排序,输出排序后的结果。
所述核心计算部分进行向量化之前,核心计算的OpenMP先进行并行化,其过程为:在开始计算之前,启动OpenMP线程;随后各个线程照步骤二得到各自的数据块;最后各线程针对各自的数据块进行计算。
所述步骤三中Intel Xeon CPU中VPU的线宽为256位,Intel Xeon Phi中VPU的线宽为512位。
本发明的一种基于OpenMP对天文学软件Gridding的优化方法,具有以下优点:
该发明的一种基于OpenMP对天文学软件Gridding的优化方法具有高扩展性、高效率、易于编程的特点;通过对计算数据的排序,避免了内存内的数据跳跃访问,从而有效的降低了访存缺失,最大程度的利用硬件资源,提升Gridding代码的性能;该方法避免了原Gridding软件中的数据依赖性问题,及由此导致的访存冲突,及难以向量化的问题,Gridding的性能提升为原软件的5.5倍,实用性较强,适用范围广泛,易于推广。
附图说明
附图1为未排序的计算数据在各个线程之间的分配图。
附图2为排序后的计算数据在各个线程之间的分配图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。
本发明提供一种基于OpenMP对天文学软件Gridding的优化方法,该方法是一种可获得多倍性能加速的基于OpenMP实现的针对天文学软件Gridding的高性能的优化方法。其具体过程为:通过将计算数据预先排序,随后将排序后的数据依次分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同,最后对核心计算部分进行向量化。该方法避免了原Gridding软件中的数据依赖性问题,及由此导致的访存冲突,及难以向量化的问题。对计算数据的预先排序是该方法的基础,原Gridding软件中计算数据是随机生成的,这就使得具有相同值的数据元素可能出现在数据序列的不同位置,当经过排序后,这些值相同的数据将会聚集在一起。这样可极大的提升访存的连续性,从而可显著的提升程序的性能。尽管排序算法本身会消耗部分计算时间,但是这与其带来的性能的提升而言是非常值得的。为了进一步的降低排序过程的时间消耗,本方法采用了快速排序算法。排序后的数据需要依次分配给不同的线程,这是本方法的核心。数据分配后将使得不同的线程间拥有的大部分数据是不同的,同时也保证了具有线程间的相同值的数据在CPU计算中处于不同的时刻,这就保证了计算中不会出现多个线程同时访问一个数据的情况,也就避免了由于数据依赖性带来的访存冲突。
进一步的,其具体实现过程为:
一、首先将计算数据预先排序,由于对计算数据的排序将引入额外的计算时间,为了将该部分时间降至最低,本发明采用了当前性能最好的快速排序算法将内存中无需的数据序列变为有序,该算法的具体内容为:对于一列输入数据,算法按照由小到大的次序对其进行排序,输出为排序后的结果。该算法不增加额外的内存。
二、由于计算数据序列中存在着多个具有相同值的数据元素,线程之间的访存冲突,即多个线程同时访问具有相同值的数据元素,这些数据元素指向同一内存地址,如果多个线程对同一内存地址进行操作,将导致计算的不确定,从而导致计算失效。为了避免线程之间的访存冲突,需要设计数据在OpenMP各个线程之间的分配过程。
将排序后的数据分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同:将数据分割为若干块,各块的大小相同,每一个OpenMP线程根据自身的线程编号分得其对应的一块。
该过程与排序过程结合在一起,即可避免线程之间的访存冲突问题。下面将结合附图1与图2讲述其原理。
在图1中给出了未排序的计算数据在各个线程之间的分配,可以看到,计算数据gind中存在着一些具有相同值的元素,3、6、8、13。当将gind分配至三个线程Thread 0、Thread 1、及Thread 2中时,可以看到元素3均出现在线程Thread 0与Thread 1的第一个位置,由于线程Thread 0与Thread 1将同时开始计算,这将导致这两个线程将对同一个内存地址进行操作(因为gind中相同的元素值指向同一内存地址),即产生了访存冲突。
在图2中给出排序后的计算数据在各个线程之间的分配图,当对计算数据gind排序后,各线程之间的数据如该附图2所示。由图2可以看到,此时具有相同值的元素或者位于同一线程内,比如元素3全部位于Thread 0中,元素13全部位于Thread 2中;或者位于前一线程的末尾及后一线程的开端,如元素6分别位于Thread 0线程的末尾及Thread 1线程的开头。由于所有的线程同时开始计算,这样元素6就不会被Thread 0线程及Thread 1线程同时访问。对于元素3由于他们均位于Thread 0线程内,线程内部一次只能访问一个元素,因此不会出现对元素3的同时访问问题,元素13于此类同。此时可以看到,通过排序及各个线程之间的依次分配数据,有效的避免了访存的冲突。
三、核心计算的OpenMP先进行并行化,其过程为:在开始计算之前,启动OpenMP线程;随后各个线程照步骤二得到各自的数据块;最后各线程针对各自的数据块进行计算。
四、对核心计算部分OpenMP进行向量化:将核心计算分块,数据块的长度匹配向量化处理单元(VPU)的线宽,其中Intel Xeon CPU中VPU的线宽为256位,Intel Xeon Phi中VPU的线宽为512位。并采用Intel AVX指令,对核心代码重新编程,使向量化处理单元(VPU)发挥其最大的性能。
针对上述四个步骤,其通过代码具体实现的过程为:
对于第一步,采用快速排序算法对计算数据进行排序,其中快速排序算法的伪代码如下:
算法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+1;
swap(&A[s],&A[i]);
}//endif
}//endfori
swap(&A[q],&A[s]);
quicksort(A,q,s-1);
quicksort(A,s+1,r);
}//endif(q<r)
}
Void swap(int * a, int * b)
{
Inttmp;
tmp=*b;
*b=*a;
*a=tmp;
}
算法1结束。
对于第二步,将排序后的数据分配至各个OpenMP线程间,该过程的伪代码如下:
算法2:OpenMP各线程间的数据划分过程:
#define BLOCK_LOW(id,p,n) ((id)*(n)/(p))
#define BLOCK_HIGH(id,p,n) (BLOCK_LOW((id)+1,p,n)-1)
#pragma omp parallel private(gind,cind)
{
int id=omp_get_thread_num();
intbs=BLOCK_LOW(id,Num_threads,samSize);
int be=BLOCK_HIGH(id,Num_threads,samSize);
….
}
算法2结束。
算法2中,首先得到各个OpenMP各线程的身份表示,id。随后基于该id,得到每个线程内数据的起始索引bs与be。随后各个线程内的计算由bs开始,be结束。
对于第三步,核心计算的OpenMP并行化,其过程为:在开始计算之前,启动OpenMP线程;随后各个线程照算法2得到各自的数据块;最后各线程针对各自的数据块进行计算。内核的计算共包含3层循环,伪代码如下:
for (intsuppv = 0; suppv<sSize; suppv++) {
for (intdind = bs; dind<= be; ++dind) {
for (intsuppu = 0; suppu<sSize; suppu++) {
…
}
}
}
其中在循环suppu内进行计算。各线程之间计算任务的控制由第二个循环(循环索引为dind)进行控制。
对于第四步,核心计算的向量化。本发明编写了基于Intel Xeon CPU的AVX指令,其代码如下:
__m512 sam = _mm512_load_ps(( Real *) &Cc[suppu-i_s]);
__m512 *gridptr = (__m512 *) &gptr[suppu];
__m512 data_r = _mm512_set1_ps(d.real());
__m512 data_i = _mm512_set1_ps(d.imag());
__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 t10= _mm512_mask_add_ps(t9c, 0xAAAA, t9, t8);
gridptr[0] = _mm512_add_ps(gridptr[0], t10)。
以上为核心计算的AVX代码。至此完成了基于OpenMP的天文学软件Gridding的性能优化方法的说明。采用本发明的方法,Gridding的性能提升为原软件的5.5倍。
上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述具体实施方式,任何符合本发明的一种基于OpenMP对天文学软件Gridding的优化方法的权利要求书的且任何所述技术领域的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。
Claims (4)
1.一种基于OpenMP对天文学软件Gridding的优化方法,其特征在于,其具体实现过程为:
一、首先将计算数据预先排序,这里的计算数据是Gridding软件中随机生成的,排序即为将具有相同值的数据元素聚集在一起,使无序的数据序列变为有序;
二、将排序后的数据分配给不同的线程,保证不同线程间具有相同元素的数据的计算序列不同:将数据分割为若干块,各块的大小相同,每一个OpenMP线程根据自身的线程编号分得其对应的一块;
三、对核心计算部分OpenMP进行向量化:通过Intel AVX指令,将核心计算部分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位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410694217.7A CN104375838B (zh) | 2014-11-27 | 2014-11-27 | 一种基于OpenMP对天文学软件Gridding的优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410694217.7A CN104375838B (zh) | 2014-11-27 | 2014-11-27 | 一种基于OpenMP对天文学软件Gridding的优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104375838A true CN104375838A (zh) | 2015-02-25 |
CN104375838B CN104375838B (zh) | 2017-06-06 |
Family
ID=52554781
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410694217.7A Active CN104375838B (zh) | 2014-11-27 | 2014-11-27 | 一种基于OpenMP对天文学软件Gridding的优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104375838B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105260175A (zh) * | 2015-09-16 | 2016-01-20 | 浪潮(北京)电子信息产业有限公司 | 基于OpenMP的天文学软件Gridding的处理方法 |
CN105955825A (zh) * | 2016-05-09 | 2016-09-21 | 深圳大学 | 优化天文学软件gridding的方法 |
CN106598552A (zh) * | 2016-12-22 | 2017-04-26 | 郑州云海信息技术有限公司 | 基于Gridding模块的数据点转换方法及装置 |
CN106897131A (zh) * | 2017-02-22 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种用于天文软件Gridding的并行计算方法及其装置 |
CN107169807A (zh) * | 2017-06-30 | 2017-09-15 | 广东工业大学 | 一种期权定价的方法、装置及系统 |
CN107908477A (zh) * | 2017-11-17 | 2018-04-13 | 郑州云海信息技术有限公司 | 一种用于射电天文数据的数据处理方法及装置 |
CN108509279A (zh) * | 2018-04-16 | 2018-09-07 | 郑州云海信息技术有限公司 | 一种用于射电天文数据的处理方法、装置及存储介质 |
CN108874547A (zh) * | 2018-06-27 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种天文学软件Gridding的数据处理方法及装置 |
CN109490948A (zh) * | 2018-11-16 | 2019-03-19 | 西南石油大学 | 地震声学波动方程矢量并行计算方法 |
CN110187962A (zh) * | 2019-04-26 | 2019-08-30 | 中国人民解放军战略支援部队信息工程大学 | 一种基于CUDA的Gridding算法优化方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102707955A (zh) * | 2012-05-18 | 2012-10-03 | 天津大学 | 采用MPI和OpenMP编程实现支持向量机方法 |
US20140208331A1 (en) * | 2013-01-18 | 2014-07-24 | Nec Laboratories America, Inc. | Methods of processing core selection for applications on manycore processors |
CN104035781A (zh) * | 2014-06-27 | 2014-09-10 | 北京航空航天大学 | 一种快速开发异构并行程序的方法 |
-
2014
- 2014-11-27 CN CN201410694217.7A patent/CN104375838B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102707955A (zh) * | 2012-05-18 | 2012-10-03 | 天津大学 | 采用MPI和OpenMP编程实现支持向量机方法 |
US20140208331A1 (en) * | 2013-01-18 | 2014-07-24 | Nec Laboratories America, Inc. | Methods of processing core selection for applications on manycore processors |
CN104035781A (zh) * | 2014-06-27 | 2014-09-10 | 北京航空航天大学 | 一种快速开发异构并行程序的方法 |
Non-Patent Citations (2)
Title |
---|
沈铂: "基于MIC平台的offload并行方法研究", 《计算机科学》 * |
齐金: "Xeon Phi平台上基于模板优化的3DGVF场计算加", 《计算机工程与科学》 * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105260175B (zh) * | 2015-09-16 | 2019-01-25 | 浪潮(北京)电子信息产业有限公司 | 基于OpenMP的天文学软件Gridding的处理方法 |
CN105260175A (zh) * | 2015-09-16 | 2016-01-20 | 浪潮(北京)电子信息产业有限公司 | 基于OpenMP的天文学软件Gridding的处理方法 |
CN105955825A (zh) * | 2016-05-09 | 2016-09-21 | 深圳大学 | 优化天文学软件gridding的方法 |
CN105955825B (zh) * | 2016-05-09 | 2020-07-10 | 深圳大学 | 优化天文学软件gridding的方法 |
CN106598552A (zh) * | 2016-12-22 | 2017-04-26 | 郑州云海信息技术有限公司 | 基于Gridding模块的数据点转换方法及装置 |
CN106897131A (zh) * | 2017-02-22 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种用于天文软件Gridding的并行计算方法及其装置 |
CN107169807A (zh) * | 2017-06-30 | 2017-09-15 | 广东工业大学 | 一种期权定价的方法、装置及系统 |
CN107908477A (zh) * | 2017-11-17 | 2018-04-13 | 郑州云海信息技术有限公司 | 一种用于射电天文数据的数据处理方法及装置 |
CN108509279A (zh) * | 2018-04-16 | 2018-09-07 | 郑州云海信息技术有限公司 | 一种用于射电天文数据的处理方法、装置及存储介质 |
CN108874547A (zh) * | 2018-06-27 | 2018-11-23 | 郑州云海信息技术有限公司 | 一种天文学软件Gridding的数据处理方法及装置 |
CN109490948A (zh) * | 2018-11-16 | 2019-03-19 | 西南石油大学 | 地震声学波动方程矢量并行计算方法 |
CN109490948B (zh) * | 2018-11-16 | 2020-04-28 | 西南石油大学 | 地震声学波动方程矢量并行计算方法 |
CN110187962A (zh) * | 2019-04-26 | 2019-08-30 | 中国人民解放军战略支援部队信息工程大学 | 一种基于CUDA的Gridding算法优化方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104375838B (zh) | 2017-06-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104375838A (zh) | 一种基于OpenMP对天文学软件Gridding的优化方法 | |
Sintorn et al. | Fast parallel GPU-sorting using a hybrid algorithm | |
CN104160396B (zh) | 在字符串集之中查找最佳匹配字符串的方法和系统 | |
Geil et al. | Quotient filters: Approximate membership queries on the GPU | |
Koza et al. | Compressed multirow storage format for sparse matrices on graphics processing units | |
CN103064819A (zh) | 一种利用MIC快速实现格子Boltzmann并行加速的方法 | |
US20220197858A1 (en) | Dynamic allocation of arithmetic logic units for vectorized operations | |
Jansson et al. | gpuRF and gpuERT: efficient and scalable GPU algorithms for decision tree ensembles | |
CN109710542A (zh) | 一种满n叉树构建方法及装置 | |
Fearnley | Efficient parallel strategy improvement for parity games | |
CN105511867A (zh) | 一种优化模式自动生成方法及优化装置 | |
CN108875914A (zh) | 对神经网络数据进行预处理和后处理的方法和装置 | |
CN106484532B (zh) | 面向sph流体模拟的gpgpu并行计算方法 | |
Kim et al. | Accelerating GNN training with locality-aware partial execution | |
CN114091029A (zh) | 恶意文件检测模型的训练系统、方法、设备、介质及平台 | |
Hu et al. | Massive parallelization of approximate nearest neighbor search on KD-tree for high-dimensional image descriptor matching | |
Dufossé et al. | Two approximation algorithms for bipartite matching on multicore architectures | |
CN104156268B (zh) | 一种GPU上MapReduce的负载分配和线程结构优化方法 | |
LUONG et al. | Neighborhood structures for GPU-based local search algorithms | |
Paredes et al. | Breadth first search vectorization on the Intel Xeon Phi | |
Kim et al. | Optimizing seam carving on multi-GPU systems for real-time content-aware image resizing | |
CN109086137A (zh) | Gpu并行计算资源配置方法及装置 | |
Coole et al. | A traversal cache framework for fpga acceleration of pointer data structures: A case study on barnes-hut n-body simulation | |
Cong et al. | Fast parallel connected components algorithms on GPUs | |
US8549456B2 (en) | System and method for circuit design floorplanning |
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 |