入门指南#

简介#

cuSOLVERMp 旨在提供 GPU 加速的类 ScaLAPACK 工具,用于求解线性方程组以及特征值和奇异值问题。
cuSOLVERMp 利用 2D 块循环数据布局来实现负载均衡,并最大程度地与 ScaLAPACK 例程兼容。
该库假定数据在设备内存中可用。开发人员有责任分配内存,并使用标准 CUDA 运行时 API 例程(例如 cudaMalloc()cudaFree()cudaMemcpy()cudaMemcpyAsync())在 GPU 内存和 CPU 内存之间复制数据。

硬件和软件要求#

GPU 架构

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

CUDA

12.1.1 及以上

CPU 架构

x86_64, arm64-sbsa

操作系统

Linux

所需软件包

推荐软件包

同步执行#

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

本地矩阵的数据布局#

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

工作流程#

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

代码示例#

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