V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lichgo
V2EX  ›  程序员

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

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

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

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

    推荐一个简单教程:
    https://computing.llnl.gov/tutorials/openMP/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1052 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:36 · PVG 06:36 · LAX 14:36 · JFK 17:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.