基于OpenMP+MPI+CUDA并行混合编程的N体问题实现
- 格式:docx
- 大小:353.29 KB
- 文档页数:12
一、介绍OpenMP并行编程OpenMP是一种基于共享内存的并行编程模型,可以在多核处理器上并行执行程序,提高程序的性能和效率。
OpenMP使用方便,适用于各种科学计算、工程分析和数据处理等领域,为程序员提供了简单有效的并行编程工具,本文将介绍OpenMP并行编程的实用案例。
二、OpenMP并行编程的基本概念1. 并行区域在OpenMP中使用#pragma omp parallel指令来创建并行区域,其中的代码将被多个线程并行执行。
2. 线程在OpenMP中,线程是并行执行程序的基本单位,可以通过设置线程数量来控制并行度。
3. 共享内存OpenMP程序中的多个线程可以访问相同的内存,这就是共享内存的概念,程序员需要注意在并行执行中对共享数据的访问和控制。
三、OpenMP并行编程的实用案例1. 矩阵乘法矩阵乘法是一个经典的科学计算问题,可以使用OpenMP并行编程来加速矩阵乘法的计算过程。
通过将矩阵的每一行分配给不同的线程来并行计算乘法的结果,可以显著提高矩阵乘法的计算速度。
2. 图像处理图像处理是计算密集型的任务,可以使用OpenMP并行编程来加速图像处理的算法。
可以使用OpenMP来并行执行图像的滤波操作,提高图像处理的速度和效率。
3. 求解微分方程在科学计算中,求解微分方程是一个常见的问题,可以使用OpenMP 并行编程来加速微分方程的求解过程。
通过将微分方程的计算任务分配给多个线程并行执行,可以显著减少求解时间,提高计算效率。
4. 数据分析在数据分析领域,大规模数据的处理和分析是一个关键问题,可以使用OpenMP并行编程来加速数据分析的过程。
通过使用OpenMP来并行执行数据的处理和分析算法,可以加快数据分析的速度,提高数据处理的效率。
四、OpenMP并行编程的优势和不足1. 优势OpenMP并行编程简单方便,易于学习和使用,可以在现有的串行程序基础上轻松实现并行化,提高程序的性能和效率。
H a r b i n I n s t i t u t e o f T e c h n o l o g y并行处理与体系结构实验报告实验题目: OpenMP+MPI混合并行编程院系:计算机科学与技术姓名:学号:实验日期: 2011-12-25哈尔滨工业大学实验四:OpenMP+MPI混合并行编程一、实验目的1、复习前几次实验的并行机制,即OpenMP与MPI编程模式。
2、掌握OpenMP与MPI混合并行编程模式。
二、实验内容1、使用OpenMP+MPI混合编程并与OpenMP、MPI单独编程的比较。
在OpenMp并行编程中,主要针对细粒度的循环级并行,主要是在循环中将每次循环分配给各个线程执行,主要应用在一台独立的计算机上;在MPI并行编程中,采用粗粒度级别的并行,主要针对分布式计算机进行的,他将任务分配给集群中的所有电脑,来达到并行计算;OpenMp+MPI混合编程,多台机器间采用MPI分布式内存并行且每台机器上只分配一个MPI进程,而各台机器又利用OpenMP进行多线程共享内存并行。
2、分析影响程序性能的主要因素。
在采用OpenMP实现的并行程序中,由于程序受到计算机性能的影响,不能大幅度的提高程序运行速度,采用了集群的MPI并行技术,程序被放到多台电脑上运行,多台计算机协同运行并行程序,但是,在集群中的每台计算机执行程序的过程又是一个执行串行程序的过程,因此提出的OpenMP+MPI技术,在集群内采用MPI技术,减少消息传递的次数以提高速度,在集群的每个成员上又采用OpenMP技术,节省内存的开销,这样综合了两种并行的优势,来提升并行程序的执行效率。
三、实验原理OpenMP编程:使用Fork-Join的并行执行模式。
开始时由一个主线程执行程序,该线程一直串行的执行,直到遇到第一个并行化制导语句后才开始并行执行。
含义如下:①Fork:主线程创建一队线程并行执行并行域中的代码;②Join:当各线程执行完毕后被同步或中断,最后又只有主线程在执行。
基于MPI+OpenMP混合模型的并行处理算法设计林荫21、黑保琴2(1.中国科学院研究生院北京 100190;2.中国科学院光电研究院北京 100190)摘要:随着空间数据量的增大和下行速率的大幅度提高,如何将并行计算技术应用于数据处理系统已经成为了当前研究的重要课题。
本文讨论了基于MPI+OpenMP混合模型的并行程序设计问题,提出了一种并行数据处理软件的设计方案。
关键词:MPI OpenMP 并行数据处理1.引言随着空间科学技术的发展,数据下行速率有了很大程度的提高,数据处理的时效性成为人们关注的焦点。
近年来多核结构和微处理技术发展迅速,集群正逐渐成为主流的并行计算平台,应用于各个领域之中。
其显著特点是性价比高和可扩展性好。
MPI是消息传递接口标准,在集群计算中广为应用,但是在多核处理器构成的集群(以SMP为代表)上仅采用MPI消息传递模型并不能取得理想的性能。
为了结合分布式内存结构和共享式内存结构两者的优势,人们提出了分布式/共享内存层次结构。
OpenMP是共享存储编程的实际工业标准,在SMP集群上应用MPI +OpenMP混合编程模型,可以实现结点内和结点间两级并行,有效地改善系统性能。
2. MPI+OpenMP混合编程模型2.1 分布式共享内存结构并行计算机按照存储方式可以分为分布式内存并行计算机,共享内存并行计算机和分布式共享内存并行计算机3种,如图2.1所示。
a)分布式内存并行计算机 b)共享内存并行计算机 c)分布式共享内存并行计算机图 2.1 按存储方式划分的并行计算机结构分布内存并行计算机由多个具有局部存储模块的相互独立的处理节点通过互联网连接而成,具有很好的可扩展性和性能,但不同节点间的通信要使用消息传递机制,加大了程序设计的难度。
共享内存并行计算机中,各处理单元通过对共享内存的访问来交换信息,协调各处理器的任务。
编程相对简单,但共享内存往往成为性能尤其是扩展性的瓶颈。
分布式共享内存并行计算机结合了以上两种二者的特点,节点间属于分布式内存结构,节点内各处理器间属于共享内存结构,MPI+OpenMP混合模型就是针对这种结构的。
CUDA、MPI和OpenMP三级混合并行模型的研究
滕人达;刘青昆
【期刊名称】《网络新媒体技术》
【年(卷),期】2010(031)009
【摘要】采用CUDA+MPI+OpenMP的三级并行编程模式,实现节点间的粗粒度并行,节点内的细粒度并行以及将GPU作为并行计算设备的CUDA编程模型.这种新的三级并行混合编程模式为SMP机群提供了一种更为高效的并行策略.本文讨论了三级并行编程环境的快速搭建以及多粒度混合并行编程方法,并在多个节点的机群环境中完成测试工作.
【总页数】7页(P63-69)
【作者】滕人达;刘青昆
【作者单位】辽宁师范大学,计算机与信息技术学院,大连,116081;辽宁师范大学,计算机与信息技术学院,大连,116081
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于MPI+OpenMP混合编程模型的并行声纳信号处理技术研究 [J], 胡银丰;孔强
2.基于MPI+OpenMP混合模型的并行地震数据处理支撑库的研究 [J], 李肯立;杨进;彭成斌;秦云川
3.MPI+OpenMP混合并行编程模型应用研究 [J], 冯云;周淑秋
4.基于多核集群的MPI+OpenMP混合并行编程模型研究 [J], 谷克宏;黄岷;何江银
5.基于MPI+OpenMP混合编程模型的水声传播并行算法 [J], 张林;笪良龙;范培勤
因版权原因,仅展示原文概要,查看原文内容请购买。
CPU-OpenMP和GPU-CUDA并行计算技术对矩阵乘法运算的加速效果分析张岩【摘要】本文对比了CPU-OpenMP和GPU-CUDA并行计算技术对不同阶矩阵乘法运算相对于CPU单线程计算的加速效果.结果表明,CPU-OpenMP并行的计算加速比与矩阵阶数无关,且低于所采用的线程数目.GPU-CUDA并行的计算加速比随矩阵阶数的增加显著增加,最大计算加速比可达570倍以上.相对于CPU单线程计算结果,CPU-OpenMP并行计算未产生误差,而GPU-CUDA并行计算会产生误差.结果表明,GPU-CUDA并行适合高阶数矩阵乘法的加速计算,而CPU-OpenMP 并行适合低阶数矩阵乘法的加速计算.【期刊名称】《科技视界》【年(卷),期】2017(000)026【总页数】3页(P45-47)【关键词】矩阵乘法;并行计算;CPU-OpenMP;GPU-CUDA【作者】张岩【作者单位】北京师范大学附属中学京西分校高三1班,中国北京 100042【正文语种】中文【中图分类】TP391在信息化技术不断发展的今天,人们处在“大数据”时代。
由于数据量巨大,普通的串行计算方式计算效率低下,无法满足人们对数据进行快速处理的需求。
因此,如何能够提高计算机处理“大数据”的计算效率已成为人们日益关注的话题。
为了减少计算时间、提升计算效率,并行计算的出现成为解决上述问题的有效方法。
与普通的串行计算相比,并行计算将计算任务分配到计算机的多个处理器协同处理,从而提高计算效率。
随着并行计算结果的发展,并行算法也逐渐成熟。
目前,人们采用的并行计算技术大致可能分为两种:一是基于CPU(Central Processing Unit)多核多线程的并行计算;二是基于 GPU(Graphics Processing Unit)的通用并行计算。
对于CPU并行计算,根据并行粒度的不同可分为“共享式内存结构”和“分布式内存结构”[1]。
对于“共享式内存结构”的并行计算,OpenMP(Open Multi-Processing)作为该类型计算技术的代表,已被广泛应用于数据处理及科学计算中。
并行计算方法研究与应用作者:刘师范来源:《数字技术与应用》2014年第01期摘要:介绍并行计算的基本概念,分析了MPI、OpenMP、CUDA与OpenCL四种并行计算编程技术的基本特点及适用场合。
以MPI和OpenCL两种编程技术为列,实现了特征匹配算法和快速傅里叶变换算法,对它们的实验结果进行了分析和对比。
关键词:并行计算 MPI OpenCL 快速傅里叶变换中图分类号:TP3 文献标识码:A 文章编号:1007-9416(2014)01-0109-02高性能计算(High Performance Computing)是当今社会计算机科学的一个重要分支,目的在于解决拥有大规模数据处理需求应用的性能问题。
为将一个需要大规模处理的应用部署至高性能计算机上,需要研究相关的并行算法,开展并行计算(Parallel Computing)。
并行计算相对于串行计算而言,广义上的并行计算可分为时间上的并行和空间上的并行,时间上的并行泛指流水线技术,而空间上的并行是指多个处理器并发地进行计算。
并行计算科学中主要研究空间上的并行问题,即先将计算任务分解为若干个计算子任务,然后同时使用多个计算资源以快速解决一个大型且复杂的计算问题。
1 并行计算方法目前计算机均采用多核设计,然而将一个计算任务在该计算机上执行时,任务并不会智能化地自动分解至每个CPU核;将一个应用部署至一个高性能计算机集群,需要相应的辅助工具将任务进行分解;使用GPU协助CPU完成一个密集型计算任务处理,也需要辅助工具使得编程人员对任务能够可控。
基于此,若干并行辅助工具应运而生,典型的有MPI、OpenMP、CUDA与OpenCL。
而设计并行程序需将计算任务进行分解后分配至不同的处理器进行处理,导致当前处理器在处理其子任务的过程中不可避免地需要与其它处理器的子任务进行数据交互,数据交互方法包括消息传递与共享存储。
其中,MPI即属于一种基于消息传递的并行编程模型,而OpenMP、CUDA和OpenCL则采用基于共享存储的并行模式。
一、实验目的及要求熟悉MPI编程环境,掌握MPI编程基本函数及MPI的相关通信函数用法,掌握MPI的主从模式及对等模式编程;熟悉OpenMP编程环境,初步掌握基于OpenMP的多线程应用程序开发,掌握OpenMP相关函数以及数据作用域机制、多线程同步机制等。
二、实验设备(环境)及要求Microsoft Visual Studio .net 2005MPICH2Windows 7 32位Intel Core2 Duo T5550 1.83GHz 双核CPU2GB内存三、实验内容与步骤1.配置实验环境/research/projects/mpich2/downloads/index.php?s =downloads 处下载MPICH2,并安装。
将安装目录中的bin目录添加到系统环境变量path中。
以管理员身份运行cmd.exe,输入命令smpd -install -phrase ***。
***为安装时提示输入的passphrase。
运行wmpiregister.exe,输入具有系统管理员权限的用户名及密码,进行注册。
配置vs2005,加入MPICH2的包含文件,引用文件和库文件,如下图。
配置项目属性,添加附加依赖项mpi.lib,如下图。
VS2005支持OpenMP,只需在项目属性中做如下配置。
2.编写MPI程序题目:一个小规模的学校想给每一个学生一个唯一的证件号。
管理部门想使用6位数字,但不确定是否够用,已知一个“可接受的”证件号是有一些限制的。
编写一个并行计算程序来计算不同的六位数的个数(由0-9组合的数),要求满足以下限制:●第一个数字不能为0;●两个连续位上的数字不能相同;●各个数字之和不能为7、11、13代码如下。
#include "mpi.h"#include <stdio.h>#include <math.h>#define NUM 6#define MAX 999999#define MIN 100000int check(int n){int i, x, y, sum;if (n < MIN){return -1;}sum = 0;for (i=1; i<NUM; i++){x = (n%(int)pow(10, i))/(int)pow(10,i-1);y = (n%(int)pow(10, i+1))/(int)pow(10, i);if (x == y){return -1;}sum = sum+x+y;}if (sum==7 || sum==11 || sum==13){return -1;}return 0;}void main(int argc, char **argv){int myid, numprocs, namelen;char processor_name[MPI_MAX_PROCESSOR_NAME];MPI_Status status;double startTime, endTime;int i, mycount, count;MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Get_processor_name(processor_name,&namelen);if (myid == 0){startTime = MPI_Wtime();}mycount = 0;for (i=myid; i<=MAX; i+=numprocs){if (check(i) == 0){mycount++;}}printf("Process %d of %d on %s get result=%d\n", myid, numprocs, processor_name, mycount);if (myid != 0){MPI_Send(&mycount, 1, MPI_INT, 0, myid, MPI_COMM_WORLD);}else{count = mycount;for (i=1; i<numprocs; i++){MPI_Recv(&mycount, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);count += mycount;}endTime = MPI_Wtime();printf("result=%d\n", count);printf("time elapsed %f\n", endTime-startTime);}MPI_Finalize();}计算量平均分给每个进程,每个进程将自己计算的部分结果发送给0号进程,由0号进程将结果相加,并输出。
N-Body问题的并行混合编程实现Abstract:Multi level SMP cluster programming model is the effective way to increase the computing performance of.SMP cluster from the hardware can be divided into nodes, and nodes within a single processor instruction level parallelism on three layer architecture. Based on the research of parallel programming model based on SMP cluster hardware architecture and SMP cluster hierarchy, realization N-body algorithm in the design of hybrid programming model based on OpenMP+MPI+CUDA. Finally, the program test in dawning W580I cluster, and combined with the method of performance evaluation of multi-core SMP cluster hierarchy programming, the algorithm with the traditional N. Parallel algorithm is performed to compare the execution time and speedup, and the conclusion is drawn. Key words: parallel programming;OpenMP+MPI+CUDA;n-body problem;cluster system摘要:SMP集群上的多级层次化编程模型是提升计算性能的有效方式。
并行计算论文:基于OpenMP和MPI的并行算法研究【中文摘要】近年来,多核处理器已经非常普及。
但是经过研究发现,大多数程序的性能并没有得到提高。
所以我们要通过软件技术,将顺序程序编译为并行程序,提高每个核的使用率将成为接下来研究工作的重点。
目前比较流行的并行编程环境主要有基于共享存储平台的OpenMP和基于消息传递平台的MPI。
OpenMP是应用在共享存储多处理器上的并行编程标准,是一种易于使用的并行编程标准。
它不是一种语言,而是用指令集扩展语言,采用的是Fork-Join并行编程模型。
MPI(Message Passing Interface)是一种消息传递标准,简化了应用程序和库的发展,定义了核心的语义和语法。
MPI不是一门语言,而是一个库,支持FORTRAN和C/C++语言。
本文讲解了OpenMP的程序设计,介绍了一种基于OpenMP的并行蚁群算法求解TSP问题,实验结果表明这种并行算法能明显提高程序的效率;还讲解了MPI程序设计,介绍了基于消息传递MPI的并行八皇后算法,实验结果表明这个并行算法相对串行程序性能有明显提高。
【英文摘要】Now the demand for computing power andlarge-scale scientific and engineering computing for parallel computing is on the growing, the demand promotes the development of high-performance computers. The current single-processor can’t meet the needs of large-scale computing problems, parallel computing is the supportingtechnology that the only way to solve this kind of problem. The current parallel programming environment are message passing, shared memory and data parallel. Some of the inherent parallelism i...【关键词】并行计算 OpenMP 蚁群算法 MPI 八皇后问题【英文关键词】Parallel Computing OpenMP Ant Colony Algorithm MPI Eight Queens Algorithm【目录】基于OpenMP和MPI的并行算法研究提要4-5摘要5-7Abstract7-8第1章绪论11-151.1 引言111.2 研究背景及选题意义11-131.3 国内外研究现状13-141.4 论文的主要工作141.5 论文的组织结构14-15第2章并行计算15-282.1 引言152.2 并行计算机介绍15-192.2.1 并行计算152.2.2 并行计算机的发展15-192.3 并行机的体系结构19-232.3.1 结点192.3.2 并行机的互联网络拓扑结构19-212.3.3 多级存储体系结构21-232.4 并行编程环境23-262.4.1 进程、进程间通信与线程23-252.4.2 并行编程环境25-262.5 并行算法26-272.5.1 并行算法的分类262.5.2 并行算法的发展26-272.6 本章小结27-28第3章基于OPENMP的并行蚁群算法28-383.1 引言283.2 基于OPENMP的程序设计28-323.2.1 OPENMP的基本概念28-303.2.2 OPENMP编程模型303.2.3 OPENMP相关流程30-323.3 蚁群算法32-353.3.1 蚁群行为描述323.3.2 基本蚁群算法描述32-333.3.3 基本蚁群算法的数学模型33-343.3.4 基本蚁群算法的实现34-353.4 基于OPENMP的并行蚁群算法35-373.5本章小结37-38第4章基于MPI的并行八皇后算法38-484.1 引言384.2 基于MPI的程序设计38-444.2.1 MPI简介38-404.2.2 MPI的基本调用40-434.2.3 MPI消息43-444.3 基于MPI的八皇后算法44-474.3.1 并行的八皇后算法44-464.3.2 实验结果46-474.4 本章小结47-48第5章总结与展望48-505.1 工作总结48-495.2 进一步研究方向49-50参考文献50-53作者简介及在学期间所取得的科研成果53-54致谢54。
接触问题的MPI+OpenMP混合并行计算肖永浩;莫则尧【摘要】Contact problem was parallelized by using MPI + OpenMP hybrid model which aims at reducing the global communications in contact problems and making full use of current CLUMPs architecture. Dual domain decomposition parallel algorithm was achieved by using MPI first, and then the force computation part was paralleled by OpenMP with block data. The hybrid model shows good parallel efficiency because of that the global communication in contact force parallel computing with the hybrid model is less than that with the unified model. The test case shows that the parallel program using this model can solve over 10 million DOFs contact problems by merely using hundreds of processors.%针对接触计算问题中需要大量全局通信的特点,结合当前流行的多处理器集群系统,采用了MPI+OpenMP的混合并行模式,实现了接触问题的并行计算.以双重区域剖分并行算法为基础,内力计算部分在采用MPI并行基础上,使用基于分块结构的OpenMP 并行编程,使得接触力并行计算中涉及的全局通信时间无需增加,从而进一步提高了并行效率.数值模拟实验表明,这种并行方式能在上百处理器上实现千万自由度接触问题的并行计算.【期刊名称】《振动与冲击》【年(卷),期】2012(031)015【总页数】5页(P36-40)【关键词】接触问题;双重区域分解;混合并行计算【作者】肖永浩;莫则尧【作者单位】中国工程物理研究院计算机应用研究所,四川绵阳621900;北京应用物理与计算数学研究所,北京100088【正文语种】中文【中图分类】O246接触问题广泛存在于汽车碰撞,金属成型等工程应用和现实生活中,对接触问题的数值模拟对于安全问题、武器模拟等非常重要。
N-Body问题的并行混合编程实现Abstract:Multi level SMP cluster programming model is the effective way to increase the computing performance of.SMP cluster from the hardware can be divided into nodes, and nodes within a single processor instruction level parallelism on three layer architecture. Based on the research of parallel programming model based on SMP cluster hardware architecture and SMP cluster hierarchy, realization N-body algorithm in the design of hybrid programming model based on OpenMP+MPI+CUDA. Finally, the program test in dawning W580I cluster, and combined with the method of performance evaluation of multi-core SMP cluster hierarchy programming, the algorithm with the traditional N. Parallel algorithm is performed to compare the execution time and speedup, and the conclusion is drawn. Key words: parallel programming;OpenMP+MPI+CUDA;n-body problem;cluster system摘要:SMP集群上的多级层次化编程模型是提升计算性能的有效方式。
SMP集群从硬件上可以分为节点间、节点内和单个处理器上的指令级并行三层架构。
本文在对SMP集群硬件体系结构和SMP集群多层次并行化编程模型的研究基础上,实现N-body问题算法的基于OpenMP+MPI+CUDA的混合编程模型的设计。
最后在曙光W580I 机群上进行程序测试,并结合多核SMP集群层次化编程的性能评测方法,将该算法与传统的N体并行算法进行了执行时间与加速比的比较,得出总结性论述。
关键词:并行编程;OpenMP+MPI+CUDA混合编程模型;N体问题;SMP集群1.引言N-Body模拟问题在天体物理、分子动力学等很多领域都有重要应用。
可以描述为一个物理系统中的N个粒子,每对粒子间都存在着相互作用力(万有引力、库仑力等)。
它们从一个初始的状态开始,每隔一定的时间步长,由于粒子间的相互作用,粒子的状态会有一个增量,需要对粒子的加速度、速度和位置信息进行更新。
N-body的串行算法需要计算N(N-1)次受力,故此算法的时间复杂度为O (n^2)。
然而,一般模拟的粒子规模都很大,一个体系中可以包含数百万乃至上千万的粒子,直接计算的话O(N^2)的量级对于任何高性能的单个处理器都是一个难以突破的瓶颈。
N体问题从并行化的数据相关性、控制相关性和并行化粒度等方面都是典型的可并行化处理的问题。
对于一些大规模的应用问题,单一处理器计算机远不能满足需求:(1)一些大型复杂科学计算问题对计算精度要求比较高,同时也意味着大的计算量;(2)大量的科学技术和工程问题,对问题的求解有强烈的时效性要求,超过一定的时间结果就毫无意义。
因此,出现了并行体系结构计算机和并行编程技术。
高性能并行计算(HPC)是求解大规模计算问题的有力手段之一。
HPC把计算问题分解成小的计算任务,同时在多个计算单元上执行各个计算任务。
本文基于当前流行的SMP集群硬件体系结构和SMP集群多层次并行化编程模型,采用OpenMP+MPI+CUDA的混合编程模型进行了N-body问题的算法实现,并将该算法与传统的N体并行算法进行了执行时间与加速比的比较。
2.SMP多核集群体系结构高性能并行计算的研究包括并行计算机体系结构、并行程序设计、并行算法理论模型和并行算法实践应用四个方面。
2.1并行计算机系统结构并行计算机体系结构主要有对称多处理器共享存储并行机(SMP)、分布式共享存储并行机(DSM)、大规模并行机(MPP)和SMP多核集群系统等。
其中,SMP体系结构采用商用微处理器,通常有片上和外置Cache,具有低通信延迟的特点,可采用多线程机制(如Pthreads)和编译制导(如OpenMP)并行编程,其实现较为简单,但缺点是可扩展性较差;MPP则是指由数百或者数千台处理器所构成的规模较大的计算机系统,基于分布存储的多计算机系统,具有良好的可扩展性,主要采用消息传递机制,实现标准有MPI,PVM 等,但其处理器之间的通信开销大,编程比较困难。
2.2多核SMP集群系统SMP多核机群系统(Symmetric Multiprocessor Cluster)由固定数量的独立节点构成的多级体系结构,这些节点有拥有多个CPU的SMP、普通计算机以及服务器,它们之间能够协同工作,并且能作为一个独立的计算机资源运用。
SMP 计算机系统因其高性价比而得到广泛应用。
全球超级计算机2014年TOP500是以Linkpack浮点计算能力来排位的,现在全球最快的超级计算机是我国的天河2号,已经达到了33.86 petanops(千万亿次)的浮点峰值计算能力。
目前超级计算机的体系结构主要有两类,一类是机群架构(C1usters),另外一类是大规模并行处理机架构(MPP)。
目前,在前十名超级计算机中,大部分是SMP机群系统。
其物理结构如下图2-1所示。
图2-1 SMP集群体系结构SMP集群架构一方面,节点内一般采用两个或以上的偶数个多核CPU,来保证单个节点的处理性能;另一方面,节点之间使用InfiniBand高速计算网络进行数据通信,延迟仅100 ns,保证了节点间通信控制的实时性。
很多高性能计算平台(HPC)采用具有层次结构的SMP集群系统。
SMP集群节点间采用消息传递的分布式存储结构,集群节点内部采用共享存储模型。
如图1 所示。
因此,SMP集群不仅兼顾了单个节点的强大的并行能力,而且具有分布式并行系统的高扩展性,强连通。
3SMP多层次并行程序设计模型并行算法设计模型是高性能计算中软硬件之间的桥梁。
并行编程模型是一个程序抽象的集合,用于并行程序设计的编程模型包括:分布式存储消息传递编程模型MPI、共享内存模型OpenMP、多核微处理器细粒度编程模型CUDA和基于MPI、OpenMP+CUDA的多层次混合编程模型等。
3.1 SMP多核体系结构SMP集群(cluster)层次并行体系结构计算机已经成为国内外主流的并行体系结构。
3.1分布式存储编程模型MPI消息传递模型MPI(Message Passing Interface)是目前分布式存储系统上的主流编程模型。
它是基于进程并行,需要用到明显的发送和接收消息。
消息传递模型在C、Fortran和C++等编程语言都有相应的函数库。
开发人员在编写并行程序时,只要安装MPI的函数库,就可以方便的调用MPI的函数。
而在分布式存储结构中,处理器之间常常要采用消息传递来完成消息交换、同步等等功能。
MPI模型适用于大规模并行处理机(MPP)和机群。
MPI 具有可移植性好、功能强大、效率高等优点,特别适用于粗粒度的并行,几乎被所有多线程操作系统(包括UNIX,Windows NT 等)支持,是目前超大规模并行计算最可信赖的平台。
但它也有许多不足之处:消息传递和全局操作的开销非常大;细粒度任务会引发大量的通信;动态负载平衡困难;将串行程序转换为并行程序需要对代码作大量改动;程序员完成数据和任务的划分,编程和调试的难度大。
3.2 共享主存模型OpenMP基于编译制导的OpenMP是目前广泛使用的共享存储编程模型。
它是多线程编程模型之一,在共享存储体系结构上应用的一种应用程序编程接口(API)[i]。
OpenMP并行编程技术因为它的编程简单、可移植性好,多使用在UNIX 以及Windows NT等等各种平台,OpenMP的应用广泛,因此被当做共享变量编程模型的一个代表。
OpenMP是对一些基本语言进行的扩展,它并不是一种新的语言,比如常用的Fortan、C和C++等等。
OpenMP编程环境包括编译指导语句、运行库函数和环境变量。
OpenMP 的编程相对简单,充分利用了共享存储体系结构的特点,避免了消息传递的开销。
虽然它也支持粗粒度的并行,但主要还是针对细粒度的循环级并行。
OpenMP 的另一个特点在于将串行程序转换为并行程序时无须对代码作大的改动。
其不足之处有只能在共享存储结构的机器上运行;数据的放置策略不当可能会引发其他问题;并行化的循环粒度过小会增加系统开销等。
OpenMP的并行机制主要是fork-join(如图3-1所示),当程序开始串行执行时是有一个主线程,并行制导语句是在并行区域中建立了很多线程。
在这个区域内,多个线程执行同样的代码块,也可以用工作共享结构体来并行执行各种任务。
图3-1 fork-join并行机制(1)Fork:主线程在遇到parallel 指令后,会自动创建一组并行的线程,这样并行区域中的代码被复制,各个线程都会对这段代码进行并行执行。
(2) Join:并行域运行结束以后会产生一个路障,除主线程以外的其他线程或者被中断或者被同步,这时只有主线程能通过路障,最后程序中只有主线程在执行。
3.3多核微处理器细粒度编程模型CUDACUDA(Compute Unified Device Architecture,统一计算设备架构)是2007年由nVidia推出的一套并行编程模型。
以游戏加速和图像处理为初衷设计的GPU (graphics processing unit,图形处理器)以超出摩尔定律的速度发展,在利用GPU进行并行计算的迫切需求下,CUDA编程模型产生。
至今已有众多研究者利用GPU的高度并行性特点将科学计算算法迁移至CUDA编程模型并在GPU 上获得了相对于CPU平均数十倍的性能提升。
CUDA是首款并行运算语言,CPU专用于解决可表示为数据并行计算的问题,即在许多数据元素上并行执行的程序,具有极高的计算密度(数学运算与存储器运算的比率)。
由于所有数据元素都执行相同的程序,因此对精密流控制的要求不高;由于在许多数据元素上运行,且具有较高的计算密度,因而可通过计算隐藏存储器访问延迟,而不必使用较大的数据缓存。