2015-10-01 23 views
5

Vorrei sapere quali sono le ottimizzazioni del ciclo eseguite da Oracle Java 7 (o 8) Hotspot VM?Oracle Java 7-8 Hotspot VM

+3

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. –

+0

Le principali saranno probabilmente l'eliminazione del deadcode, lo srotolamento del loop e il sollevamento variabile. – assylias

+4

@ 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

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