码迷,mamicode.com
首页 > Windows程序 > 详细

Windows和Linux系统下并行计算环境MPI和OpenMP的搭建

时间:2020-04-07 20:14:53      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:size   accept   studio   电脑   directed   table   ref   begin   dir   

windows平台下在Visual Studio2019配置MPI环境

MPI下载安装

MPI windows版本的下载地址:https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi?redirectedfrom=MSDN
然后点击这里下载:
技术图片
图中两个文件都要选择,下载。
技术图片
下载完成后,点击这两个文件,都需要进行安装。
技术图片

项目配置

右击项目->属性,进行配置:

  • 右上角->配置管理器->活动解决方案平台,选择:x64;

  • VC++目录->包含目录,添加:“C:\Program Files (x86)\Microsoft SDKs\MPI\Include;”

  • VC++目录->库目录,添加:“C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64;”
    技术图片

  • C/C++ -> 预处理器->预处理器定义,添加:“MPICH_SKIP_MPICXX;”

  • C/C++ -> 代码生成 -> 运行库,选择:多线程调试(/MTd);

  • 链接器 -> 输入 -> 附加依赖项,添加:“msmpi.lib;”
    至此,环境就配好了,接下来就可以开始编程了。

测试

项目源文件下,新建.cpp文件,写入以下代码:

#include<stdio.h>
#include<mpi.h>

int main(int argc, char* argv[]) {
	int myid, numprocs;
 
	MPI_Init(&argc, &argv);
	MPI_Comm_rank(MPI_COMM_WORLD, &myid);
	MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
 
	printf("%d Hello world from process %d \n", numprocs, myid);
 
	MPI_Finalize();
	
	return 0;
}

让我们来分析一下上面的代码:
对于SPMD编程,程序员必须知道(1)进程编号,(2)多少个进程,(3)进程通信
那么MPI久提供了下列函数来回答这些问题:

  • 用MPI_Comm_size 获得进程个数p:
    int MPI_Comm_size(MPI_Comm comm, int *size)
  • 用MPI_Comm_rank 获得进程的一个叫rank的值,该rank值为0到p-1间的整数,相当于进程的ID
    int MPI_Comm_rank(MPI_Comm comm, int *rank)
  • 通信组/通信子: MPI_COMM_WORLD
    一个通信组是一个进程组的集合。所有参与并行计算的进程可以组合为一个或多个通信组。
    执行MPI_Init后,一个MPI程序的所有进程形成一个缺省的组,这个组被写作MPI_COMM_WORLD
    该参数是MPI通信操作函数中必不可少的参数,用于限定参加通信的进程的范围

下面我们来运行一下,看看结果:
在控制台该项目(这里的项目名称mpi_test)下的x64/Debug文件目录下打开cmd命令行窗口(Shift+鼠标左键,选择‘在此处打开Powershell窗口‘,输入start cmd),输入mpiexec -n 10 test.exe。
运行结果如下图:
技术图片

Linux下配置MPI编程环境-Ubuntu 18.04

终端配置过程

  • 在终端上先找到文件所在位置:sudo tar -zxvf mpich-3.3.2.tar.gz
  • 解压完毕,使用ls命令查看便可发现多出了一个mpich-3.3.2目录, 然后进入该目录:cd mpich-3.3.2
    使用ls查看,会发现其中有configure这个文件。
    技术图片
  • 运行命令./configure -prefix=/usr/local/mpich进行软件配置与检查,这里我们只设置安装目录即可。注:prefix参数是表示安装路径。
    可能会报错error: no acceptable C compiler found in $PATH
    要先使用命令sudo apt-get install build-essential安装好需要的编译器
    然后make && make install进行安装
    然后配置环境变量

Windows系统下OpenMP配置

visual studio2019配置

项目属性 --> C/C++ --> 语言 --> OpenMP支持,下拉菜单选择“是(/openmp)”,同时要将符合模式设置成“否”,否则编译会报错,如下图所示:
技术图片

测试

在使用具体实例测试之前,我们先来测试一下自己的计算机是几核的。

#include<omp.h>
#include<iostream>
int main()
{
    std::cout << "parallel begin:\n";
    #pragma omp parallel
    {
        std::cout << omp_get_thread_num();
    }
    std::cout << "\n parallel end.\n";
    std::cin.get();
    return 0;
}

技术图片
这是我的运行结果,所以说明处理器是8核的。

OpenMP中使用parallel指令标识代码中的并行段:

#pragma omp parallel
 
{
 
      多核并行执行的代码;
 
}

当编译器发现#pragma omp parallel for后,自动将下面的for循环分成N份,(N为电脑CPU核数),然后把每份指派给一个核去执行,而且多个核之间为并行执行。
下面是一个小实例:

#include <iostream>
int main()
{
#pragma omp parallel for
    for (int i=0;i<10;i++)
        std::cout<<i<<std::endl;
    return 0;
}

控制台输出:
技术图片
运行结果:
技术图片

Windows和Linux系统下并行计算环境MPI和OpenMP的搭建

标签:size   accept   studio   电脑   directed   table   ref   begin   dir   

原文地址:https://www.cnblogs.com/CuteyThyme/p/12652273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!