【问题标题】:OpenCL: query number of processing elementsOpenCL:查询处理元素的数量
【发布时间】:2014-02-05 20:29:53
【问题描述】:

是否可以在 OpenCL 中查询处理元素的数量(每个计算单元)?如果是,如何?我在clGetDeviceInfo doc page上没有找到对应的参数。

我不确定 处理元素 是否是标准术语。我从this video 得到这个词。

我想查询这些信息是因为我很好奇,而不是出于实际目的。

【问题讨论】:

  • 对不同的最大线程数进行基准测试,然后找到获得最大占用/发布的线程。例如,1280 核心 GPU 将满足 1280(或 256 x 5)线程和多个线程。但它不喜欢 1024 线程、2048 线程、4096 线程,因为在此设置中始终存在空/等待空闲内核。另外不要忘记将线程组大小设置为 256(更小只会增加占用并使基准过时)。 256 的倍数的基准。如果 2048 和 2604 给出相同的结果,则将线程组大小减小到 128 并测试 2048-2604 的更窄范围。
  • @huseyintugrulbuyukisik 我是 OpenCL 的初学者。我认为您的评论意味着没有直接和简单的方法可以通过标准 OpenCL 进行查询,对吗?
  • 你需要一个“更接近硬件”的 API,甚至可能需要像 GPU-z 一样使用 gpu 的驱动程序(这不是我希望的数据库硬编码的东西)。我第一次启动 opencl 时搜索了相同的内容,但找不到。即使在 compubench.com 也无法列出他们的核心号码。例如,HD7750 每个计算单元的内核数与 HD7970 相同(GCN 为 64)。 Nvidia 卡通常有 192 用于 600 系列。 Intel HD 使用 4 和 8 宽。版本。摆弄驱动程序以查询内核编号或使用数据库或获取计算单元编号并将其乘以 192/64。
  • @huseyintugrulbuyukisik “不可能”也是一个可以接受的答案。你应该考虑发布它。

标签: opencl


【解决方案1】:

Processing element (PE) 是标准术语,不能查询数字。

现在我看到了一些不可能的原因:

  1. 定义本身:

    PE:一个虚拟的标量处理器。一个工作项可以在一个或多个上执行 处理元素。

    因此,根据架构,返回的数字或多或少毫无意义。我想以之前使用 VLIW 处理器的 AMD GPU 架构为例。

  2. PE 是标准中最有用的抽象,用于说明/定义一些概念,例如 SIMD、SPMD 和平台模型的定义。但是这个概念并没有在实践中使用(尽管开发人员知道它对于实现良好的性能非常有用)。相反,您将关心工作组中工作项的最大数量。

  3. 即使在给定的架构中,处理元素也是不同类型的。例如,如果我们采用GK110 Kepler Architecture SMx(相当于计算单元)有 192 个 SP CUDA 核心、64 个 DP 单元、32 个特殊功能单元 (SFU)。那么查询PE数量的查询返回的数字应该是多少呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2015-08-25
    • 2020-03-21
    • 2014-07-24
    • 2021-01-21
    相关资源
    最近更新 更多