如果我从这样的源代码构建一个 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 中)。
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)