在我的应用程序中,GUI线程使用Direct2D显示图像,允许用户进行平移和缩放,而另一个线程使用CUDA进行图像处理。为了防止图形处理线程受到GUI线程的干扰并加快速度,我们选择为CUDA计算添加一个单独的图形卡,具有以下设置:
然而,这没有按预期工作,因为当用户平移图像,从而导致连续几次更新显示时,CUDA执行时间从典型的20ms跳到大约800ms。使用GPUView(我发现调查此问题并且根本没有掌握),我能够看到CUDA线程似乎在等待显示器完成更新,然后将其命令排队到GPU。与此同时,Direct2D大部分时间都不使用GPU(16ms VSync周期为1ms工作)。看起来我对Direct2D的调用阻塞了所有GPU 16ms,然后GUI线程让CUDA线程挨饿(尽管这些线程没有以GPU访问以外的任何方式同步)。
所以问题是:
答案 0 :(得分:1)
如果使用ID2D1DeviceContext渲染目标而不是ID2D1HWndRenderTarget,则在初始化期间,选择要用于Direct3D的适配器。
http://msdn.microsoft.com/en-us/library/windows/desktop/hh780339(v=vs.85).aspx
请参阅D3D11CreateDevice或D3D11CreateDeviceAndSwapChain的文档。 第一个参数指定要使用的适配器。 http://msdn.microsoft.com/en-us/library/windows/desktop/ff476082(v=vs.85).aspx