Memory 在OpenCL中,当工作组大小不是体系结构的一部分时,本地内存如何更快?

Memory 在OpenCL中,当工作组大小不是体系结构的一部分时,本地内存如何更快?,memory,opencl,gpgpu,Memory,Opencl,Gpgpu,为我的天真道歉如果这个问题很愚蠢,我是GPGPU编程新手 我的问题是,既然设备的体系结构无法改变,那么当用户根据可分割性选择工作组大小时,如何优化本地内存,使其仅由本地工作组中的项目进行访问?本地内存通常连接到GPU硬件中的某个执行单元集群。工作组的大小确实由客户机应用程序选择,但OpenCL实现将施加一个限制。您的应用程序需要使用CL_KERNEL_WORK_GROUP_SIZE参数名称,通过clGetKernelWorkGroupInfo查询此信息 工作组的大小有一定的灵活性,因为大多数GP

为我的天真道歉如果这个问题很愚蠢,我是GPGPU编程新手


我的问题是,既然设备的体系结构无法改变,那么当用户根据可分割性选择工作组大小时,如何优化本地内存,使其仅由本地工作组中的项目进行访问?

本地内存通常连接到GPU硬件中的某个执行单元集群。工作组的大小确实由客户机应用程序选择,但OpenCL实现将施加一个限制。您的应用程序需要使用CL_KERNEL_WORK_GROUP_SIZE参数名称,通过clGetKernelWorkGroupInfo查询此信息

工作组的大小有一定的灵活性,因为大多数GPU的设计是为了在单个执行单元上调度多个执行线程。一种。还要注意,调度线程甚至不需要位于同一工作组中,因此,例如,如果一个GPU在集群中有64个处理器,并且每个处理器上支持4路SMT,那么这256个线程可能来自1、2或4个工作组,甚至可能是8或16个工作组,具体取决于硬件和编译器功能

一些GPU的处理器也在内部使用向量寄存器和指令,因此线程不会将1:1映射到OpenCL工作项——例如,一个处理器可能一次处理4个工作项

但最终,一个工作组必须适合连接到一块本地内存的处理器集群;因此,一个集群上可以调度的本地内存大小和最大线程数会影响最大工作组大小

一般来说,尽量减少工作组使用的本地内存量,以便OpenCL实现在安排工作组时具有最大的灵活性。但是,当它有助于提高性能时,一定要使用本地内存!尽可能少地使用它