GPU-карта сбрасывается через 2 секунды - PullRequest
1 голос
/ 07 марта 2012

Я использую карту NVIDIA geforce, которая выдает ошибку через 2 секунды, если я пытаюсь запустить на ней какую-либо программу CUDA.Я прочитал здесь , что вы можете использовать клавишу TDRlevel в HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GraphicsDrivers.Однако я не вижу такого ключа в реестре.Это нужно добавить самостоятельно?У кого-нибудь еще возникла эта проблема.Если да, то как ты решил это?Спасибо.

Ответы [ 2 ]

6 голосов
/ 07 марта 2012

Я предполагаю, что вы используете Windows Vista или более позднюю версию.

Статья , на которую вы ссылаетесь , содержит список ключей реестра, управляющих механизмом обнаружения и восстановления тайм-аутов Microsoft WDDM.Как прокомментировали talonmies, это не карта, выдающая ошибку, это механизм Microsoft Windows WDDM TDR, который обнаруживает долго работающее ядро ​​и убивает его, чтобы восстановить графический процессор для отображения.

Если у вас есть ядро, которое работаетв течение любого промежутка времени, когда графический процессор занят вычислительной работой и не может обновить ваш дисплей, естественно, вы можете себе представить, что большинство людей сочтут это плохим.Некоторые разработчики решили увеличить задержку, чтобы позволить разрабатывать более долго работающие ядра, понимая, что их система может перестать отвечать на запросы в течение нескольких секунд.Вам также может потребоваться отключить TDR, если вы используете отладчик с графическим процессором WDDM (графические процессоры NVIDIA Tesla поддерживают TCC , что позволяет избежать всех головных болей WDDM).

Если ключи не существуютВы должны создать их.Я хотел бы предложить:

  • TdrLevel 3 (т.е. включен)
  • TdrDelay 5 (т.е. 5 секунд)
  • TdrLimitTime 10
  • TdrLimitCount 10 (т.е.максимум 10 тайм-аутов за 10 секунд)

В качестве альтернативы можно использовать второй графический процессор для выполнения или настроить набор задач таким образом, чтобы время ядра составляло менее 2 секунд - действительно большие проблемы должны выполняться навыделенный графический процессор.Это предполагает, что это не ошибка в вашем ядре, конечно!

2 голосов
/ 07 марта 2012

Ну, вы получите тайм-аут, если ваше ядро ​​cuda будет работать дольше 2 секунд на видеокарте, подключенной к монитору. Поэтому, чтобы избежать этого, вам нужно либо разбить вашу программу на несколько вызовов ядра, каждый из которых ниже предела 2 секунд. Другой вариант - использовать видеокарту, которая не подключена к монитору. Тогда не будет ограничения по времени ожидания.

cudaGetDeviceProperties(&prop,i)
prop.kernelExecTimeoutEnabled

Приведенный выше код показывает, включен ли тайм-аут или нет.

Наконец, я также прочитал о записи в реестре, но, кажется, это не рекомендуется (использование GNU / Linux, поэтому не вариант). Я могу ошибаться, но я думаю, что вам нужно добавить такой ключ самостоятельно.

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