Merhaba sevgili ziyaretçiler bu yazımızın konusu ARM işlemcilerde boru hattı. Boru hattı bir işlemcinin komutları işleme sürecini ifade eder. Bir komutun bellekten getirilmesi, tanımlanması ve yürütülmesi belli bir süreç ve sıra içerisinde gerçekleşir. Bu süreç ne kadar kısa olursa işlemci o kadar hızlı çalışır. Bu yüzden boru hattının çalışma mekanizması işlemci performansına dolayısıyla bu işlemciye bağlı sistemin performansına doğrudan etki eder.
Boru hattı RISC işlemcilerde komutları yürütmek için kullanılan mekanizmadır. Boru hattını kullanmak diğer komutlar üzerinde kod çözme ve yürütme işlemi gerçekleştirilirken sonraki komutu getirmek (fetch) suretiyle komut yürütmeyi hızlandırır. Boru hattı, her bir evresi bir otomobili üretmek için belli görevleri üstlenen bir otomobil montaj hattına benzetilebilir.
Yukarıdaki şekil üç aşamalı boru hattını göstermektedir. Bu şekilde yer alan,
- Fetch (Getir), bellekten bir komut yükler,
- Decode (Çöz), çalıştırılacak komutu tanımlar,
- Execute (Yürüt), komutu işler ve sonucu bir yazmaca yazar.
Aşağıdaki şekil boru hattını kullanan basit bir örneği göstermektedir. Bu örnekte işlemci tarafından bellekten getirilen, çözülen ve yürütülen üç komutun işleme sırasını göstermektedir. Her bir komut boru hattı dolduktan sonra tamamlanmak için bir saykıl süresi almaktadır.
Üç komut boru hattına sırasıyla yerleşir. İlk saykılda çekirdek bellekten ADD komutunu getirir. İkinci saykılda çekirdek SUB komutunu getirir ve ADD komutunu çözer. Üçüncü saykılda SUB ve ADD komutları boru hattında ilerler. ADD komutu çalıştırılır, SUB komutu çözülür ve CMP komutu ise bellekten getirilir. Bu süreç boru hattı doldurma (filling pipeline) olarak adlandırılır. Boru hattı işlemcinin bir komutu her saykılda çalıştırmasını sağlar.
Boru hattının uzunluğu arttıkça her aşamada yapılan iş miktarı azalır. Böylece işlemciden daha yüksek çalışma frekansı elde edilir. Bu da performansı arttırır. Çekirdek bir bir komutu yürütmeden önce boru hattını doldurmak için daha fazla saykıl harcadığından sistemin gecikmesi de artar. Artan boru hattı uzunluğu aynı zamanda aşamalar arasında veri bağımlılığı olabildiği anlamına da gelir. Komut zamanı planlama özelliğini kullanarak bu bağımlılığı azaltmak mümkündür.
Her ARM ailesindeki boru hattı tasarımı birbirinden farklıdır. Örneğin ARM9 çekirdeğinde boru hattı uzunluğu yukarıdaki şekilde görüleceği gibi altıya çıkarılmıştır. ARM9’a her bir MHZ’de ortalama 1.1 Dhrystone MIPS işlemesini sağlayan bir bellek aşaması ve bir de geriyazım (writeback) aşaması eklenmiştir. Bu ilavelerle komut çıkışında ARM7’ye nazaran %13 artış sağlanmıştır. ARM9 kullanılarak erişilebilecek azami çekirdek frekansı da yüksektir.
Yukarıdaki resimde görüleceği üzere ARM10’da altıncı bir aşama daha eklenerek boru hattı uzunluğu daha da artırılmıştır. ARM10, her bir MHZ başına 1.3 Dhrystone MIPS işleyebilir (ARM7 çekirdeğinden %34 daha fazla komut çıkışı) ancak bu boru hattı ilaveleri yine burada da daha yüksek bir gecikmeye mal olmaktadır.
ARM9 ve ARM10 boru hatları birbirinden farklı olsa da ARM7 gibi aynı boru hattı yürütme karakteristiğini kullanmaktalar. Böylece ARM7 için yazılan kod, ARM9 ve ARM10 üzerinde de çalışacaktır.
Boru Hattı İşletiminin Karakteristik Özellikleri
ARM boru hattı bir komutu yürütme aşamasını tamamen geçene kadar çalıştırmaz. Örneğin bir ARM7 boru hattı (üç aşamalı) bir komutu yalnızca dördüncü komut bellekten boru hattına getirildiğinde çalıştırır.
Aşağıdaki şekil ARM7 boru hattı üzerindeki komut sırasını göstermektedir. MSR komutu boru hattının yürütme aşamasını tamamladığında meydana gelen IRQ kesmelerini aktifleştirmek için kullanılır. IRQ kesmelerini aktifleştirmek için cpsr içerisindeki I bitini 0 yapar. ADD komutu boru hattının yürütme aşamasına geldiğinde IRQ kesmeleri aktif olur.
Aşağıdaki boru hattının örneğindeki şeklide boru hattı ve program sayıcı (pc)‘nın kullanımı gösterilmiştir. Yürütme aşamasında pc daima komutun adresi artı 8 bayt’ı gösterir. Diğer bir ifadeyle pc daima çalıştırılacak komutun adresine ilave olarak iki komut sonrasını gösterir. Bu durum pc göreceli bir ofset hesaplamak için kullanıldığında önemlidir ve bu tüm boru hatları arasında mimari bir karakteristiktir. İşlemci thumb durumundayken pc = komut adresi + 4 olur.
Boru hattının üzerinde durulması gereken başka üç karakteristik özelliği daha vardır. Birincisi bir dallanma komutunun çalıştırılması veya pc’nin doğrudan değiştirilmesi ile dallanma ARM çekirdeğinin kendi boru hattını floşlamasına neden olur.
İkincisi, ARM10, mümkün dallanmaları tahmin ederek ve komutun çalıştırılmasından önce yeni dallanma adresini yükleyerek boru hattı floşlamasının etkisini azaltan dallanma tahmini mekanizmasını kullanır.
Üçüncüsü, yürütme aşamasındaki bir komut, kesme oluşsa bile tamamlanır. Boru hattındaki diğer komutlar bırakılır ve işlemci boru hattını vektör tablosundaki uygun giriş noktasından itibaren doldurmaya başlar.