clEnqueueAcquireD3D11ObjectsKHR блокирует в течение длительного времени - PullRequest
0 голосов
/ 18 апреля 2019

В моем приложении есть поток обработки, который ставит в очередь ядро ​​OpenCL, которое записывает в объект ID3D11Texture2D.

Все работает нормально с точки зрения корректности.Я могу успешно получить общий ресурс OpenCL-Direct3D11 через clEnqueueAcquireD3D11ObjectsKHR и визуализировать текстуру в другом потоке, используя Direct3D11 API.

Я заметил, что когда приложение имеет немного большую рабочую нагрузку (больше запускается ядро ​​OpenCL из несколькихочереди, больше рисование Direct3D11), тогда все соответствующие вызовы API масштабируются довольно хорошо с точки зрения производительности, они занимают примерно столько же времени, сколько раньше.Ну все, кроме одного - звонок на clEnqueueAcquireD3D11ObjectsKHR.

Кажется, что этот вызов фактически блокирует на стороне хоста попытки получить какой-то общий ресурс.Это не имеет смысла, поскольку получение должно происходить асинхронно на стороне устройства.

Итак, мои вопросы:

  • Что может повлиять на время, необходимое для завершения clEnqueueAcquireD3D11ObjectsKHR?Что именно может заставить эту функцию блокировать вызывающий поток в течение значительного периода времени (3-20 мс)?

Дополнительная информация: Аппаратное обеспечение - AMD Radeon Pro WX7100 ОС: Windows 10

...