Komut Borulaması

kaynaksız|maddenin

" target="_blank"> makinasındaki temel 5 adımlı borulama]

Komut Borulaması bilgisayar tasarımında kullanılan ve diğer dijital elektronik araçların performanslarını arttırmak için kullanılan bir tekniktir. Borulama işlemcinin komut döngü süresini azaltır bundan dolayı da birim döngü zamanına düşen komut sayısı artar. Ama borulama tüm olası durumlarda bize yardım edemez. Birçok dezavantajı bulunmaktadır. Eğer komut borulaması her döngü zamanında yeni bir komut kabul edebiliyorsa buna tam borulama denir. Eğer borulama, tam borulama değilse döngülerin ilerlemesinde gecikme meydana gelir.

Borulamalı bir sistemin avantajları;
  1. İşlemcinin döngü zamanını azaltır, böylece komut genişliğini bir çok durumda arttırır.


Borulamasız bir sistemin avantajları;
  1. İşlemci tek bir komut zamanı yürütür. Çok bölümlülük hata ve problem kodları aynı zamanda işletilirler. Sonuç olarak tasarım basitleşir ve ucuza mal olur.
  2. Borulamasız bir sistemde komut gizliliği borulamalı sisteme göre daha azdır. Tabi bunun olması için borulamalı sisteme daha fazla flipflop eklemek gereklidir.
  3. Borulama yapılmamış bir sistemin sabit bir komut genişliği bulunur. Borulamalı sistemin performansını önceden bilmek çok güçtür, ve farklı programlarda farklılık gösterebilir.


Birçok modern işlemci saat vuruşlarıyla yürütülür. İşlemci dahili mantık ve flipfloplardan oluşmaktadır. Saat vuruşu geldiğinde, flipfloplar yeni değerlerini alırlar sonra kodları çözüp yapmaları gereken şeyi yapmaları için belli bir süre gerekir. Bir sonraki saat vuruşu geldiğinde, flipfloplar tekrar kendi değerlerini alırlar ve bu böyle devam eder. Mantık yürütülmesini ufak bölümlere bölüp aralarına flipfloplar koyarsak, veri çıkışımızdaki gecikme azalmış olur. Saat vuruş zamanını azalma nedeni de budur. Örneğin, RISC borulaması aralarında flipflop olan 5 bölüme bölünmüştür;

  1. Komut getirilmesi
  2. Komut çözümü ve yazmaç getirip götürülmesi
  3. İşleme
  4. Bellek erişimi
  5. Yazmaç geri yazması


Riski: Programlayıcı ya da derleyici assembly bir kod yazdığında, bir sonraki komut işletimine başlamadan önce, önceki komut işlenmiş olur. Bu varsayım borulama yöntemiyle çürütülebilir. Bu nedenler programda olumsuz şartlar yarattırsa, risk oluşturur. Bu riski ortadan kaldırmak için çeşitli teknikler vardır, yürütmeyi ilerletmek ve durdurmak gibi.

Komut döngüsünün çalıştırılması kolaydır ama verimsizdir. Bu yetersizliği borulama ile giderebiliriz. Borulama program kodunun işletilmesini önemli ölçüde hızlandırmaktadır. Borulama ile bu yapılabilir, yani işlemci içerisindeki boş bekleyen bileşenlerin kullanım zamanını azaltılabilir. Borulama işlemcinin içerisindeki boş bileşenlerin zamanlarını tamamen bitirmez ama önemli ölçüde azaltır. Borulamalı bir işlemci olayları organize eder ve birbirinden bağımsız olarak çalışacakları bölgelere yollar. Bu bölgeler organize edilmiş ve her biri zincir gibi birbirine bağlanmıştır yani birisinin çıkışı birisinin girişine bağlanır komut bitene kadar böyle sürer. İşlemcinin bu organizasyonu bir olayın işletim zamanını önemli ölçüde azaltmaktadır.

Maalesef her komut bağımsız değildir. Basit bir borulama da,komutun yerine getirilmesi 5 aşamadan oluşur. Tam performansta çalıştırabilmek için, borulamanın ilk komut yürütülürken sonradan gelen 4 bağımsız komutu da çalıştırmaya başlaması gerekmektedir. Eğer bu 4 komutun ilk komutun çıkışıyla alakası yoksa, bu bağımlılık durumu ortadan kalkıncaya kadar borulamanın mantık kontrol birimi araya bir kesme ya da bekletme sokmalıdır. Neyse ki yürütmeyi ilerletmek gibi teknikler, programı durdurmak gibi olası durumları önemli ölçüde azaltırlar. Borulamalı sistem borulamasız sisteme göre daha hızlı olmasına karşın, birçok program kodu normal işletim hızını değiştirmeye izin vermemektedir.

Örnekler

Örnek 1



İki sayının toplama kodu basit olarak ADD A, B, C, şeklindedir, yani bellekteki adreslerinden Anın ve Bnin değerlerini bulup, toplar ve daha sonra C`nin bellekteki adresine bu sonucu ekler. Borulamalı bir işlemcide, borulama 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 borulamalı ve borulamasız sistemler için aynıdır.

Borulamanın bu toplama komutu örneğindeki avantajı için “kısa yoldan yapılmış” olmasıdır. Burada bellekten datayı 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 borulama 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 performansı büyük ölçüde artar çünkü işlemcinin bileşenleri boş kalmaz.

Bu küçük adımlar borulama adımı olarak adlandırılır, yukarıdaki örnekte borulamanın 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 borulama kullanmaktadır (Atmel AVR ve PIC mikrokontrolör iki adımlı borulama içermektedir).

Örnek 2

Bu konsepti daha iyi görselleştirmek için kuramsal 3 aşamalı borulamayı inceleyebiliriz;

StageDescription
Load Read instruction from memory
Execute Execute instruction
Store Store result in memory and/or registers


Ve bunlarla aşağıdaki komutlar işletilebilir.

LOAD #40,A   ; load 40 in A
MOVE A,B    ; copy A in B
ADD  #20,B   ; add 20 to B
STORE B, 0x300  ; store B into memory cell 0x300


Aşağıda nasıl işlendiği gösterilmiştir.

Clock 1
LoadExecuteStore
LOAD  


Aşağıda bellekten komut okunması gösterilmiştir.

Clock 2
LoadExecuteStore
MOVELOAD 


Bellekten komut okutulması gerçekleşirken, yükleme komutu gerçekleşir.

Clock 3
LoadExecuteStore
ADDMOVELOAD


Depolama kısmında tutulan yükleme komutu (değeri 40) A yazmacında tutulur. Bu sırada hareket komutu işletilir. Hareket komutu, A`nın ve B`nin içerikleri işlemeye geçmeden önce yükleme komutunun işini bitirmesini beklemesi gerekmektedir.

Clock 4
LoadExecuteStore
STOREADDMOVE


Hareket komutunun işlemi bitip sayılar toplandıktan sonra saklama komutu işletilir. Ve bu işlem böyle devam eder. Bazen işletilen komut bir önceki komutun sonucuna bağlıdır. Eğer birden aynı adresi gösteren birden çok komut varsa ve bunların ikisi birden yazma ya da okuma komutuysa, normal program işleyişi sırasıyla yapılmasa risk meydana gelebilir. Böyle bir riskin gerçekleşmemesi için yapılan birçok teknik vardır.

Karışıklıkları

Birçok borulama tasarımı 7, 10, 31 bölümden oluşur (Intel Pentium 4 gibi). Xelerator X10q ise binlerce bölümden oluşan borulamaya sahiptir. Eğer işletilen program çok bölümden oluşursa, borulama 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 borulamalar program hızını arttırmak için daha idealdir, bu borulamalar komuta göre döngü zamanı verirler. Çok bölümlülük sabitlendiğinde, Office programları gibi programlar, borulamadan 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 borulama ile bir sonraki bilgi işlemciye iletilir ve işlemci yapması gereken şeyi yapar. Komut borulaması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.

Genel Kültür

İlk işlemci mikrokontrolörü (MOS Technology 6502) tek bölümlük komut borulamasından oluşurdu.

Kaynaklar

Vikipedi

İlgili konular

risc

Bu konuda henüz görüş yok.
Görüş/mesaj gerekli.
Markdown kullanılabilir.