回 帖 发 新 帖 刷新版面

主题:一台多核电脑做并行,用mpi不太好吧,是不是用带有Openmp的编译器?

RT

回复列表 (共28个回复)

11 楼

头像是关联新浪微博的:)
CoArray其实就是增加了对数组的批量操作的分布与归约(个人理解)
而HPF应该还活着吧xlf不就是支持HPF的么:)

12 楼

………………

13 楼

[quote]cgl_lgs兄 加头像了啊.
CoArray记得是fortran2008标准的东西. 只是对数组进行操作, 可以满足部分人的需要. HPF高性能fortran我只在书本见过简单介绍,在我理解里面它已经死掉了,呵呵.
楼主想想你要做到什么程度, 打算投入多少时间. 我几年前刚学mpi和omp不久帮一个师妹弄并行, 他的程序主体就几个可以相互独立的循环. 所以只用了omp里面简单的循环并行. 加上跟串行比较的调试时间不到一个小时. 在4个核心的服务器上跑, 效率有3倍多. 她满意了我也不想去并行其他了.
你想学但又不知道是要学通它还是只需要简单提速? 还有对于一些比较复杂的问题往往又比较高效的并行算法,那个几乎是要重写部分代码的. 是否值得是个问题. 有时候能解决问题就行,不一定都希望花时间去弄并行.[/quote]
是啊,浪费时间的计算主要是循环计算,大多数循环都是几十万个循环。做并行就是想让循环计算分散到多个计算核心上。

14 楼

[quote]cgl_lgs兄 加头像了啊.
CoArray记得是fortran2008标准的东西. 只是对数组进行操作, 可以满足部分人的需要. HPF高性能fortran我只在书本见过简单介绍,在我理解里面它已经死掉了,呵呵.
楼主想想你要做到什么程度, 打算投入多少时间. 我几年前刚学mpi和omp不久帮一个师妹弄并行, 他的程序主体就几个可以相互独立的循环. 所以只用了omp里面简单的循环并行. 加上跟串行比较的调试时间不到一个小时. 在4个核心的服务器上跑, 效率有3倍多. 她满意了我也不想去并行其他了.
你想学但又不知道是要学通它还是只需要简单提速? 还有对于一些比较复杂的问题往往又比较高效的并行算法,那个几乎是要重写部分代码的. 是否值得是个问题. 有时候能解决问题就行,不一定都希望花时间去弄并行.[/quote]
是啊,浪费时间的计算主要是循环计算,大多数循环都是几十万个循环。做并行就是想让循环计算分散到多个计算核心上。

15 楼

[quote]楼主期盼的东东是存在的,其实就是CoArray、HPF等。
不过个人认为呢,有些东西完全可以认为它就是语言的一部分,也许你感觉不必关心,但实际不然:)
举个例子:
设你是做流体力学的。
你现在有一个使用有限体积法来解的方程,假设它是最简单的一维稳态问题吧。
首先你需要网格划分:这个需要一定的算法,但很简单;
然后你需要形成方程组:这个也非常简单;
接下来你需要解方程组:这个相对就麻烦些了,如果你不告诉计算机具体怎么算,难道它能自动用TDMA帮你算?不太可能吧:)
再接下来的事就是后处理:这个也简单:)

而解方程组,如果计算量很小,串行的TDMA非常高效!但计算量如果相当大呢?
您学串行的TDMA和学并行的TDMA一样是要付出时间和精力的吧:)

当然,您要是用现成的TDMA求解程序源码来解决问题,只要输入参数不变或仅做很小的变动。你需要了解这个求解器是串行或并行么:)不需要啊:)[/quote]

也就是说并行计算要看具体问题的情况撒!对于有些问题,不需要特别的并行算法就可以并行计算,对于有些问题,则需要用专门的算法吧!

16 楼

[quote]并行计算其实已经有几十年历史了. 翻翻mpi, omp的历史也10多20年(具体我没查过,只是看第一版标准就是很早之前的). 现在科学计算比较多的就这两个.
自动并行的项目确实是有的.但是到现在还没有看到一个能够让人接受, 或者在特定的情况下也能提供高效的并行. 这个你可以试试intel编译器的Qparallel,那个就是自动并行.其实不追求很高效那就不需要换并行算法, 在串行代码中找热点进行并行, 这就是omp在多核心单机系统中易用而被推荐的原因.
不管你希望现实怎么样, 我所知道的可预见将来很长一段时间不会有那么高智能的编译器, 等这样的东西恐怕都够几个博士毕业了. 再者有高智能编译器程序员都可以下岗了. 这个话题就好像机器人的智能是否能超越制造它的人类一样复杂.
现在热门的是异构并行, 用显卡的gpu来做计算. 有兴趣可以留意一下.[/quote]
不知道用 CUDA复杂不?我也挺感兴趣的。

17 楼

有些算法是比较天然有独立性, 不需要换并行算法的. 只要重新分配一下就可以了.
CUDA我兴趣不是很大, 现在买了一本国内出的介绍gpu的书, 还打印了2本关于opencl的书. 等迟些真有时间再学. 这几天泡gpgpu论坛多了一些, 看看那些老鸟怎么看待gpu通用计算的.

18 楼

那就要看循环是否有前后关联, 是否独立, 如果关联厉害那就可能没办法并行了. 相对来说omp对付循环还是比较方便的. mpi会麻烦一些.

19 楼

如果循环不是顺序相关的话,用OMP会相当方便:)
用时可以将:
default(none)
子句先加上,然后编译器就会提示你循环里都有哪些变量了:)
然后呢你就根据你对程序的了解来决定哪些是shared的,哪些是firstprivate的,哪些是private的……

当然,OMP对循环有个限制:你不能在循环着一半儿突然跳出循环,也不能从循环外突然跳到循环内:)

20 楼

如果不用第三方库或是PGI这样类型的编译器,直接用CUDA很麻烦,全是陌生的API~~~~~
据PGI说他的编译器可以直接编译出同时使用CPU和GPU的代码~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册