【问题标题】:Concurrently run two different algorithms with OpenCL使用 OpenCL 同时运行两种不同的算法
【发布时间】:2018-11-17 09:13:47
【问题描述】:

假设我的设备有 2 个计算单元,我想在同一设备上同时运行两种不同的算法。是否可以通过创建 2 个不同的内核、2 个程序和 2 个命令队列来实现?

我尝试对此进行测试,但似乎第二个内核没有执行,所以我想知道这是否可能?

在 Nvidia OpenCL Programming Guide,我读到:

“对于计算能力 2.x 及更高版本的设备,多个内核可以在一个设备上同时执行,因此也可以通过使用流使足够多的内核同时执行来实现最大利用率。”

现在我不确定这是否真的意味着我可以运行多个不同的内核或仅运行同一内核的多个实例(这些只是简单的旧工作项)。

我还检查了我的 Nvidia GeForce GT 525M 的计算能力为 2.1。

【问题讨论】:

    标签: concurrency opencl gpu nvidia


    【解决方案1】:

    是的,在同一台设备上拥有多个运行不同内核的命令队列是完全合法的。

    两个内核都应该执行,即使设备不支持并发内核执行(然后它们将按顺序运行)。您的代码中可能存在错误。请记住,您必须独立地 clFinish 两个命令队列(或为每个内核调用设置一个事件)。

    让两个内核实际同时运行可能比较困难。即使设备在硬件中支持该行为,如果任何资源不足以同时运行它们,内核仍然可以顺序运行。

    如果您的两种算法各自可以充分并行运行以使用大部分设备资源,那么在同一命令队列中依次运行它们比尝试并行执行更容易。

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 2020-02-09
      • 2020-10-03
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多