• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lichgo
V2EX  ›  程序员

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

  •  
  •   lichgo · Aug 24, 2012 · 3718 views
    This topic created in 5017 days ago, the information mentioned may be changed or developed.
    4 replies    1970-01-01 08:00:00 +08:00
    sivacohan
        1
    sivacohan  
    PRO
       Aug 24, 2012
    在这竟然有玩这个的,没想到啊没想到。我现在不玩了。不过这个问题我可以凭记忆给出一个不靠谱答案。
    openmp可以看作c的扩展集,当然我是以c为例,你要是用fortan也行。对for循环之类的东西进行了一些扩展,具体自己看手册,让你可以用串行的方式写并行。如果没记错应该是共享内存方式。
    mpi我用的相对多一些。当然现在不玩了。mpi是消息传递机制。你必须在函数内调用mpi send(我手机不知道怎么打下划线)来实现进程/线程间通信。
    已经说了,是不靠谱回答~大家就清点喷我吧。
    gracehunter
        2
    gracehunter  
       Aug 24, 2012
    要吧源程序修改一下,指定哪一块执行多线程。
    Ricepig
        3
    Ricepig  
       Aug 25, 2012
    如果对于相互无依赖且无数据争抢情况的循环,使用OpenMP可以近乎自动地对他们进行并行化。

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

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

    推荐一个简单教程:
    https://computing.llnl.gov/tutorials/openMP/
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3902 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 04:15 · PVG 12:15 · LAX 21:15 · JFK 00:15
    ♥ Do have faith in what you're doing.