ひらっちの備忘録

ジャンル問わず、色々なこと書いてます。

【Mac】MPIの環境構築と実行

MacでMPIを使うために結構調べて時間がかかったので、メモとして残しておこうと思います。

使用したPC

OS : macOS Monterey 12.5.1
プロセッサ : 3.2 GHz 6コアIntel Core i7

環境構築

MacでHomebrewを使っているなら、

brew install openmpi

でインストールが可能です。

実行

下のサンプルコードhello.cを作成し、

#include <stdio.h>
#include <mpi.h>
#define MSIZE 64

int main(int argc, char **argv){
    char msg[MSIZE];
    int rank; /* カレントプロセスのランク */
    int nproc;  /* プロセスの数 */

    MPI_Status status;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    if(rank == 0){
        for(int i = 1; i < nproc; i++){
            MPI_Recv(msg, MSIZE, MPI_CHAR, i, 0, MPI_COMM_WORLD, &status);
            fputs(msg, stdout);
        }
    }else{
        sprintf(msg, "Hello world! My process is #%d\n", rank);
        MPI_Send(msg, MSIZE, MPI_CHAR, 0, 0, MPI_COMM_WORLD);
    }
    MPI_Finalize();
    return 0;
}

以下のようにコンパイルし、

$ mpicc -o hello hello.c

-npでプロセス数を指定して実行し、出力結果のように表示されればOKです。

$ mpirun -np 3 ./hello
Hello world! My process is #1
Hello world! My process is #2