在 OpenCL 中查找数组最大值的简单任务遇到了麻烦。
__kernel void ndft(/* lots of stuff*/)
{
size_t thread_id = get_global_id(0); // thread_id = [0 .. spectrum_size[
/* MATH MAGIC */
// Now I have float spectrum_abs[spectrum_size] and
// I want the maximum as well as the index holding the maximum
barrier();
// this is the old, sequential code:
if (*current_max_value < spectrum_abs[i])
{
*current_max_value = spectrum_abs[i];
*current_max_freq = i;
}
}
现在我可以if (thread_id == 0)
像在单核系统上那样添加和循环整个事情,但是由于性能是一个关键问题(否则我不会在 GPU 上进行频谱计算),有没有更快的方法来做到这一点?
在上面的内核结束时返回 CPU 不是一种选择,因为内核实际上在那之后继续。