并行程序设计基础——虚拟进程拓扑

2024-08-31 03:20

本文主要是介绍并行程序设计基础——虚拟进程拓扑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、虚拟拓扑

二、笛卡尔拓扑

1、MPI_CART_CREATE

2、MPI_DIMS_CREATE

3、MPI_TOPO_TEST

4、MPI_CART_GET

5、MPI_CART_RANK

6、MPI_CARTDIM_GET

7、MPI_CART_SHIFT

8、MPI_CART_COORDS

9、MPI_CART_SUB

10、MPI_CART_MAP


        简单的MPI通信,不要求参加通信的进程具有特殊的拓扑结构,但是在一些应用中,对进程具有一定的拓扑有很强的要求,定义不同的进程拓扑结构,可以使程序设计更加自然和更易于理解,同时这样的逻辑拓扑也为在相近的物理拓扑上的高效实现提供支持。

        从本节开始介绍如何定义和使用不同的进程拓扑,主要包括两种拓扑:①具有规则的网格现状的笛卡尔拓扑;②具有任意形状的图拓扑。目前应用较多的是笛卡尔拓扑。

一、虚拟拓扑

        在许多并行应用程序中,进程的线性排列不能充分地反映进程间在逻辑上的通信模型(通常由问题几何和所用的算法决定),进程经常被排列成二维或三维网格形式的拓扑模型,而且,通常用一个图来描述逻辑进程排列,在这里我们指这种逻辑进程排列为“虚拟拓扑”。拓扑是组内通信域上的额外、可选的属性,它不能附加在组间通信域上(inter-communicator)。拓扑能够提供一种方便的命名机制,对于有特定拓扑要求的算法使用起来直接、自然且方便,拓扑还可以辅助运行时系统,将进程映射到实际的硬件结构上。

        一个进程集合的通信模型可以由一个图表示,节点代表进程,边用来连接彼此之间通信的进程。用图来说明虚拟拓扑,对于所有的应用都是足够的。然而,在许多应用中图结构是规则的,而且详细的图的建立对于用户是不方便的,在运行时可能缺乏有效性。并行应用程序中的大部分使用像“环”、“二维”或更高维的网格、圆环这样的进程拓扑。这些结构完全由在每一相应坐标方向的维数和进程数来定义,可以用简单方便的笛卡尔坐标来表示。

        MPI提供两种拓扑,即笛卡尔拓扑和图拓扑,分别用来表示简单规则的拓扑和更通用的拓扑。

笛卡尔拓扑和图拓扑调用的简单对比
操作笛卡尔拓扑图拓扑
创建MPI_CART_CREATEMPI_GRAPH_CREATE
获得维数MPI_CARTDIM_GETMPI_GRAPHDIMS_GET
获得拓扑信息MPI_CART_GETMPI_GRAPH_GET
物理映射MPI_CART_MAPMPI_GRAPH_MAP

二、笛卡尔拓扑

1、MPI_CART_CREATE

这篇关于并行程序设计基础——虚拟进程拓扑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1122745

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

Windows的CMD窗口如何查看并杀死nginx进程

《Windows的CMD窗口如何查看并杀死nginx进程》:本文主要介绍Windows的CMD窗口如何查看并杀死nginx进程问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows的CMD窗口查看并杀死nginx进程开启nginx查看nginx进程停止nginx服务

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI