开始上手#

简介#

cuBLASMp 旨在提供 GPU 加速的类 PBLAS 基本线性代数功能。
cuBLASMp 利用 2D 块循环数据布局来实现负载均衡,并最大化与 PBLAS 例程的兼容性。
该库假定数据在设备内存中可用。开发人员有责任分配内存,并使用标准 CUDA 运行时 API(例如 cudaMallocAsync()cudaFreeAsync()cudaMemcpyAsync() 等)在 GPU 内存和 CPU 内存之间复制数据。

硬件和软件要求#

GPU 架构

Volta (SM 7.0)、Ampere (SM 8.0)、Hopper (SM 9.0)

CUDA

12.2.2 及以上

CPU 架构

x86_64, arm64-sbsa

操作系统

Linux

  • 推荐 NVIDIA InfiniBand 解决方案,用于加速节点间通信

必需软件包

推荐软件包

同步执行#

目前,cuBLASMp 计算例程相对于主机是阻塞的。一旦例程完成,它将控制权返回给用户,并且结果将在设备中可用,而无需进一步同步。此约束将在未来的版本中放宽。

本地矩阵的数据布局#

cuBLASMp 假定本地矩阵以列优先格式存储。

工作流程#

cuBLASMp 的工作流程可以分解如下
1. 引导 CAL 通信器:cal_comm_create()
2. 初始化库句柄:cublasMpCreate()
3. 初始化网格描述符:cublasMpGridCreate()
4. 初始化矩阵描述符:cublasMpMatrixDescriptorCreate()
5. 查询给定例程的主机和设备缓冲区大小。
6. 为给定的例程分配主机和设备工作区缓冲区。
7. 执行例程以执行所需的计算。
8. 同步本地流以确保结果可用(如果需要):cal_stream_sync()
9. 释放主机和设备工作区。
10. 销毁矩阵描述符:cublasMpMatrixDescriptorDestroy()
11. 销毁网格描述符:cublasMpGridDestroy()
12. 销毁 cuBLASMp 库句柄:cublasMpDestroy()
13. 销毁 CAL 库句柄:cal_comm_destroy()

代码示例#

代码示例可以在 CUDALibrarySamples 存储库中找到。