Multi-GPU 支持 - cuTENSORMg¶
关于 cuTENSORMg 的介绍及其数据结构的讨论,请参见这篇博客文章。
性能指南¶
cuTENSORMg 在很大程度上具有与 cuTENSOR 相同的性能指南,但有一些额外的考虑事项
尝试在所有 GPU 上完全分配张量,以充分利用可用带宽。
尝试保持块大小的乘积足够大(即,对于块大小有效的缩并操作而言足够大)。
根据数据类型,缩并操作在收缩和非收缩模式的组合范围内的元素数量在 1000 到 4000 之间时,开始达到高效率。
因此,所有分块的乘积应达到该阈值。
例如,单个模式下的 2048 元素分块就足够了,或者两个模式下的 64x64 分块也足够了。
尝试在来自 A 和 B 的收缩模式以及非收缩模式之间分配张量。
尝试保持步长为 1 的模式足够大(即,大于 32 个元素)。
尝试选择包含小素因子的分块,特别是 2 的幂,以保持对齐。
尝试在多种模式下分配张量。由于模式可以相对于不同的张量缩并操作进行收缩或非收缩,因此跨多种模式分配可以对冲退化的分布。
当前,性能在很大程度上取决于设备计数、块大小和问题大小之间的关系。为了获得最佳性能,请尝试使组合块大小为问题大小除以设备计数的倍数。理想情况下,该倍数大于约 4。
精度保证¶
cuTENSORMg 遵循 cuTENSOR 提供的相同精度保证,但对于半精度类型可能会产生略低的精度,因为累加器平铺具有半精度,而内核累加器具有单精度。
标量类型¶
许多操作支持将参数乘以标量。使用的标量类型遵循与 cuTENSOR 标量类型相同的规则。
CUDA 图形支持¶
cuTENSORMg 中的所有操作都可以使用 CUDA 图形捕获,只要它们不涉及主机操作,即操作数均不在主机上存储数据。
cuTENSORMg 日志记录¶
可以通过在启动目标应用程序之前设置以下环境变量来启用 cuTENSORMg 的日志记录机制
CUTENSORMG_LOG_LEVEL=<level> - 其中 level 是以下级别之一
“0” - 关闭 - 日志记录被禁用(默认)
“1” - 错误 - 仅记录错误
“2” - 跟踪 - 启动 CUDA 内核的 API 调用将记录其参数和重要信息
“3” - 提示 - 可能提高应用程序性能的提示
“4” - 信息 - 提供关于库执行的常规信息,可能包含关于启发式状态的详细信息
“5” - API 跟踪 - API 调用将记录其参数和重要信息
CUTENSORMG_LOG_MASK=<mask> - 其中 mask 是以下掩码的组合
“0” - 关闭
“1” - 错误
“2” - 跟踪
“4” - 提示
“8” - 信息
“16” - API 跟踪
CUTENSORMG_LOG_FILE=<file_name> - 其中 file name 是日志文件的路径。文件名可能包含 %i,它将被进程 ID 替换。例如 “<file_name>_%i.log”。
如果未定义 CUTENSORMG_LOG_FILE,则日志消息将打印到 stdout。