请问OpenMP是会自己并行执行串行的程序还是前提必须程序内部有多线程?

2012-08-24 19:15:36 +08:00
 lichgo
2997 次点击
所在节点    程序员
4 条回复
sivacohan
2012-08-24 21:15:52 +08:00
在这竟然有玩这个的,没想到啊没想到。我现在不玩了。不过这个问题我可以凭记忆给出一个不靠谱答案。
openmp可以看作c的扩展集,当然我是以c为例,你要是用fortan也行。对for循环之类的东西进行了一些扩展,具体自己看手册,让你可以用串行的方式写并行。如果没记错应该是共享内存方式。
mpi我用的相对多一些。当然现在不玩了。mpi是消息传递机制。你必须在函数内调用mpi send(我手机不知道怎么打下划线)来实现进程/线程间通信。
已经说了,是不靠谱回答~大家就清点喷我吧。
gracehunter
2012-08-24 21:16:50 +08:00
要吧源程序修改一下,指定哪一块执行多线程。
Ricepig
2012-08-25 01:56:31 +08:00
如果对于相互无依赖且无数据争抢情况的循环,使用OpenMP可以近乎自动地对他们进行并行化。

也就是说,你在这类循环上加上OpenMP标记,编译器会自动将他们并行化。
Ranler
2012-08-25 08:34:47 +08:00
OpenMP在多核共享内存模型机上使用,且必须用户指定程序的并行部分(各种循环),然后由编译器完成并行化工作。

penMP可以和MPI组合使用,OpenMP完成单机上的多核并行,MPI完成集群上机器间的通信。这是一种适合计算密集型的框架。

推荐一个简单教程:
https://computing.llnl.gov/tutorials/openMP/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/45957

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX