OpenMP、MPI
Visual Studio Code
author:zoxiii
参考书籍:并行计算:结构·算法·编程_陈国良
前提:安装gcc
- Visual Studio Code
一、OpenMP
1、介绍
OpenMP基于共享内存的。
2、实现一个例子
- 写代码文件test.c
//*用OpenMP(C语言)编写的Hello World 程序代码段*//
#include"stdio.h"
#include"omp.h"
void main()
{
int nthreads,tid;
char buf[32];
/*生成一个线程组*/
#pragma omp parallel private(nthreads,tid)
{
/*获得并输出线程ID*/
tid=omp_get_thread_num();
printf("Hello World from OpenMP thread %d\n",tid);
/*只有主线程做这些*/
if(tid==0)
{
nthreads=omp_get_num_threads();
printf("Number of threads id %d\n",nthreads);
}
}
}
- 打开Visual Studio Code的终端框(cmd),进入代码所在的文件夹
E:
cd E:\Project_All_Apps\OpenMP
- 使用OpenMP编译
## 编译
gcc -fopenmp -o test test.c
## 运行
./test.exe
二、MPI
0、安装
安装 MPI Setup
安装 MPI SDK
安装两个文件后,打开cmd窗口,输入set MSMPI可以看到安装路径,如果有如下输出,表示已经安装成功。
1、介绍
MPI是基于消息传递的。
2、实现一个例子
- 写代码文件testmpi.c
//*计算Π的MPI(C语言)程序代码段*//
#define N 100
#include"mpi.h" /*MPI头函数,提供了MPI函数和数据类型的定义*/
#include<stdio.h>
#include<math.h>
int main(int argc,char **argv)
{
double local=0,pi,w,temp;
int i,rank,size;
w=1.0/N;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
if(rank != 0){
printf("precess rank is %d\n",rank);
}
for(i=rank;i<N;i=i+size)
{
temp=(i+0.5)*w;
local=4.0/(1.0+temp*temp)+local;
}
MPI_Reduce(&local, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
if(rank==0)
printf("pi is %f\n",pi*w);
MPI_Finalize();
return 0;
}
- 打开Visual Studio Code的终端框(cmd),进入代码所在的文件夹
- 使用MPI编译
## 编译
gcc -I"D:\Program Files (x86)\Microsoft SDKs\MPI\Include" -o MPI testmpi.c "D:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64\msmpi.lib"
## 运行
mpiexec -n 12 MPI.exe # -n 12 代表使用12线程