Всем добрый день!
Пытаюсь добавить nvcc в систему ejudge, написал скрипты nvcc-version.in и nvcc.in (за образец взял скрипты для gcc). Переконфигурировал систему, новый компилятор появился в списке для отправки решения в контесте.
Отправляю решение для тестовой задачи A+B, компиляция проходит, но при запуске валится с ошибкой Run-time error (падает при вызове первой же cuda функции (первая функция выделяет память на видеокарте): OS call failed or operation not supported on this OS).
Подскажите пожалуйста в чем может быть проблема?
ubuntu server 16.04 x64, cuda 8.0, (при ручной компиляции и отправки решения через консольную утилиту ejudge-execute решение отрабатывает, пишет ОК). У меня чистый сервер и чистый ejudge последней версии, патч не ставил, дефолтные настройки не менял. Галочки Run programs securely: в меню Global settings (serve.cfg) нет. т.е. этот режим уже выключен. Увеличил все значения: VM, time limit, real time и memory limit - не помогает. та же ошибка. run-time error: OS call failed or operation not supported on this OS.
Проблема видимо при запуске исполняемого файла CUDA из демона ej_super_run. Запускал strace и цеплял его к процессу ej_super_run по PID, пробовал отправлять решение. Есть лог работы strace но мне он мало что говорит, могу сюда его прикрепить.
Добавление компилятора nvcc в ejudge (cuda 8)
-
- Posts:14
- Joined:06 January 2017, 08:49
-
- Posts:14
- Joined:06 January 2017, 08:49
Re: Добавление компилятора nvcc в ejudge (cuda 8)
Добрый вечер, не могу прикрепить к этому форуму файл, выложил лог на доступном хостинге.
http://umkonline.ru/strace-ej_super_run.log
если не получается посмотреть напишите пожалуйста.
http://umkonline.ru/strace-ej_super_run.log
если не получается посмотреть напишите пожалуйста.
Re: Добавление компилятора nvcc в ejudge (cuda 8)
спасибо. А можете сделать strace -f чтобы получить трассу системных вызовов создаваемых процессов?
-
- Posts:14
- Joined:06 January 2017, 08:49
Re: Добавление компилятора nvcc в ejudge (cuda 8)
Cделал, запускал: sudo strace -f -p ... (PID ej-super-run)
http://umkonline.ru/strace-ej_super_run_v2-f.log
http://umkonline.ru/strace-ej_super_run_v2-f.log
Re: Добавление компилятора nvcc в ejudge (cuda 8)
Я не спец по Cuda, но разве не нужно инициализировать устройство перед тем, как с ним работать?
-
- Posts:14
- Joined:06 January 2017, 08:49
Re: Добавление компилятора nvcc в ejudge (cuda 8)
при запуске программ в консоли ничего дополнительного по инициализации устройства я не делаю.
выдержка из книг по CUDA:
"CUDA API для CPU (host) выступает в двух формах - низкоуровневый CUDA drievr API и CUDA runtime API (реализованный через CUDA driver API)... CUDA runtime API не требует явной инициализации - она происходит автоматически при первом вызове какой-либо его функции. Важным моментом работы с CUDA является то, что многие функции API являются асинхронными, т.е. управление возвращается еще до реального завершения требуемой операции...".
"Runtime API основано на driver API, работает в рамках контекста, созданного через driver
API. Если контекста нет, то он создается неявно перед первым вызовом функции из
runtime API..."
возможно при запуске программы из демона ej_super_run - контекст не создается.
не могли бы Вы указать здесь те строки из лога, которые указывают, что видеокарта не проинициализирована, чтобы по ним погуглить?
выдержка из книг по CUDA:
"CUDA API для CPU (host) выступает в двух формах - низкоуровневый CUDA drievr API и CUDA runtime API (реализованный через CUDA driver API)... CUDA runtime API не требует явной инициализации - она происходит автоматически при первом вызове какой-либо его функции. Важным моментом работы с CUDA является то, что многие функции API являются асинхронными, т.е. управление возвращается еще до реального завершения требуемой операции...".
"Runtime API основано на driver API, работает в рамках контекста, созданного через driver
API. Если контекста нет, то он создается неявно перед первым вызовом функции из
runtime API..."
возможно при запуске программы из демона ej_super_run - контекст не создается.
не могли бы Вы указать здесь те строки из лога, которые указывают, что видеокарта не проинициализирована, чтобы по ним погуглить?
Re: Добавление компилятора nvcc в ejudge (cuda 8)
В трассе вообще ничего не происходит.
Попробуйте поставить маленький лимит на размер стека. У вас сейчас в задаче max_vm_size = 1G и max_stack_size = 1G. Похоже, что из-за этого не получается создать нить для cuda. Попробуйте поставить лимит стека, скажем, 8M.
Попробуйте поставить маленький лимит на размер стека. У вас сейчас в задаче max_vm_size = 1G и max_stack_size = 1G. Похоже, что из-за этого не получается создать нить для cuda. Попробуйте поставить лимит стека, скажем, 8M.
-
- Posts:14
- Joined:06 January 2017, 08:49
Re: Добавление компилятора nvcc в ejudge (cuda 8)
Благодарю! Заработало вроде на тестовой задаче, буду проверять на реальных задачах со множеством потоков на видеокарте.