Прежде всего: я совершенно не могу создать MCVE, поскольку могу воспроизвести его только при запуске полного кода, любая попытка измерить или воспроизвести ошибку в более простой среде заставляет ее исчезнуть. TDLR Я подозреваю, что это не проблема кода, а проблема конфигурации.
У меня есть кусок кода для некоторой математики по ядрам в CUDA. У меня Windows-машина Win10 x64, GTX 1050, CUDA 9.2 и Ubuntu 17.04, 2xGTX 1080 Ti, CUDA 9.1.
Мой код хорошо работает на машине с Windows. Это долго (~ 700 мс на ядро для больших выборок), поэтому мне нужно было увеличить значение TDR в Windows. Код также (на данный момент) заставляет его работать в 1 графическом процессоре, первый из которых выбран с cudaSetDevice(0)
.
Когда я копирую те же входные данные и код на машину linux (я использую git, это тот же код), я получаю либо
an illegal memory access was encountered
или
unspecified launch failure
в моей проверке ошибок после вызова графического процессора.
Если я поменяю ядро, чтобы вместо этого сделать математику, чтобы просто записать число в вывод, ядро выполняется правильно. Другой код CUDA (другие функции, которые у меня есть) тоже работает нормально. Все это заставляет меня думать, что существует проблема вне кода, а не с самим кодом или с общей конфигурацией драйверов / переменных среды.
Я читал, что xorg.conf
может влиять на время ожидания ядер. Я сгенерировал xorg.conf (у меня его не было) и удалил оттуда устройства, как предложено здесь . Я подключаюсь к серверу удаленно, и у меня нет подключенного монитора. Это ничего не меняет в моем поведении, в моих ядрах все еще ошибка.
Мой вопрос: что еще я должен посмотреть? На какую конкретную конфигурацию Linux мне следует взглянуть, чтобы точно определить причину остановки ядра?