MAC(主框架)
<p><strong>框架介绍</strong>
<strong>BML文件</strong>
链接:<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/bml">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/bml</a>
功能:组件框架为任务启动和动态进程的创建提供搜索和维持负责点点通信的BTL 组件的服务。BML 可以协调结点资源,并为 BTL 的使用者进行缓冲,当发现资源后,其他层会绕过 BML 组件框架直接与 BTL 通信,提高了通信性能</p>
<p><strong>coll文件</strong>
链接:<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/coll">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/coll</a></p>
<p>功能:主要框架里面一些库文件的集合</p>
<p><strong>common文件</strong>
链接:<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/common">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/common</a></p>
<p>功能:共用库文件</p>
<p><strong>crcp文件</strong>
链接:<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/crcp">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/crcp</a></p>
<p>功能:检查点/重新启动协调协议 (CRCP) 接口</p>
<p><strong>fbtl文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/fbtl">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/fbtl</a></p>
<p>功能:BTL 组件框架负责处理所有点对点消息传送,包含了一组用于发送/接收或RDMA 的通信组件单元。BTL 不受 MPI 语义的影响,它仅仅是通过最基本的传递功能来在进程间进行数据交换(包括连续的和非连续的数据)。这样的组件框架为网络设备的开发商提供了便利,同时也可以支持更广泛的结点间通信设备</p>
<p><strong>fcoll文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/fcoll">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/fcoll</a></p>
<p>功能:通讯的共用模块</p>
<p><strong>fs文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/fs">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/fs</a></p>
<p>功能:文件管理模块</p>
<p><strong>hook文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/hook">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/hook</a>
功能:
hook框架设计为允许hook框架的一个组件
被称为 MPI 进程生命周期中的指定点。
此框架中没有模块结构, 因为组件适用于
整个过程。此外, 组件可能需要在 mca_init 之前激活</p>
<p><strong>io文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/io">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/io</a>
功能:
输入输出库</p>
<p><strong>mlt文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/mtl">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/mtl</a>
功能:
匹配传输层
匹配传输层提供设备层支持
用于在设备上传输 MPI 点对点消息
支持硬件/库消息匹配。 此层用于
具有最低延迟和最高
给定体系结构的带宽。 在其他 PML 中发现的特征
接口, 如消息分割、多设备支持和
上层层不提供 NIC 故障切换。
一般不应将此接口用于传输层
支持. 相反, 应该使用 BTL 接口。 BTL
接口允许多个用户之间进行多路复用
(点对点, 单侧等), 并提供许多功能不
在此接口中找到 (RDMA 来自任意缓冲区, 活动
消息传递、合理的固定内存缓存等)</p>
<p><strong>op文件</strong>
链接:<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/op">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/op</a>
功能:
MPI_Op 后端操作框架。 此框架允许
组件-izing MPI_Op 的后端操作, 以便使用
专用硬件 (例如, 数学加速器)。 简而言之:
每个 MPI_Op 包含一个函数指针表;一个为
对每个预定义数据类型执行操作。
MPI 接口提供错误检查和错误处理程序
调用, 但 op 组件提供所有其他功能。
组件选择是在每个 MPI_Op 的基础上进行的, 当每个 MPI_Op
被创建。 所有的 MPI_Ops 都经过选择过程, 甚至
用户定义的 MPI_Ops--尽管预计大多数 (全部?)
op 组件将只能够处理预定义的 MPI_Ops。
op 框架的一般使用顺序是:
1。在 MPI_INIT 期间调用 ompi_op_base_open () 以查找/打开所有
op 组件。
2。在 MPI_INIT 期间调用 ompi_op_base_find_available () 来调用
每个成功打开 op 组件的 opc_init_query () 函数。
保留所有返回 OMPI_SUCCESS 的 op 组件;其他所有
关闭并从进程中删除。
3。ompi_op_base_op_select () 在 MPI_INIT 期间调用
预定义的 MPI_Op (例如, MPI_SUM)。 此函数将调用每个
可用 op 组件的 opc_op_query () 函数来查看此
组件希望为一个或多个函数提供一个模块
在这个 MPI_Op 上的指针。 优先级用于对返回的排序
模块;具有最高优先级的模块具有其功能
MPI_Op 函数表中设置的指针。
请注意, 一个模块可能只有 <em> 一些 </em> 非 NULL 函数指针
(即为其可支持的功能)。 例如, 一些
模块可能只支持单精度浮动的操作
点数据类型。 这些模块将提供函数指针, 用于
这些数据类型和空的所有其余。 op 框架将
在模块之间混合 n 匹配函数指针以获取完整集
给定 MPI_Op 的非 NULL 函数指针 (注意 Op
基为 MPI_Op 提供了一整套功能, 通常是
简单的 C 循环操作, 如 "+ ="-所以即使
没有专门的 op 组件可供使用, 总是会 *
为一组完整的 MPI_Op 函数指针)。 op 框架将
为每个函数指针 OBJ_RETAIN 一个 op 模块
用于给定的 MPI_Op。
请注意, 此方案可导致多达 N 个不同的模块
用于单个 MPI_Op, 每个需要一个数据类型函数。
5。最后, 在 MPI_FINALIZE 期间, ompi_op_base_close () 被调用
关闭所有可用的 op 组件</p>
<p><strong>osc文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/osc">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/osc</a>
功能:
单侧通信接口
接口, 实现单侧通信的一章
MPI-2 标准。 类似于 PML 的点对点
来自 MPI-1 的通讯</p>
<p><strong>pml文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/pml">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/pml</a>
功能:
PML 组件框架负责管理所有消息的传递,实现了 MPI 点点通信原语,包括标准、缓冲、准备和同步四种通信模式。PML 根据具体的调度策略对 MPI 消息进行调度,该策略是根据 BTL 的具体属性决定的。短消息传递协议和长消息传递协议也是在 PML 中实现的。所有控制信息(ACK/NACK/MATCH)也都由 PML 进行管理。这种结构的优点是将传输协议从底层互连中分离出来,显著的降低了代码的复杂度和冗余度,增强了可维护性。</p>
<p><strong>rte文件</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/rte">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/rte</a>
功能:
这是 OMPI 层的公共 RTE 接口。任何 RTE 都可以
通过在中创建新的静态组件来连接到 OMPI 层
此框架, 为其分配优先级并包括配置. m4
定义何时应生成。
每个组件都必须提供许多类型和函数来模拟
ORTE 提供的。这些包括 (如果存在灵活性, 则
显示 ORTE 数据类型, 但允许任何兼容类型。例如,
ompi_process_name_t 中的 jobid 字段可以是任何类型的整数, 但不能为字符串):
(a) 进程名称对象和操作
1。整型的定义 ompi_jobid_t 和 ompi_vpid_t。
jobid 必须是唯一的一个给定的 MPI_COMM_WORLD 能够
连接到另一个 OMPI_COMM_WORLD 和 vpid 将是
进程在 MPI_COMM_WORLD 中的排名。
2。ompi_process_name_t-一个必须包含至少两个整型类型字段的结构:
ompi_jobid_t jobid
b. ompi_vpid_t vpid
请注意, 结构可以包含超出这些的任意数量的字段
两个, 因此, 任何特定 RTE 的进程名称结构可以是任何
为需要。
3。OMPI_NAME_PRINT-在给定时打印进程名称的宏
指向 ompi_process_name_t 的指针。输出格式为
表示名称的单个字符串。 此函数应
为多个线程同时调用线程安全。
4。OMPI_PROC_MY_NAME-一个指向全局变量的指针, 包含
此过程的 ompi_process_name_t。通常, 这是
存储为 ompi_process_info_t 结构中的字段, 但
不是要求。
5。OMPI_NAME_WIlDCARD-通配符名称。
6。ompi_rte_compare_name_fields-用于比较字段的函数
在 ompi_process_name_t 结构中。函数原型必须
的形式:
int ompi_rte_compare_name_fields (ompi_rte_cmp_bitmask_t 掩码,
ompi_process_name_t <em> name1
ompi_process_name_t </em> name2);
必须定义位掩码以指示要使用的字段
在比较中。必须忽略掩码中不包含的字段。
支持的位掩码值必须包括:
b. OMPI_RTE_CMP_JOBID
c. OMPI_RTE_CMP_VPID
OMPI_RTE_CMP_ALL
7。uint64_t ompi_rte_hash_name (名称)-返回一个唯一的字符串哈希
代表 ompi_process_name 通过。
8。OMPI_NAME-一个蛋白石 DSS 常数为已经注册的处理程序
序列化/反序列化 ompi_process_name_t 结构。
(b) 集体对象和行动
1。ompi_rte_collective_t-在 rte 集体操作期间使用的蛋白石对象如 modex 和屏障。它必须是一个 opal_list_item_t, 并包含
以下字段:
id (ORTE 类型: int32_t)
b. bool 活动
标志, 用户可以轮询, 知道何时集体
已完成-设置为 false 只是在之前
调用用户回调函数 (如果提供)
2。ompi_rte_modex-执行端点信息交换的函数
当 MPI 传输。函数原型必须是形式:
国际 ompi_rte_modex (ompi_rte_collective_t);
在完成 modex 操作后, 必须设置活动标志
为 false, 并且端点信息必须存储在 modex 数据库中。
此函数必须具有跨 MPI_COMM_WORLD 的屏障语义。
调用进程。
3。在 ompi_rte_barrier 中执行屏障操作的函数</p>
<p>rte.函数原型必须是形式:
国际 ompi_rte_barrier (ompi_rte_collective_t);
在完成屏障操作时, 必须设置活动标志为假
(c) 流程信息结构
1。ompi_process_info_t-包含有关当前进程的信息的结构。
该结构至少必须包含以下字段:
app_num-pid-这个过程的 pid。 应与 getpid () 相同。
c. num_procs-此作业中的进程数 (即 MCW)
d. my_node_rank-在本地节点上对其他对等方的相对秩此运行时
实例知道。 如果做动力学, 这可能是某事
不同于 my_local_rank, 但将 my_local_rank 在
静态作业。
d. my_local_rank-在本地节点上与此工作中其他对等方的相对秩 (即, MCW)
e. num_local_peers-本地对等方的数量 (节点上 MCW 的对等方)</p>
<p><strong>sharedfp</strong>
链接:
<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/sharedfp">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/sharedfp</a>
功能:共享程序</p>
<p><strong>topo文件</strong>
链接:<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/topo">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/topo</a>
功能:拓扑结构</p>
<p><strong>vprotocol</strong>
链接:<a href="https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/vprotocol">https://github.com/qianyongjun895/HPIPS/tree/master/OpenMpi-Chain/ompi/mca/vprotocol</a>
功能:价值协议</p>