Boru hattı sorunları (İngilizce: pipeline hazards; Türkçe yazında boru hattı tehlikeleri olarak da geçer), boru hattı kullanan işlemcilerde bir buyruğun, kendisinden hemen sonra gelen buyruğun bir sonraki saat çevriminde sorunsuz yürütülmesini engelleyen durumlardır. Boru hattında her saat çevriminde birden çok buyruk farklı aşamalarda aynı anda işlenir; buyruklar arasındaki bağımlılıklar ya da paylaşılan donanım kaynakları bu sorunlara yol açar. Donanım gerekli önlemi almazsa boru hattı sorunları yanlış sonuçlara neden olabilir.
Boru hattı sorunları üç temel türe ayrılır: yapı sorunları (paylaşılan donanımdan), veri sorunları (buyruklar arası veri bağımlılıklarından) ve denetim sorunları (dallanma ve atlama buyruklarından). Bu sorunlar; boru hattını geçici olarak durdurarak, sonuçları ara aşamalardan ileterek, dallanmaları önceden tahmin ederek ve buyrukları yeniden sıralayarak ele alınır.
İngilizcedeki hazard sözcüğü her zaman gerçekleşen bir aksaklığı değil, donanım müdahale etmezse yanlış sonuca yol açabilecek bir riski anlatır; bu nedenle Türkçe yazında hem "sorun" hem "tehlike" terimleri kullanılır.
Genel çözüm: durma ve boşluk
Her boru hattı sorununun en temel çözümü durmadır (stall, bekletme): işlemci, sorun ortadan kalkana kadar bir veya daha çok saat çevriminde yeni buyruk getirmeyi durdurur. Durma sırasında boru hattının ilerleyen aşamalarına, hiçbir iş yapmayan boşluk (bubble) adı verilen boş işlemler yerleştirilir. Durma her sorunu kesin olarak çözer; ancak boru hattının iş çıkarmasını düşürdüğü için, mümkün olan durumlarda veri yönlendirmesi veya dallanma öngörüsü gibi daha az maliyetli yöntemler yeğlenir. Sorunları saptayıp gereken durma ve yönlendirme denetimini üreten donanıma düzenleme birimi (hazard detection unit) denir.
Yapı sorunları

Yapı sorunu (structural hazard), bir donanım biriminin aynı saat çevriminde birden çok buyruk tarafından kullanılmak istenmesiyle ortaya çıkar. En bilinen örnek, buyruk ve verinin tek bir bellekte tutulduğu tasarımlardır: bir buyruk bellek aşamasında veri okurken, birkaç buyruk sonra gelen başka bir buyruk getir aşamasında bellekten buyruk çekmek ister; tek kapılı bellek ikisine aynı anda hizmet veremez.
Yapı sorunları genellikle şu yollarla giderilir:
- Buyruk ve veri için ayrı bellek ya da ayrı önbellek kullanmak (Harvard mimarisi).
- Paylaşılan birimi çoğaltmak; örneğin yazmaç öbeğine ayrı okuma ve yazma kapıları eklemek.
- Çakışan erişimin bir saat çevrimi geciktirilmesi (durma).
Veri sorunları

Veri sorunu (data hazard), bir buyruğun, kendinden önceki bir buyruğun henüz üretmediği bir değere ihtiyaç duymasıyla ortaya çıkar. Buyruklar arasındaki okuma–yazma sırasına göre üç türü vardır.
Yazmadan sonra okuma (RAW)
Yazmadan sonra okuma (read after write, RAW) en yaygın türdür ve buyrukların sırayla yürütüldüğü boru hatlarında bile görülür; gerçek veri bağımlılığı olarak da adlandırılır. Bir buyruk, kendinden önceki buyruğun yazacağı sonucu, o sonuç daha yazmaç öbeğine yazılmadan okumaya çalışır:
add x1, x2, x3 # x1 üretilir sub x5, x1, x4 # x1 gereklidir → RAW sorunu
Önlem alınmazsa sub buyruğu, add buyruğunun güncellenmemiş eski x1 değerini okur.
Okumadan sonra yazma (WAR)
Okumadan sonra yazma (write after read, WAR) ya da karşı bağımlılık, bir buyruğun bir yazmacı okumasından önce, sonraki bir buyruğun aynı yazmaca yazmaya çalışmasıdır. Buyrukların sırayla yürütüldüğü basit boru hatlarında WAR sorun çıkarmaz; yalnızca buyrukların yeniden sıralandığı Sırasız yürütüm yapan işlemcilerde gerçek bir soruna dönüşür.
Yazmadan sonra yazma (WAW)
Yazmadan sonra yazma (write after write, WAW) ya da sonuç bağımlılığı, iki buyruğun aynı yazmaca yazmasıdır; yazmacın son değeri, sonra gelen buyruğun yazdığı olmalıdır. WAR gibi WAW da yalnızca sırasız yürütümde sorun doğurur.
Bellek üzerinden veri sorunları
Veri bağımlılıkları yalnız yazmaçlar üzerinden kurulmaz. Bir saklama buyruğunun yazdığı bellek gözünü sonraki bir yükleme buyruğu okuyorsa aralarında yine bir RAW bağımlılığı bulunur. Yazmaçlardan farkı, bağımlılığın var olup olmadığının hemen anlaşılamamasıdır; iki buyruğun aynı adrese dokunup dokunmadığı, adresler hesaplanana kadar bilinmez.
Sırayla yürüten boru hatlarında sorun, saklama buyruğunun yazdığı değerin bekleyen yükleme buyruğuna doğrudan iletilmesiyle çözülür. Sırasız yürüten işlemcilerde ise yükleme buyruğunun kendinden önceki bütün saklama buyruklarının adresi belli olana kadar beklemesi başarımı düşürür. Bu yüzden bağımlılığın bulunup bulunmadığı öngörülür ve yükleme buyruğu erken yürütülür; öngörü yanlış çıkarsa buyruk geri alınıp yeniden yürütülür.
Veri sorunlarının çözümü
- Veri yönlendirmesi (forwarding veya bypassing): RAW sorunlarının başlıca çözümüdür. Üretilen sonuç, yazmaç öbeğine yazılmayı beklemeden, hesaplandığı ara aşamadan (aritmetik mantık birimi çıkışından) doğrudan ihtiyaç duyan buyruğa iletilir; böylece çoğu RAW sorunu durma gerektirmeden çözülür.
- Yükle-kullan sorunu (load-use hazard): Yönlendirmenin tek başına çözemediği özel bir RAW durumudur. Bellekten okunan değer ancak bellek aşamasından sonra hazır olduğundan, hemen ardından bu değeri kullanan buyruk için en az bir saat çevrimlik boşluk kaçınılmazdır. Derleyiciler araya bağımsız buyruklar yerleştirerek bu boşluğu doldurmaya çalışır.
- Yazmaç yeniden adlandırma: Sırasız yürüten işlemcilerde WAR ve WAW sorunları, her yazma için fiziksel yazmaç havuzundan yeni bir ad atanarak (Yazmaçların yeniden adlandırılması) ortadan kaldırılır; bu sorunlar gerçek bir veri akışı değil, yalnızca ad çakışması olduğundan tümüyle giderilebilir.
Denetim sorunları

Denetim sorunu (control hazard, dallanma sorunu), bir dallanma veya atlama buyruğunun, kendisinden sonra getirilecek buyruğun adresini ancak boru hattının ileri bir aşamasında belirlemesinden kaynaklanır. Dallanma kararı belli olana kadar işlemci hangi buyruğu getireceğini kesin olarak bilemez; bu süre boyunca oluşan boşluklara dallanma cezası denir.
Denetim sorunlarını azaltmak için kullanılan başlıca yöntemler şunlardır:
- Dallanma kararını erkene almak: Dallanma koşulunu ve hedef adresini boru hattının daha erken bir aşamasında hesaplayan ek donanım, dallanma cezasını azaltır.
- Dallanma öngörüsü (branch prediction): İşlemci, dallanmanın yapılıp yapılmayacağını tahmin eder ve tahmin ettiği yoldan buyruk getirmeyi sürdürür. Tahmin doğruysa ceza ortadan kalkar; yanlışsa yanlış getirilen buyruklar boşaltılır. Öngörü durağan (her zaman dallanır/dallanmaz) ya da devingen (geçmişe bakan doyumlu sayaçlar, gshare, turnuva öngörücüsü gibi) olabilir.
- Geciktirilmiş dallanma (delayed branch): Bazı mimariler (örneğin klasik MIPS), dallanma buyruğundan sonraki yuvayı her durumda yürütür; derleyici bu yuvaya yararlı bir buyruk yerleştirebilirse ceza gizlenir.
- Dallanma hedef ara belleği (branch target buffer): Daha önce karşılaşılan dallanmaların hedef adreslerini saklayarak hedefin hızla bulunmasını sağlar.
Modern işlemcilerde
Yüksek başarımlı modern işlemciler bu yöntemleri birlikte kullanır. Sırasız yürütüm, birbirinden bağımsız buyrukları yeniden sıralayarak veri sorunlarının yol açtığı beklemeleri büyük ölçüde gizler; yazmaç yeniden adlandırma ise WAR ve WAW sorunlarını ortadan kaldırır. Öngörüye dayalı yürütme (spekülatif yürütme), dallanma öngörüsüne güvenerek tahmin edilen yoldaki buyrukları önceden yürütür; tahmin yanlış çıkarsa bu buyrukların sonuçları geri alınır. Bu tekniklerin bir bölümü, Spectre gibi yan kanal saldırılarına da zemin hazırlamıştır.
Ayrıca bakınız
Kaynakça
- ^ a b c d e f Patterson, David A.; Hennessy, John L. (2020). Computer Organization and Design RISC-V Edition: The Hardware/Software Interface (2 bas.). Morgan Kaufmann. ISBN 978-0-12-820331-6.
- ^ a b c d e Hennessy, John L.; Patterson, David A. (2017). Computer Architecture: A Quantitative Approach (6 bas.). Morgan Kaufmann. ISBN 978-0-12-811905-1.
- ^ Ergin, Oğuz (2026). Bilgisayar Mimarisi. ISBN 978-625-00-6081-0.
- ^ a b c d Shen, John Paul; Lipasti, Mikko H. (2005). Modern Processor Design: Fundamentals of Superscalar Processors (İngilizce) (1 bas.). McGraw-Hill. ss. 71-72. ISBN 0-07-057064-7.
- ^ a b Harris, Sarah L.; Harris, David Money (2016). Digital Design and Computer Architecture: ARM Edition (İngilizce). Morgan Kaufmann. ss. 464-465. ISBN 978-0-12-800056-4.
- ^ Chrysos, George Z.; Emer, Joel S. (1998). "Memory Dependence Prediction Using Store Sets". Proceedings of the 25th Annual International Symposium on Computer Architecture (ISCA). ss. 142-153. doi:10.1109/ISCA.1998.694770.
