Modern işlemci boru hattı (pipeline) teknolojisi, komutların farklı yürütme aşamalarında eşzamanlı işlenmesini sağlar. Böylece işlemci, birim zamanda daha fazla komut tamamlayabilir ve performans artışı elde edilir. Dallanma tahmini, komut bağımlılıkları ve süperskalarlık gibi kavramlar da boru hattı verimliliğinde önemli rol oynar.
Modern CPU pipeline teknolojisi, işlemcinin birden fazla komutu aynı anda işlemesini sağlayarak bu komutları farklı yürütme aşamalarına dağıtır. Bir komut hesaplama yaparken, diğeri kodu çözümlenebilir, üçüncüsü ise bellekten yüklenebilir. Böylece işlemci, hesaplama birimlerini daha verimli kullanır ve birim zamanda daha fazla işlem gerçekleştirir.
Bu teknolojiye komut boru hattı (Instruction Pipelining) denir. Günümüz işlemcilerinin çoğunda kullanılan bu yöntem, her komutun bitmesini beklemeden bir sonrakine geçilmesine olanak tanıyarak genel performansı artırır.
İşlemci boru hattı, makine komutlarının yürütülmesini birkaç ardışık aşamaya bölen bir mekanizmadır. Bir komut tamamen tamamlanana kadar beklemek yerine, işlemci farklı komutları farklı aşamalarda aynı anda işler.
Bunu, bir otomobil fabrikasının üretim bandına benzetebiliriz: Birinci istasyonda yeni bir aracın gövdesi toplanırken, ikinci istasyonda önceki araca motor takılır ve üçüncüde ise monte edilen araç kontrol edilir. Her araç tüm aşamalardan geçer, ancak aynı anda birden fazla araç üretim hattındadır.
İşlemci boru hattı da aynı şekilde çalışır. Bir komut hesaplama aşamasında olabilir, diğeri kod çözümleme aşamasında ve üçüncüsü bellekten yükleniyor olabilir. Her komut, gerekli aşamalardan sırasıyla geçer.
Bu mimarinin ana avantajı, işlemcinin birim zamanda tamamlayabileceği komut sayısını artırmasıdır. Örneğin, ideal beş aşamalı bir boru hattında, ilk doldurma işleminden sonra her saat çevriminde bir komut tamamlanabilir. Oysa her komutun tamamlanması birkaç çevrim sürebilir.
Boru hattı kullanımı, tek bir komutun yürütme süresini mutlaka azaltmaz. Ancak işlemlerin çakışmasını sağladığı ve hesaplama birimlerinin boşa geçmesini önlediği için işlemcinin genel veri işleme kapasitesini artırır.
İşlemci performansı sadece saat hızından değil, komutların ne kadar verimli işlendiğinden de etkilenir. Bu ilişkinin ayrıntılarını Neden Modern İşlemci Performansı Sadece GHz ile Ölçülmüyor: IPC Nedir? başlıklı yazımızda bulabilirsiniz.
Boru hattı, komutların yürütülmesini bağımsız aşamalara böler. Her aşama kendi görevini yerine getirir ve sonucu bir sonraki aşamaya iletir. Böylece işlemci, farklı aşamalarda bulunan birden fazla komutu eşzamanlı olarak işleyebilir.
Klasik beş aşamalı bir boru hattında şu aşamalar bulunur:
Her komut, faydalı iş için tüm aşamaları kullanmayabilir. Örneğin, iki sayının toplanması için operantlar kayıtlarda ise ayrıca bellek erişimine gerek yoktur.
Basitleştirilmiş beş aşamalı bir boru hattında, her aşama bir çevrim sürer ve komutlar birbirine bağlı değildir.
| Çevrim | Komut 1 | Komut 2 | Komut 3 |
|---|---|---|---|
| 1 | IF | - | - |
| 2 | ID | IF | - |
| 3 | EX | ID | IF |
| 4 | MEM | EX | ID |
| 5 | WB | MEM | EX |
| 6 | - | WB | MEM |
| 7 | - | - | WB |
Üçüncü çevrimde, işlemci birinci komutun hesaplamasını yaparken, ikinci komutu çözümler ve üçüncüyü bellekten çeker. Her komut kendi aşamasını kullandığı için birbirlerini engellemezler.
Eğer bu üç komut sırasıyla yürütülseydi, toplamda 15 çevrim gerekirdi. Ancak boru hattı ile bu süre 7 çevrime iner.
Daha fazla komut olduğunda fark çok daha belirgindir. Boru hattı tamamen dolduktan sonra, ideal bir senaryoda her çevrimde bir komut tamamlanabilir.
Gerçek işlemcilerde durum daha karmaşıktır: Bazı işlemler birkaç çevrim sürebilir, komutlar arasında bağımlılıklar olabilir ve bazı işlem birimleri aynı anda birden fazla komutla çalışabilir.
Boru hattı derinliği, bir komutun yürütülmesinin bölündüğü aşama sayısıdır. Klasik modelde beş aşama bulunurken, modern işlemcilerde bu sayı çok daha fazla olabilir.
Daha derin bir boru hattı, karmaşık işlemlerin daha kısa aşamalara bölünmesini sağlar. Böylece her aşama daha kısa sürdüğü için işlemci daha yüksek saat hızlarında çalışabilir.
Ancak derinliği artırmak her zaman performansı yükseltmez. Aşama sayısı arttıkça, komut akışındaki kesintiler ve gecikmeler de artabilir.
Boru hattı verimliliğini etkileyen üç ana faktör vardır:
Örneğin, 20 aşamalı bir boru hattına sahip bir işlemci, 12 aşamalı bir modele göre mutlaka daha hızlı olmayabilir. Derin boru hattı sık sık duraklarsa veya komutları tekrar işlemek zorunda kalırsa, yüksek saat hızının avantajı ortadan kalkar.
Bu nedenle modern işlemci mimarileri, boru hattı derinliği, saat hızı ve her çevrimde tamamlanan faydalı komut sayısı (IPC) arasında denge kuracak şekilde tasarlanır.
Boru hattı, komutlar aşamaları gecikmeden geçebildiğinde maksimum verimle çalışır. Ancak bir sonraki komutun sonucu önceki komuttan beklemesi gerektiğinde veya işlemci hangi komutun yürütüleceğini bilmediğinde boru hattı çakışmaları (Pipeline Hazards) ortaya çıkar.
Gecikmelerin başlıca nedenlerinden biri, bir komutun önceki komutun sonucunu beklemesidir. Örneğin, işlemci önce iki sayıyı toplamalı, sonra bu toplamı üçüncü sayı ile çarpmalıdır. İkinci komut, toplama sonucu hazır olmadan çarpma işlemini yapamaz.
Bu tür gecikmeleri önlemek için sonuç iletimi (Forwarding) kullanılır. Bu teknik, veriler kayda yazılmadan önce aşamalar arasında doğrudan aktarılmasına izin verir.
Boru hattı, birden fazla komutun aynı donanım kaynağını aynı anda kullanmak istemesiyle yavaşlayabilir. Örneğin, iki işlem aynı hesaplama birimini kullanmak isteyebilir.
Bu tür durumlara yapısal çakışma denir. Önlemek için işlemcilerde ek hesaplama birimleri, ayrılmış kaynaklar ve akıllı komut dağıtım mekanizmaları bulunur.
Koşullu dallanmalar, komut akışını değiştiren ve programın hangi yoldan devam edeceğini belirleyen talimatlardır. Dallanmanın sonucunu beklemeden boru hattının durmasını önlemek için modern işlemciler dallanma tahmini (Branch Prediction) kullanır. İşlemci, programın hangi yoldan devam edeceğini tahmin ederek ilgili komutları işlemeye başlar.
Tahmin doğruysa işlem kesintisiz devam eder. Yanlışsa, yanlış işlenen komutlar iptal edilir ve doğru komutlar yüklenir.
Boru hattı derinleştikçe, yanlış tahmin durumunda iptal edilmesi gereken işlem miktarı artar. Bu nedenle, dallanma tahmininin doğruluğu modern işlemcilerde gerçek performansı ciddi şekilde etkiler.
Günümüz işlemcilerinin boru hattı mimarisi, klasik beş aşamalı modelden çok daha karmaşıktır. Birden fazla komutun aynı anda yürütülmesi, işlemlerin sırasının değiştirilmesi ve hesaplama birimlerinin daha etkin kullanılması için çeşitli teknolojilerle desteklenir.
Süperskalar işlemciler, gerekli yürütme birimleri müsaitse bir çevrimde birden fazla komutu başlatabilir. Örneğin, bir işlemci aynı anda tam sayı toplama ve kayan nokta işlemi gerçekleştirebilir. Bunun için çekirdek içinde ayrı hesaplama birimleri bulunur.
Süperskalar mimari sayesinde, modern işlemciler bir çevrimde birden fazla komut (IPC > 1) işleyebilir; bu, tek boru hattında mümkün değildir.
Out-of-Order Execution (OoO) ile işlemci, bazı komutlar veri beklerken veya kaynaklar meşgulken hazır olan diğer komutları öne alıp önce yürütür. Örneğin, bir komut bellekteki veriyi beklerken, bağımsız başka işlemler boşa bekletilmeden tamamlanır.
Sonuçlar programın beklenen sırasına uygun şekilde kaydedilir. Bu amaçla işlemci, komutlar arası bağımlılıkları izler ve işlemlerin tamamlanmasını yönetir.
Boru hattı ve çoklu iş parçacığı (multithreading) farklı problemleri çözer:
Bu teknolojiler birlikte çalışabilir. Örneğin, SMT destekli çok çekirdekli bir işlemci, çekirdeğin içindeki boru hattını kullanırken farklı iş parçacıklarının komutlarını dağıtabilir.
Fiziksel çekirdek, mantıksal işlemci ve yazılım iş parçacığı arasındaki farklar hakkında daha fazla bilgi için Çoklu İş Parçacığı: Çekirdek ve İş Parçacığı Nedir, Performansa Etkisi Nasıldır? başlıklı makalemizi inceleyebilirsiniz.
İşlemci boru hattı, komutların farklı aşamalara dağıtılması sayesinde, birden fazla komutun aynı anda işlenmesini sağlar. Bu, çekirdeğin bant genişliğini artırır ve çok sayıda komutun daha kısa sürede işlenmesine olanak tanır.
Ancak boru hattının verimliliği, yalnızca aşama sayısına bağlı değildir. Dallanma tahmini, komutlar arası bağımlılıklar, süperskalarlık ve sıradışı yürütme gibi faktörler de önemli rol oynar.
Bu nedenle işlemcileri karşılaştırırken yalnızca saat hızına veya boru hattı derinliğine bakmak yanıltıcı olabilir. Gerçek performans, mimarinin bir çevrimde kaç komut tamamlayabildiği (IPC) ve belirli görevlerdeki test sonuçları gibi daha kapsamlı kriterlerle değerlendirilmelidir.