OpenSHMEM 中的同步与内存重用
OpenSHMEM 是用于 PGAS 库的开放标准,提供单边通信语义。自 2012 年标准化进程完成后,OpenSHMEM API 经历了一系列快速的扩展提议。其中包括添加处理元素(PE)团队,以更灵活地定义用于问题分解的 PE 子集,以及引入空间概念,可在特定团队内进行内存管理而无需全局同步。然而,仍有一个问题影响团队的可用性,即用户需要管理实现集体操作时内部使用的同步内存。
1. OpenSHMEM 概述
OpenSHMEM 是 SHMEM 通信库的事实标准,实现了分区全局地址空间(PGAS)模型。每个 PE 管理对称内存堆的一个分区,用于对称数据对象的分配。这些分配可通过丰富的远程内存访问(RMA)操作(包括原子内存操作 AMOs)进行访问。此外,OpenSHMEM 还定义了一组用于 PE 集合的内存同步和集体操作。其库 API 支持 C、C++ 和 Fortran 编程语言,大多数开源 OpenSHMEM 应用使用 C 语言开发。
OpenSHMEM 库 API 遵循 PGAS 编程模型,支持执行 C、C++ 或 Fortran SPMD 程序的 PE 之间的通信、同步和其他操作。其他有用的操作包括集体操作调用(对称内存分配、广播、归约、收集和同步)、原子内存操作、分布式锁和数据传输排序原语(fence 和 quiet)。大多数集体调用是针对由活动集定义的 PE 子集进行的,活动集由每个集体调用中的三个参数定义。
历史上,OpenSHMEM 中特定通信操作有两个主要元素:目标 PE(集体操作时为多个 PE)和感兴趣的内存位置。虽然在过去的规范迭代中它们是分开的组件,但都受到全局视图的约束。前者问题可通过处理定义良
超级会员免费看
订阅专栏 解锁全文
1383

被折叠的 条评论
为什么被折叠?



