开始上手#
简介#
cudaMallocAsync()
、cudaFreeAsync()
、cudaMemcpyAsync()
等)在 GPU 内存和 CPU 内存之间复制数据。硬件和软件要求#
GPU 架构 |
Volta ( |
CUDA |
12.2.2 及以上 |
CPU 架构 |
x86_64, arm64-sbsa |
操作系统 |
Linux |
推荐 NVIDIA InfiniBand 解决方案,用于加速节点间通信
必需软件包
CUDA 工具包 12.2.2 及以上 (https://developer.nvidia.com/cuda-downloads)
HPC-X v2.17.1 及以上 (https://developer.nvidia.com/networking/hpc-x) - 包含满足 cuBLASMp 要求的 OpenUCC 和 OpenUCX。
NCCL v2.18.5 及以上 (https://developer.nvidia.com/nccl) - 提高性能的必需项
NVSHMEM v3.1 及以上 (https://developer.nvidia.com/nvshmem)
推荐软件包
GDRCopy v2.0+ (NVIDIA/gdrcopy) 和 nv_peer_mem (Mellanox/nv_peer_memory) - 允许底层通信包使用 GPUDirect RDMA。如果您自行安装 OpenUCX,则应将其配置为支持 GDRCopy。
Mellanox OFED (https://www.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed) - NVIDIA InfiniBand 适配器的驱动程序 (https://www.nvidia.com/en-us/networking/products/infiniband)。如果您自行安装 OpenUCX,则应将其配置为支持 IB 通信。
同步执行#
本地矩阵的数据布局#
工作流程#
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()。