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

Автор Burunduk1, история, 6 лет назад, По-русски

Хочу понять, как запускать dfs на java, чтобы он работал быстро. $$$n = 2\,300\,000$$$.

Сабмит 54911336, говорит, что codeforces (windows, java32 1.8.0_162) даёт time in dfs = 126ms.

У меня локально (windows, java64 11.0.1) time in dfs = 13913ms. Разница в 100 раз!

У Petr (windows, java 1.8.0_181) 15 секунд.

Ключи запуска java -XX:NewRatio=5 -Xms8M -Xmx512M -Xss64M брал отсюда.

Ребят, у кого сколько работает? (интересно время, os/проц, версия java, ключи запуска)

Как добиться 126ms локально?)

UPD:
У меня локально добавление -XX:TieredStopAtLevel=1 (help) даёт 387ms.
Опции "ровно как на codeforces" локально на java64 работают те же 13913ms $$$\pm\varepsilon$$$. То есть, важно что на cf именно java32.

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

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

Здесь запускается так:

java -XX:+AggressiveOpts -Djava.security.egd=file:egd -Djava.security.manager -Djava.security.policy=java.policy -javaagent:invokeagent.jar -XX:NewRatio=5 -Xms8M -Xmx${(params.memoryLimit/1024/1024)?int?c}M -Xss64M -DONLINE_JUDGE=true -Duser.language=en -Duser.region=US -Duser.variant=US -jar %s

Для локального запуска полагаю -Djava.security.egd=file:egd -Djava.security.manager -Djava.security.policy=java.policy -javaagent:invokeagent.jar нужно исключить.

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

    Спасибо. Кстати, говорят "Java HotSpot(TM) 64-Bit Server VM warning: Option AggressiveOpts was deprecated in version 11.0 and will likely be removed in a future release."

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

    У меня нет под рукой комбинации windows + java 1.8

    На windows + java64 11.0.1 и ubuntu + java64 1.8.0_111 время не поменялось, те же ~14s.

    UPD: на codeforces java32

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

elizarov подсказал крутую опцию -XX:TieredStopAtLevel=1

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

Автокомментарий: текст был обновлен пользователем Burunduk1 (предыдущая версия, новая версия, сравнить).

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

Auto comment: topic has been translated by Burunduk1 (original revision, translated revision, compare)

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

Difference between your local run "exactly as on codeforces" and real Codeforces run is explained with the fact that locally you use 64-bit JRE, but we use 32-bit JRE.

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

    Thanks. I'll fix the post.

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

      That explains everything, by the way. 32bit VM only has C1 support (C2 is not supported for 32 bits VMs), so by running 64bit VM with -XX:TieredStopAtLevel=1 you essentially run it with the same compiler (C1 only) but in 64bit mode.

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

I believe that with -XX:TieredStopAtLevel=1 but without -XX:+UseSerialGC the total consumed cpu time is greater than measured in your code because GC will effectively use multiple threads. I think that with -XX:+UseSerialGC the total running time can grow a little but the total consumed cpu time will decrease noticeably. For sure, all online judges measure total time.