SORU
23 ŞUBAT 2011, ÇARŞAMBA


Üretimi birden fazla mimarileri için Mall of Sofia kodu optimize edilmiştir?

Android için düşük seviyeli sayısı çok mu bazı C kodu çatırdayan var. (Benim Android için örneğin.kullanmalı mıyım bilmek istiyorum mk ve Uygulama.mk) kodu üretilen dosyalar mevcut tüm Android cihazlar üzerinde çalışır, ancak aynı zamanda belirli bir yonga için optimizasyon yararlanır. İyi varsayılan Android arıyorum.mk ve Uygulama.ayarları kullanmak için mk ve #ifdef dalları ile C kodunu çöp zorunda kalmamak istiyorum.

Örneğin, ARMv7 ve ARMv7 NEON talimatları kayan nokta yönergeleri biraz cips destek olan ve varsayılan KOL ikisi de desteklediğini biliyorum. Bayraklar ARMv7 inşa böylece NEON, ARMv7 NEON olmadan ve varsayılan KOL ile inşa ayarlamak mümkün mü? Son ikisi nasıl yapıldığını ama 3 değil. Mevcut en güvenli varsayılan ayarlar sanırım, diğer seçenekleri var ne kullanırım ne tedbirliyim.

GCC belirli optimizasyonu için aşağıdaki bayraklar kullanıyorum:

LOCAL_CFLAGS=-ffast-math -O3 -funroll-loops

Benim kod bu hız 3 kontrol ettim. Başka bir ortak olanları ekliyorum verebilecek var mı?

Ben başka bir ipucu eklemek için "LOCAL_ARM_MODE := kol" Android.mk bir hız daha yeni arm yongaları etkinleştirmek için eski fiş üzerinde ne yapar tam olarak kafam karışık olsa da ().

CEVAP
23 ŞUBAT 2011, ÇARŞAMBA


ARM işlemciler 2 genel eğitim setleri destekledikleri var: "" ve "". Başparmak KOLU Her ikisi de farklı tatlar olmasına rağmen, KOL talimatları 32 bit ve her Parmak talimatları 16 bit vardır. İkisi arasındaki temel fark KOL talimatları Başparmak daha tek bir talimat daha çok imkanı var. Örneğin tek kollu bir öğretim ikinci kayıt üzerinde sol shift yaparken başka bir kayıt için bir kayıt ekleyin. Başparmak bir talimat vardiya yapmak zorunda kalacak, daha sonra ikinci bir talimat olarak yapın.

KOL talimatları iki kat daha iyi değildir, ama bazı durumlarda daha hızlı olabilir. Bu yeni şekillerde ayarlanabilir hangi elle sarılmış KOL Meclisinde en iyi şekilde yapmak için özellikle doğrudur "bedava vardiya". Talimatları kendi avantajı var parmak boy: onlar daha az pil drenaj.

Her neyse, bu LOCAL_ARM_MODE yapıyor - KOL talimatları yerine Parmak talimatları olarak kodunuzu derlemek anlamına gelir. Thumb için derleme küçük bir ikili oluşturma eğilimi olarak Mall of Sofia içinde varsayılan ve hız farkı en çok dikkat çeken bir kod değil. Derleyici her zaman fazladan bir "o KOLU sağlayabilir, ya da daha talimatları aynı sayıda ihtiyacı neyse sonuna kadar." çekicilik yararlanabilirsiniz.

C/C kodu KOL veya Parmak derlenmiş sizi görmek ne sonuç aynı olacak (compiler bugs engelleme).

Bu tek başına tüm Android telefon için yeni ve eski ARM işlemciler arasında uyumlu bugün. Bu varsayılan olarak Mall of Sofia "İkili Uygulama" ARM tabanlı ARMv5TE Yönerge kümesini destekleyen İşlemciler için. bir Arabirim derler çünkü. Bu ABİ "armeabi" ve açıkça uygulamada ayarlanabilir.olarak bilinirAPP_ABI := armeabi koyarak mk.

Yeni işlemciler ayrıca Android özgü ABİ armeabi Thumb-2 instruction set eklemek uzanan armeabi-v7a olarak bilinen destek ve donanım kayan nokta talimat VFPv3-D16 koydu. armeabi-v7a uyumlu CPU zamanı ve uygun olduğunda kod yollar sunan ve olmadığında da kontrol etmelisiniz. isteğe bağlı olarak NEON komut seti desteği de olabilir. Bu (Merhaba-neon) yaptığı Mall of Sofia/örnekleri dizinde bir örnek var. Kaputun altında, Başparmak-2 "KOL-gibi onun talimatları hala daha az yer kaplıyor avantajına sahip iken tek bir talimat daha ne yapabilir ki" daha doğru.

"Her ikisi de içeren armeabi ve armeabi-v7a kütüphaneler Uygulama.aşağıdaki eklersiniz "şişman bir ikili derlemek için mk:

APP_ABI := armeabi armeabi-v7a

O zaman .dosya yüklendikten muayene, Android Paket Yöneticisi aygıt için en iyi kütüphane yükler. Eski platformlarda armeabi kütüphane, ve daha yeni cihazlar üzerinde armeabi-v7a tek yükleyin.

Eğer çalışma zamanında CPU özellikleri için test etmek istiyorsanız, o zaman üniversite eğitim fonksiyonu uint64_t android_getCpuFeatures() özellikleri işlemci tarafından desteklenen almak için kullanabilirsiniz. Bu donanım kayan noktaları desteği ve gelişmiş SIMD talimatları destekleniyorsa ANDROID_CPU_ARM_FEATURE_NEON eğer v7a işlemci ANDROID_CPU_ARM_FEATURE_ARMv7 bit-bayrak, ANDROID_CPU_ARM_FEATURE_VFPv3 döndürür. KOL VFPv3, NEON olmadan var olamaz.

Özetle: varsayılan olarak, programlarınızı en uyumlu. LOCAL_ARM_MODE kullanarak işler biraz daha hızlı KOL Talimatları Kullanımı nedeniyle pil ömrü pahasına yapabilir ve varsayılan ayarlama olarak uyumludur. Yeni cihazlarda daha iyi performans olacak APP_ABI := armeabi armeabi-v7a satırı ekleyerek, daha eski olanlar ile uyumlu, ancak kalır .muayene daha büyük dosya () 2 kütüphaneler olması nedeniyle olacak. NEON talimatları kullanmak için çalışma zamanında CPU yeteneklerini tespit eden özel kod yazmak gerekir, ve bu sadece armeabi-v7a çalışan yeni cihazlar için geçerlidir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010
  • knopik96

    knopik96

    7 Mayıs 2011
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007