代码之家  ›  专栏  ›  技术社区  ›  Ryan Ahearn

在显示gpu上使用opencl时,如何确保gui响应?

  •  6
  • Ryan Ahearn  · 技术社区  · 6 年前

    在我相对较短的学习opencl的时间里,我经常看到我的应用程序导致操作系统ui的响应显著降低(例如,窗口对拖动的响应时间为几秒钟)。我在使用nvidia gpus的windows vista和mac os x上都遇到过这个问题。

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

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

    1 回复  |  直到 13 年前
        1
  •  17
  •   mm2001    15 年前

    正如david gohara博士的 OpenCL Tutorial Episode 6 (从43:49开始),图形卡不能 preemptively scheduled 在这个时候。因此,对于一个密集的opencl内核和ui(或其他使用gpu的操作)使用相同的图形卡将导致笨拙或冻结的视觉外观。在显卡得到预先安排的多任务处理(如果有的话)之前,没有办法只使用一个显卡就做你想要的事情。我不认为这是一个平台特定的问题。

    然而,这个问题可以通过把问题分开来解决。考虑到可用的单个gpu的相对速度(您必须进行测试以找到正确的设置),将opencl问题分成若干部分,用输入数据的不同部分多次运行内核,然后在所有内核集都完成时合并输出数据。我建议创建运行时间少于100毫秒(在给定的gpu上)的内核集,这样即使延迟不明显,也不会非常烦人(根据 this paper )

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