我想在图像中找到最大值及其位置。 下面的内核给出了正确的最大值但是位置偏离并且并不总是相同,即使在没有相同灰度值的图像上也是如此。我认为这是由if子句引起的。有没有办法同步新的最大值(outValue)和它的位置(outIndex)的写入,还是我必须使用两个内核,一个用于查找最大值,另一个用于查找其首次出现?
__kernel void findMaxValue(image2d_t __read_only in, __global uint* outIndex, __global uint* outValue) {
const int2 origin = (int2)(get_global_id(0), get_global_id(1));
const int imageWidth = get_global_size(0);
const uint value = read_imageui(in, sampler, coord).x;
atom_max(outValue, matches);
barrier(CLK_GLOBAL_MEM_FENCE);
if (*outValue == matches) {
const int index = origin.x + imageWidth * origin.y;
*outIndex = index;
}
}