6

在我学习 OpenCL 的相对较短的时间内,我经常看到我的应用程序导致操作系统 UI 的响应速度明显降低(例如,窗口响应拖动需要几秒钟)。我在使用 NVidia GPU 的 Windows Vista 和 Mac OS X 上都遇到了这个问题。

在与显示器相同的 GPU 上使用 OpenCL 时,我该怎么做才能确保我的应用程序不会像这样显着降低 UI 响应能力?此外,是否可以在我的应用程序中不造成不必要的性能损失的情况下做到这一点?(即,如果用户没有执行一些 UI 密集型任务,那么我不希望我的应用程序运行得比现在慢。)

我知道任何答案都将是非常特定于平台的(其中平台包括 OS/GPU/驱动程序组合)。

4

1 回答 1

16

正如 David Gohara 博士的OpenCL 教程第 6 集(从 43:49 开始)中所述,此时无法预先安排显卡。因此,将同一显卡同时用于密集的 OpenCL 内核和 UI(或其他使用 GPU 的操作)将导致笨拙或视觉上的冻结。在显卡获得预先安排的多任务处理(如果有的话)之前,没有办法只用一张显卡就可以完成您想要的事情。我根本不相信这是一个特定于平台的问题。

但是,这个问题可以通过拆分问题来解决。考虑到任何可用的单个 GPU 的相对速度(您必须进行测试才能找到正确的设置),划分您的 OpenCL 问题以使用输入数据的不同部分多次运行内核,然后合并输出数据当所有内核集都完成时。我建议创建运行时间少于 100 毫秒的内核集(在给定的 GPU 上),这样延迟即使不是不明显也不会很烦人(根据本文,100 毫秒的数字是一个很好的“经验法则” )。

根据您对您的程序是命令行应用程序的评论,我假设您的应用程序在任何给定时间只会运行一次,而不是像许多 OpenCL 演示那样是具有实时输出的持续运行的应用程序。我上面的答案只对非连续应用程序是令人满意的,因为实时性能并不是固有的预期。但是,如果您的应用程序应该是连续的,那么目前唯一可用的解决方案是添加第二个更简单的显卡,该显卡仅用于 UI。

于 2010-05-10T18:55:44.580 回答