加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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,问题应该消失. (我刚测试了这个,确实解决了这个问题.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读