我有以下要调试的 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。