如何获取OpenCL设备的内核数量?

时间:2014-04-12 06:35:11

标签: opencl

在我的应用程序中,我想向用户显示各种OpenCL设备。 我无法决定如何显示设备中的核心数量。 这只是为了了解有多少线程可以同时并行运行。

计算单位告诉我们多处理器的数量,这可以通过CL_DEVICE_MAX_COMPUTE_UNITS获得。 要确定每个多处理器支持的线程数是CL_DEVICE_MAX_WORK_GROUP_SIZE正确的参数吗?

我的笔记本电脑上获得了以下结果:

ATI 7670m GPU
CL_DEVICE_MAX_COMPUTE_UNITS = 6
CL_DEVICE_MAX_WORK_GROUP_SIZE = 256

Intel 3rd gen i5
CL_DEVICE_MAX_COMPUTE_UNITS = 4
CL_DEVICE_MAX_WORK_GROUP_SIZE = 1024

所以我的 GPU有1536线程支持,而 CPU支持4096个线程 ? 这显然不正确,因此需要一些帮助。

2 个答案:

答案 0 :(得分:1)

CL_DEVICE_MAX_WORK_GROUP_SIZE是工作组中允许的最大元素数。这与并行度没有关系。也就是说,没有规则工作组中的所有工作项并行执行,而且我知道他们不会执行的实现。 (有一些方法可以处理像障碍一样的工作组同步结构。)

不幸的是,其他值CL_DEVICE_MAX_COMPUTE_UNITS也被模糊地定义。至少使用英特尔,"计算单元的数量"通常是处理器,但对于一个硬件线程的CPU,以及GPU是一个具有多个执行通道的EU。我也不了解ATI,但我敢打赌6个单位可能比4"单位提供更多的并行性。在CPU实现中。换句话说,"单位"是苹果和橘子。最大工作组大小的1024和256与计算无关。

答案 1 :(得分:1)

计算单元数量更接近天真的“核心”定义。但是,考虑到它可能具有任意硬件架构,在我看来,它只会让用户感到困惑。

OpenCL精华之间的映射&硬件非常不稳定。