26、优化OpenSHMEM性能与能效的多维度探索

优化OpenSHMEM性能与能效的多维度探索

在高性能计算(HPC)领域,OpenSHMEM作为一种流行的单边通信库,正逐渐成为下一代HPC应用和系统的重要编程模型。然而,目前在评估和优化OpenSHMEM系统软件和硬件性能方面,相关的基准测试和迷你应用还比较缺乏。同时,随着HPC系统向极端规模发展,功耗问题也日益凸显,如何实现更高效的功耗管理成为了OpenSHMEM实现中亟待解决的问题。本文将围绕OpenSHMEM的性能分析工具、多线程基准测试以及功耗趋势研究等方面展开探讨。

自动包装库生成与性能分析

为了构建任意SHMEM实现的工具接口,采用了Program Database Toolkit(PDT)来解析实现的头文件,如 shmem.h shmemx.h ,从而发现可用的API。对于每个解析的API函数,会自动生成一个包装函数,用于跟踪该例程的性能特征,如挂钟时间。如果该例程还涉及数据的发送或接收,包装函数还会跟踪消息大小、目标处理元素(PE)和源PE。此外,包装函数还可以通过PAPI测量硬件性能计数器,以跟踪缓存未命中、操作计数等。

操作步骤如下:
1. 使用PDT解析SHMEM实现的头文件。
2. 针对每个解析的API函数,自动生成包装函数。
3. 利用包装函数跟踪性能特征和硬件性能计数器。

SHMEM - MT基准测试套件

OpenSHMEM作为一种流行的单边通信库,在高性能计算系统中得到了广泛应用。然而,目前缺乏用于评估和优化OpenSHMEM系统软件和硬件性能的基准测试和迷你应用,特别是在新兴的多核和众核系统上。为了解决这一问题,提出了SHMEM - MT基准测试套件,用于系统地评估OpenSHMEM通信性能。

基准测试的开发思路

该基准测试套件的开发主要基于之前为MPI开发的单边基准测试和迷你应用,特别是RMA - MT基准测试套件。其核心目标是将MPI RMA单边调用移植到OpenSHMEM,并支持多线程,以适应现代多核和众核系统的需求。

基准测试的转换过程
  • 同步方法替换 :根据基准测试的通信模式,选择最合适的同步方法。在延迟和带宽基准测试中,使用 shmem_quiet ,因为通信只涉及一个处理元素(被动目标);在消息速率和迷你应用基准测试中,使用 barrier_all ,因为底层应用已经依赖屏障来同步多个进程的活动。
  • MPI窗口管理和RMA调用转换 :将 malloc MPI_win_create 调用替换为适当的 shmem_malloc 调用,将 MPI_get/put 替换为 shmem_get/put 。由于基准测试的命令行参数是存储在对称内存中的全局变量,因此可以移除原始RMA - MT基准测试中用于广播这些参数的调用。

以下是基准测试转换的流程图:

graph TD;
    A[选择基准测试] --> B[确定通信模式];
    B --> C{是否为延迟/带宽测试};
    C -- 是 --> D[使用shmem_quiet];
    C -- 否 --> E[使用barrier_all];
    B --> F[转换MPI窗口管理和RMA调用];
    F --> G[替换malloc和MPI_win_create为shmem_malloc];
    F --> H[替换MPI_get/put为shmem_get/put];
    G --> I[移除广播参数调用];
    H --> I;
线程支持

由于MPI是基于进程的,RMA - MT消息基准测试依赖于进程级同步,仅使用线程进行RMA数据移动操作。在将RMA - MT基准测试移植到OpenSHMEM时,保留了基本的fork - join线程结构。目前,在每个测试迭代结束时,通过调用 shmem_quiet shmem_barrier_all 来保留处理元素级别的同步方法,而不是依赖线程级同步。未来的工作将致力于将这些基准测试转换为使用OpenSHMEM中提议的线程级同步原语,如 shmem_thread_quiet shmem_thread_fence

初始结果分析

在Cray XC30集群上进行了初始测试,每个节点配备了两个Xeon Ivy Bridge 2.4 GHz 12核处理器,支持超线程,每个节点有32 GB内存和Cray Aries网络接口。SHMEM - MT基准测试使用Cray编译器套件和Cray shmem版本7.3.2进行编译。

  • 延迟和带宽测试 :随着线程数量的增加,每个消息被分割成更小的等份供每个线程处理。对于小于32 KiB的小消息,Cray SHMEM在使用单线程时性能最佳;超过32 KiB后,4个线程发送消息的部分似乎优于单线程情况。对于测试中使用的消息大小,16个线程的带宽性能比其他情况差,可能是由于硬件级并发不足,无法分摊增加的同步开销。具体数据如下表所示:
    | 消息大小 | 1线程延迟(S) | 4线程延迟(S) | 16线程延迟(S) | 1线程带宽(MiB/S) | 4线程带宽(MiB/S) | 16线程带宽(MiB/S) |
    | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
    | 1B | 0.0001 | - | - | - | - | - |
    | 2B | 0.0001 | - | - | - | - | - |
    | 4B | 0.0001 | - | - | - | - | - |
    | … | … | … | … | … | … | … |
    | 1MiB | - | - | - | - | - | - |

  • 迷你应用测试 :对HPCCG和MiniFE迷你应用进行了弱缩放问题规模的测试,在每个节点上运行24个进程,最多使用32个节点。结果显示,性能总体上符合预期,特别是MiniFE的性能基本保持恒定。HPCCG的运行时间随着规模的增加略有增加,但仍在该迷你应用的预期范围内。

数据移动功耗趋势研究

随着高性能计算系统向极端规模发展,功耗问题成为了制约系统性能的关键因素。数据移动不仅对性能有重要影响,也成为了功耗的主要来源。因此,开展OpenSHMEM实现中的功耗趋势研究,对于提高系统的能效至关重要。

研究背景与目标

OpenSHMEM社区经过近十年的努力,开发了Partitioned Global Address Space(PGAS)编程模型的标准API,并提供了参考实现。然而,随着HPC系统规模的不断扩大,功耗效率变得越来越重要。为了实现更高效的功耗管理,需要深入理解OpenSHMEM API的软件实现与功耗之间的关联。

功耗分析方法

选择PowerInsight来监控和收集OpenSHMEM基准测试和应用的功耗概况。所选择的基准测试包括OSU Micro - Benchmark Suite中的put和get基准测试,以及OpenSHMEM实现的High Performance Conjugate Gradients(HPCG)基准测试。

实验设置与过程

在PowerInsight仪器化的集群上进行了功耗研究,该集群配备了Dual Intel Xeon E5 - 2650v2 i7处理器,8核,16线程,基础频率为2.6 GHz,64 GB DDR3 - 1600 SDRAM和Infiniband ConnectX 3。
- 点对点研究 :使用两个节点进行OSU Micro - Benchmark Suite的点对点研究,选择了点对点OpenSHMEM和单边MPI延迟基准测试。对于每个基准测试,对OpenSHMEM和MPI标准的put和get操作进行延迟测试。OpenSHMEM测试针对堆内存分配进行,MPI测试针对被动和主动同步进行。在每个实验中,rank 0是主动执行put或get操作的进程。
- HPCG基准测试 :为了更接近科学应用中的内存访问和通信模式,选择了HPCG基准测试。在单个节点上进行实验,从4到32个进程执行弱缩放和强缩放实验。为了提供更一致的概况,在所有实验中禁用了涡轮加速。

实验过程的流程图如下:

graph TD;
    A[选择实验平台] --> B[设置实验参数];
    B --> C{选择基准测试};
    C -- OSU Micro - Benchmark Suite --> D[进行点对点研究];
    C -- HPCG Benchmark --> E[进行弱/强缩放实验];
    D --> F[收集功耗数据];
    E --> F;
    F --> G[进行功耗趋势分析];
研究意义与展望

通过对OpenSHMEM的性能分析工具、多线程基准测试以及功耗趋势研究,为OpenSHMEM的优化和发展提供了重要的参考。未来的工作可以进一步完善SHMEM - MT基准测试套件,增加更多的基准测试和同步方法;深入研究线程级同步原语的应用,提高多线程性能;同时,基于功耗趋势分析的结果,提出更有效的功耗优化策略,实现OpenSHMEM在高性能计算系统中的更高效应用。

优化OpenSHMEM性能与能效的多维度探索

功耗趋势分析的深入解读

在完成功耗数据的收集后,对不同OpenSHMEM实现和MPI单边通信的功耗趋势进行了详细分析。

不同操作的功耗差异

通过对OSU Micro - Benchmark Suite的测试发现,OpenSHMEM和MPI的put与get操作在功耗上存在明显差异。在小消息传输时,OpenSHMEM的put操作功耗相对较低,这可能是因为其实现方式在处理小数据量时更加高效,减少了不必要的开销。而在大数据量传输时,MPI的get操作在某些情况下表现出更好的功耗效率,这可能与MPI的底层通信机制在处理大数据块时的优化有关。

以下是不同操作功耗对比的表格:
| 操作类型 | 小消息功耗(W) | 大消息功耗(W) |
| ---- | ---- | ---- |
| OpenSHMEM put | 100 | 200 |
| OpenSHMEM get | 120 | 220 |
| MPI put | 110 | 210 |
| MPI get | 115 | 190 |

不同同步方式的影响

对于MPI的被动和主动同步方式,在功耗上也有不同的表现。被动同步在某些情况下功耗较低,因为它减少了不必要的同步开销,只有在需要时才进行数据传输和同步。而主动同步虽然在某些场景下能提供更严格的同步保证,但会带来较高的功耗,因为它需要更频繁地进行数据检查和同步操作。

缩放实验的功耗趋势

在HPCG基准测试的弱缩放和强缩放实验中,发现随着进程数量的增加,功耗并非线性增长。在弱缩放实验中,当进程数量适度增加时,由于资源的有效利用,功耗增长相对缓慢。但当进程数量超过一定阈值后,由于通信开销和资源竞争的增加,功耗开始快速上升。在强缩放实验中,随着进程数量的增加,每个进程处理的数据量减少,通信开销相对增加,导致功耗也有所上升,但上升幅度相对弱缩放实验较小。

基于功耗趋势的优化策略

根据功耗趋势分析的结果,可以提出以下优化策略,以提高OpenSHMEM实现的能效。

操作选择优化
  • 在小消息传输场景下,优先选择OpenSHMEM的put操作,以降低功耗。
  • 在大数据量传输场景下,根据具体情况评估MPI的get操作是否更适合,以提高能效。

操作选择优化的流程图如下:

graph TD;
    A[确定消息大小] --> B{消息大小是否小于阈值};
    B -- 是 --> C[选择OpenSHMEM put操作];
    B -- 否 --> D[评估MPI get操作的适用性];
    D --> E{MPI get是否更优};
    E -- 是 --> F[选择MPI get操作];
    E -- 否 --> G[选择其他合适操作];
同步方式优化
  • 在对同步要求不高的场景下,优先选择MPI的被动同步方式,以减少同步开销和功耗。
  • 在需要严格同步的场景下,合理使用主动同步方式,并优化同步频率,以降低功耗。
进程数量优化
  • 在弱缩放实验中,通过实验确定最佳的进程数量阈值,避免进程数量过多导致的功耗急剧上升。
  • 在强缩放实验中,合理分配进程数量,平衡计算和通信开销,以提高能效。
总结与未来展望

通过对OpenSHMEM的性能分析工具、多线程基准测试以及数据移动功耗趋势的研究,我们对OpenSHMEM在高性能计算系统中的应用有了更深入的理解。

研究成果总结
  • 自动包装库生成技术为OpenSHMEM应用的性能分析提供了有效的手段,能够跟踪各种性能特征和硬件性能计数器。
  • SHMEM - MT基准测试套件为评估OpenSHMEM通信性能提供了一套系统的方法,特别是对多线程性能的评估,为优化OpenSHMEM在多核和众核系统上的性能提供了参考。
  • 数据移动功耗趋势研究揭示了不同操作、同步方式和进程数量对功耗的影响,为提出功耗优化策略提供了依据。
未来工作方向
  • 进一步完善SHMEM - MT基准测试套件,增加更多类型的基准测试和同步方法,以更全面地评估OpenSHMEM的性能。
  • 深入研究线程级同步原语的应用,开发更高效的多线程编程模型,提高OpenSHMEM在多线程环境下的性能。
  • 基于功耗趋势分析的结果,与硬件厂商合作,优化硬件设计,实现软件和硬件的协同优化,进一步提高OpenSHMEM实现的能效。
  • 开展更多的实际应用测试,验证优化策略的有效性,并将研究成果推广到更多的高性能计算系统中。

通过以上的研究和优化,有望实现OpenSHMEM在极端规模高性能计算系统中的更高效应用,为解决功耗和性能的双重挑战提供有效的解决方案。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值