【发布时间】:2013-01-23 14:06:21
【问题描述】:
我正在尝试对 OpenCL 的抽象和实际硬件之间的映射建立更好的直觉。 例如,使用 2011 年末 Macbook pro 的配置:
1)
Radeon 6770M GPU: http://www.amd.com/us/products/notebook/graphics/amd-radeon-6000m/amd-radeon-6700m-6600m/Pages/amd-radeon-6700m-6600m.aspx#2
“480 流处理器”我猜是那里的重要数字。
2)
另一方面,OpenCL API 给了我这些数字:
DEVICE_NAME = ATI Radeon HD 6770M
DRIVER_VERSION = 1.0
DEVICE_VENDOR = AMD
DEVICE_VERSION = OpenCL 1.1
DEVICE_MAX_COMPUTE_UNITS = 6
DEVICE_MAX_CLOCK_FREQUENCY = 675
DEVICE_GLOBAL_MEM_SIZE = 1073741824
DEVICE_LOCAL_MEM_SIZE = 32768
CL_DEVICE_ADDRESS_BITS = 32
CL_DEVICE_GLOBAL_MEM_CACHE_SIZE = 0
CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE = 0
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE = 65536
CL_DEVICE_MAX_WORK_GROUP_SIZE = 1024
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 3
CL_DEVICE_MAX_WORK_ITEM_SIZES = (1024, 1024, 1024)
并查询工作组大小和倍数以获得一个琐碎的内核(通过 float4 表单输入输出全局内存)
CL_KERNEL_PREFERRED_WORKGROUP_SIZE_MULTIPLE = 64
CL_KERNEL_WORK_GROUP_SIZE = 256
3)
OpenCL 规范规定整个工作组必须能够在设备的计算单元上同时运行。
4)
OpenCL 还通过倍数给出设备的 SIMD 宽度,在上述情况下为 64。
不知何故,我无法将“6”、“480”和两个的幂放在一起。 如果计算单元数为 6,SIMD 宽度为 64,我得到 384。
谁能解释这些数字的关系,尤其是与硬件的关系?
【问题讨论】: