parallel-processing - CL_DEVICE_LOCAL_MEM_SIZE 是用于整个设备还是每个工作组?

标签 parallel-processing opencl gpgpu

我不太清楚CL_DEVICE_LOCAL_MEM_SIZE的实际含义,通过clGetDeviceInfo获得功能。这个值是表示某个设备上所有可用本地内存的总和,还是某个工作组的本地内存共享上限?

最佳答案

TL;DR:每个处理单元,因此也是分配给工作单元的最大值。

此值是设备中每个计算单元上可用的本地内存量。由于工作组被分配给单个计算单元,这也是任何工作组可以拥有的最大本地内存量。

出于许多 GPU 的性能原因,通常希望在每个计算单元上同时运行多个工作组(例如,为了隐藏内存访问延迟)。如果一个工作组使用了所有可用的本地内存,则设备将无法在完成之前将任何其他工作组调度到同一计算单元上。如果可能,建议限制每个工作组使用的本地内存量(例如总本地内存的四分之一),以允许多个工作组同时在同一计算单元上运行。

关于parallel-processing - CL_DEVICE_LOCAL_MEM_SIZE 是用于整个设备还是每个工作组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197564/

相关文章:

c# - ConcurrentBag 字符串并在 Parallel.ForEach 中使用 .Contains

c++ - OpenCL 缓冲区为空

c++ - Visual Studio 中的 OpenCL - 我们可以编译一个 exe 来使用所有可能的 CPU OpenCL 可以获得所有 OpenCL 支持平台吗?

java - Java 8 Collections并发处理

multithreading - 如何将 parMap 与一元函数一起使用?

iphone - 在单独的线程上加载表值

c++ - 如何实现共享缓冲区?

c++ - GCC 中的 OpenHMPP

opencl - 内核和程序对象有什么区别?

optimization - 如何优化邻居访问的OpenCL代码?