xcode – 来自Apple的OpenCL的基本编程示例无法在GPU上运行
发布时间:2020-12-14 17:21:38 所属栏目:百科 来源:网络整理
导读:我刚开始学习一些关于OpenCL的基础知识,并决定从苹果公司获得 “Basic programming sample”.我在CPU上运行正常,但是当我选择GPU作为目标设备时,我得到err = -45 err = gclExecKernelAPPLE(k,ndrange, kargs); 此错误代码转换为CL_INVALID_PROGRAM_EXECUTABL
我刚开始学习一些关于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; } 解决方法
在10.7.3下运行时我看到同样的问题,而10.7.5上的机器工作正常.我注意到每次调用我的应用程序后,CVMCompiler进程都崩溃了.
检查堆栈跟踪,我注意到在尝试解析bitcode以编译为本机代码时崩溃了.由于bitcode的解析失败失败,因此没有生成gclExecKernelAPPLE()的编译程序,因此错误. 尝试升级到10.7.5,或者甚至10.8,问题应该消失. (我刚测试了这个,确实解决了这个问题.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |