Добавление компилятора nvcc в ejudge (cuda 8)

Обсуждение вопросов, связанных с системой проведения турниров ejudge.
Post Reply
Rinat Minyazev
Posts:14
Joined:06 January 2017, 08:49
Добавление компилятора nvcc в ejudge (cuda 8)

Post by Rinat Minyazev » 13 January 2017, 18:48

Всем добрый день!
Пытаюсь добавить 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 но мне он мало что говорит, могу сюда его прикрепить.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by cher » 14 January 2017, 15:52

прикрепите

Rinat Minyazev
Posts:14
Joined:06 January 2017, 08:49

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by Rinat Minyazev » 15 January 2017, 19:53

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

http://umkonline.ru/strace-ej_super_run.log

если не получается посмотреть напишите пожалуйста.

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by cher » 17 January 2017, 20:18

спасибо. А можете сделать strace -f чтобы получить трассу системных вызовов создаваемых процессов?

Rinat Minyazev
Posts:14
Joined:06 January 2017, 08:49

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by Rinat Minyazev » 18 January 2017, 09:21

Cделал, запускал: sudo strace -f -p ... (PID ej-super-run)

http://umkonline.ru/strace-ej_super_run_v2-f.log

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by cher » 18 January 2017, 12:34

Я не спец по Cuda, но разве не нужно инициализировать устройство перед тем, как с ним работать?

Rinat Minyazev
Posts:14
Joined:06 January 2017, 08:49

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by Rinat Minyazev » 18 January 2017, 14:30

при запуске программ в консоли ничего дополнительного по инициализации устройства я не делаю.
выдержка из книг по 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 - контекст не создается.

не могли бы Вы указать здесь те строки из лога, которые указывают, что видеокарта не проинициализирована, чтобы по ним погуглить?

cher
Posts:1153
Joined:13 March 2004, 17:00
Contact:

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by cher » 18 January 2017, 15:08

В трассе вообще ничего не происходит.

Попробуйте поставить маленький лимит на размер стека. У вас сейчас в задаче max_vm_size = 1G и max_stack_size = 1G. Похоже, что из-за этого не получается создать нить для cuda. Попробуйте поставить лимит стека, скажем, 8M.

Rinat Minyazev
Posts:14
Joined:06 January 2017, 08:49

Re: Добавление компилятора nvcc в ejudge (cuda 8)

Post by Rinat Minyazev » 19 January 2017, 22:33

Благодарю! Заработало вроде на тестовой задаче, буду проверять на реальных задачах со множеством потоков на видеокарте.

Post Reply