OpenCL:如何使用C ++包装器检查构建错误

时间:2016-01-07 18:18:07

标签: c++ opencl

如果我从这样的源代码构建一个openCL程序

cl::Program program = cl::Program(context, sourceCode);
program.build(devices);

我想检查一下是否成功。我在C中看到了一些如何做到这一点的例子,但由于我的项目是在C ++中,我想知道如何获得(如果出现问题)一条可读的文本消息,指出使用C ++包装器可能存在什么问题。 / p>

我也启用了例外

#define CL_HPP_ENABLE_EXCEPTIONS 

但不知道build(...)是否会引发异常。

我正在使用AMD APP SDK 3.0和Khronos网页上的cl2.hpp(因为它未包含在SDK中)。

1 个答案:

答案 0 :(得分:3)

如果构建失败,cl::Program program = cl::Program(context, sourceCode); try { program.build(devices); } catch (cl::Error& e) { if (e.err() == CL_BUILD_PROGRAM_FAILURE) { for (cl::Device dev : devices) { // Check the build status cl_build_status status = program.getBuildInfo<CL_PROGRAM_BUILD_STATUS>(dev); if (status != CL_BUILD_ERROR) continue; // Get the build log std::string name = dev.getInfo<CL_DEVICE_NAME>(); std::string buildlog = program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(dev); std::cerr << "Build log for " << name << ":" << std::endl << buildlog << std::endl; } else { throw e; } } 函数确实会抛出异常。以下是如何获取构建日志的信息:

2*2*3*3*5*5*7*7