OpenCL组大小含义

OpenCL组大小含义,opencl,Opencl,本地组大小对OpenCL意味着什么?如果工作组大小为1,是否意味着同一时间只有一个线程在运行 我发现我们可以将NULL设置为cl\n范围,让程序自动选择组大小,我们如何知道选择的组大小?在opencl内核中 get_local_size (0); 为8x16工作组大小的内核提供“8” get_local_size (1); 对于相同的内核执行,给出“16”。如果它是3D内核,那么“2”作为参数给出了第三维度的大小。要查询维度数(1,2,3?),请执行以下操作: 使用 本地工作组大小给出了每个

本地组大小对OpenCL意味着什么?如果工作组大小为1,是否意味着同一时间只有一个线程在运行

我发现我们可以将NULL设置为
cl\n范围
,让程序自动选择组大小,我们如何知道选择的组大小?

在opencl内核中

get_local_size (0);
为8x16工作组大小的内核提供“8”

get_local_size (1);
对于相同的内核执行,给出“16”。如果它是3D内核,那么“2”作为参数给出了第三维度的大小。要查询维度数(1,2,3?),请执行以下操作:

使用

本地工作组大小给出了每个硬件同步的线程数。对于AMD GPU,其最大值为256,而Nvidia和CPU的最大值为1024。当您将“1”作为这个工作组大小时,每个同步计算单元只获得一个线程(如果不受驱动程序或硬件的最小值限制),并且每个线程(也每个wave)获得最大本地内存

同时?整个执行被折叠到少数几个计算单元上,允许多次执行并增加占用,特别是工作组大小很小且本地内存足够。例如,如果L=1允许最大值波折叠到同一计算单元,L=64只允许16个波折叠,L=256只允许4个波折叠。是的,同时但不在同一同步范围内

一些供应商的一些模型可以执行并发内核执行以完全占用管道,这样单个线程可能不是单独的,而是与另一个commandqueue的另一个内核中的另一个线程一起执行


例如,即将推出的r9 390x gpu将有64个计算单元,每个单元可能有4个向量单元,每个单元有16个算术和fpu单元,总共4096个核。AMD的计算单元总共有64个核,一个核通过4个波传输,因此每个计算单元有256个线程。但是这个线程系统可能不同于CPU上的线程系统,因此上下文切换可能更快,并且由于分组切换,缓存争用最小

但一个团队的规模怎么可能超过100人呢?GPU不是只有32个核吗?它们是计算单元,每个都有许多向量单元或标量单元。如果我将组大小增加一倍,运行时是否可能减少到一半?工作组大小表示有多少“工作项”将完全并行运行(同步、屏障和本地内存可用)。与硬件相关,如果将其加倍,而硬件无法执行,则会出现错误。@DarkZeros“工作组大小表示有多少个“工作项”将完全并行运行”。不,没有。它表示有多少个工作项能够在屏障上同步,因此,如果使用屏障同步,至少有多少个工作项必须在给定的计算单元上并发。在实际系统上,只有这些工作项的子集可能实际并行运行,并且多个工作组可能并发,因此这是一个最小值。它资源有限,但不直接依赖于硬件。
 get_work_dim ();