OpenCL SubSlice是否类似于CUDA Warp(SIMD)?

时间:2016-07-13 16:32:39

标签: opencl simd

简短背景:

在CUDA中,我们有warp的概念,它是32个线程,保证同步。我有一个依赖于此SIMD行为的内核,以避免一大堆同步调用的潜在开销(在一些循环之后,1个线程完成并在共享内存中写入一个值,其余线程用于计算)。 p>

那么有没有办法在OpenCL中使用例如这种行为来成像Sub_Slices? According to Intel看起来他们的工作方式是这样的,但OpenCL中是否有任何保护SIMD行为的功能?

2 个答案:

答案 0 :(得分:3)

对于OpenCL上的NVIDIA,这些也称为warps,通常有32个工作项。在AMDwavefront包含64个工作项。在Intel上,这可以是SIMD-8SIMD-16SIMD-32(8/16/32个工作项),可以放在硬件线程上并同时执行。这是SIMD-8还是SIMD-16还是SIMD-32,具体取决于编译器的选择。

通常可以从CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE中的clGetKernelWorkGroupInfo()参数中检索信息。

答案 1 :(得分:2)

是的,这是一个有用的习语。我认为您正在寻找的是OpenCL subgroups扩展。 “子组”相当于HW线程(英特尔的“wave”字样)。

子拼接实际上是欧盟的集合,每个欧盟都有7个“SIMD线程”(波浪)。但是,它们共享一个采样器,数据端口,指令缓存和纹理缓存。