gpt4 book ai didi

c++ - 了解索引和一个 block 中有多少个线程

转载 作者:太空狗 更新时间:2023-10-29 21:09:56 28 4
gpt4 key购买 nike

我正在研究 cuda 编程,我发现索引网格的方法不止一种。

我不明白的是这些索引技术之间有何不同。

这些是我的索引:

一维 block 的一维网格

th=blockIdx.x *blockDim.x + threadIdx.x;

二维 block 的一维网格

th=blockIdx.x * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x;

3D block 的 1D 网格

th =blockIdx.x * blockDim.x * blockDim.y * blockDim.z + threadIdx.z * blockDim.y * blockDim.x + threadIdx.y * blockDim.x + threadIdx.x;

使用第二种索引相对于第一种有什么优势?

我在阅读这些信息时也遇到了问题:“每个 block 的最大线程数为 1024,线程 block (x,y,z) 的最大尺寸大小为 (1024,1024,64)”blockdim.z 等于 64 是什么意思?只有 64 个线程还是 1024*64?如果我使用所有方向怎么办?我可以在网格中使用的线程数会增加吗?

最佳答案

索引反射(reflect)了您希望如何在线程之间逻辑上划分数据。如果您正在处理一维问题(想象一下计算两个 vector 的总和),那么您同意我的看法,使用一维分解要容易得多,因此您可以轻松地将一个线程映射到来自两个输入的一对元素阵列。

如果您正在处理像矩阵这样的 2D 和 3D 结构,同样的论点也适用。

关于第二个关于最大线程数的问题。您可以将维度为 (x,y,z) 的 block 中的线程数计算为 x*y*z .每个 block 允许的最大线程数是 1024 .这意味着您可以为 x,y,z 使用所有您想要的值。前提是他们的产品不高于 1024x,y<=1024z<=64 .

关于c++ - 了解索引和一个 block 中有多少个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56492023/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com