CUDA 块聚类:大小、维数和可分性限制

问题描述 投票:0回答:1

从 Hopper u 架构开始,NVIDIA GPU 支持块集群(CUDA 编程指南§2.2.1)。那里的描述给我留下了两个难题(难题?)

  1. 导游是这么说的

    集群中最多支持 8 个线程块作为 CUDA 中的可移植集群大小

    但是H100白皮书它支持16个区块的集群。这些陈述是否矛盾,或者 16 只是“不可移植”(就好像这些硬件限制中的任何一个都是“可移植的”......?)

  2. 没有说明如何将 8 或 16 个块排列成轴。如果其体积小于最大值,是否可以接受任何尺寸组合?第一个维度是否需要是最大的?不能整除 8 或 16 的尺寸呢?例如2×3×1?

  3. 簇尺寸必须除以每个轴(x、y 和 z)上的网格尺寸吗?总体而言?

cuda nvidia
1个回答
0
投票

这些说法是否矛盾

不,我不相信他们矛盾。对于支持集群的设备,大概是现在和将来(sm_90,即“hopper”是目前唯一的示例),我对该段落的理解是,架构上支持的最小集群大小为8 (但请参阅下面的注释)。这被称为“便携式”尺寸,其中“便携式”意味着“适用于任何支持集群的架构”。但是,允许每个设备架构示例超过该“限制”,并且如果需要,还建议查询您正在运行的设备的适当限制。如果您在漏斗上执行此操作,您应该收到的数值为 16。 注意:仍然有一定的余量,例如: MIG 切片,指示簇大小可能会减小。因此,建议的做法是查询支持的集群大小,如下所示:

这些较小配置以及支持超过 8 的线程块簇大小的较大配置的识别是特定于体系结构的,可以使用

cudaOccupancyMaxPotentialClusterSize
API 进行查询。

如果看完这些之后你觉得有矛盾,我不会争论这一点。然而,为了编程的安全性和正确性,已经给出了必要的说明。

没有说明如何将 8 或 16 个块排列成轴。

正确,在我看来没有限制。与线程块尺寸类似,其中各个轴可以采用一定范围的值,但乘积不能超过限制(1024),我们在这里似乎有一个“类似”的安排(文档中指出了与线程块尺寸的相似性) 。只要产品不超过最大值,似乎没有特定的每轴限制。如果需要,可以轻松尝试详尽的测试。

簇尺寸必须除以每个轴(x、y 和 z)上的网格尺寸吗?总体而言?

是的,网格维度应该是簇维度的倍数。包括每个维度。这是代码示例注释中[提到的](簇尺寸必须除以每个轴(x、y 和 z)中的网格尺寸吗?总体而言?)。

© www.soinside.com 2019 - 2024. All rights reserved.