У меня следующее ядро openCL, которое я хочу отладить.Я добавил в него некоторые функции printf, но они бесполезны, так как рабочие элементы являются случайными графиками, а напечатанные значения не всегда правильны.Как я могу заставить мои рабочие элементы в ядре выполняться последовательно для отладки?
Ниже приведен код
__kernel
void SampleKernel( __global float4* gVtx, __global float4* gColor,
__global float4* gDst,
const int cNvtx,
const int4 cRes )
{
printf("nVertex : %d ", cNvtx);
for(int i =0 ; i < 1; i+=4)
{
printf(" %f ", gVtx[0].x);
printf(" %f ", gVtx[0].y);
printf(" %f ", gVtx[0].z);
printf(" %f ", gVtx[0].w);
}
}
Я также пытался помещать вызовы barrier(CLK_LOCAL_MEM_FENCE | CLK_GLOBAL_MEM_FENCE);
до и после printf
, ноэто было бесполезно.Кто-нибудь может предложить мне способ сериализации выполнения рабочего элемента, чтобы я мог печатать и отлаживать ядро?Или другой лучший способ отладки ядра OpenCL.Я использую RX 580 AMD GPU.