OpenMP與MPI混合程式設計小例子
阿新 • • 發佈:2018-11-08
訪問本站觀看效果更佳
title: OpenMP與MPI混合程式設計小例子
tags:
- openmp
- mpi
下面的例子比較簡單,主要為說明使用OpenMP以及MPI的混合編譯命令。
#include "mpi.h" #include "omp.h" #include <math.h> #define N 1000000000 int main( int argc, char* argv[] ){ int rank, nproc; int i,low,up; double local = 0.0, pi, w, temp; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &nproc ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); w = 1.0/N; low = rank*(N / nproc); up = low + N/nproc - 1; #pragma omp parallel for reduction(+:local) private(temp,i) for (i=low;i<up; i++) { temp = (i+0.5)*w; local = local + 4.0/(1.0+temp*temp); } MPI_Reduce(&local, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD); if(rank==0) printf("pi = %.20f\n",pi*w); MPI_Finalize(); }
編譯命令如下:
mpicc -o my -fopenmp my.c -lm -O3
mpirun -np NUM_of_Procs -x OMP_NUM_THREADS=8 -machinefile nodes ./my