【问题标题】:How to obtain number of cores for OpenCL devices?如何获取 OpenCL 设备的内核数?
【发布时间】:2014-05-26 11:04:16
【问题描述】:

在我的应用程序中,我想向用户显示各种 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 线程? 这显然不是真的,因此需要一些帮助。

【问题讨论】:

    标签: opencl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      OpenCL 本质和硬件之间的映射非常不稳定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-27
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        相关资源
        最近更新 更多