В моем приложении есть поток обработки, который ставит в очередь ядро OpenCL, которое записывает в объект ID3D11Texture2D
.
Все работает нормально с точки зрения корректности.Я могу успешно получить общий ресурс OpenCL-Direct3D11 через clEnqueueAcquireD3D11ObjectsKHR
и визуализировать текстуру в другом потоке, используя Direct3D11 API.
Я заметил, что когда приложение имеет немного большую рабочую нагрузку (больше запускается ядро OpenCL из несколькихочереди, больше рисование Direct3D11), тогда все соответствующие вызовы API масштабируются довольно хорошо с точки зрения производительности, они занимают примерно столько же времени, сколько раньше.Ну все, кроме одного - звонок на clEnqueueAcquireD3D11ObjectsKHR
.
Кажется, что этот вызов фактически блокирует на стороне хоста попытки получить какой-то общий ресурс.Это не имеет смысла, поскольку получение должно происходить асинхронно на стороне устройства.
Итак, мои вопросы:
- Что может повлиять на время, необходимое для завершения
clEnqueueAcquireD3D11ObjectsKHR
?Что именно может заставить эту функцию блокировать вызывающий поток в течение значительного периода времени (3-20 мс)?
Дополнительная информация: Аппаратное обеспечение - AMD Radeon Pro WX7100 ОС: Windows 10