Gecikme yuvası - Delay slot

İçinde bilgisayar Mimarisi, bir gecikme yuvası önceki bir talimatın etkileri olmadan yürütülen bir talimat slotudur. En yaygın biçim, bir belgeden hemen sonra bulunan tek bir keyfi talimattır. şube talimat bir RISC veya DSP mimari; bu komut, önceki dal alınmış olsa bile yürütülecektir. Bu nedenle, tasarım gereği talimatlar mantıksız veya yanlış bir sırada çalışıyor gibi görünmektedir. İçin tipiktir montajcılar yönergeleri varsayılan olarak otomatik olarak yeniden sıralamak, montaj geliştiricilerinden ve derleyicilerden gelen gariplikleri gizlemek.

Dal gecikme yuvaları

Bir dallanma talimatı dahil edildiğinde, aşağıdaki gecikme yuvası talimatının boru hattı bir şube gecikme yuvası. Dal gecikme yuvaları esas olarak şurada bulunur: DSP mimariler ve daha eski RISC mimariler. MIPS, PA-RISC, ETRAX CRIS, SuperH, ve SPARC her biri tek bir dal gecikme yuvasına sahip olan RISC mimarileridir; PowerPC, KOL, Alfa, ve RISC-V hiç yok. DSP Her biri tek bir dallanma gecikmesi yuvasına sahip mimariler VS DSP, μPD77230 ve TMS320C3x. SHARC DSP ve MIPS-X çift ​​dallı bir gecikme yuvası kullanın; böyle bir işlemci dallanma yürürlüğe girmeden önce dallanma talimatını takiben bir çift talimatı yürütecektir. TMS320C4x üçlü dal gecikme yuvası kullanır.

Aşağıdaki örnek, RTS komutundan sonra bir çift dahil olmak üzere SHARC DSP için montaj dilinde geciken dalları gösterir. R0 ile R9 arasındaki kayıtlar, numaraya göre sıfıra temizlenir (kayıt, R6'dan sonra silinir, R9 değil). Hiçbir talimat birden fazla çalıştırılmaz.

     R0 = 0; ÇAĞRI fn (DB); / * aşağıdaki "fn" etiketinde bir işlevi çağırın * / R1 = 0; / * ilk gecikme yuvası * / R2 = 0; / * ikinci gecikme aralığı * / / ***** burada süreksizlik (CALL yürürlüğe girer) ***** / R6 = 0; / * CALL / RTS "R1 = 0" da değil buraya geri döner * / JUMP end (DB); R7 = 0; / * ilk gecikme yuvası * / R8 = 0; / * ikinci gecikme aralığı * / / ***** burada süreksizlik (JUMP yürürlüğe girer) ***** / / * sonraki 4 talimat, "fn" işlevi olarak yukarıdan çağrılır * / fn: R3 = 0; RTS (DB); / * arayanın gecikme aralıklarını geçerek arayana dön * / R4 = 0; / * ilk gecikme yuvası * / R5 = 0; / * ikinci gecikme aralığı * / / ***** burada süreksizlik (RTS etkili olur) ***** / end: R9 = 0;

Bir hedef ardışık mimari her saat döngüsünde bir talimatı tamamlamaktır. Bu hızı korumak için, boru hattı her zaman talimatlarla dolu olmalıdır. Dal gecikme yuvası, boru hatlı mimarilerin bir yan etkisidir. şube tehlikesi yani, talimat boru hattından geçene kadar dalın çözülmeyeceği gerçeği. Basit bir tasarım, yeni şube hedef adresi hesaplanana ve bilgisayara yüklenene kadar bir branşman talimatından sonra boru hattına tezgahlar ekleyecektir. program sayıcı. Bir stallın yerleştirildiği her döngü, bir dal gecikme aralığı olarak kabul edilir. Daha karmaşık bir tasarım, dallanma talimatının sonucuna bağlı olmayan program komutlarını yürütecektir. Bu optimizasyon, yazılım -de Derleme zamanı donanım bunu destekliyorsa, bellek içi talimat akışında talimatları dallanma gecikmesi yuvalarına taşıyarak. Diğer bir yan etki, yönetim sırasında özel işlemin gerekli olmasıdır. kesme noktaları talimatların yanı sıra adım adım hata ayıklama şube gecikme yuvası içinde.

Belirli bir boru hattı uygulamasındaki ideal branş gecikme aralığı sayısı, boru hattı aşamalarının sayısı, varlığı ile belirlenir. kayıt yönlendirme, boru hattının hangi aşamasında şube koşulları hesaplanır, bir dal hedef tamponu (BTB) kullanılır ve diğer birçok faktör. Yazılım uyumluluğu gereksinimleri, bir mimarinin gecikme yuvalarının sayısını bir nesilden diğerine değiştiremeyeceğini belirtir. Bu, kaçınılmaz olarak, daha yeni donanım uygulamalarının, artık alakalı olmamasına rağmen mimari davranışın izlenmesini sağlamak için fazladan donanım içermesini gerektirir.

Yük gecikme yuvası

Bir yükleme gecikmesi yuvası, bir yükten hemen sonra (bellekteki bir kayıt defterinin) çalıştırılan, ancak yükün sonucunu görmeyen ve beklemesi gerekmeyen bir komuttur. Yük gecikmesi yuvaları çok nadirdir çünkü modern donanımda yükleme gecikmeleri oldukça tahmin edilemez. Yük, RAM'den veya bir önbellekten karşılanabilir ve kaynak çekişmesi nedeniyle yavaşlayabilir. Çok erken RISC işlemci tasarımlarında yük gecikmeleri görüldü. MIPS I ISA ( R2000 ve R3000 mikroişlemciler) bu sorundan muzdariptir.

Aşağıdaki örnek, hem bir yükleme gecikme yuvasını hem de bir dal gecikme yuvasını gösteren MIPS I montaj kodudur.

   lw   s0,4(v1)   # v1 + 4 adresinden v0'a kelime yükle   hayır             # boşa harcanan yük gecikme yuvası   jr   s0         # v0 ile belirtilen adrese atla   hayır             # boşa harcanan şube gecikme yuvası

Ayrıca bakınız

Dış bağlantılar