Pipelining ve Tehlikeler
Pipelining, komut işlemeyi aşamalara ayırarak ardışık komutların yürütülmesini örtüştürür ve bu sayede verimi artırır; tehlikeler ise kaynak çakışmaları, veri bağımlılıkları ve dallanmalar gibi, sonraki komutun bir sonraki döngüde ilerlemesini engelleyen durumlardır.
Tanım
Pipelining, birden fazla komutun yürütülmesini, işlemlerini ardışık aşamalara bölerek örtüştüren bir tekniktir; bir tehlike ise, bir aşamayı duraklatmaya zorlayan herhangi bir durumdur, çünkü bir sonraki saat döngüsünde doğru bir şekilde ilerleyemez.
Kapsam
Bu konu, klasik komut pipeline'ını ve onu sınırlayan üç tehlike sınıfını ele almaktadır: yapısal tehlikeler (kaynak çakışmaları), veri tehlikeleri (komutlar arasındaki bağımlılıklar) ve kontrol tehlikeleri (dallanmalar). Standart çözüm yollarını — yönlendirme/atlama (forwarding/bypassing), duraklatma (stalling) ve dallanma yönetimi — içermektedir. İleri düzey paralel yürütme (komut seviyesi paralellik - instruction-level parallelism), derinlemesine dallanma yönü tahmini (dallanma tahmini - branch prediction) ve dinamik yeniden sıralama (sırasız yürütme - out-of-order execution) bu konunun kapsamı dışındadır.
Temel sorular
- Komut yürütmeyi aşamalara ayırmak, gecikmeyi azaltmadan verimi nasıl artırır?
- Yapısal, veri ve kontrol tehlikeleri nelerdir ve her birine ne sebep olur?
- Yönlendirme (forwarding), birçok veri tehlikesini duraklatmadan nasıl çözer?
- Bir pipeline'da dallanmaların maliyeti nedir ve bu maliyet nasıl azaltılır?
Anahtar kavramlar
- pipeline aşamaları (getirme, çözümleme, yürütme, bellek, geri yazma)
- verim ve gecikme
- yapısal tehlikeler
- veri tehlikeleri
- kontrol tehlikeleri
- yönlendirme ve atlama (forwarding and bypassing)
- pipeline duraklamaları ve boşlukları (stalls and bubbles)
- dallanma cezası
Temel kuramlar
- Pipeline verimi ve tehlikeler
- k aşamalı bir pipeline, ideal olarak doldurulduktan sonra döngü başına bir komutu tamamlar, ancak yapısal, veri ve kontrol tehlikeleri, verimi idealin altına düşüren duraklamalar (stalls) yaratır; pipeline tasarımı, bu duraklamaları en aza indirmeye odaklanır.
Mekanizmalar
Komut işleme aşamalara ayrılır, böylece bir komut yürütülürken, diğerleri getirilir ve çözülür. Yapısal bir tehlike, iki komutun aynı kaynağa ihtiyaç duyması durumunda ortaya çıkar; veri tehlikesi, bir komutun henüz üretilmemiş bir sonuca ihtiyaç duyması durumunda; kontrol tehlikesi ise, sonraki komutun çözülmemiş bir dallanmaya bağlı olması durumunda ortaya çıkar. Yönlendirme (forwarding), sonuçları doğrudan aşamalar arasında yönlendirir, yönlendirme yetersiz olduğunda duraklamalar (stalls) boşluklar (bubbles) ekler ve dallanma yönetimi, kontrol tehlikesi cezalarını azaltır.
Klinik önem
Pipelining, neredeyse her işlemcide temel performans tekniğidir ve tehlikeleri anlamak, komut sıralamasının ve dallanma davranışının hızı neden etkilediğini açıklar. Derleyici komut zamanlaması ve programcının bağımlılıklar ile dallanma kalıpları hakkındaki farkındalığı, pipelined donanım üzerinde performansı önemli ölçüde artırabilir.
Tarihçe
Pipelining, 1960'ların başında IBM Stretch ve CDC 6600 gibi erken yüksek performanslı makinelerde ortaya çıkmıştır. Basit beş aşamalı pipeline, 1980'lerin RISC işlemcileriyle kanonik bir öğretim ve tasarım modeli haline gelmiş, tehlikelerin ve çözüm yollarının sistematik sınıflandırması ise Hennessy-Patterson metinlerinde kodlanmıştır.
Öne çıkan isimler
- John L. Hennessy
- David A. Patterson
- Seymour Cray
İlgili konular
Temel eserler
- hennessy2019
- patterson2020
Sıkça sorulan sorular
- Pipelining, tek bir komutun daha hızlı çalışmasını sağlar mı?
- Hayır. Pipelining, tek bir komutun tamamlanma süresini (gecikme - latency) azaltmaz; komutların yürütülmesini örtüştürerek birim zamanda tamamlanan komut sayısını (verim - throughput) artırır, tıpkı bir montaj hattının tek bir öğeyi hızlandırmadan üretimi artırması gibi.
- Yönlendirme (forwarding) nedir?
- Yönlendirme veya atlama (bypassing), yeni hesaplanmış bir sonucu, onu üreten aşamadan, ona ihtiyaç duyan daha sonraki bir aşamaya doğrudan yönlendirir, kayıt dosyasına geri yazılmasını beklemek yerine. Bu, birçok veri tehlikesini pipeline'ı duraklatmadan çözer.