Debugging OpenCL&x2B;英特尔System Studio 2019-GPU调试问题

Debugging OpenCL&x2B;英特尔System Studio 2019-GPU调试问题,debugging,gpu,opencl,Debugging,Gpu,Opencl,我是OpenCL编程的初学者。我的问题发生在我尝试在Visual Studio 2017中调试OpenCL内核时。调试器不会在内核代码中的断点处停止,但在主函数中可以正常工作。我已安装英特尔System Studio 2019 我以这种方式构建上下文: cl_int platform_id = 0; cl_int device_id = 0; cl_context_properties contextProps[3] = { CL_CONTEXT_PLATFORM, (cl_co

我是OpenCL编程的初学者。我的问题发生在我尝试在Visual Studio 2017中调试OpenCL内核时。调试器不会在内核代码中的断点处停止,但在主函数中可以正常工作。我已安装英特尔System Studio 2019

我以这种方式构建上下文:

cl_int platform_id = 0;
cl_int device_id = 0;
cl_context_properties contextProps[3] = {
    CL_CONTEXT_PLATFORM,
    (cl_context_properties)(platformList[platform_id])(),
    0
};

cl::Context context(CL_DEVICE_TYPE_GPU, contextProps, NULL, NULL, &errorState);
我尝试使用调试选项构建程序:

cl::Program program(context, source);
errorState = program.build(devices, "-g -s C:/OpenCL_Intel/OpenCL_Intel/multiply.cl");
在此之后,我为内核函数设置参数并运行内核:

cl::Kernel kernel(program, "multiply", &errorState);
kernel.setArg(0, inA);
kernel.setArg(1, inB);
kernel.setArg(2, outCL);
kernel.setArg(3, arraySize);

cl::Event event;
errorState = queue.enqueueNDRangeKernel(kernel, cl::NullRange,
    cl::NDRange(arraySize), cl::NDRange(1), NULL, &event);
checkErr(errorState, "ComamndQueue::enqueueNDRangeKernel()");

event.wait();
errorState = queue.enqueueReadBuffer(outCL, CL_TRUE, 0, sizeof(int) * arraySize, out);
checkErr(errorState, "ComamndQueue::enqueueReadBuffer()");
我还在代码生成器中设置了一些选项:

  • API调试器->启用OpenCL工具API调试器->真
  • GPU内核调试器->启用调试->真

提前感谢

由于Windows的限制,在GPU上调试OpenCL内核需要系统的特定主机/目标配置。您可以在英特尔网站上找到分步教程-

还请确保您拥有最新版本的OpenCL运行时(视频驱动程序),以及最新版本的OpenCL SDK