在我的应用程序中,我有一个处理线程,该线程使OpenCL内核排队,该内核写入ID3D11Texture2D
对象。
一切都正确无误。我可以通过clEnqueueAcquireD3D11ObjectsKHR
成功获取共享的OpenCL-Direct3D11资源,并使用Direct3D11 API在另一个线程上渲染纹理。
我注意到,当应用程序的工作量稍大(从多个队列启动更多的OpenCL内核,更多的Direct3D11绘图)时,所有相关的API调用在性能方面都可以很好地扩展,它们花费的时间大约与以前相同。好吧,除了一个以外的所有内容-对clEnqueueAcquireD3D11ObjectsKHR
的调用。
似乎此调用实际上在主机端阻止,试图获取一些共享资源。这没有意义,因为采集应在设备端异步进行。
所以我的问题是:
clEnqueueAcquireD3D11ObjectsKHR
完成的时间?究竟是什么会导致此函数在相当长的时间内(3-20毫秒)阻塞调用线程?其他信息: 硬件是AMD Radeon Pro WX7100 操作系统:Windows 10