Boru hattı (bilgisayar)

Boru Hattı Sorunları

Boru hattının dezavantajı, uygulanırken çeşitli sorunlara neden olmasıdır. Boru hattında 3 tip sorun vardır:

Yapı Sorunları

Boru hattı uygulamasında aynı kaynak aynı anda birden fazla değişik biçimde kullanılmaya çalışılırsa gerçekleşir. Başarımı sınırlarlar. Sorun bekleyerek çözülebilir.

Denetim Sorunları

Dallanma olan yerlerde, koşullar belli olmadan karar verilirse gerçekleşir. Dallanma kararı verilmeden önce yürütüm durdurulur ve karar belli olana kadar beklenir. Bir başka çözüm yolu da; kararı tahmin edip ona göre işlemi devam ettirmek, eğer karar hatalıysa geri dönüp tekrar denemek (Dallanma öngörüsü). Dallanma komutları geldiğinde işlemcinin nereye gideceğini bilmesi gerekir.

Örnek 1

İki sayının toplama kodu basit olarak  ADD A, B, C, şeklindedir, yani bellekteki adreslerinden  A'nın ve B'nin değerlerini bulup, toplar ve daha sonra C’nin bellekteki adresine bu sonucu ekler. Boru hattı kullanılan bir işlemcide, boru hattı kontrolcüsü bu işlemi şöyle ifade eder:
LOAD A, R1
LOAD B, R2
ADD R1, R2, R3
STORE R3, C
LOAD next instruction
Tablodaki R’ler yazmaçları göstermektedir, işlemcinin içindeki geçici bellekte tutulurlar, böylece çabuk erişim sağlanır. Sonuç basittir toplanıp bulunan sonuç C’nin adresinde tutulur, bu süre boru hattı kullanan ve kullanmayan sistemler için aynıdır.
Boru hattı yönteminin bu toplama komutu örneğindeki avantajı için “kısa yoldan yapılmış” olmasıdır. Burada bellekten veriyi alma görevi döngünündür ve uzun süre kullanımda olmayacağı için az kullanılan bölümde saklanır. Bu durumda boru hattı kontrolcüsü işine yarayacak olan bir sonraki bilgiyi bellekten alıp getirir ve yazmaçlarda tutar. Toplama komutu yerine getirildiği sırada gereken bir sonraki bilgi bellekten alınıp getirilmiş ve hazırda bekletiliyor olması gerekir. Burada programın başarımı büyük ölçüde artar çünkü işlemcinin bileşenleri boş kalmaz.
Bu küçük adımlar boru hattı adımı olarak adlandırılır, yukarıdaki örnekte boru hattı yönteminin 3 ana adımı vardır, bunlar; yükleyici, toplayıcı ve depolayıcıdır.
Günümüzde her mikroişlemci en az iki adımdan oluşan boru hattı kullanmaktadır (Atmel AVR ve PIC mikrokontrolör iki adımlı boru hattı içermektedir).

Karışıklıkları

Birçok boru hattı tasarımı 7, 10, 31 bölümden oluşur (Intel Pentium 4 gibi). Xelerator X10q ise binlerce bölümden oluşan boru hattına sahiptir. Eğer işletilen program çok bölümden oluşursa, boru hattı kullanmak soruna yol açabilir, çok bölüm oluşundan dolayı çıkan bu sorunu ise “bölüm bildirici” (ing.: branch predicting) ile hafifletilebilir. Bölüm bildirici problemin kötüye gitmesini kendi engelleyebilir. Güncel uygulamalarda, programlar daha az bölümden oluşan komutlar yazarlar böylece uzun boru hatları program hızını arttırmak için daha idealdir, bu boru hatları komuta göre döngü zamanı verirler. Çok bölümlülük sabitlendiğinde, Ofis programları gibi programlar, boru hattından kazanılan kazancı azaltırlar. Çök bölümlülükten dolayı işlemci bir sonraki bilginin adresinin nerde olduğunu bilemiyor ve işletilen komutunun bitmesini beklemesi gerekiyor. İşletilen komut bittiğinde boru hattı ile bir sonraki bilgi işlemciye iletilir ve işlemci yapması gereken şeyi yapar. Komut, boru hattı kullanılmasından dolayı işlemci yüklemeyi hemen gerçekleştiremez. Koddaki güncelleştirmeler şu andaki işletim yerini etkilemez çünkü işletim için zaten belli bir alan ayrılmıştır (ing.: Prefetch Input Queue). Komut önbellekleri bu durumu daha kötü hala getirirler. Bu sadece “kendi programlanabilen” programlarla ilgilidir, işletim sistemi gibi.