当前位置: 首页 > news >正文

(done) 自学 MPI (4) Environment Management Routines

url: https://hpc-tutorials.llnl.gov/mpi/environment_management_routines/


环境管理函数(例程)

这组例程用于查询和设置MPI执行环境,其用途包括初始化和终止MPI环境、查询进程标识、查询MPI库版本等。下面将介绍一些常用的例程。

例程包括:
1.MPI_Init
2.MPI_Comm_size
3.MPI_Comm_rank
4.MPI_Abort
5.MPI_Get_processor_name
6.MPI_Get_version
7.MPI_Initialized
8.MPI_Wtime
9.MPI_Wtick
10.MPI_Finalize

关于它们的具体介绍直接看参考链接,这里就不多讲了。

下面是一段 C 的样本代码(test.cpp),代码里的注释很有价值:

// test.cpp
// required MPI include file
#include "mpi.h"
#include <stdio.h>int main(int argc, char *argv[]) {
int  numtasks, rank, len, rc;
// MPI_MAX_PROCESSOR_NAME是MPI定义的常量,表示主机名称的最大长度
char hostname[MPI_MAX_PROCESSOR_NAME];// initialize MPI
// 初始化MPI环境
// argc:指向参数个数的指针(通常传递main函数的argc地址)
// argv:指向参数向量的指针(通常传递main函数的argv地址)
// 设置MPI环境,为进程间通信做准备
// 必须在使用任何其他MPI函数之前调用
// 所有MPI进程都会执行这个调用
MPI_Init(&argc,&argv);// get number of tasks
// 获取通信域中的进程总数
// comm:通信域(这里是MPI_COMM_WORLD,表示包含所有进程的全局通信域)
// size:输出参数,返回通信域中的进程总数
// 让每个进程知道总共有多少个进程在并行执行
// 在代码中,numtasks变量将存储进程总数
// 如果有4个进程运行程序,所有进程的numtasks值都是4
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);// get my rank
// 取当前进程在通信域中的唯一标识符(排名)
// comm:通信域
// rank:输出参数,返回当前进程的排名(从0开始)
// 为每个进程提供一个唯一的ID,用于区分不同的进程
// 排名范围是0到size-1(size来自MPI_Comm_size)
// 在4个进程中,排名分别是0、1、2、3
MPI_Comm_rank(MPI_COMM_WORLD,&rank);// this one is obvious
// 获取运行当前进程的主机名称
// name:输出参数,存储主机名称的字符数组
// resultlen:输出参数,返回实际名称的长度
// 获取运行进程的计算机主机名
// 在集群环境中,可以知道进程运行在哪台机器上
MPI_Get_processor_name(hostname, &len);
printf ("Number of tasks= %d My rank= %d Running on %s\n", numtasks,rank,hostname);// do some work with message passing// done with MPI
// 清理MPI环境
// 清理MPI环境,释放所有MPI资源
// 必须在MPI程序结束前调用
// 调用后不能再使用任何MPI函数
// 注意:所有MPI进程都必须调用此函数
MPI_Finalize();
}

编译运行命令如下:

sudo apt-get update
sudo apt-get install mpich
sudo apt-get install openmpi-bin openmpi-doc libopenmpi-dev
mpicxx test.cpp
mpirun -np 4 ./a.out

我的电脑上运行结果如下:
在这里插入图片描述


http://www.dtcms.com/a/515377.html

相关文章:

  • webrtc弱网-RembThrottler类源码分析及算法原理
  • 鸿蒙的声明式 UI转换为 JSView
  • 【MySQL】从零开始了解数据库开发 --- 如何理解事务隔离性
  • BugKu Web渗透之 never_give_up
  • Cangjie语言核心技术深度解析测评:迈进鸿蒙原生开发的安全新时代!
  • 长乐市住房和城乡建设局网站网站开发公司的推广费用
  • 绵阳住房和城乡建设部网站网站页面优化怎么做
  • 关于git的使用(在gitee和gitcode上部署自己的项目流程)
  • PHP 字符串操作详解
  • 3合一网站怎么做免费数据统计网站
  • 17.基础IO_3
  • Ubuntu 系统掉电导致分区损坏无法启动修复方案
  • 相机模组,模组是什么意思?
  • 申威架构ky10安装php-7.2.10.rpm详细步骤(国产麒麟系统64位)
  • STM32F407 通用定时器
  • lodash-es
  • 股票交易网站建设四会市城乡规划建设局网站
  • API技术深度解析:从基础原理到最佳实践
  • 西安今晚12点封城吗龙岩网站优化
  • 使用有限体积法求解双曲型守恒性方程(一)FV 框架
  • jenkins流水线部署springboot项目
  • YOLOv5:目标检测的实用派王者
  • 《工业之心:Blender 工业场景解构》
  • 【Linux网络】应用层自定义协议
  • unity免费改名工具-Mulligan Renamer
  • Git分支的多人协作
  • 服务外包网站成都住建局官网app
  • 【ABAP函数】+ALSM_EXCEL_TO_INTERNAL_TABLE批导长字段
  • 艺术学院网站模板wordpress二手车模板
  • docker api 常用接口