我已经创建了一个应该进行矩阵乘法的基本 OpenCL 代码。我不确定我可能犯了什么错误,但我收到了这个错误:
线程 1:EXC_BAD_ACCESS(代码=1,地址=0xc00)
经过一些研究后发现,错误实际上是在程序试图访问内存位置时抛出的,该位置要么已经被释放,要么指向一个不应该访问的位置。但是我不明白在 my code 中可能是这种情况。调用 clCreateProgramWithSource。
仅供引用,我只是尝试将第三个参数更改为 NULL,在这种情况下它确实有效,但在传递与内核字符串对应的正确字符串值时失败。
(我使用 Xcode 9.2)
有人可以解释一下吗。
提前致谢。
最佳答案
在您提到的代码中:
string sourceCode = readFile("/Users/rajkumar/Documents/OpenCL/Kernels/matmul.cl");
// Create a program from the kernel source
size_t len = (size_t)sourceCode.length();
size_t * len_ptr = &(len);
cl_program program = clCreateProgramWithSource(opencl->context,
1,(const char**)&sourceCode,
NULL,&clStatus);
您不能将 std::string*
转换为 const char**
。您应该调用 sourceCode.c_str()
,然后将其存储到 const char*
类型的临时变量中,并将指向该变量的指针传递给 clCreateProgramWithSource()
。
关于c++ - OpenCL EXC_BAD_ACCESS(代码=1,地址=0xc00),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49478267/