Как я гарантирую скорость отклика GUI при использовании OpenCL на дисплее GPU?

В мое относительно короткое время, изучая OpenCL я часто вижу, что мое приложение заставляет операционную систему UI значительно стать менее быстро реагирующей (несколько секунд для окна для ответа на перетаскивание, например). Я встретился с этой проблемой на Windows Vista и Mac OS X оба с Nvidia GPU.

Что я могу сделать при использовании OpenCL на том же GPU как дисплей, чтобы гарантировать, что мое приложение не значительно ухудшает скорость отклика UI как это? Кроме того, это может быть сделано, не терпя бесполезные убытки производительности в рамках моего приложения? (Т.е., если бы пользователь не делает некоторого UI интенсивная задача затем, я не ожидал бы, что мое приложение будет работать немного медленнее, чем это делает теперь.)

Я понимаю, что любые ответы будут очень конкретной платформой (где платформа включает комбинацию ОС/GPU/драйвера).

6
задан 2 revs, 2 users 100% 14 September 2012 в 10:30
поделиться

1 ответ

Как описано в OpenCL Tutorial Episode 6 доктора Дэвида Гохары (начало на 43:49), в настоящее время графические карты не могут быть заранее запланированы. В результате использование одной и той же видеокарты как для интенсивного ядра OpenCL, так и для пользовательского интерфейса (или других операций, использующих GPU) приведет к замираниям или визуальному эффекту замирания. Пока видеокарты не получат упреждающую многозадачность по расписанию (если вообще получат), нет возможности сделать то, что вы хотите, с помощью одной видеокарты. Я не думаю, что это проблема, зависящая от конкретной платформы.

Однако эта проблема может быть решена путем разделения задачи на части. Учитывая относительную скорость любого доступного одного GPU (вам придется провести тестирование, чтобы найти подходящую конфигурацию), разделите вашу задачу OpenCL, чтобы запустить ядро несколько раз с разными частями входных данных, а затем объединить выходные данные, когда все наборы ядер будут завершены. Я бы рекомендовал создавать наборы ядер, для запуска которых требуется менее 100 миллисекунд (на данном GPU), чтобы задержка была если не незаметной, то не сильно раздражающей (цифра в 100 миллисекунд является хорошим "эмпирическим правилом" согласно этой статье).

Исходя из вашего комментария о том, что ваша программа является приложением командной строки, я предполагаю, что ваше приложение будет выполняться только один раз в любой момент времени, а не будет постоянно работающим приложением с выводом данных в реальном времени, как многие демонстрационные версии OpenCL. Мой ответ выше удовлетворителен только для не непрерывных приложений, так как производительность в реальном времени не ожидается по своей природе. Однако, если ваше приложение должно быть непрерывным, единственным доступным решением в настоящее время является добавление второй, более простой видеокарты, которая будет использоваться только для пользовательского интерфейса.

16
ответ дан 8 December 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: