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

NOh*_*Ohs 2 c++ opencl

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

cl::Program program = cl::Program(context, sourceCode);
program.build(devices);
Run Code Online (Sandbox Code Playgroud)

我想检查这是否成功。我看到了一些关于如何在 C 中执行此操作的示例,但是由于我的项目是在 C++ 中,我想知道如何获取(以防出现问题)一条可读的文本消息,该消息指示使用 C++ 包装器可能存在的问题。

我也启用了例外

#define CL_HPP_ENABLE_EXCEPTIONS 
Run Code Online (Sandbox Code Playgroud)

但不知道是否build(...)抛出异常。

我使用的是 AMD APP SDK 3.0 和cl2.hpp来自 Khronos 网页的(因为它没有包含在 SDK 中)。

jpr*_*ice 8

cl::Program::build()如果构建失败,该函数确实会抛出异常。以下是获取构建日志的方法:

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;
  }
}
Run Code Online (Sandbox Code Playgroud)