首页 > 解决方案 > OpenCL:来自不同程序的内核并行执行

问题描述

我有两个要在 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 设备拆分为多个具有非交叉计算单元的设备,理论上允许两个或多个内核真正并行执行。但是,我相信这需要在同一个主机程序中运行两个内核,这对您来说可能不可行。

对设备进行分区的确切方式取决于您的需要,因此我建议您阅读有关设备分区的参考手册。根据您的系统配置方式和程序使用 OpenCL 的方式,可能还有其他阻碍并行执行的瓶颈。


推荐阅读