Döngü inversion tekniği nedir?
Java için just-in-time compiler (JİT) optimizasyon teknikleri bahsediyor bir belge bakıyordum. Onlardan biri "döngü inversion". Ve belge diyor ki:
do-while
bir döngü ilewhile
düzenli bir döngü değiştirin. Ve 4* *döngüif
hükmü yer almaktadır. Bu yeni iki tane daha az atlar yol açar.
Nasıl döngü inversion iş yapar ve nasıl kod yolumuz optimize mu?
N. B.:Eğer birisi modern işlemciler Java kod örneği ve JİT yerel kod optimize eder nasıl ve neden en uygunudur bunu açıklayabilir eğer çok iyi olurdu.
CEVAP
while (condition) {
...
}
İş akışı
- kontrol durumu;
- eğer yanlış bir döngü dışarı atlamak;
- bir yineleme;
- üstüne atlamak.
if (condition) do {
...
} while (condition);
İş akışı
- kontrol durumu;
- false, loop ötesine atlamak;
- bir yineleme;
- kontrol durumu;
- doğru, adım 3'e atlayın.
Karşılaştırma bu iki sen-ebilmek kolayca görmek ikincisi olmayabilir herhangi atlar, sağlanan bu tam olarak bir adım döngü, ve genellikle numarasının atlar olacak bir daha az sayıda yineleme. Eski geri durumunu kontrol etmek için atlamak için tek koşul yanlış olduğunda döngü dışarı atlamak zorunda.
Mimarileri oldukça pahalı olabilir modern olmayanın CPU üzerine atlar: CPU başlamadan önce kontrolleri yürütme terbiye olduğu için, o atlamak zaten boru hattının tam ortasında ötesinde talimatları. Tüm bu işleme ise şube tahmin başarısız olursa atılmalıdır. Ayrıca yürütme boru hattı reprimed edilirken gecikir.
Açıklamayı bahsettitahmin şube: koşullu her çeşit İŞLEMCİ var atlamakikitalimatlar, her dahilbahissonucu hakkında. Örneğin, bir yönerge mi olur "değilse sıfır, sıfır bahis atlamakatlama her yineleme üzerinde yapılması gerekir, çünkü " bir döngünün sonuna sonuncusu hariç. Bu şekilde CPU talimatları atlama atlama izleyenler yerine hedef aşağıdaki Yönerge kendisi ile olan boru hattı pompalama başlar.
ÖNEMLİ NOT
Yapın lütfendeğilkaynak kodu düzeyinde optimize etmek için nasıl bir örnek olarak alın. Zaten sorunuzu net olarak ikinci ilk formdan dönüşümü JİT derleyici rutin bir işlem olarak yaptığı bir şey olduğu için tamamen yanlış, tamamen kendi başına olacaktır.
Kontrol İnversion nedir?...
Bir "sıkı bir döngü" nedir?...
Üzerinden pandalar ile dataframes döng...
Tam "için" C (ve uyumlu olma...
Bir döngü değişmeyen nedir?...