Можно добиться этого на стороне ядра, но я бы не стал этого делать, так как это может повлиять на производительность ядра. В любом случае это можно сделать так:
kernel void my_kernel(__global int* counter, __global int* other_data, ...)
{
// some operations on other_data, etc.
// make sure that only one work item increments the counter to avoid race condition
// the assumption is that kernel uses one dimension only
if(get_local_id(0) == 0)
atomic_inc(counter); // need to use atomic function as kernels may run in parallel
}
Таким образом, чтобы подвести итог, а не добавить ответвление, заставив работать только один рабочий элемент и циклы растраты остальных, я бы продолжил использовать clSetKernelArg
и счетчик приращений на стороне хоста. Есть операции, которые лучше подходят для графического процессора, и увеличение счетчика, скорее всего, не входит в их число.