Блог пользователя MikeMirzayanov

Автор MikeMirzayanov, 11 лет назад, По-русски

Ура-ура!

Мы двигаемся вперед по ускорению тестирования. В самом деле, когда на раунд регистрируются 3500+ участников, то тяжело успеть протестировать всё на 9 компьютерах Core 2 Duo E6750, 2.66 Ghz, 3Gb памяти.

Как я уже писал, у СГУ недавно появился замечательный класс с 20ю новенькими i5-3470, 8Gb. После небольшого исследования оказалось, что если подразогнать их множителем до 3.5Ghz (конечно, отключив всякие turbo boost и проведя многочасовое исследование на стабильность работы в таком режиме), то скорость их работы примерно равна удвоенной скорости старых тестирующих машин. Это очень удобно, так как позволит в будущем просто поделить все ограничения по времени в задачах на 2.

Только что мы перевели тестирование на использование новой техники, и тестирование осуществляется пока в режиме совместимости. Это значит, что все ограничения времени перед запуском программы делятся на 2, программа исполняется, а в конце время её работы умножается на 2. На самом деле, если вы не используете отсечения по времени или еще какие-то сомнительные трюки, то особой разницы вы можете и не обнаружить.

Старые тестирующие компьютеры в настоящее время не используются.

Если быть предельно точным, то новые компьютеры всё-таки отстают от 2x старых. То есть в режиме совместимости нормально заметить небольшое падение скорости выполнения.

  • Проголосовать: нравится
  • +104
  • Проголосовать: не нравится

»
11 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

То есть, старый кластер больше при тестировании использоваться не будет? Раз уж Вы заговорили про "сомнительные трюки", то будет очень плохо, если участник не будет знать, на какой машине его решение будет тестироваться.

И, если на то пошло, почему бы просто не поделить таймлимиты для всех задач на 2 и не вводить в систему подобные костыли?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится

    Старый кластер в настоящее время для тестирования Codeforces не используется. Если всё пойдет по плану, то больше и не будет использоваться.

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

    На i5-3470, 8Gb в режиме совместимости.

    ...почему бы просто не поделить таймлимиты...

    Конечно, чуть позже так и сделаем. Для этого надо кое-что внедрить в problem-descriptors (видимо, атрибут cpuinfo), добавить поддержку в invoker-ах и других компонентах. В настоящее время я вроде как нахожусь на отдыхе, и всё это сделать прям сейчас возможности нет. Кроме того, режим совместимости дает возможность в случае каких-то сложностей быстренько откатиться к старому кластеру. Убедимся, что все ОК, внедрим по полной. Последний раунд показал, что медлить с ускорением тестирования не стоит.

»
11 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

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

»
11 лет назад, # |
  Проголосовать: нравится +45 Проголосовать: не нравится

А start-up java машины тоже в два раза быстрее?

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Почему-то нет. Я пробовал даже скопировать JRE на ramdisk.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +41 Проголосовать: не нравится

      Тогда стоит обойтись без сверхнизких тл (типа 1 секунды, которая првратится в половину)

»
11 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

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?

»
11 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

hope this solves the problem of long queues during contests! :)

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

На всякий случай: правда, что это касается в том числе и ближайших соревнований (CF Round 194, например)?

»
11 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

Great !!! Hope there will be no "long time in queue" problem now.... :D

»
11 лет назад, # |
Rev. 4   Проголосовать: нравится +5 Проголосовать: не нравится

Раньше-718мс, сейчас-1934мс. Так и должно быть?

upd: GNU C++ тоже долго-1840мс

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Может быть различие из-за разных компиляторов. Попробуй снова на GNU C++

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Добавил пробел. 966ms 4174804

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Наверно, используются все-таки как новые компьютеры, так и старые...

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Да, такой эффект был из-за некоторых кэшей. Почистил их.

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится +72 Проголосовать: не нравится

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.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +22 Проголосовать: не нравится

    We've improved some settings. Now the results are much closer. I've rejudged your older solutions, you may check it.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +16 Проголосовать: не нравится

      Now my D from CR #194 pass in time...

      • »
        »
        »
        »
        11 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        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?

»
11 лет назад, # |
  Проголосовать: нравится +4 Проголосовать: не нравится

Никогда не читал на чем работает codeforces, но меня удивило, что это всего 9 машин для тестирования. Не понимаю, почему под такой крутой ресурс никто не может выделить хорошее оборудование?

»
11 лет назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

А в запуске будет показано реальное время или умноженное на 2?

»
11 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Время все таки не хило скачет.

Старая посылка: 500ms

Новые посылки, подряд: 904,1434(!),780,654, 716

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Возможно, это связано с параллельным тестированием на двух ядрах. Кэш они делят, поэтому происходит сильный разбор по времени. А вот если кто-то получил TL, то он перезапускается в эксклюзивном режиме. К сожалению, с таким подходом отсечение по времени и информация по времени работы несут на порядок меньшую ценность.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Да, это так. Но в данном случае не очевидно, что виной именно параллельное тестирование. Я воспроизвел ситуацию — в самом деле разброс существенный. Во время контеста не понятно влияет ли параллельное тестирование или другие причины. Будем изучать.

»
11 лет назад, # |
Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

Это значит, что все ограничения времени перед запуском программы делятся на 2, программа исполняется, а в конце время её работы умножается на 2.

Мне кажется, или надо делать что-то одно?

Upd: а в конце время её работы умножается на 2. Наверное, это делается после вынесения вердикта. Если так, то так и нужно написать.

»
11 лет назад, # |
  Проголосовать: нравится +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.

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +16 Проголосовать: не нравится

    We do it ~2 years.

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      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.

»
11 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

скорость их работы примерно равна удвоенной скорости старых тестирующих машин

Сомнительное высказывание... Я имел дело с низкоуровневой оптимизацией, и подобные сравнения производительности меня не убеждают=)

Некоторые олимпиадные задачи работают со скоростью работы с памятью (или кэша в более хорошем случае). Как соотносится латентность и пропускная способность памяти старых и новых компов? Поскольку частоты процессоров соотносятся примерно как 7:5, то значит остальное ускорение достигается за счёт архитектурных улучшений (на сегодняшний день это неудивительно). Одинаково ли "быстрее" стали все архитектурные элементы?

С другой стороны, если прогнали все решения с Codeforces, и в 90% случаях получается быстрее в два раза, тогда можно смело делить TL=)

Ну а замер времени при параллельном запуске двух программ — это вообще грустно=) Хорошо, что в случае TLE решение перезапускается отдельно.

»
11 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

I have noticed something strange:

  • 4185223 (submitted during the contest, 592 ms)
  • 4188247 (submitted after the contest, 1248 ms)

but these two codes are completely the same. Is this behavior (System test is twice as fast as usual judging) intended?

»
11 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится

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.

»
11 лет назад, # |
  Проголосовать: нравится -28 Проголосовать: не нравится

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.

»
11 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится

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 ?

»
11 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится

Меня глючит или все решения проверяются дважды? Только что отправил в дорешке задачу сразу увидел надпись полное решение и время работы, через секунду пошла проверка на тестах и тот же вердикт и время.

»
3 года назад, # |
  Проголосовать: нравится +8 Проголосовать: не нравится

Is the information on the CPU used still up to date?