并行计算
文章平均质量分 92
大侠肖
我希望活得深刻,并汲取生命中所有的精华,然后从中学习,以免让我在生命终结时,却发现自己从来没有活过!
展开
-
循环结构的并行(一)
在科学和工程应用中,许多程序都要在循环执行上花大量的时间,如Fortran中的do循环和C语言中的for循环,通过并行中的loop-level可以减少这些循环的运行时间。OpenMP提供了parallel for或parallel do指令来对循环结构进行并行处理,这个指令可以用于大部分的循环结构,它也是OpenMP中使用最多和最频繁的指令。当然,程序员必须清楚哪些循环是可以进行并行的。Ope原创 2011-11-26 14:24:45 · 1938 阅读 · 0 评论 -
编译CUDA动态链接库及使用
除了直接在项目中使用cu或cuh来编写CUDA代码之外,还可以将CUDA相关操作代码放在一个DLL项目中,将项目编译成动态链接库DLL,然后在需要使用的项目中引用这个DLL并调用其内部函数即可。现在新建一个DLL项目,项目名称为Test00302,如下图所示:现在在项目中新建一个名为Test.cu的文件,如下图所示:然后设置项目的生成自定义方式为,如下图所示:然后设置Test.cu的属性中“项类型原创 2013-01-11 15:03:48 · 5035 阅读 · 0 评论 -
OpenMP并行计算程序设计基础下载地址
OpenMP是由The Board of the OpenMP Architecture ReviewBoard(ARB)提出的一套用于共享内存并行系统的多线程程序设计标准。目前,OpenMP仅支持C、C++和Fortran语言。由于OpenMP是一种共享存储的标准,所以在非共享存储系统上不能使用,如集群(Cluster)(目前在非共享存储系统上并行主要采用MPI)。简而言之,OpenMP就是一种原创 2011-12-21 00:14:59 · 1532 阅读 · 2 评论 -
嵌套并行
OpenMP中不建议使用并行嵌套,如果一个并行计算中的某个线程遇到了另外一个并行分支,程序运行将会变得不稳定。将一个完整的工作任务通过一组并行线程分成若干小任务,每个线程只执行指定给它的那段代码,并没用多余的线程去做其他的工作,即使并行计算中正在运行的某个线程遇到了一个新的并行分支,通过分割这个任务形成更多的线程,这并没有任何实际意义。因此,嵌套并行在OpenMP中将不考虑。OpenMP在处理多级原创 2011-12-10 09:40:04 · 2103 阅读 · 0 评论 -
分段并行
除了循环结构可以进行并行之外,还可以进行分段并行(parallel section)。迄今为止,每谈到如何去并行一个程序时,我们主要关心的是在同一时间将一个任务划分成多个然后用多线程去完成。然而,如果这个程序的一系列操作中后面的计算并不依赖于前面的计算,意思就是说它们之间相互并不依赖,这将有利于分配不同的任务给不同的线程去执行。当然,这对于那些执行过程非常短(总体计算量非常小)或程序本身具有很强的原创 2011-12-10 09:37:57 · 799 阅读 · 0 评论 -
循环结构的并行(二)
2、shedule条件把并行循环中的计算指定给线程这种方式称为循环队列(loop’s schedule)。对于并行循环中并形体计算量接近的情况,使用默认的队列方式是最优的。但也存在并行循环中每个并行计算量大小不一致的情况,如果计算量大小差距很大,并行程序的执行时间是以最后完成的那个线程为结束标记的,所以如果还采用相同的队列方式,计算量小的线程会先执行完,然后等计算量大的线程执行完,最后才结束并原创 2011-11-26 14:28:31 · 1001 阅读 · 0 评论 -
并行数目与并形体对运行效率的影响
接下来再做一个测试,将并行和串行的循环次数设置为100,即将上例的main函数中:for(int i = 0; i 更改为:for(int i = 0; i 然后分别运行10次,其结果如下表所示:次数串行并行10.002850030.00735008720.002原创 2011-11-26 14:20:40 · 828 阅读 · 0 评论 -
OpenMP概述
根据计算平台和规模的不同,并行计算可以分为两种:第一种是基于单一计算机系统的多核处理器或多处理器进行多线程并行计算,采用共享存储的方式,主要的标准有OpenMP,如下左图所示;第二种就是基于多台计算机组件的集群(Cluster)计算系统进行并行计算,采用消息传递方式,主要的标准有MPI,如下右图所示。本文将主要介绍多线程方式的并行计算。首先来了解一下单核处理器上程序运行方式,系统中包括原创 2011-11-26 14:16:21 · 2644 阅读 · 0 评论