When measuring time consumed by your strategies, we use total cpu time across all thread. This means, e.g. that we also include time for GC and JIT. JIT, especially, has proven to be the bottleneck for Kotlin. So, thanks to our participants, another runtime for Java and Kotlin is now available - GraalVM native compilation.
This may improve your strategy a lot, if you are near the limit. If you submit as archive, your pom.xml
needs to be updated as seen in the repository.
Saint Petersburg
Очень крутая штука, у меня время стратегии на котлине упало в 10 раз и стало нормально измеримо из самой страты через System.currentTimeMillis(). Потребление памяти упало в 5 раз
Saint Petersburg
Еще бы запилить для GraalVM языковые иконки отличающиеся от стоковых Java\Kotlin как сделанно для PyPy так сказать что бы рекламировалось лишний раз, и было меньше раздумий почему у топа на джаве так быстро считается
.>
Tula
Здравствуйте! И как этим пользоваться на примере java? Просто подменить файл pom.xml?
Здравствуйте! И как этим пользоваться на примере java? Просто подменить файл pom.xml?
Подменить файл и выбрать компилятор с GraalVM при посылке
Подменить файл и выбрать компилятор с GraalVM при посылке
А где компилятор выбирается при посылке?
А где компилятор выбирается при посылке?
Попробовал с GraalVM на java. Мне, к сожалению, особо не помогло. Но хотя бы стратегия прошла верификацию. Надо было на C++ писать. :)
Moscow
Очень крутая штука, у меня время стратегии на котлине упало в 10 раз и стало нормально измеримо из самой страты через System.currentTimeMillis(). Потребление памяти упало в 5 раз
у меня на java тоже памяти стало заниматься в несколько раз меньше и потребляемое время стало похожим на то, что замеряется собственно в самом классе MyStrategy
Попробовал с GraalVM на java. Мне, к сожалению, особо не помогло. Но хотя бы стратегия прошла верификацию. Надо было на C++ писать. :)
Если время внутри стратегии сильно отличается от измеренного системой и используется GraalVM, то надо смотреть в сторону GC. Я вчера так просадил секунд на 10 свою стратегию из-за слишком сильного выделения памяти.
Если время внутри стратегии сильно отличается от измеренного системой и используется GraalVM, то надо смотреть в сторону GC. Я вчера так просадил секунд на 10 свою стратегию из-за слишком сильного выделения памяти.
В общем соревнование сводится не к сражению стратегий, а к оптимизации настроек компиляторов.. Вообще странно иметь одинаковые ограничения по времени и объему для столь разных языков.
В общем соревнование сводится не к сражению стратегий, а к оптимизации настроек компиляторов.. Вообще странно иметь одинаковые ограничения по времени и объему для столь разных языков.
Одинаковые условия для всех языков - это норма в спортивном\около-спортивном программировании.
Дальше ИМХО:
Да и в целом кажется честным.
Этот аспект заодно несет и “просветительскую” пользу - люди задумываются о производительности своих решений и языков, о разных компиляторах их особенностях и плюсах. Такое расширение кругозора исключительно полезно и косвенно должно принести пользу и в промышленном программировании, приложения будут потреблять меньше ресурсов, работать эффективнее и т.д.
Одинаковые условия для всех языков - это норма в спортивном\около-спортивном программировании. Дальше ИМХО: Да и в целом кажется честным. Этот аспект заодно несет и “просветительскую” пользу - люди задумываются о производительности своих решений и языков, о разных компиляторах их особенностях и плюсах. Такое расширение кругозора исключительно полезно и косвенно должно принести пользу и в промышленном программировании, приложения будут потреблять меньше ресурсов, работать эффективнее и т.д.
Может вы правы. Я узнал много нового . .Но когда сборщик мусора (скорее всего он) вдруг внезапно валит стратегию, это нервирует. Особенно бесит, когда после оптимизации стратегия не проходит верификацию и непонятно, что делать. Так что, следующие соревнования только на С++.
Может вы правы. Я узнал много нового . .Но когда сборщик мусора (скорее всего он) вдруг внезапно валит стратегию, это нервирует. Особенно бесит, когда после оптимизации стратегия не проходит верификацию и непонятно, что делать. Так что, следующие соревнования только на С++.
Я вижу вы заливаете стратегию как обычную джаву попробуйте Java GraalVM, нужно заливать с другим pom.xml, а все остальное должно работать так же как и с обычной джавой. скорее всего проблемы со временем уйдут совсем и JIT с GC не будут проблемой
Локально на свой пк ставить graalvm не обязательно, можно продолжать тестировать на обычном jvm
PS: GC становится проблемой если создавать прям очень много объектов, тут на раике основная проблема это JIT - тут можно посмотреть детали - https://github.com/MailRuChamps/raic-2020/issues/106
Saint Petersburg
тут кстати создал связанный фича реквест : ставим лайки что бы кувиман увидел :) https://github.com/MailRuChamps/raic-2020/issues/114 [Feature request] Заменить иконки для Java\Kotlin GraalVM на отличимые
Я вижу вы заливаете стратегию как обычную джаву попробуйте Java GraalVM, нужно заливать с другим pom.xml, а все остальное должно работать так же как и с обычной джавой. скорее всего проблемы со временем уйдут совсем и JIT с GC не будут проблемой Локально на свой пк ставить graalvm не обязательно, можно продолжать тестировать на обычном jvm …
Что-то я совсем запутался. Скачал с Github Java-GraalVM-native взял оттуда pom.xm и подменил им файл в базовой стратегии с сайта AICUP. Верификатор выдал ошибку компиляции: Или я что-то делаю не так? Может еще какие-то файлы надо править/добавить? Log ниже: tdout: [INFO] Scanning for projects… [INFO] [INFO] ————–< com.codegame.aicup2020.devkit:aicup2020 >————— [INFO] Building aicup2020 1.0-SNAPSHOT [INFO] ——————————–[ jar ]——————————— [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/graalvm/nativeimage/native-image-maven-plugin/20.2.0/native-image-maven-plugin-20.2.0.pom [INFO] ———————————————————————— [INFO] BUILD FAILURE [INFO] ———————————————————————— [INFO] Total time: 11.797 s [INFO] Finished at: 2020-12-17T19:38:26Z [INFO] ———————————————————————— [ERROR] Plugin org.graalvm.nativeimage:native-image-maven-plugin:20.2.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.graalvm.nativeimage:native-image-maven-plugin:jar:20.2.0: Could not transfer artifact org.graalvm.nativeimage:native-image-maven-plugin:pom:20.2.0 from/to central (https://repo.maven.apache.org/maven2): Transfer failed for https://repo.maven.apache.org/maven2/org/graalvm/nativeimage/native-image-maven-plugin/20.2.0/native-image-maven-plugin-20.2.0.pom: Unknown host repo.maven.apache.org: Name or service not known -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
stderr: + ‘[‘ compile ’!=‘ base ’]’ ++ ls -1 /src/ ++ wc -l + 2 -eq 1 + rm -rf ./Dockerfile ./compile.sh ./pom.xml ./run.sh ./src ./target + cp -rf /src/pom.xml /src/src ./ + mvn package –batch-mode
Что-то я совсем запутался. Скачал с Github Java-GraalVM-native взял оттуда pom.xm и подменил им файл в базовой стратегии с сайта AICUP. Верификатор выдал ошибку компиляции: Или я что-то делаю не так? Может еще какие-то файлы надо править/добавить? Log ниже: tdout: [INFO] Scanning for projects… [INFO] [INFO] ————–< com.codegame.aicup2020.devkit:aicup2020 >————— [INFO] Building aicup2020 1.0-SNAPSHOT [INFO] ——————————–[ jar ]——————————— [INFO] Downloading from central: …
А при отсылке стратегии выбрали Java(GraalVm) в выпадающем списке? Если выбрать просто Java то будет ошибка как у вас кажется.
А при отсылке стратегии выбрали Java(GraalVm) в выпадающем списке? Если выбрать просто Java то будет ошибка как у вас кажется.
Вот это я лажанулся.. Нет не менял.. Спасибо! Поменял и верификатор сразу пропустил. 2 дня потерял на это. :). Стратегия продолжает вылетать по лимиту времени в играх, но вроде стало полегче. :Буду дальше разбираться.
Вот это я лажанулся.. Нет не менял.. Спасибо! Поменял и верификатор сразу пропустил. 2 дня потерял на это. :). Стратегия продолжает вылетать по лимиту времени в играх, но вроде стало полегче. :Буду дальше разбираться.
Это оказывается старая попытка доигрывала, поэтому разницы не заметил. А в новой общее время работы за игру упало с 40 сек упало до 2сек, т.е. в 20раз. Так что, все норм. Большое спасибо.
Yandex
Если вы шлете архив, ваш pom.xml стоит обновить соответственно (смотрите в репозиторий).
А если отправляю только MyStrategy.kt и выбираю Kotlin (GraalVM), то все должно заработать? Отправляю один и тот же MyStrategy.kt выбирая “Kotlin” и решение принимается. Выбираю “Kotlin (GraalVM)” и проходит проверку один раз из 3-4. Сообщение при этом “Player crashed: IO error: failed to fill whole buffer” - означает ли это, что произошел краш в работе стратегии или она крашнулась из-за проблем с time limit?
А если отправляю только MyStrategy.kt и выбираю Kotlin (GraalVM), то все должно заработать? Отправляю один и тот же MyStrategy.kt выбирая “Kotlin” и решение принимается. Выбираю “Kotlin (GraalVM)” и проходит проверку один раз из 3-4. Сообщение при этом “Player crashed: IO error: failed to fill whole buffer” - означает ли это, что произошел краш в работе стратегии или она крашнулась из-за проблем с time limit?
Player crashed: IO error: failed to fill whole buffer - это на самом сервере какие-то затыки, Обычно падает у всех 4-х участников
Очень крутая штука, у меня время стратегии на котлине упало в 10 раз и стало нормально измеримо из самой страты через System.currentTimeMillis(). Потребление памяти упало в 5 раз
А вы какие-то манипуляции проводили перед отправкой? Отправляю один и тот же MyStrategy.kt в “Kotlin” и в “Kotlin (GraalVM)”. В первом проходит по времени, во втором TLE. Локальные раны укладываются в 6 секунд в сражении со своей же стратегией. Но дальнейшие улучшения уже не влазят и при отправке в “Kotlin”.
А вы какие-то манипуляции проводили перед отправкой? Отправляю один и тот же MyStrategy.kt в “Kotlin” и в “Kotlin (GraalVM)”. В первом проходит по времени, во втором TLE. Локальные раны укладываются в 6 секунд в сражении со своей же стратегией. Но дальнейшие улучшения уже не влазят и при отправке в “Kotlin”.
Безотносительно того что сама система с третьего раза в среднем принимает страту (из за отказа тестирования) - У меня были таймлимиты в некоторых сценариях проверки, в духе Раунд1 против пустых врагов, из-за бажной логики.
Могу порекомендовать попробовать
1) обложиться логами которые будут на верификации показывать что конкретно тормозит, мб какое-то место (поиск пути например) вызывается неожиданное количество раз 2) что бы пройти верификацию и посмотреть как оно играет в обычных играх - можно добавить условие - в духе если общее время больше 35с, то отдавать пустой ответ. 3) локально потестировать в режиме Раунд1 против пустых противников с граалем
Безотносительно того что сама система с третьего раза в среднем принимает страту (из за отказа тестирования) - У меня были таймлимиты в некоторых сценариях проверки, в духе Раунд1 против пустых врагов, из-за бажной логики. Могу порекомендовать попробовать 1) обложиться логами которые будут на верификации показывать что конкретно тормозит, мб какое-то место (поиск пути например) вызывается неожиданное количество раз 2) что бы пройти верификацию и посмотреть как оно играет в обычных играх - можно добавить условие - в духе если общее время больше 35с, то отдавать пустой ответ. 3) локально потестировать в режиме Раунд1 против пустых противников с граалем
Начал писать логи: с граалем на сервере упирается в лимит за 350-450 тиков, без него - за 750. Затраченное время на конкретные операции в обоих запусках сопоставимо, подход к лимиту по времени плавный, просто с граалем скорость выше. Локально пока не научился собирать, мб попадаю на какие-нибудь слабые места.