Я хотел бы знать, какие оптимизации циклов выполняет Oracle Java 7 (или 8) Hotspot VM?
Оптимизация циклов Oracle Java 7-8 Hotspot VM
comment
Авторы компиляторов, возможно, могли бы... но я сомневаюсь, что они бы это сделали. В любом случае, если вам действительно нужно знать, вы всегда можете скачать исходное дерево OpenJDK и разобраться в этом самостоятельно.
- person Stephen C   schedule 01.10.2015
comment
Основными из них, вероятно, будут устранение мертвого кода, развертывание циклов и подъем переменных.
- person assylias   schedule 01.10.2015
comment
@ Близкие избиратели: В какой степени это требует стороннего ресурса? Посмотрите на текущий ответ. (Конечно, в нем много ссылок, но это только указатели на устойчивый ресурс (а именно, исходники OpenJDK), и предназначенные для дальнейших исследований).
- person Marco13   schedule 03.10.2015
comment
@ Близкие избиратели: я отредактировал свой вопрос 2 дня назад. Вы можете проверить это, пожалуйста? Спасибо
- person El Marce   schedule 06.10.2015
Ответы (1)
- Устранение проверки диапазона – исключает проверку диапазона для массивов, не зависящих от циклов. См. PhaseIdealLoop: :do_range_check для подробностей. Оптимизация контролируется флагом
-XX:+RangeCheckElimination
- Очистка цикла – отделяет первую итерацию от цикла и выполняет ее за пределами тела цикла. См. замечательное описание здесь PhaseIdealLoop::do_peeling. Эта оптимизация контролируется флагом
-XX:PartialPeelLoop=true
- Предикация цикла – исключает проверку условий внутри тела цикла. В настоящее время оптимизация предикации циклов применяется для удаления проверки диапазона массива и проверки инварианта цикла (например, проверки нулевого значения и проверки массива). Предикация цикла управляется
-XX:+UseLoopPredicate
. См. код PhaseIdealLoop ::loop_predication_impl - Развертывание цикла — используется как первый шаг Параллелизм на уровне суперслов. См. PhaseIdealLoop: :do_unroll. Развертывание цикла управляется следующими свойствами:
-XX:LoopMaxUnroll=16
и-XX:LoopUnrollMin=4
. - Заполнение массива — заменяет любые шаблоны заливки на внутренний. См. PhaseIdealLoop: :do_intrinsify_fill. Вариант JVM
-XX:+OptimizeFill
- Векторизация — заменяет инициализацию массива, копирование и арифметику векторными операциями в развернутых циклах. Компилятор Hotspot реализует концепцию параллелизма на уровне суперслов в superword.cpp а>. См. также вариант JVM
-XX:+UseSuperWord
person
Ivan Mamontov
schedule
03.10.2015
вы провели здесь адское исследование! +Integer.MaxInt вам!
- person El Marce; 23.02.2016
Очень полезно! Ее дополнительная информация: VectorizaAon в HotSpot JVM Владимира Иванова, HotSpot JVM Compiler, Корпорация Oracle, 8 апреля 2017 г.
- person apete; 28.10.2017
Более свежая версия этой замечательной презентации: cr.openjdk.java.net/~ вливанов/говорит/
- person Antoine CHAMBILLE; 06.01.2021