C++ 如何在openCL内核调用中指定多维数

C++ 如何在openCL内核调用中指定多维数,c++,syntax,opencl,C++,Syntax,Opencl,在cuda中,我们可以执行以下操作: my_kernel<<< n_x,n_y >>>(...) myu内核>(…) opencl中的等价物是什么?这是通过指定“全局工作大小”参数来完成的 size_t work_sizes[] = {1024, 1024, 64}; clEnqueueNDRangeKernel(queue, kernel, 3, nullptr, work_sizes, nullptr, 0, nullptr, nullptr); 如

在cuda中,我们可以执行以下操作:

my_kernel<<< n_x,n_y >>>(...)
myu内核>(…)

opencl中的等价物是什么?

这是通过指定“全局工作大小”参数来完成的

size_t work_sizes[] = {1024, 1024, 64};
clEnqueueNDRangeKernel(queue, kernel, 3, nullptr, work_sizes, nullptr, 0, nullptr, nullptr);

如果你更喜欢C++习语:

std::vector<size_t> work_sizes = {1024, 1024, 64};
clEnqueueNDRangeKernel(queue, kernel, work_sizes.size(), nullptr, work_sizes.data(), nullptr, 0, nullptr, nullptr);
std::向量功大小={1024,1024,64};
clEnqueueNDRangeKernel(队列、内核、工作大小.size()、nullptr、工作大小.data()、nullptr、0、nullptr、nullptr);
大多数OpenCL实现最多只支持3维的工作项,但是如果您的实现支持更多的工作项,那么您可以指定尽可能多的工作项。显然,如果您只处理单个维度的工作项,那么也很容易指定:

std::vector<size_t> work_sizes = {16777216};
clEnqueueNDRangeKernel(queue, kernel, work_sizes.size(), nullptr, work_sizes.data(), nullptr, 0, nullptr, nullptr);
std::向量功大小={16777216};
clEnqueueNDRangeKernel(队列、内核、工作大小.size()、nullptr、工作大小.data()、nullptr、0、nullptr、nullptr);

刚刚发现,我还要指出这一点