0

我正在使用 GCC 和 OpenCL 的 NVIDIA 实现,以及在线编译而不是离线编译。

我使用列表来检查我遇到的错误。但是,如果我的内核中有一个错误,我拥有的唯一信息是错误值 -48。

我的问题是:有没有办法显示确切的内核编译错误?

如果缺少分号,或者我有一个野指针,我想读取它,而不仅仅是 -48 错误。否则开发时间会变得太慢。

我还添加了我的 Makefile:

CC=gcc
FILE=main

all:
    $(CC) -c -Wall -I /usr/local/cuda/include/ $(FILE).c -o $(FILE).o
    $(CC) $(FILE).o -o $(FILE) -L /usr/local/cuda/lib64/ -l OpenCL
clean:
    $(RM) $(FILE) $(FILE).o
4

1 回答 1

0

在 C++ 中,执行以下操作:

int ErrorCode = 0;
cl_program P;
cl_device_id D;
size_t LogSize;
cl_build_status BuildStatus;

//Configure OpenCL 
//Load Program Here
//Compile Program here

//Check the status of compilation
ErrorCode = clGetProgramBuildInfo(P, D, CL_PROGRAM_BUILD_STATUS, NULL, NULL, &BuildStatus);

if(BuildStatus == CL_BUILD_ERROR){
     //Fetch Error
     ErrorCode = clGetProgramBuildInfo(P, D, CL_PROGRAM_BUILD_LOG, NULL, NULL, &LogSize);
     char Log = new Log[LogSize]; //Or use Malloc if in C
     ErrorCode = clGetProgramBuildInfo(P, D, CL_PROGRAM_BUILD_LOG, LogSize, Log, NULL);

     //Display Error Code here, close out OpenCL, try again, etc
}
于 2013-08-14T15:04:11.800 回答