【问题标题】:Display kernel error显示内核错误
【发布时间】:2013-08-14 23:23:19
【问题描述】:

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

我使用this 列表来检查我遇到的错误。但是,如果我的内核中有一个错误,我所拥有的唯一信息就是错误值 -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

【问题讨论】:

    标签: gcc opencl


    【解决方案1】:

    在 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
    }
    

    【讨论】:

    • 关键函数是clGetProgramBuildInfo。多亏了这个我在找到打印 OpenCL 编译器日志的 this C 示例之前不知道的功能。
    猜你喜欢
    • 2019-03-08
    • 2021-05-03
    • 2018-10-04
    • 2022-08-02
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多