Ограничения загрузки рабочего элемента в GPU? CUDA/OpenCL

У меня есть алгоритм изображения с интенсивными вычислениями, который для каждого пикселя должен считывать много удаленных пикселей. Расстояние зависит от константы, определенной во время компиляции. Мой алгоритм OpenCL работает хорошо, но на определенном максимальном расстоянии, что приводит к более тяжелым циклам for, драйвер, кажется, выручает. Экран становится черным на пару секунд, а затем очередь команд никогда не заканчивается. Воздушное сообщение показывает, что водитель недоволен:

"Драйвер дисплея AMD перестал отвечать на запросы и был успешно восстановлен."

(Запуск на OpenCL 1.1 с AMD FirePro V4900 (FireGL V) Graphics Adapter.)

  1. Почему это происходит?
  2. Можно ли заранее сказать водителю, что все в порядке?

person l33t    schedule 04.09.2012    source источник


Ответы (1)


Это известная "фича" под Windows (не уверен в Linux) - если видеодрайвер перестанет отвечать, ОС сбросит его. За исключением того, что, поскольку OpenCL (и CUDA) реализуется драйвером, ядро, работающее слишком долго, будет выглядеть как зависший драйвер. Есть сторожевой таймер, который отслеживает это (кажется, 5 секунд).

Ваши варианты:

  1. Вы должны убедиться, что ваши ядра не требуют слишком много времени (лучше всего).
  2. Вы можете отключить сторожевой таймер: Обнаружение истечения времени ожидания и восстановление графических процессоров.
  3. Вы можете запустить ядро ​​на графическом процессоре, который не подключен к дисплею.

Я предлагаю вам пойти с 1.

person Lubo Antonov    schedule 04.09.2012
comment
Спасибо! TDR действительно был проблемой. На данный момент я буду придерживаться № 2, но № 3 привлекателен. Я полагаю, что графический процессор может работать даже немного быстрее, когда дисплей не подключен. - person l33t; 04.09.2012