Başparmak talimatları performans için ARM komutlarıyla nasıl karşılaştırılır?


11

Bir meslektaş, Thumb talimatlarının ARM talimatlarından önemli ölçüde daha yavaş olduğunu belirtti (bu bir AT91SAM7S32 işlemci içindi). Bu doğru mu? Bir komutun diğerine göre performans avantajları nelerdir?

Yanıtlar:


11

Genel olarak

THUMB talimatları, bildiğim kadarıyla ARM talimatlarından daha yavaş değildir, ancak yetenek bakımından daha sınırlıdır. Kodunuz yalnızca THUMB talimatlarının işlevselliğine ihtiyaç duyuyorsa, ARM'den daha az yer kaplar, ancak aynı sayıda talimat olacak ve diğer şeyler eşit olacak şekilde aynı hızda çalışacaktır. Kodunuzun daha fazla işlevselliğe ihtiyacı varsa, yürütmek için ARM talimatlarından daha fazla THUMB talimatı gerektirecek ve daha uzun sürecek, yine diğer şeyler eşit olacak (aşağıya bakın)

THUMB, iki nedenden dolayı daha küçük boyutlu talimatlar nedeniyle mikrodenetleyicilerde popülerdir:

  1. Program alanı genellikle sınırlıdır
  2. Birçok mikro denetleyicinin dahili flaşlarına 16 bit veri yolu vardır

İkinci nedenle, kodunuz ARM komut setinden işlevsellik gerektirmediğinde, THUMB kodu aslında daha hızlı çalışır. Bunun nedeni, talimatınızın iki yerine flaştan bir G / Ç döngüsünde alınabilmesidir. Flash arayüzünüzün hızına bağlı olarak, bu ikinci okuma, CPU'nuzun basitçe durduğu ve hiçbir şey yapamayacağı her talimat için bir veya daha fazla bekleme döngüsüne neden olabilir.

Tek endişe kod yoğunluğu olan (genellikle son ARM mikrodenetleyicileri için genellikle 32-bit olarak gördüm) çalıştırmadan önce kodunuzu RAM'a kopyalayabilirseniz, bu daha az sorun haline gelir. Bunun için, birçok araç, belirli bir işlev için hangi gösterimin daha verimli olduğunu bulmaya çalışacaktır. Derleyici THUMB kodunu daha az komutla üretebiliyorsa, ancak ARM daha az komutla sonuçlanırsa ARM alırsınız. Doğru hatırlarsam Keil için varsayılan mod budur.

Özel çipiniz

Özel yonganız için (AT91SAM7S32) belgelerde, flaş denetleyicinin, işleri daha verimli hale getirmek için erişimleri tahmin edebilen ve ARM komutunun yürütülmesini iyileştirebilecek bir ön alma arabelleği bulunduğundan bahsedilir. Bununla birlikte, ön getirmenin, "Başlatma modunda çalışmak için" en uygun olan "16 bit erişimleri optimize eden" bir "çift 32 bit" arabelleği olduğunu ve hızlandırmanın amaçlanmadığını belirtiyor. ARM talimatları, ancak çekirdeğinizin THUMB modunda daha hızlı çalışmasına izin vermek için.

Şemalardan, çipinizdeki flaşın aslında 32bit veri yolu var gibi görünüyor. Prefetcher, 32 bitin tamamını okuyarak, CPU'ya 16 (THUMB modunda) vererek ve 32 bitin tamamını önbelleğe alarak çalışıyor gibi görünüyor. Bir sonraki döngüde, CPU ikinci 16 biti okuduğunda, bu sefer önbellekten, flaş denetleyicisi sonraki 32 bit'i okuyor ve önbelleğe alıyor. Bu şekilde, flaş hızı CPU çekirdek hızından biraz daha yavaş olsa bile THUMB kodu bir başlangıç ​​beklemesinden daha fazla olmadan çalışabilir. Bölüm 19.2.2 "Okuma İşlemleri" daha fazla ayrıntı içerir.

Flaşınız 32 bitlik bir veri yolu olduğundan (anlatabildiğim kadarıyla), CPU ve Flash saatleriniz aynı ise, THUMB size sadece ARM'ye göre kod yoğunluğu verecektir. CPU çekirdeğinizin Flash'tan daha hızlı çalışmasını istiyorsanız (ve not edin, bu çipin tüm zamanlamasını gözden geçirmedim; CPU'nun daha hızlı çalışabileceğini varsayıyorum çünkü bekleme durumlarını ayarlamanıza izin veriyorlar), önceden getirme bir hız veriyor gerçek flaş erişimindeki azalma nedeniyle THUMB avantajı. Bununla birlikte, bu hız avantajı talimat başına avantajdır. THUMB komutlarının vs ARM komutlarının sayısı yeterince büyükse, ARM'nin rutin başına daha hızlı olmasına neden olan talimat başına hızdan daha ağır basacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.