工作组
opencl 使用工作组来组织工作项。工作组使用N维的网格作为索引,被称为NDRange
;目前这个N维的索引维度可以是1、2或者3。
索引分为全局索引 (globale index) 个 局部索引 (loacl index);具体用如下:
- 全局索引空间为
(Gx, Gy)
- 工作组空间为
(Wx, Wy)
- 局部索引空间为
(Lx, Ly)
- 全局坐标
(gx, gy)
- 工作组索引
(wx, wy)
- 局部坐标
(lx, ly)
则有
// 工作组大小
Lx = Gx / Wx
Ly = Gy / Wy
// 工作组id与局部id转换为全局id
gx = wx * Lx + lx
gy = wy * Ly + ly
// 全局id转换为工作组id与局部id
wx = gx / Lx
wy = gy / Ly
lx = gx % Lx
ly = gy % Ly
在opencl的kernel内部获取这些信息:
int g0 = get_global_id(0);
int l1 = get_local_id(1);
int L0 = get_local_size(0);
int w1 = get_group_id(1);