一、什么是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程序,并输出每个进程和线程的编号。