【发布时间】:2011-07-02 04:58:52
【问题描述】:
我有一些代码想要制作成 cuda 内核。看:
for (r = Y; r < Y + H; r+=2)
{
ch1RowSum = ch2RowSum = ch3RowSum = 0;
for (c = X; c < X + W; c+=2)
{
chan1Value = //some calc'd value
chan3Value = //some calc'd value
chan2Value = //some calc'd value
ch2RowSum += chan2Value;
ch3RowSum += chan3Value;
ch1RowSum += chan1Value;
}
ch1Mean += ch1RowSum / W;
ch2Mean += ch2RowSum / W;
ch3Mean += ch3RowSum / W;
}
是否应该将其拆分为两个内核,一个用于计算 RowSums,一个用于计算 Means,以及我应该如何处理循环索引不从零开始并以 N 结束的事实?
【问题讨论】:
-
尝试选择一个问题,很难选择正确的答案。但是,关于你的第二个问题......很难具体回答,但我认为一旦你进一步开发你的内核,你就会看到。
-
你应该使用像 H 块和每个块 W 线程这样的配置来启动你的内核。然后,您将根据内核中的 blockIdx 和 threadIdx 值计算 r 和 c。计算 r 和 c 但是你想要......我试着把它放在下面的答案中......
-
看起来确实像两个问题,但如果我尝试将其写成两个问题,我不确定上下文是否存在