Я не эксперт CUDA, --- я разрабатывал с AMD Stream SDK, который AFAIK примерно сопоставим.
Вы можете отключить сторожевой таймер Windows, но это , настоятельно не рекомендуется , по причинам, которые должны быть очевидны.
Чтобы отключить его, вам нужно regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Watchdog\Display\DisableBugCheck
, создать REG_DWORD и установить его в 1.
Вам также может понадобиться что-то сделать в панели управления NVidia. Ищите ссылку на «Восстановление VPU» в документации CUDA.
В идеале, вы должны иметь возможность разбивать ваши операции ядра на несколько проходов над вашими данными, чтобы разбить их на операции, которые выполняются в срок.
Кроме того, вы можете разделить проблемный домен так, чтобы он вычислял меньше выходных пикселей на команду. То есть вместо того, чтобы вычислять 1 000 000 выходных пикселей одним махом, введите 10 команд для gpu, чтобы вычислить 100 000 для каждой.
Базовая единица, которая должна помещаться во временном интервале, - это не все приложение, а выполнение одного буфера команд. В AMD Stream SDK длинная последовательность операций может быть разбита на несколько временных интервалов путем явного сброса очереди команд с помощью вызова CtxFlush (). Возможно, у CUDA есть нечто подобное?
Вы должны не читать все ваши данные взад-вперед по шине PCIX на каждом отрезке времени; вы можете оставить свои текстуры и т.п. в локальной памяти gpu; у вас просто время от времени выполняются некоторые буферы команд, чтобы доказать ОС, что вы не застряли в бесконечном цикле.
Наконец, графические процессоры быстрые , поэтому, если ваше приложение не может выполнять полезную работу в течение этих 5 или 10 секунд, я бы воспринял это как признак того, что что-то не так.
[РЕДАКТИРОВАТЬ в марте 2010 г. для обновления: ] (снова устарели, последние сведения см. В приведенных ниже обновлениях) Указанный выше раздел реестра устарел. Я думаю, что это был ключ для 64-битной Windows XP. Новые ключи реестра для Vista и Windows 7. Вы можете найти их здесь: http://www.microsoft.com/whdc/device/display/wddm_timeout.mspx
или здесь: http://msdn.microsoft.com/en-us/library/ee817001.aspx
[РЕДАКТИРОВАТЬ Апр 2015 для обновления: ] Это становится действительно устаревшим. Самый простой способ отключить TDR для программирования на Cuda, если у вас установлены инструменты NVIDIA Nsight, - это открыть Nsight Monitor, нажать «Параметры Nsight Monitor» и в разделе «Общие» установить «WDDM TDR enabled» на false. Это изменит настройки реестра для вас. Закройте и перезагрузите. Любые изменения в параметре реестра TDR не вступят в силу до перезагрузки.
[РЕДАКТИРОВАТЬ Август 2018 для обновления:]
Хотя инструменты NVIDIA теперь позволяют отключать TDR, этот же вопрос актуален для разработчиков AMD / OpenCL. Для тех: текущая ссылка, которая документирует настройки TDR на https://docs.microsoft.com/en-us/windows-hardware/drivers/display/tdr-registry-keys