Невозможно убить плохое ядро ​​на NVIDIA GPU - PullRequest
5 голосов
/ 01 июня 2010

Я нахожусь в реальной ситуации. Пожалуйста помоги. Это срочно.

У меня есть хост-процесс, который порождает несколько хостов (CPU) (pthreads). Эти потоки в свою очередь вызывают ядро ​​CUDA. Эти ядра CUDA написаны внешними пользователями. Так что это могут быть плохие ядра, которые входят в бесконечный цикл. Чтобы преодолеть это, я установил тайм-аут на 2 минуты, который уничтожит соответствующий поток ЦП.

Будет ли уничтожение потока процессора также уничтожением ядра, работающего на GPU? Что касается того, что я проверил, это не так.

Как я могу уничтожить все потоки, запущенные в данный момент в графическом процессоре?

Edit: причина, по которой я использую потоки процессора, которые вызывают ядро, состоит в том, что сервер имеет два GPU Tesla. Таким образом, поток будет планировать ядро ​​на устройстве с графическим процессором в качестве альтернативы.

Спасибо, Arvind

Ответы [ 3 ]

1 голос
/ 27 июля 2010

Кажется, нет. Я запустил сломанное ядро ​​и заблокировал одно из моих устройств на неопределенный срок (до перезагрузки). Я не уверен, как убить работающее ядро. Я думаю, что есть способ ограничить время выполнения ядра через драйвер, так что это может быть путь.

1 голос
/ 20 апреля 2011

Если большая часть этого я не получу, возможно, вам лучше использовать API CUDA Streams для многозадачных задач, но YMMV.

Что касается убийства; Если вы используете карты с подключенным дисплеем (и x сервером), они автоматически отключатся через 5 секунд (опять же, YMMV).

Предполагая, что это не так; проверить вызов cudaDeviceReset () Справочник по API ; из «родительского» потока после вашего собственного предписанного таймаута «kill».

Я не реализовал эту функцию в своем собственном коде, но, честно говоря, понятия не имею, будет ли она работать в вашей ситуации, но ее стоит изучить.

0 голосов
/ 01 июня 2010

Будет ли уничтожение потока процессора также уничтожением ядра, работающего на GPU? Что касается того, что я проверил, это не так.

Вероятно, нет. В Linux вы можете использовать cuda-gdb, чтобы понять это.

Я не вижу смысла отправлять несколько ядер в GPU с использованием потоков ... Интересно, что произойдет, если вы одновременно отправите несколько ядер в GPU ... Будет ли с этим справляться планировщик потоков GPU?

...