Любые советы, чтобы избежать медленного отображения во время длинных ядер? - PullRequest
3 голосов
/ 07 ноября 2011

Уважаемые пользователи CUDA. Я пересылаю вопрос с плат nvidia: в настоящее время я выполняю обработку изображений на графическом процессоре, и у меня есть одно ядро, которое занимает от 500 до 700 миллисекунд при работе с большими изображениями.Раньше она идеально работала на небольших изображениях, но теперь проблема в том, что весь экран и даже курсор мыши становятся медленными (OS = win7)

Моя идея была splitмое ядро ​​ в 4 или 8 ядрах запускается, надеясь, что драйвер сможет обновляться чаще (между каждым запуском ядра).К сожалению, это не помогает вообще, так что еще я мог бы попытаться избежать этого эффекта замораживания дисплея?Мне было предложено добавить вызов cudaStreamQuery(0) между каждым ядром, чтобы избежать упаковки драйвером.

Примечание: я готов поменять характеристики на плавность!

1 Ответ

4 голосов
/ 07 ноября 2011

Графический процессор (пока) не предназначен для переключения контекста между запусками ядра, поэтому ваше долго работающее ядро ​​вызывает замедленное отображение.Разбивка ядра на несколько запусков, вероятно, поможет на платформах, отличных от Windows Vista / Windows 7. На этих платформах модель драйвера дисплея Windows требует дорогостоящего перехода от пользователя к ядру («ядро») каждый раз, когда драйвер CUDA хочет отправитьработать с графическим процессором.

Чтобы амортизировать затраты на ядро, драйвер CUDA ставит в очередь команды GPU и отправляет их пакетами.Драйвер использует эвристику, чтобы компенсировать снижение производительности от ядра ядра и увеличение задержки не немедленной отправки работы.Что происходит с вашим решением с несколькими ядрами, так это то, что драйвер передает ваше ядро ​​или серии ядер на GPU одновременно.

Вы пробовали предложение cudaStreamQuery (0)?Причина, по которой это может помочь, заключается в том, что заставляет драйвер CUDA передавать работу на графический процессор, даже если очень мало работы ожидается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...