gpt4 book ai didi

loops - 将 C/C++ for 循环转换为 CUDA

转载 作者:行者123 更新时间:2023-12-04 06:20:42 25 4
gpt4 key购买 nike

我想了解如何将基本的 C/C++ 循环转换为 CUDA 内核。让我们简单地说:

for (int i=0;i < MAXi;i++)
for(int j=0;j< MAXj;j++){

...code that uses i and j....
}

每一个我都需要计算 MAXj 元素。
对于某些人来说,这可能是非常基本的,但我在这里真的很挣扎。
假设Maxj在100万左右,MAXj=1000000;这是我们希望所有线程都能工作的地方。
我只使用内部循环就成功了:
int tid=threadIdx.x + blockDim.x*blockIdx.x + blockDim.x*gridDim.x*blockIdx.y;

使用 2d 块,我如何并行化这种循环?它们在 C 中非常常见,学习如何使用它会非常有用。

最佳答案

划分这些 2D 循环的一种最佳方法是使用 1D 块和网格

dim3 blocks(MAXj, 1);
dim3 grids(MAXi, 1);

kernel<<<grids, blocks, 1>>>()

__global__ kernel()
{
int i = blockIdx.x;
int j = threadIdx.x;

...code that uses i and j....

}

内循环分为线程,外循环分为块(2D块)

如果 MAXj 和 MAXi 是非常大的值,那么您需要将其分成小组并进行计算。该代码与此 thread 中发布的代码非常相似。 .

关于loops - 将 C/C++ for 循环转换为 CUDA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613106/

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