不,地图函数不分配内存。您可以在调用 clCreateBuffer 时这样做。如果您在 CPU 上分配内存然后尝试使用它,则需要将其复制到 GPU 可访问内存。要让两者都可以访问内存,最好使用 CL_MEM_ALLOC_HOST_PTR
clCreateBuffer(context, flags, size, host_ptr, &error);
context - 您正在使用的设备的上下文。
标志 - CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE
size - 缓冲区大小(以字节为单位),通常为 N * sizeof(data type)
host_ptr - Can be NULL or 0 meaning we have no existing data. You could add CL_MEM_COPY_HOST_PTR to flags and pass in a pointer to the values you want copied to the buffer. This would save you having to copy via the mapped pointer. Beneficial if the values won't change.