Как внедрить онлайн судью бота? (Напр. TopCoder, Uva, ACM-ICPC) - PullRequest
2 голосов
/ 07 января 2012

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

Итак, вот мой вопрос, так как некоторые сайты онлайн-судей запускают несколько тестовых программ одновременновремя, как они достигают изоляции производительности?и как они достигают того же времени выполнения на той же программе, которая выполняется в другое время?

Я думаю, что существуют процессы изолированной среды, такие как «VMware» или «Песочница», которые всегда возвращают один и тот же результат.это правильно?и есть идеи о том, как реализовать эти вещи?

Текущее решение

Я использую докер для песочницы.Это очень простой и безопасный способ.

Ответы [ 2 ]

1 голос
/ 07 января 2012

К сожалению, ОЧЕНЬ сложно действительно обеспечить стабильное время работы даже на выделенной машине по сравнению с виртуальной машиной.Если вы хотите реализовать что-то подобное, как было упомянуто, вы, вероятно, захотите, чтобы виртуальная машина сохранила весь код, который будет выполняться в «песочнице».Обычно вы не хотите обслуживать более пары запросов на ядро, поэтому я бы сказал, что для алгоритмов с привязкой к памяти и процессору используется не более 2 виртуальных машин на физическое ядро ​​машины.

Хотя я могу толькопоразмышляйте, почему бы не попробовать различное количество виртуальных машин на ядро ​​и посмотреть, как оно работает.Постарайтесь достичь примерно 90% или более высокого уровня соответствия SLO (или 98-99, если вам действительно нужно), и у вас все будет хорошо.Опять же, трудно сказать вам точно, что делать, так как для многих из этих вещей нужно просто проверить это и посмотреть, как это происходит.

0 голосов
/ 07 января 2012

Может быть слишком упрощенным в зависимости от других ваших требований, о которых речь не идет, но;

Если алгоритмы связаны с процессором, просто запустите его в изолированной виртуальной машине (или в тюрьме FreeBSD, или ...) и использование встроенного инструментария операционной системы было бы самым простым.

(может быть так же просто, как использовать команду 'time' в unix и установить пределы памяти с помощью "limit")

...