Ура-ура!
Мы двигаемся вперед по ускорению тестирования. В самом деле, когда на раунд регистрируются 3500+ участников, то тяжело успеть протестировать всё на 9 компьютерах Core 2 Duo E6750, 2.66 Ghz, 3Gb памяти.
Как я уже писал, у СГУ недавно появился замечательный класс с 20ю новенькими i5-3470, 8Gb. После небольшого исследования оказалось, что если подразогнать их множителем до 3.5Ghz (конечно, отключив всякие turbo boost и проведя многочасовое исследование на стабильность работы в таком режиме), то скорость их работы примерно равна удвоенной скорости старых тестирующих машин. Это очень удобно, так как позволит в будущем просто поделить все ограничения по времени в задачах на 2.
Только что мы перевели тестирование на использование новой техники, и тестирование осуществляется пока в режиме совместимости. Это значит, что все ограничения времени перед запуском программы делятся на 2, программа исполняется, а в конце время её работы умножается на 2. На самом деле, если вы не используете отсечения по времени или еще какие-то сомнительные трюки, то особой разницы вы можете и не обнаружить.
Старые тестирующие компьютеры в настоящее время не используются.
Если быть предельно точным, то новые компьютеры всё-таки отстают от 2x старых. То есть в режиме совместимости нормально заметить небольшое падение скорости выполнения.
То есть, старый кластер больше при тестировании использоваться не будет? Раз уж Вы заговорили про "сомнительные трюки", то будет очень плохо, если участник не будет знать, на какой машине его решение будет тестироваться.
И, если на то пошло, почему бы просто не поделить таймлимиты для всех задач на 2 и не вводить в систему подобные костыли?
Старый кластер в настоящее время для тестирования Codeforces не используется. Если всё пойдет по плану, то больше и не будет использоваться.
На i5-3470, 8Gb в режиме совместимости.
Конечно, чуть позже так и сделаем. Для этого надо кое-что внедрить в problem-descriptors (видимо, атрибут cpuinfo), добавить поддержку в invoker-ах и других компонентах. В настоящее время я вроде как нахожусь на отдыхе, и всё это сделать прям сейчас возможности нет. Кроме того, режим совместимости дает возможность в случае каких-то сложностей быстренько откатиться к старому кластеру. Убедимся, что все ОК, внедрим по полной. Последний раунд показал, что медлить с ускорением тестирования не стоит.
А если я использую отсечение по времени, как мне узнать, какой на самом деле будет TL для моей программы?
А старые компьютеры сейчас не используются?
Нет
А start-up java машины тоже в два раза быстрее?
Почему-то нет. Я пробовал даже скопировать JRE на ramdisk.
Тогда стоит обойтись без сверхнизких тл (типа 1 секунды, которая првратится в половину)
but in very few problems like Round#192-E.Graph Reconstruction we should use clock() or something else that tell us the current running time, so what should we do if we want determine the running time? divide the time of the problem by 2?
Yes (implicitly answered by MikeMirzayanov in Russian comments)
hope this solves the problem of long queues during contests! :)
На всякий случай: правда, что это касается в том числе и ближайших соревнований (CF Round 194, например)?
Да.
Great !!! Hope there will be no "long time in queue" problem now.... :D
Раньше-718мс, сейчас-1934мс. Так и должно быть?
upd: GNU C++ тоже долго-1840мс
Может быть различие из-за разных компиляторов. Попробуй снова на GNU C++
Добавил пробел. 966ms 4174804
Наверно, используются все-таки как новые компьютеры, так и старые...
Да, такой эффект был из-за некоторых кэшей. Почистил их.
In fact the new computers are not as fast as 2x old on MOST tasks and that is very obvious on some data structure tasks.
I just resubmited 3 DS problems and got very different results: 1308176 4174661 || 1821573 4174655 || 3870771 4174638
It is really worth mentioning this annoying difference.
We've improved some settings. Now the results are much closer. I've rejudged your older solutions, you may check it.
Now my D from CR #194 pass in time...
OMG, I submitted this during the contest with two stupid bugs and was hacked. I thought it was TL, but now I'm sure that without those bugs it should be AC, even with old time settings.
Why this problem was D? Just because you should be too brave to submit such solution?
I believe for both D and E jury had not came up with n^3 / 32 solutions
O(N^3) was not expected for the authors
Никогда не читал на чем работает codeforces, но меня удивило, что это всего 9 машин для тестирования. Не понимаю, почему под такой крутой ресурс никто не может выделить хорошее оборудование?
А в запуске будет показано реальное время или умноженное на 2?
Везде всё единообразно.
Время все таки не хило скачет.
Старая посылка: 500ms
Новые посылки, подряд: 904,1434(!),780,654, 716
Возможно, это связано с параллельным тестированием на двух ядрах. Кэш они делят, поэтому происходит сильный разбор по времени. А вот если кто-то получил TL, то он перезапускается в эксклюзивном режиме. К сожалению, с таким подходом отсечение по времени и информация по времени работы несут на порядок меньшую ценность.
Да, это так. Но в данном случае не очевидно, что виной именно параллельное тестирование. Я воспроизвел ситуацию — в самом деле разброс существенный. Во время контеста не понятно влияет ли параллельное тестирование или другие причины. Будем изучать.
Это значит, что все ограничения времени перед запуском программы делятся на 2, программа исполняется, а в конце время её работы умножается на 2.
Мне кажется, или надо делать что-то одно?
Upd: а в конце время её работы умножается на 2. Наверное, это делается после вынесения вердикта. Если так, то так и нужно написать.
Wouldn't it be wiser to run the complete tests on background while the contest is still on and publish the result afterwards? You can do this while computers are idle because not that many people are submitting code so we don't have to wait 1 hour to get the final results, instead of having solutions like dividing the time constraints by two because the speed of the new computers are "approximately" equal to twice.
We do it ~2 years.
Is there some particular algorithm for the layout (not sure if it's the good word) of complete testing? I mean: a program could memorize statistics about users submissions during contest, and a submission coming from an user who make often resubmissions should have less priority than others for system testing. The complexity will be not very important, and it could decrease system testing time.
скорость их работы примерно равна удвоенной скорости старых тестирующих машин
Сомнительное высказывание... Я имел дело с низкоуровневой оптимизацией, и подобные сравнения производительности меня не убеждают=)
Некоторые олимпиадные задачи работают со скоростью работы с памятью (или кэша в более хорошем случае). Как соотносится латентность и пропускная способность памяти старых и новых компов? Поскольку частоты процессоров соотносятся примерно как 7:5, то значит остальное ускорение достигается за счёт архитектурных улучшений (на сегодняшний день это неудивительно). Одинаково ли "быстрее" стали все архитектурные элементы?
С другой стороны, если прогнали все решения с Codeforces, и в 90% случаях получается быстрее в два раза, тогда можно смело делить TL=)
Ну а замер времени при параллельном запуске двух программ — это вообще грустно=) Хорошо, что в случае TLE решение перезапускается отдельно.
I have noticed something strange:
but these two codes are completely the same. Is this behavior (System test is twice as fast as usual judging) intended?
2X is too much. My simplest codes in Java 7 used to run in 62 or 93 ms, now simple codes run in 218 ms.
Pythoner passes by...
Wouldn't it be wiser to run several solutions on the same machine (assuming the problems that most likely don't need big time) and in case it gets TLE then it gets tested on a machine w/o other solutions?
Well, yes, the time wouldn't be precise then but u know queue problem is so dreadful it is worth considering.
Sorry I have a problem , when I run my code on my PC pn Dev-C++ its answer and tasks answer is the same but when I send it to your system its different , and why ?
Меня глючит или все решения проверяются дважды? Только что отправил в дорешке задачу сразу увидел надпись полное решение и время работы, через секунду пошла проверка на тестах и тот же вердикт и время.
Is the information on the CPU used still up to date?