使用工程和科学子程序库 (ESSL) 就地加速功能,实现基于 GPU 的 OpenPOWER 架构的性能增强
IBM、NVIDIA 和 Mellanox 合作推出的加速 OpenPOWER 系统提供了新的可伸缩性和性能潜力。这些系统拥有 GPU(协处理器)来提高系统的性价比。在加速的系统中,一部分应用程序在处理器上运行,剩余部分在协处理器或 GPU 上运行。
要将工作引入到 GPU 上,程序员应在应用程序内调用 CUDA 函数(用于在 GPU 上声明数组,将数据从 CPU 复制到 GPU,以及从 GPU 复制到 CPU 等)。这并不轻松,因为需要修改代码、感知 CUDA 操作,以及编译。尽管 OpenACC 指令(通过基于指令的引入)让工作变得更轻松,但它仍需要程序员理解应用程序和它的流,然后决定可将应用程序的哪些部分引入到 GPU。
启用了 CUDA 的 ESSL
ESSL(Engineering and Scientific Subroutine Library 工程和科学子程序库)和 Parallel ESSL 是最新的数学子程序的集合,它们专为改善基于 IBM ® POWER ® 处理器的服务器上的工程和科学应用程序性能而设计。ESSL 和 Parallel ESSL 通常用在航空宇宙、汽车、电子、石油、公用事业和科学研究行业中。
为了实现对启用了 GPU 的加速 OpenPOWER 架构的支持,ESSL 的新版本(例如 V5.5)现已启用 GPU。这个 ESSL 版本将一个数学函数子集引入到 GPU,以提高计算速度,然后收集回 CPU 上的结果。该过程是无缝的,而且对用户透明。不需要修改应用程序和编译过程。只有在链接阶段,才需要链接启用了 CUDA 的 ESSL(例如 libesslsmpcuda.so)而不是 ESSL(例如 libessl.so)。本文将演示如何通过基于 CUDA 的 ESSL 来挖掘基于 GPU 的 OpenPOWER 架构性能的过程,以及获得的性能提升。
系统配置
为了演示启用了 CUDA 的 ESSL 的优势,我们使用了 IBM S822LC。表 1 提供了该系统的规格。
表 1. S822LC 系统细节
操作系统 | RHEL 7.3 |
每个节点的核心数 | 20 |
CPU 频率 | 4.02 GHz |
GPU | NVIDIA Tesla P100 |
每个节点的 GPU 数 | 4 |
ESSL | 5.5 |
示例程序
Crossroads/NERSC-9 DGEMM 计算基准测试(版本:1.0.0)
Crossroads/NERSC-9 Memory Bandwidth 基准测试是一个简单的单节点多线程稠密矩阵乘法基准测试。该代码旨在演示一个系统在持续计算情况下的高浮点计算速率。
编译
图 1. Makefile 显示了启用了 CPU 的 ESSL 库的链接

图 2. Makefile 显示了启用了 CPU 和 GPU 的 ESSL 库的链接

执行
本节将描述 DGEMM 基准测试的环境设置和执行。
环境设置
为执行设置了以下环境变量。
export PATH=/usr/local/cuda/bin:$PATH export OMP_NUM_THREADS=20 export OMP_PLACES={0:20:8} export OMP_WAIT_POLICY=active export OMP_PROC_BIND=TRUE unset CUDA_VISIBLE_DEVICES export CUDA_VISIBLE_DEVICES=0,1,2,3
运行命令
可执行程序/二进制程序 (mt-dgemm) 接受矩阵的大小作为输入参数。以下命令可对一个 4096 X 4096
矩阵执行矩阵乘法。./mt-dgemm 4096
结果
在本节中,详细给出了对 DGEMM 执行以下操作时 DGEMM 代码的性能:
- 不使用 ESSL 进行编译
- 链接到 ESSL
- 链接到启用了 CUDA 的 ESSL(参见表 2)
启用了 GPU 的 ESSL 的性能比仅支持 CPU 的 ESSL 版本高 5 到 6 倍。
表 2. 性能比较 [矩阵大小 (N) = 4096]
时间(以秒为单位) | GFLOPS | 计算的 FLOPS | |
---|---|---|---|
不使用 ESSL | 1287.04 | 3.20 | 4124175237120 |
ESSL SMP – 仅支持 CPU | 8.67 | 475.22 | 4124175237120 |
ESSL SMP – 启用 CUDA (使用 4 个 GPU) | 1.62 | 2535.28 | 4124175237120 |
图 3. 通过 NVIDIA Visual Profiler (NVVP) 利用 GPU(使用 libesslcudasmp 的情况下)

参考资料
- 参阅以下文档了解 如何使用 ESSL SMP CUDA 库
- 要获取基准测试代码,请联系 Joan McComb,他是 ESSL 开发主管。