xcode - Apple 的 OpenCL 基本编程示例无法在 GPU 上运行

标签 xcode macos osx-lion opencl

不久前我开始学习一些关于 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* input, 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, 0, input, &kargs);
    err |= gclSetKernelArgMemAPPLE(k, 1, output, &kargs);
    gcl_log_cl_fatal(err, "setting argument for square failed");

    err = gclExecKernelAPPLE(k, ndrange, &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每次调用我的应用程序后,进程都崩溃了。

检查堆栈跟踪,我注意到它在尝试解析位代码以编译为 native 代码时崩溃。由于位码的解析失败,所以没有为 gclExecKernelAPPLE() 生成的编译程序。执行,因此错误。

尝试升级到 10.7.5 或 10.8,问题应该会消失。 (我刚刚测试了这个,它确实解决了这个问题。)

关于xcode - Apple 的 OpenCL 基本编程示例无法在 GPU 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12244247/

相关文章:

ios - 通过 Cocoapods 自动向嵌入式框架添加动态库

ios - Ionic Popover 适用于 XCode 模拟器,但不适用于 iPhone

ios - 检测选定的 UIImageView

macos - Mac OS X 上的超时命令?

xcode - MacOS 上的 pyenv zlib 错误 :

iphone - XCode IDE 更新到 Lion 后不支持旧文档

mysql - 计算机关闭或重新启动后,mysql 表丢失或损坏

ios - WAXSIM 使用 Jenkins 和 xcodebuild 自动测试和构建

macos - 如何确定已拔除的USB设备的LocationID?

osx-lion - xcode 在 10.7.4 上编译时看不到 sdl 框架