OpenMP和MPI是并行编程

前言

多线程在实际的编程中的重要性不言而喻。对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的std::thread,也可以使用操作系统相关的线程API,如在Linux上,可以使用pthread库。除此之外,还可以使用omp来使用多线程。它的好处是跨平台,使用简单。

配置

在Linux平台上,如果需要使用omp,只需在编译时使用"-fopenmp"指令。在Windows的visual studio开发环境中,开启omp支持的步骤为“项目属性 -> C/C++ -> 所有选项 -> openmp支持 -> 是(/openmp)”。

QT中,在.pro文件中加入  QMAKE_CXXFLAGS += -fopenmp   LIBS += -fopenmp

使用

#include <iostream>
#include <omp.h>
 
using namespace std;
 
int main()
{
    #pragma omp parallel for
    for (char i = 'a'; i <= 'z'; i++)
        cout << "Hello World! " << i << endl;
 
    return 0;
}

对比

  • OpenMP:线程级(并行粒度);共享存储;隐式(数据分配方式);可扩展性差;
  • MPI:进程级;分布式存储;显式;可扩展性好。
  • Openmp

    简单。不用大改源程序,直接加#pragma就行了。

    只适用于共享式内存。比如一台电脑,4核cpu共享16G内存,可以用Openmp启动4核同时计算。

    MPI

    稍复杂。需要重新设计程序,学习成本稍高。

    扩展性好,适用于共享式或者分布式内存(楼上所说有误)。比如二台电脑,各有4核cpu和16G内存,可以用MPI同时在二台电脑上计算,并且每台电脑都同时使用各自的4核,和16G内存(相当于8核同时计算)。因此你在一台电脑上写出的程序,也可以方便的使用在计算机集群中

  • MPI适用于分布式内存系统中的并行计算,可以在大型集群中实现高性能。MPI的通信方式可以有效地利用网络带宽,从而实现高效的并行计算。

    OpenMP适用于共享内存系统中的并行计算,可以在单个计算机上实现高性能。OpenMP的线程之间共享内存,因此要注意线程之间的同步和数据一致性。

    总的来说,MPI适用于大规模并行计算,而OpenMP适用于小规模并行计算

  • 这两者在并行编程领域都比较常见,都是为了将更多资源利用起来;openmp是线程并行(通过共享内存通信,只能用在节点内),mpi是进程级(通过消息传递通信,节点内,节点间均可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值