一、什么是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/n/313005.html
微信扫一扫
支付宝扫一扫