全能工程師必備技能——mpirun-np

一、什麼是mpirun-np

mpirun-np是一種用於並行計算的命令行工具,其作用是啟動並運行一個並行計算程序。它是OpenMPI軟體包的一部分,可以用於分散式計算環境中的任務分配。

mpirun-np命令的-np參數指定使用的進程數,也就是啟動的並行運算的進程數。如果-np參數為1,那麼mpirun-np就會在本地啟動一個單進程的應用程序。

$mpirun-np 4 ./myprogram

二、mpirun-np的使用方式

mpirun-np的使用方式非常靈活,可以啟動任意類型的程序。下面介紹幾種常見的使用方式。

1. 啟動MPI程序

如果要啟動MPI程序,可以使用mpirun-np命令並指定啟動的進程數和要執行的程序名。

$mpirun-np 4 ./my_mpi_program

上面的命令將啟動一個4個進程的MPI程序。

2. 啟動OpenMP程序

如果要啟動OpenMP程序,可以使用mpirun-np命令並指定啟動的進程數和要執行的程序名。

$mpirun-np 1 ./my_openmp_program

上面的命令將啟動一個單進程的OpenMP程序。

3. 啟動Hybrid程序

Hybrid程序是MPI和OpenMP混合併行編程的程序。如果要啟動Hybrid程序,需要在mpirun-np命令中指定MPI的進程數和OpenMP的線程數。

$mpirun-np 4 -x OMP_NUM_THREADS=2 ./my_hybrid_program

上面的命令將啟動一個4個進程,每個進程使用2個線程的Hybrid程序。

三、mpirun-np的實例演示

1. MPI實例演示

下面演示一個簡單的MPI程序的運行。

程序代碼:

#include 
#include 

int main(int argc, char** argv){
    //初始化MPI環境
    MPI_Init(&argc, &argv);

    int rank, size;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    //列印進程ID和進程總數
    printf("Hello world from rank %d of %d\n", rank, size);

    //終止MPI環境
    MPI_Finalize();
}

命令行輸入:

$mpirun-np 4 ./mpi_hello_world

輸出結果:

Hello world from rank 0 of 4
Hello world from rank 1 of 4
Hello world from rank 2 of 4
Hello world from rank 3 of 4

上面的命令將會啟動4個進程的MPI程序,並輸出每個進程的rank和進程總數。

2. OpenMP實例演示

下面演示一個簡單的OpenMP程序的運行。

程序代碼:

#include 
#include 

int main() {
    #pragma omp parallel
    {
        printf("Hello, World! (thread %d)\n", omp_get_thread_num());
    }
}

命令行輸入:

$mpirun-np 1 ./openmp_hello_world

輸出結果:

Hello, World! (thread 0)
Hello, World! (thread 1)
Hello, World! (thread 2)
Hello, World! (thread 3)

上面的命令將會啟動單進程的OpenMP程序,並輸出每個線程的編號。

3. Hybrid實例演示

下面演示一個簡單的Hybrid程序的運行。

程序代碼:

#include 
#include 
#include 

int main(int argc, char** argv){
    //初始化MPI環境
    MPI_Init(&argc, &argv);

    int rank, size;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

    //設置並行線程數
    int thread_count = 2;
    //設置每個MPI進程的線程數
    omp_set_num_threads(thread_count);

    #pragma omp parallel
    {
        //列印進程ID、進程總數、線程ID和線程總數
        printf("Hello world from rank %d of %d (thread %d of %d)\n", rank, size, omp_get_thread_num(), thread_count);
    }

    //終止MPI環境
    MPI_Finalize();
}

命令行輸入:

$mpirun-np 4 -x OMP_NUM_THREADS=2 ./hybrid_hello_world

輸出結果:

Hello world from rank 0 of 4 (thread 0 of 2)
Hello world from rank 1 of 4 (thread 0 of 2)
Hello world from rank 2 of 4 (thread 0 of 2)
Hello world from rank 3 of 4 (thread 0 of 2)
Hello world from rank 0 of 4 (thread 1 of 2)
Hello world from rank 1 of 4 (thread 1 of 2)
Hello world from rank 2 of 4 (thread 1 of 2)
Hello world from rank 3 of 4 (thread 1 of 2)

上面的命令將會啟動4個進程,每個進程使用2個線程的Hybrid程序,並輸出每個進程和線程的編號。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313005.html

(1)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-06 15:17
下一篇 2025-01-06 15:25

相關推薦

發表回復

登錄後才能評論