gpt4 book ai didi

c - 3d线程索引和并行化2题

转载 作者:行者123 更新时间:2023-11-30 15:37:03 24 4
gpt4 key购买 nike

我正在创建二维数据来生成图像。

我正在扫描所有列和行并获取图像。

现在,我想并行化它并同时获取多个切片(图像)。

这就是为什么我想考虑另一个维度,在其中存储我想要获取的不同切片。

所以,我的第一个问题是如何在 3d 中做到这一点(如下所示)?

RowIdx = threadIdx.y + blockDim.y * blockIdx.y;
ColIdx = threadIdx.x + blockDim.x * blockIdx.x;

此外,在 c 代码中我有类似的内容:

size_t RowIdx,ColIdx,theIJ;
float * t2DArrRe,
* t2DArrIm;

theJ = 0;
for ( RowIdx = 0; RowIdx < NRows; RowIdx++ )
{

// boundary effect
*(t2DArrRe + theJ) = 0.0f;
*(t2DArrIm + theJ) = 1.0f;
...
++theIJ;
...
}

在上面的代码中,我考虑了图像的边界(行和列)并使用相邻位置进行一些计算。

我不确定如何在并行方法中处理“theJ”。

希望您说得清楚,谢谢!

---------更新----------------------

也许我需要类似的东西:

RowIdx = threadIdx.y +  blockDim.y * threadIdx.x + (blockDim.y * blockDim.x) * threadIdx.z;
ColIdx = threadIdx.x + blockDim.x * threadIdx.y + (blockDim.x * blockDim.y) * threadIdx.z;

我不确定这是否正确,但我仍然不知道如何处理“theJ”。

这个theJ += gridDim.x * blockDim.x足够了吗?

我将如何考虑网格的所有尺寸?

最佳答案

cuda 上有第三个维度的第三个组件,您可以将问题 reshape 为:

Pos_x = threadIdx.x + blockDim.x * blockIdx.x;
Pos_y = threadIdx.y + blockDim.y * blockIdx.y;
Pos_z = threadIdx.z + blockDim.z * blockIdx.z;

我不清楚你问题的第二部分,但我认为这可能是一个答案:

size_t RowIdx,ColIdx,theIJ;
float * t2DArrRe,
* t2DArrIm;

theJ = threadIdx.x + blockDim.x * blockIdx.x;
for ( RowIdx = 0; RowIdx < NRows; RowIdx++ )
{

// boundary effect
*(t2DArrRe + theJ) = 0.0f;
*(t2DArrIm + theJ) = 1.0f;
...
theJ += gridDim.x * blockDim.x;
...
}

希望这能有所帮助。

关于c - 3d线程索引和并行化2题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22352709/

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