1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

AVX2 и SSE4.2 инструкции в сервере

Тема в разделе "Оффтопик", создана пользователем R.G.SL!M, 18 май 2019.

  1. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    Хотел бы обсудить рентабельность использования данных инструкций.
    Есть мысль переписать ядро сервера с использованием данных инструкций...
    Имеет ли смысл?
    И какие инструкции лучше использвать?
    А также какую версию?
     
  2. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Это ты щас зарофлил так?)
     
  3. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    Нет, я серьезно
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
  5. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    А какое отношение инструкция проца имеет к серверу?
     
  6. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    Поясните
     
  7. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    AVX2 позволяет выполнять одновременно 4 действия на одном ядре
     
  8. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    Действительно сказочный. Каким образом ты заставишь java-ядро выполнять эту инструкцию?
     
  9. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    1) В Java есть специальные библиотеки от Intel для работы с данными инструкциями
    2) В Java8 и выше добавлена поддержка ассемблерных вставок
    3) Вы хоть читали про AVX2 и SSE4.1?
     
  10. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    Последние сборки той же губки довольно хорошо работают многопоточно
    Это раньше с многопоточностью было... плохо
    Сейчас, кончено, не идеал, НО! уже намного лучше и из 40 ядер (2а процессора) загрузил смело 12 логических ядер
     
  11. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    Для сравнения, AfterEffects загрузил только 10 ядер
     
  12. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    1) Ни разу не слышал об этом.
    2) Что это тебе даст?
    3) Да
     
  13. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    1) Жаль, вот, например, статьи:
    http://prestodb.rocks/code/simd/
    https://astojanov.github.io/blog/2017/12/20/scala-simd.html
    2) Прирост производительности чуть ли не в 4 раза при выполнении однотипных задач (а сервер, пробегаясь по чанкам, именно такие задачи и делает).
    Также я НЕ предлагаю полностью переписать код сервера (это долго, глупо и никому не нужно), а изменить подобные функции на SIMD, можно даже аналог промежуточного компилятора написать
    3) Видимо немного, раз спрашиваете о пользе, ведь многие сервера держат на VDS с Intel XEON. Что позволяет реализовать AVX2, позволяющий использовать одновременно до 4х комманд на ядро...
     
  14. Nikolai_Faint

    Nikolai_Faint Активный участник Пользователь

    Баллы:
    96
    Перечитал статьи, действительно использование этой технологии ускоряет обработку информации. Сказочный тут только я. Впредь буду лучше искать информацию, спасибо.
     
  15. MaksGruw

    MaksGruw Старожил Пользователь

    Баллы:
    103
    Во-первых, вы сами эти статьи читали? В первой же говорится, что для использования SIMD достаточно врубить флаг -XX:UseSuperWord, который и так врублен по умолчанию. Т.е. SIMD уже юзается по дефолту.
    Во-вторых, вы думаете, ни одна JVM не может их использовать сама? Время не стоит на месте, а оптимизировать JVM (хотя б в пределах OpenJDK) никто никому не мешает.
    Во-третьих, все ваши оптимизации может запороть JIT и специфика Java Memory Model. Увы, но такие оптимизации нужно доказывать, замерять через JMH, иначе вы угробите производительность этими преждевременными оптимизациями. Поэтому, либо вы должны знать все доклады Шипилёва наизусть, либо не тратьте время на эту ассемблерную магию (есть много примеров, когда ассемблерные вставки в плюсах и переписывание под указатели портит характеристики) и лучше займитесь более полезным делом: сделайте разбиение на ядра через ForkJoinPool.
     
    Последнее редактирование: 18 май 2019
  16. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    Выделенные далеко не у всех
    Да и выделенные используют Intel Xeon/Core
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Держи в курсе.
     
  18. Автор темы
    R.G.SL!M

    R.G.SL!M Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    SlimRG
    Шипилёва я знаю почти наизусть
    А также некоторых других разработчиков
    Абсолютно согласен с тем, что есть высокая вероятность получить отрицательный профит.
    Однако, если делать грамотно можно получить прирост, т. к. программа все же неживая
     
  19. MaksGruw

    MaksGruw Старожил Пользователь

    Баллы:
    103
    А как насчет первых двух пунктов? И уверены ли вы, что вам действительно нужны эти микрооптимизации?
    Думать на жабе как сишник -- плохое дело. Тут из-за JIT и компилятора оптимизации не такие, как там. И вы не можете "отрубить -O2".
     
  20. MaksGruw

    MaksGruw Старожил Пользователь

    Баллы:
    103
    Извините, но лично мое мнение таково: смысла во всех этих включений инструкций нет.
    В вашей квалификации я не могу не сомневаться, поскольку перед созданием темы должно было ознакомиться с тем, что поддерживает ваша любимая JVM. Заметьте, всё вами желаемое уже поддерживается средствами JVM: вам не нужно было обо всем этом задумываться.

    Например, OpenJDK 9 поддерживает AVX-512: http://hg.openjdk.java.net/jdk9/jdk9/hotspot/rev/bd72804c91d6
    Надо ли говорить вам, что уже давно состоялся релиз Java 11, которая у нас тоже LTS наряду с 8?
    [​IMG]

    Конечно, JIT не всегда оперативно может векторизовать тот или иной кусок кода.
    Но и вручную средствами JNI/нативщины внедрять принудительную поддержку не всегда вариант, поскольку на эту тему даже писан научный труд: https://arxiv.org/abs/1412.6765.
    К тому же, вы теряете кроссплатформенность: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6526380.
     
    Последнее редактирование: 19 май 2019

Поделиться этой страницей