您可以通过调用clGetProgramBuildInfo 和CL_PROGRAM_BUILD_LOG 来查询构建日志。
在 LWJGL 中,有一个方便的方法:
...
clBuildProgram(program, devices.get(0), "", null);
System.out.println(program.getBuildInfoString(
devices.get(0), CL_PROGRAM_BUILD_LOG));
这将打印构建程序产生的任何错误消息。
剩下的部分主要来自编辑这个答案之前的内容:
对于不同的 Java OpenCL 绑定,即来自 jocl.org 的 JOCL,我创建了这个实用程序方法。它是CL 类的一部分。然后调用CL.setExceptionsEnabled(true),如果程序构建失败,这个方法会在内部被调用,它的输出会是异常信息的一部分。展示了获取程序日志的基本流程,这里留作参考。
/**
* Obtain a single String containing the build logs of the given program for
* all devices that are associated with the given program object.
*
* @param program The program object
* @return The build logs, as a single string.
*/
private static String obtainBuildLogs(cl_program program)
{
int numDevices[] = new int[1];
CL.clGetProgramInfo(program, CL.CL_PROGRAM_NUM_DEVICES, Sizeof.cl_uint, Pointer.to(numDevices), null);
cl_device_id devices[] = new cl_device_id[numDevices[0]];
CL.clGetProgramInfo(program, CL.CL_PROGRAM_DEVICES, numDevices[0] * Sizeof.cl_device_id, Pointer.to(devices), null);
StringBuffer sb = new StringBuffer();
for (int i=0; i<devices.length; i++)
{
sb.append("Build log for device "+i+":\n");
long logSize[] = new long[1];
CL.clGetProgramBuildInfo(program, devices[i], CL.CL_PROGRAM_BUILD_LOG, 0, null, logSize);
byte logData[] = new byte[(int)logSize[0]];
CL.clGetProgramBuildInfo(program, devices[i], CL.CL_PROGRAM_BUILD_LOG, logSize[0], Pointer.to(logData), null);
sb.append(new String(logData, 0, logData.length-1));
sb.append("\n");
}
return sb.toString();
}