Несколько потоков CUDA, сбой GPU

Это продолжение этот сообщение.

Кажется, что особый случай был решен путем добавления volitile но теперь что-то еще сломалось. Если я добавлю что-нибудь между двумя вызовами ядра, система вернется к старому поведению, а именно к зависанию и печати всего сразу. Это поведение показано добавлением sleep(2); между set_flag а также read_flag, Кроме того, при установке в другую программу это приводит к блокировке графического процессора. Что я делаю не так сейчас?

Еще раз спасибо.

0

Решение

Существует взаимодействие с X и драйвером дисплея, а также стандартная очередь вывода и его взаимодействие с драйвером графического дисплея.

Несколько экспериментов, которые вы можете попробовать, (с sleep(2); добавлено между set_flag а также read_flag Ядра):

  1. Войдите в свой компьютер через сеть через ssh с другого компьютера. Я думаю, что ваша программа будет работать. (X не участвует в отображении в этом случае)
  2. закомментируйте строку, которая печатает «Начиная …» Я думаю, что ваш
    Программа будет работать. (Это позволяет избежать тупика драйвера дисплея / очереди печати, см. Ниже).
  3. добавить sleep(2); между строкой печати «Starting …» и первым ядром. Я думаю, что ваша программа будет работать. (Это позволяет драйверу дисплея полностью обслуживать первую распечатку перед запуском первого ядра, поэтому поток ЦП не останавливается.)
  4. Остановите X и запустите с консоли. Я думаю, что ваша программа будет работать.

Когда на графическом процессоре одновременно размещается дисплей X и выполняются задачи CUDA, он должен переключаться между ними. На время выполнения задачи CUDA обычная обработка отображения приостанавливается. Вы можете прочитать больше об этом Вот.

Проблема здесь в том, что при запуске X первая распечатка отправляется в очередь печати, но фактически не отображается до запуска первого ядра. Это очевидно, потому что вы не видите распечатку до остановки дисплея. После этого поток ЦП останавливается в ожидании отображения текста. Второе ядро ​​не запускается. Вмешательство sleep(2); и этого взаимодействия с ОС достаточно для того, чтобы это произошло. И исполняющее первое ядро ​​имеет драйвер дисплея, «остановленный» для обычных задач отображения, поэтому ОС никогда не преодолеет свою остановку, поэтому второе ядро ​​не запустится, что приведет к очевидному зависанию.

Обратите внимание, что варианты 1,2 или 3 в связанном custhelp статья будет эффективной в вашем случае. Варианта 4 не будет.

1

Другие решения

Других решений пока нет …