【发布时间】:2019-06-14 07:55:21
【问题描述】:
我想创建一个内核,将两个 5x5 二维数组的列的平均值添加到第三个一维数组。
逻辑:
for(int j=0; j<N; j++)
{
float suma = 0;
for(int i=0; i<N; i++)
suma += a[i][j] + b[i][j];
c[j] = suma / N;
cout<<c[j]<<endl;
}
【问题讨论】:
-
使用这样的列求和循环不需要二维网格。因此,您应该启动一维网格,并且您的线程检查应该是
if (col < 5)。为此,您只需要 5 个线程。您可以摆脱int row = ...行。而不是这个:sum += a[col*5+i] + b[col*5+i](缺少分号)试试这个:sum += a[i*5+col] + b[i*5+col];。c[row] = ...不应该是c[col] = ...吗?如果这不能解决问题,那么您的代码或 CUDA 设置可能存在其他问题,并且至少应该提供minimal reproducible example。 -
感谢您的回复先生,我应用了您提供的更改,但现在在我看来它只添加了两个数组的第一行。如何也迭代其他行?
-
您的代码中的其他地方可能有问题。内核本身不是minimal reproducible example。到目前为止,您显示的不是minimal reproducible example
-
是的,问题出在 malloc 和 memset 上,所以我对它们进行了调整,现在它按预期工作了,非常感谢您的帮助
-
@StavrosSpiridis 考虑回答您自己的问题或将其删除以供将来参考
标签: arrays parallel-processing cuda