-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Warp Tiling 中的疑问 #58
Comments
一个 Warp 是由 32 个线程组成的基本执行单元 问题1: “128 个线程,划分为 4 个 32x32 的区域” 假设有一个矩阵分块大小(Block Tile)为 128×128 个元素,这意味着一个线程块要负责处理 128 行 × 128 列的矩阵元素。为了更好地利用并行性,我们可以把这个 128×128 的数据块再细分成 4 个 32×32 的子块(每个子块对应 32 行 × 32 列的元素) 问题2: Warp 尺度的索引计算代码如下:
这里通过 warp_idx 明确区分出当前线程属于哪个 warp,并利用 warp_row, warp_col 来给 warp 分配数据子块。这让我们可以在 Block 中进一步细分数据,在 Warp 层次上进行分块(Warp Tile),使每个 Warp 负责处理数据块的一部分。 Warp 级的循环结构,在代码中,会有类似:
WMITER、WNITER 分别代表在 Warp 尺度上进一步对数据进行迭代处理的次数。这些循环使得 Warp 成为一层独立的分解层次:我们先在 Block 中分好大 Tile,再在 Warp 层面将 Tile 细化成更小的子块,从而在 Warp 内并行处理数据。这样,每个 Warp 内的 32 个线程协作处理这块子数据,映射到硬件上就是利用了多 Warp 调度器以及 Warp 并行执行的特性。 Thread Tile 在代码中的体现也是类似的,可以再结合源码理解一下 |
这一节好像很考察对 cuda 结构体系的理解
我对这份代码的理解是:128 个线程,划分为 4 个 32x32 的区域,循环执行。那么是怎么和 readme 中的概念对应呢?
这个本来就可以?
这两者如何体现在代码中呢?
The text was updated successfully, but these errors were encountered: