Vorrei sapere quali sono le ottimizzazioni del ciclo eseguite da Oracle Java 7 (o 8) Hotspot VM?Oracle Java 7-8 Hotspot VM
5
A
risposta
12
- Range Check Elimination - elimina i controlli di intervallo per gli array loop-invarianti. Vedi PhaseIdealLoop::do_range_check per i dettagli. L'ottimizzazione è controllata dalla bandiera
-XX:+RangeCheckElimination
- Loop Peeling - suddivide la prima iterazione dal loop e la esegue all'esterno del corpo del loop. Vedere la descrizione sorprendente qui PhaseIdealLoop::do_peeling. Questa ottimizzazione è controllata dal flag
-XX:PartialPeelLoop=true
- Loop Predication - elimina i controlli di condizione dall'interno del corpo del loop. Attualmente, l'ottimizzazione della previsione del ciclo è stata applicata per rimuovere i controlli di intervallo dell'array e del ciclo invariante (come assegni nulli e controlli di array). La previsione del loop è controllata dallo
-XX:+UseLoopPredicate
. Vedi codice PhaseIdealLoop::loop_predication_impl - Loop Unrolling - viene utilizzato come primo passo di Superword Level Parallelism. Vedi PhaseIdealLoop::do_unroll. Lo srotolamento del ciclo è controllato dalle seguenti proprietà:
-XX:LoopMaxUnroll=16
e-XX:LoopUnrollMin=4
- Riempimento di matrice: sostituisce qualsiasi schema di riempimento con un'introduzione. Vedi PhaseIdealLoop::do_intrinsify_fill. Opzione JVM
-XX:+OptimizeFill
- Vettorizzazione: sostituisce l'inizializzazione dell'array, la copia e l'aritmetica con le operazioni vettoriali in loop srotolati. Il compilatore Hotspot implementa il concetto di Superword Level Parallelism in superword.cpp. Vedi anche l'opzione JVM
-XX:+UseSuperWord
+0
hai fatto un sacco di ricerche qui! + Integer.MaxInt per te! –
+0
Molto utile! Ecco alcune informazioni complementari: [VectorizaAon in HotSpot JVM per Vladimir Ivanov, Compilatore HotSpot JVM, Oracle Corp. 8 aprile 2017] (http://cr.openjdk.java.net/~vlivanov/talks/2017_Vectorization_in_HotSpot_JVM.pdf) – apete
Gli autori del compilatore potrebbero forse ... ma dubito che lo farebbero. Ad ogni modo, se hai davvero bisogno di sapere, puoi sempre scaricare l'albero dei sorgenti OpenJDK e scoprirlo da solo. –
Le principali saranno probabilmente l'eliminazione del deadcode, lo srotolamento del loop e il sollevamento variabile. – assylias
@ Gli elettori vicini: in che misura si tratta di una risorsa esterna al sito? Guarda la risposta attuale. (Naturalmente, contiene molti collegamenti, ma questi sono solo indicatori di una risorsa duratura (vale a dire, il sorgente OpenJDK) e destinati a ulteriori ricerche). – Marco13