一、什麼是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-hant/n/313005.html