OpenCL 多维

OpenCL Multi-dimensional

所以我有一个打印出以下信息的 OpenCL 程序:

Version ....... OpenCL 1.2 (Mar 15 2018 21:59:37)
Vendor ........ Apple
Profile ....... FULL_PROFILE
Name .......... Apple

GPUS: 

Device #0
Max work group size ......... 256
Max work item dimensions .... 3
Max work item sizes ......... 256 256 256 
Name ........................ Intel(R) HD Graphics 630
Platform .................... 
Profile ..................... FULL_PROFILE
Vendor ...................... Intel Inc.
Version ..................... OpenCL 1.2 
Driver version .............. 1.2(Mar 15 2018 22:04:21)

Device #1
Max work group size ......... 256
Max work item dimensions .... 3
Max work item sizes ......... 256 256 256 
Name ........................ AMD Radeon Pro 560 Compute Engine
Platform .................... 
Profile ..................... FULL_PROFILE
Vendor ...................... AMD
Version ..................... OpenCL 1.2 
Driver version .............. 1.2 (Mar 15 2018 21:59:57)

CPUS: 

Device #0
Max work group size ......... 1024
Max work item dimensions .... 3
Max work item sizes ......... 1024 1 1 
Name ........................ Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz
Platform .................... 
Profile ..................... FULL_PROFILE
Vendor ...................... Intel
Version ..................... OpenCL 1.2 
Driver version .............. 1.1

那么问题来了: 在 AMD 上,它有 3 个维度,每个维度有 256 个。 这是否意味着它可以同时进行 256^3 次并行计算? 或者该信息还有其他含义? 同样,英特尔高清显卡能否执行相同的精确计算?那为什么它们是单独的卡片?

指定您的 GPU 可以并行执行的工作量。 "Max work item sizes" 指定每个维度中 工作组 的最大大小。您 受 "Max work group size" 限制,您的宽度 * 高度 * 深度不能超过。此外,每个内核都有最大工作组大小,可以通过 clGetKernelWorkGroupInfo 使用 CL_KERNEL_WORK_GROUP_SIZE 查询。根据我的经验,您通常不想接近这些限制;在较小的工作组中,您的内核会 运行 更快。除非你出于某种原因需要大型工作组,否则只需将它们设置为 32 或 64 个项目(或者如果你不使用共享本地内存,请保留工作组大小默认值 (NULL) 并让 运行 时间选择一个(但要保持您的全局工作组规模可以很好地划分,否则您最终会得到次优的工作组规模)。

您的 Intel 和 AMD GPU 是单独报告的,因为它们是不同的设备。至于苹果为什么将两个 GPU 放在一个盒子里,那是他们自己的事。通常这样用户可以做出速度与功耗的选择。