我刚开始学习一些关于OpenCL的基础知识,并决定从苹果公司获得
“Basic programming sample”.我在cpu上运行正常,但是当我选择GPU作为目标设备时,我得到err = -45
err = gclExecKernelAPPLE(k,ndrange,& kargs);
此错误代码转换为CL_INVALID_PROGRAM_EXECUTABLE.知道如何更正示例代码?
自动生成的kernel.cl.c代码如下所示(包含在顶部):
static void initBlocks(void); // Initialize static data structures static block_kernel_pair pair_map[1] = { { NULL,NULL } }; static block_kernel_map bmap = { 0,1,initBlocks,pair_map }; // Block function void (^square_kernel)(const cl_ndrange *ndrange,cl_float* input,cl_float* output) = ^(const cl_ndrange *ndrange,cl_float* output) { int err = 0; cl_kernel k = bmap.map[0].kernel; if (!k) { initBlocks(); k = bmap.map[0].kernel; } if (!k) gcl_log_fatal("kernel square does not exist for device"); kargs_struct kargs; gclCreateArgsAPPLE(k,&kargs); err |= gclSetKernelArgMemAPPLE(k,input,output,&kargs); gcl_log_cl_fatal(err,"setting argument for square Failed"); err = gclExecKernelAPPLE(k,&kargs); gcl_log_cl_fatal(err,"Executing square Failed"); gclDeleteArgsAPPLE(k,&kargs); }; // Initialization functions static void initBlocks(void) { const char* build_opts = " -cl-std=CL1.1"; static dispatch_once_t once; dispatch_once(&once,^{ int err = gclBuildProgramBinaryAPPLE("OpenCL/kernel.cl","",&bmap,build_opts); if (!err) { assert(bmap.map[0].block_ptr == square_kernel && "mismatch block"); bmap.map[0].kernel = clCreateKernel(bmap.program,"square",&err); } }); } __attribute__((constructor)) static void RegisterMap(void) { gclRegisterBlockKernelMap(&bmap); bmap.map[0].block_ptr = square_kernel; }