一、什麼是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
微信掃一掃
支付寶掃一掃