XCode预编译OpenCL在不同Mac OS版本和交替CPU/GPU上崩溃

XCode预编译OpenCL在不同Mac OS版本和交替CPU/GPU上崩溃,xcode,opencl,Xcode,Opencl,我有一个非常奇怪的问题: 我的一个项目使用OpenCL,并在XCode中使用以下选项进行编译: OPENCL_ARCHS : i386 x86_64 gpu_32 gpu_64 OPENCL_COMPILER_VERSION : CL1.2 但是,当我在10.8.5下运行它时,当我使用CL_DEVICE_TYPE_GPU时,它会崩溃;当它是10.9.5时,它会在CL_DEVICE_TYPE_CPU上崩溃。但另一种方法是分别运作 我正在尝试运行一个空的测试内核: kernel void Init

我有一个非常奇怪的问题:

我的一个项目使用OpenCL,并在XCode中使用以下选项进行编译:

OPENCL_ARCHS : i386 x86_64 gpu_32 gpu_64
OPENCL_COMPILER_VERSION : CL1.2
但是,当我在10.8.5下运行它时,当我使用CL_DEVICE_TYPE_GPU时,它会崩溃;当它是10.9.5时,它会在CL_DEVICE_TYPE_CPU上崩溃。但另一种方法是分别运作

我正在尝试运行一个空的测试内核:

kernel void InitBlocks(global float* pointless) {

}

- (void)applicationDidFinishLaunching:(NSNotification *)notification {
    gcdQueue = gcl_create_dispatch_queue(CL_DEVICE_TYPE_XPU, NULL);
    cl_ndrange range = {
        1,
        {0, 0, 0},
        {1, 0, 0},
        {1, 0, 0}
    };
    dispatch_sync(gcdQueue, ^{
        InitBlocks_kernel(&range, Nil);
    });
}
无论我是否传递参数、稍后运行内核或实际上在内核中进行一些计算,这都无关紧要。它在调用时总是崩溃:

// Block function
void (^InitBlocks_kernel)(const cl_ndrange *ndrange, cl_float* unneccessary) =
^(const cl_ndrange *ndrange, cl_float* unneccessary) {
  int err = 0;
  cl_kernel k = bmap.map[0].kernel;
  if (!k) {
    initBlocks();
    k = bmap.map[0].kernel;
  }
  if (!k)
    gcl_log_fatal("kernel InitBlocks does not exist for device");
  kargs_struct kargs;
  gclCreateArgsAPPLE(k, &kargs);
  err |= gclSetKernelArgMemAPPLE(k, 0, unneccessary, &kargs);
  gcl_log_cl_fatal(err, "setting argument for InitBlocks failed");
  err = gclExecKernelAPPLE(k, ndrange, &kargs);
  gcl_log_cl_fatal(err, "Executing InitBlocks failed"); // <---- Here, err = -45
  gclDeleteArgsAPPLE(k, &kargs);
};
//块函数
void(^InitBlocks_内核)(常量cl_ndrange*ndrange,cl_float*非必需)=
^(常量cl_n范围*n范围,cl_浮动*无需){
int err=0;
cl_kernel k=bmap.map[0]。内核;
如果(!k){
initBlocks();
k=bmap.map[0]。内核;
}
如果(!k)
gcl_log_fatal(“设备不存在内核初始化块”);
卡丁车;
gclCreateArgsAPPLE(k和kargs);
err |=gclSetKernelArgMemAPPLE(k,0,不必要和kargs);
gcl_log_cl_fatal(错误,“为InitBlocks设置参数失败”);
err=gclExecKernelAPPLE(k、ndrange和kargs);

gcl_日志_cl_致命(错误,“执行初始化块失败”)这是一个已知的问题,预编译+自动Xcode集成的东西。苹果似乎不想解决这个问题,他们自己的示例代码也会崩溃。解决方法是在运行时编译源代码。

很高兴知道,谢谢。它会在某个时候被修复,比如在10.10中,还是仍然损坏?我还没有检查它是否是f我已经在10点10分了,或者还没有,对不起。