opencl - 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 的方式,可能还有其他阻碍并行执行的瓶颈。
推荐阅读
- php - Wordpress -> Laravel - 跨域资源共享
- c# - 用递归替换while循环
- url - 在 Snakemake 规则中使用 Github URL 进行包装
- amazon-s3 - Athena - 抓取存储桶中的最新文件
- ruby-on-rails - Rails Active Storage - 背景图像无效属性?
- excel - 有没有一种方法可以在不单独编写每个 SUMIF 语句的情况下汇总多个 SUMIF 语句?
- php - php 计数在我的数组中无法正常工作
- python - 将点列表转换为表格的有效方法
- selenium - SendKeys() 方法在发送到文本框时忽略某些字符
- ansible - How to fold multiline yaml string with identations