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

Performance 在显示GPU上使用OpenCL时,如何确保GUI响应?,performance,opencl,gpu,Performance,Opencl,Gpu,在我相对较短的时间内学习OpenCL的过程中,我经常看到我的应用程序导致操作系统UI的响应性大大降低(例如,窗口对拖动的响应时间为几秒钟)。我在使用NVidia GPU的Windows Vista和Mac OS X上都遇到过这个问题 当在与显示器相同的GPU上使用OpenCL时,我可以做什么来确保我的应用程序不会像这样显著降低UI响应性?另外,在我的应用程序中,这是否可以避免不必要的性能损失?(也就是说,如果用户没有执行一些UI密集型任务,那么我不希望我的应用程序运行得比现在慢。) 我知道,任何

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

当在与显示器相同的GPU上使用OpenCL时,我可以做什么来确保我的应用程序不会像这样显著降低UI响应性?另外,在我的应用程序中,这是否可以避免不必要的性能损失?(也就是说,如果用户没有执行一些UI密集型任务,那么我不希望我的应用程序运行得比现在慢。)


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

如David Gohara博士(从43:49开始)所述,此时无法使用图形卡。因此,对于密集的OpenCL内核和UI(或其他使用GPU的操作)使用相同的图形卡将导致笨重或冻结的视觉外观。在图形卡获得抢先计划的多任务处理(如果有的话)之前,仅仅使用一张图形卡是无法实现您想要的功能的。我认为这根本不是一个特定于平台的问题

然而,这个问题可以通过将问题分解来解决。考虑到可用的单个GPU的相对速度(您必须进行测试以找到正确的设置),将OpenCL问题分解为使用输入数据的不同部分多次运行内核,然后在所有内核集完成后组合输出数据。我建议创建运行时间不超过100毫秒的内核集(在给定的GPU上),这样,延迟即使不是不明显的,也不会让人讨厌(根据经验,100毫秒是一个很好的“经验法则”)


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

是您的应用程序的窗口需要几秒钟才能拖动,还是其他应用程序的另一个窗口受到影响?是其他应用程序的窗口(我的应用程序只是基于控制台的)。