OpenMP与MPI混合编程小例子

访问本站观看效果更佳

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

猜你喜欢

转载自blog.csdn.net/zcgyq/article/details/83088324