【问题标题】:OpenCL: Parallel execution of kernels from different programsOpenCL:来自不同程序的内核并行执行
【发布时间】:2019-03-28 00:44:27
【问题描述】:

我有两个要在 GPU 上并行执行的 OpenCL 应用程序。假设第一个应用程序的名称是 A1.c,它的内核被命名为 a1.cl。内核 a1.cl 需要 600 个 CUDA 内核才能执行。假设第二个应用程序是 A2.c,它的内核被命名为 a2.cl。我想在 GPU 的剩余 400 个 CUDA 内核上执行程序 A2.c 的内核 a2.cl。其目的是通过增加GPU的设备利用率,与两个程序一个一个地执行时相比,减少两个同时执行的程序的执行时间。但是,当我同时启动 A1.c 和 A2.c 时,它们各自的内核 a1.cl 和 a2.cl 不会并行执行。 我的问题是如何在 GPU 上并行执行两个不同程序的内核。 注意:我使用的是 Nvidia GTX 760 GPU。

【问题讨论】:

  • 这是特定于驱动程序的行为,从 OpenCL 的角度来看,至少在不从根本上改变两个应用程序的情况下,您无法控制任何事情。

标签: opencl


【解决方案1】:

假设您能够修改程序,您可以使用子设备。这允许您将单个 OpenCL 设备拆分为多个具有非交叉计算单元的设备,理论上允许真正并行执行两个或多个内核。但是,我认为这需要在同一个主机程序中运行两个内核,这对您来说可能不可行。

您对设备进行分区的确切方式取决于您的需要,因此我建议reading through the reference manual 关于设备分区。根据您的系统配置方式和程序使用 OpenCL 的方式,可能存在其他阻碍并行执行的瓶颈。

【讨论】:

  • 但问题是 clCreateSubDevices 在 AMD 或 NVIDIA GPU 上均不受支持。
  • 在这种情况下,我认为您无能为力,除非有一些驱动程序特定的功能。
猜你喜欢
  • 2019-01-16
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多