如何将数组传递给 OpenCL 内核?
How do I pass an array to an OpenCL kernel?
我有一个要传递给 OpenCL 内核的数组。我的部分代码是
cl_mem arr_cl;
unsigned int arr[4] = { 0 };
arr_cl = clCreateBuffer(ocl.context, CL_MEM_ALLOC_HOST_PTR, 4*sizeof(unsigned int), NULL, &status);
arr = (unsigned int*)clEnqueueMapBuffer(ocl.command_queue, arr_cl, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, 4*sizeof(unsigned int), 0, NULL, NULL, NULL);
status |= clSetKernelArg(ocl.kernel, 0, sizeof(cl_mem), &(arr_cl));
以上代码可以编译但在 运行 时间内崩溃。请让我知道我在这里做错了什么。
我正在使用 OpenCL 2.0。
来源:https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/clEnqueueMapBuffer.html
CL_MAP_READ or CL_MAP_WRITE and CL_MAP_WRITE_INVALIDATE_REGION are
mutually exclusive.
如果 opencl 版本 >=1.2,您应该只在映射中读取或写入。
另外,将alloc_host_ptr更改为use_host_ptr时,数组应对齐CL_DEVICE_MEM_BASE_ADDR_ALIGN
value/query.
我有一个要传递给 OpenCL 内核的数组。我的部分代码是
cl_mem arr_cl;
unsigned int arr[4] = { 0 };
arr_cl = clCreateBuffer(ocl.context, CL_MEM_ALLOC_HOST_PTR, 4*sizeof(unsigned int), NULL, &status);
arr = (unsigned int*)clEnqueueMapBuffer(ocl.command_queue, arr_cl, CL_TRUE, CL_MAP_READ | CL_MAP_WRITE, 0, 4*sizeof(unsigned int), 0, NULL, NULL, NULL);
status |= clSetKernelArg(ocl.kernel, 0, sizeof(cl_mem), &(arr_cl));
以上代码可以编译但在 运行 时间内崩溃。请让我知道我在这里做错了什么。
我正在使用 OpenCL 2.0。
来源:https://www.khronos.org/registry/OpenCL/sdk/2.1/docs/man/xhtml/clEnqueueMapBuffer.html
CL_MAP_READ or CL_MAP_WRITE and CL_MAP_WRITE_INVALIDATE_REGION are mutually exclusive.
如果 opencl 版本 >=1.2,您应该只在映射中读取或写入。
另外,将alloc_host_ptr更改为use_host_ptr时,数组应对齐CL_DEVICE_MEM_BASE_ADDR_ALIGN
value/query.