SORU
6 ŞUBAT 2011, Pazar


İyileştirmeler ben Dalvik ve Android araç zinciri ne bekleyebilirsiniz?

Üzerinde çalışıyorum, yüksek performanslı bir Android Uygulama (bir oyun), ama ben denemek için kod okunabilirliği ilk hoşuma gidiyor, arkasında kafamda bir resim ne oluyor başlık altında. C ile , derleyici ve benim için yapmayacağım şey hakkında oldukça iyi bir önsezi geliştirdim. Java/Android için aynı şeyi yapmaya çalışıyorum.

Bu soru bu yüzden. Web'de bu konu hakkında çok az şey bulabildim. Java derleyicisi, Dalvik dönüştürücü (dx) ve/veya Titreme (Android 2.2 ) aşağıdaki gibi iyileştirmeler yapacak?

  • Yöntem satır içi uygulaması. Hangi koşullarda? private yöntemler her zaman güvenli bir şekilde inlined olabilir; bu yapılır mı? Nasıl 1* *yöntem hakkında? Diğer sınıfların nesneleri, yöntemleri? static yöntemler? Eğer nesne çalışma zamanı tür kolayca derleyici ile çözülebileceğine ne? Mümkün olan her yerde final static gibi yöntemleri bildirmek gerekir mi?

  • Ortak alt ifade elemesi. Örneğin, ben someObject.someField iki kez erişim, arama sadece bir kez yapılır? Eğer bir alıcı için bir telefon varsa? Eğer bazı aritmetik ifade iki kez, sadece bir kez değerlendirilir bunu kullanırsam ne olur? Ne olursa değiştirmek için olmadığını biliyorum olan bazı ifade, sonuç, for bir döngü üst bağlı?

  • Yasak dizisi aramaları kontrol etmek. Araç zinciri for prototip döngü gibi belirli koşullar içinde bu ortadan kaldıracak?

  • Değer satır içi uygulaması. public static final int bazı erişimleri her zaman inlined olacak? Eğer başka bir sınıfta olmaları daha? Eğer başka bir paket varsa bile?

  • Tahmin şube. Ne kadar büyük bir sorun bu mudur? Büyük bir performans tipik bir Android cihazda darbe dallanma?

  • Basit aritmetik. someInt * 2 someInt << 1 ile değiştirilecektir?

Vesaire vesaire...

CEVAP
8 ŞUBAT 2011, Salı


Bu Ben, mühendisler JİT @ Google için çalışan biridir. Bill ve ben başladı bu proje, bu amaç için teslim bir çalışma, TAM zamanında, en kısa sürede mümkün olan en az etki için kaynak çakışması (örneğin, bellek kullanımı, CPU tarafından kaçırıldı derleyici thread) böylece çalıştırabilirsiniz düşük-uç cihazlar. Bu nedenle çok ilkel izleme tabanlı bir model kullandık. Yani, derleme varlık JİT derleyici geçirilen bir hukukçu, bazen kısa olarak tek bir ders vardır. Bu izleri birlikte bir teknik sözlü ve kod önbellek araması sıklıkla çağrılan olmayacak, böylece zincirleme adı verilen çalışma zamanında dikişli olacaktır. Bir dereceye kadar hızlanma en önemli kaynağı tekrarlanan tercüman ortadan yükü sık sık idam kod yolları üzerinde ayrıştırma geliyor.

Bu, pek çok yerel bir optimizasyon Froyo JİT ile uygulanan var " dedi

  • Ayırma (JİT Başparmak kodu / 16 üretir beri v5te hedef için 8 kaydeder v7 Kayıt) Kayıt
  • Zamanlama (ld/st Dalvik kayıtları için eleme eg gereksiz, yük kaldırma, mağaza batan)
  • Gereksiz boş ortadan kaldırılması, eğer bu fazlalık temel bir blok içinde bulunabilir (varsa) kontrol edin.
  • İlmek oluşumu ve basit sayılır döngüler için optimizasyon (yani hiçbir döngü vücutta yan çıkış). Bu tür döngüler için, dizi erişimi genişletilmiş indüksiyon değişkenlere göre boş ve Aralık kontrolleri sadece döngü girişi yapılmaktadır, böylece optimize edilmiştir.
  • Zamanında sanal callsite w/ dinamik düzeltme her bir giriş içi önbellek.
  • Gözetleme deliği optimizasyon mul için değişmez işlenenler giderici güç/div gibi.

Gösterişli ve alıcı/ayarlayıcı için basit satır içi uygulaması ekledik. Alttaki JİT önyüz hala basit olduğu için izleme aranan inlined olmayacak orada Şubesi varsa göre. Ama içi önbellek mekanizması sanal alıcı/ayarlayıcı sorunsuz inlined böylece uygulanır.

Şu anda derleyici kod analizi ve Optimizasyonu için daha büyük bir pencere vardır, böylece basit bir izleme ötesinde derleme kapsamı genişleyen üzerinde çalışıyoruz. Bizi izlemeye devam edin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • Major FX

    Major FX

    6 HAZİRAN 2012
  • TouchePro

    TouchePro

    27 EYLÜL 2007