opencl - 可以同时运行多少个线程(或工作项)?

标签 opencl gpgpu

我是GPGPU编程的新手,并且正在使用NVIDIA OpenCL实施。

我的问题是如何计算GPU设备的限制(以线程数为单位)。
据我了解,有许多工作组(相当于CUDA中的块),其中包含许多工作项(〜cuda线程)。


如何获得卡上存在的工作组数量(并且可以同时运行)和一个工作组中存在的工作项目数量?
与CL_DEVICE_MAX_COMPUTE_UNITS对应什么?
khronos规范突显了内核(“ OpenCL设备上的并行计算内核数。”)与我的图形卡规范中给出的CUDA内核有什么区别。就我而言,openCL给出了14,而我的GeForce 8800 GT具有112个基于NVIDIA网站的内核。
CL_DEVICE_MAX_WORK_GROUP_SIZE(在我的情况下为512)是否对应于分配给特定工作组的工作项总数或可以在工作组中同时运行的工作项数?


任何建议将不胜感激。

最佳答案

OpenCL标准未指定OpenCL提供的抽象执行模型如何映射到硬件。您可以排队任意数量的线程(工作项)T,并提供工作组大小(WG),至少具有以下约束(有关详细信息,请参阅OpenCL规范5.7.3和5.8):


WG必须除以T
WG不得超过DEVICE_MAX_WORK_GROUP_SIZE
WG最多必须为KERNEL_WORK_GROUP_SIZE返回的GetKernelWorkGroupInfo;如果内核消耗大量资源,则它可能小于设备最大工作组大小。


该实现管理硬件上内核的执行。单个工作组的所有线程必须安排在单个“多处理器”上,但是单个多处理器可以同时管理多个工作组。

工作组中的线程由32组(NVIDIA warp)或64组(AMD wavefront)执行。每个微体系结构都以不同的方式执行此操作。您将在NVIDIA和AMD论坛以及每个供应商提供的各种文档中找到更多详细信息。

要回答您的问题:线程数没有限制。在现实世界中,您的问题受到输入/输出大小(即设备内存大小)的限制。要处理4GB的float缓冲区,可以排队1G线程,例如WG = 256。该设备将不得不在其少量(例如2到40之间)的多处理器中安排4M工作组。

关于opencl - 可以同时运行多少个线程(或工作项)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5679726/

相关文章:

gpgpu - Crossfire/SLI 会提高 Compute Shader 的性能吗?

ios - 在 Metal 中手动设置一维纹理

macos - OpenCL:sincos 与 native_cos 和 native_sin

opengl - 使用 OpenGL 进行高效的 GPU 随机内存访问

android - 用于 Android 图像处理的 OpenGL ES vs OpenCL vs RenderScript

c++ - OpenCL 内核因特定参数而崩溃

xcode - Apple 的 OpenCL 基本编程示例无法在 GPU 上运行

android - GPU 与 CPU 编程 : inconsistencies in processing times

linux - 在没有 ROOT 权限的 Linux 上安装 OpenCL(AMD SDK 工具包)

c++ - Cl 没有成员 vector