在显示GPU上使用OpenCL时,如何确保GUI响应?

时间:2010-05-04 22:05:22

标签: performance opencl gpu

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

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

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

1 个答案:

答案 0 :(得分:17)

正如David Gohara博士的OpenCL Tutorial Episode 6(从43:49开始)所述,此时显卡不能是preemptively scheduled。因此,对于密集的OpenCL内核和UI(或其他使用GPU的操作)使用相同的图形卡将导致笨拙或冻结的视觉外观。在图形卡获得预先安排的多任务处理(如果有的话)之前,只有一个图形卡无法完全满足您的需求。我根本不相信这是一个特定于平台的问题。

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

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