【发布时间】:2015-06-06 09:26:50
【问题描述】:
我最近开始在 C++ 中使用 OpenCL,我正在尝试完全了解如何使用 2D 和 3D NDRange。我目前正在 OpenCL 中实现反距离加权,但我的问题很普遍。
下面是计算权重的串行函数,它由一个嵌套循环组成。
void computeWeights(int nGrids, int nPoints, double *distances, double *weightSum, const double p) {
for (int i = 0; i < nGrids; ++i) {
double sum = 0;
for (int j = 0; j < nPoints; ++j) {
double weight = 1 / pow(distances[i * nPoints + j], p);
distances[i * nPoints + j] = weight;
sum += weight;
}
weightSum[i] = sum;
}
}
我想要的是使用 2D NDRange 来实现上述功能,第一个是在 nGrids 上,第二个是在 nPoints 上。但是,我不明白的是如何将权重的总和处理为 weightSum[i]。我知道我可能不得不以某种方式使用并行求和。
【问题讨论】: