如何在 openCL 的内核调用中指定数字多维

How to specify number multidimension in kernel call in openCL

本文关键字:数字 调用 openCL 内核      更新时间:2023-10-16

在cuda中,我们可以做这样的事情:

my_kernel<<< n_x,n_y >>>(...)

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);

大多数 OpenCL 实现最多只支持 3 个维度的工作项,但如果实现支持更多,则可以指定允许的数量。显然,如果您只使用工作项的单个维度,这也很容易指定:

std::vector<size_t> work_sizes = {16777216};
clEnqueueNDRangeKernel(queue, kernel, work_sizes.size(), nullptr, work_sizes.data(), nullptr, 0, nullptr, nullptr);