我有一个 400x900 矩阵,这意味着 360,000 个元素。块中的线程数为 1024。块数(方形排列)为 352,即总共 360,448 个线程。因此,假设为每个元素分配了一个线程,那么 448 个线程将什么也不做。我已经阅读了关于分歧分支并理解但在这里我不明白分歧声明和代码应该是什么?
问问题
64 次
1 回答
1
由于线程在 CUDA 中被分组为块,因此我们通常使用比数据实际大小多一点的线程来并行完成工作。在这种情况下,我们需要一个分支来确保只有那些分配了数据的线程才能工作,而其他线程只是等待而不做任何事情。
以下帖子展示了如何使用 CUDA 计算 AXPY。你会发现虽然线程总数总是 256 的倍数,但内核可以处理任意长度的向量N
。该代码if (i < n) {...}
确保那些额外的线程不会做任何事情。
https://developer.nvidia.com/content/easy-introduction-cuda-c-and-c
于 2013-10-15T06:22:56.167 回答