SORU
21 Mayıs 2011, CUMARTESİ


Eğer kayıtları cayır cayır yanan hızlı eğer öyleyse, neden't onları daha fazla yok?

32 bit, 8 geçirdik "genel amaçlı" kaydeder. 64 bit, miktarı iki katına çıkar, ama 64 bit bağımsız görünüyor kendisi ile değiştirin.
Şimdi, Eğer kaydeder kadar çabuk memory access) ise, o zaman neden onlardan daha fazla doğal değil mi? İŞLEMCİ üreticileri İŞLEMCİ içine mümkün olduğunca çok sayıda kaydeder çalışması gerekmez mi? Biz sadece sahip olduğumuz miktarda neden mantıklı kısıtlama nedir?

CEVAP
21 Mayıs 2011, CUMARTESİ


Sadece kayıtları büyük bir numarası yok birçok nedeni var:

  • En çok boru hattı aşamaları ilişkililer. Yeni başlayanlar için, onların yaşam izlemek gerekir, ve ileri geri önceki aşamaları için sonuçlar. Karmaşıklığı inatçı çok hızlı bir şekilde alır, ve teller (kelimenin tam anlamıyla) sayısı dahil aynı oranda artar. Sonuçta belli bir noktadan sonra güç, fiyat ve performans üzerinde pahalı demektir alana pahalı.
  • Yukarı talimat alan kodlama alır. 16 kaydederse 3-işlenen talimatları (e.varsa kaynak ve hedef için 4 bit, ve başka bir 4 kaplıyor g ARM). Bu komut kümesi kodlama alanı sadece kayıt belirtmek için alınması çok zor. Bu sonuçta kod çözme, kod boyutu ve tekrar karmaşıklığı etkiler.
  • Aynı sonuca ulaşmak için daha iyi yollar var...

Bu gün gerçekten çok kaydeder - sadece açık bir şekilde programlandılar. Biz "kayıt yeniden adlandırma". Sadece küçük bir set (8-32 kayıtları) erişimi olsa da, aslında çok daha büyük bir set (e.tarafından desteklenen ediyorlar 64-256 g). CPU sonra her kayıt görünürlüğünü izler ve yeniden ayarlamak için onları ayırır. Örneğin, değiştir, sonra da bir satır bir kayıt birçok kez saklamak ve bu işlemleri birbirinden bağımsız olarak önbelleğe bağlı özlüyor vb aslında gerçekleştirdiniz. KOL:

ldr r0, [r4]
add r0, r0, #1
str r0, [r4]
ldr r0, [r5]
add r0, r0, #1
str r0, [r5]

Cortex A9 çekirdeği ilk yük için yeniden adlandırma kayıt, "" aslında yeniden sanal bir kayıt - bırakalım gider"". v0 r0 Yük artışı ve depo oldu "". v0 Bu arada, biz de r0/mağaza tekrar değiştir/yük gerçekleştirmek, ama o yeniden elde edeceğiz "v1 bu tamamen bağımsız bir dizi olduğu için" r0. Hadi "r4" bir önbellek özledim. nedeniyle durmuş işaretçiyi gelen yük demek Tamam - "hazır olmak" r0 için beklemek gerek yok. Yeniden çünkü, sonraki sıra "v1" (da) eşlenen r0 - ve belki de bir önbellek isabet ve biz sadece büyük bir performans kazanmak vardı. çalışma yapabiliriz

ldr v0, [v2]
add v0, v0, #1
str v0, [v2]
ldr v1, [v3]
add v1, v1, #1
str v1, [v3]

86 yeniden kaydeder bu gün büyük sayıda (yaklaşık 256) olduğunu düşünüyorum. Sadece kaynak ve hedef ne demek her talimat için 8 bit kere 2 anlamına gelirdi. Kitlesel teller çekirdek arasında ve boyutu sayısını artıracak. En tasarımcıları, ve out-of-sipariş için CPU tasarımları için yerleşmiş 16-32 kaydeder etrafında tatlı bir nokta var, kayıt yeniden adlandırma bunu hafifletmek için bir yoldur.

Edit: Sipariş önemini ve bu kayıt üzerinde yeniden adlandırma uygulama. OOO bir kere, o kadar önemli değil başlık sayısı, sadece onlar "geçici Plaka" ve yeniden çok daha büyük sanal ayarlı kayıt. Küçük kod dizileri yazmak zor olur, çünkü çok küçük bir sayı istemiyorum. Bu x 86-32, sınırlı 8 kaydeder çünkü sorun geçici bir sürü yığın geçiyor sonu anlamına gelir, ve temel ihtiyaçlarını iletmek için ekstra mantığı/bellek yazar okur. Eğer OOO yok eğer doğru değilse, genellikle bu durumda büyük bir kayıt kümesi zavallı maliyet/performans yararı küçük bir çekirdek bahsediyorsun.

CPU çoğu sınıfları için yaklaşık 32 tasarlandı kaydeder de olmuş, içeriden dışarıya kayıt banka boyut için doğal bir tatlı nokta var. 86-32 8 kaydeder ve kesinlikle çok küçük. KOL 16 kaydeder gitti ve iyi bir uzlaşma var. 32 kaydeder eğer bir şey biraz çok fazla veya çok son 10 gerek değil sonuna kadar.

Ekstra bu dokunur hiçbiri SSE ve diğer vektör kayan nokta coprocessors için kaydeder. Bu tamsayı çekirdek bağımsız olarak çalıştırmak çünkü fazladan bir çift olarak çok anlamsız ve İŞLEMCİ karmaşıklığı katlanarak büyümeye yok.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Absolute Zero(Programming Tutorials)

    Absolute Zer

    22 Kasım 2012
  • engineerguy

    engineerguy

    10 Ocak 2010
  • JonnyEthco

    JonnyEthco

    5 EKİM 2006