OpenCL在数组中找到最大值和位置

时间:2017-05-10 16:05:21

标签: max opencl mutex atomic

我想在图像中找到最大值及其位置。 下面的内核给出了正确的最大值但是位置偏离并且并不总是相同,即使在没有相同灰度值的图像上也是如此。我认为这是由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;
    }
}

0 个答案:

没有答案