Sırasız Yürütme
Sırasız yürütme, bir işlemcinin komutları kesinlikle program sırasına göre değil, işlenenleri hazır olur olmaz yürütmesine olanak tanır; bu sırada yazmaç yeniden adlandırma (register renaming) ve ara bellekleme (buffering) kullanarak paralelliği ortaya çıkarır ve yine de sıralı sonuçlar üretir.
Tanım
Sırasız yürütme, bir işlemcinin işlenenleri mevcut olduğunda bağımsız komutları çalıştırmak üzere komut yürütmesini dinamik olarak yeniden sıraladığı, aynı zamanda sıralı ve program sırasına uygun tamamlama görünümünü korumak için ara bellekleme (buffering) ve yeniden adlandırma (renaming) kullandığı bir mikro mimari tekniktir.
Kapsam
Bu konu, dinamik zamanlama (dynamic scheduling) kavramını ele almaktadır: rezervasyon istasyonları (reservation stations), yanlış bağımlılıkları gidermek için yazmaç yeniden adlandırma (register renaming), sıralı işleme (in-order commit) sağlayan yeniden sıralama arabelleği (reorder buffer) ve spekülatif yürütme kurtarma. Doğrudan Tomasulo algoritmasına dayanmaktadır. Dal yönü tahmini (branch prediction) ve ne kadar paralellik olduğunun daha geniş kavramı olan komut seviyesi paralelliği (instruction-level parallelism) bu kapsamın dışındadır; konu, yeniden sıralama mekanizmasının kendisine odaklanmaktadır.
Temel sorular
- Bir işlemci, program sırasının dışında komutları nasıl yürütebilir ve yine de doğru, sıralı sonuçlar üretebilir?
- Yazmaç yeniden adlandırma (register renaming), yazma-sonrası-okuma (write-after-read) ve yazma-sonrası-yazma (write-after-write) bağımlılıklarını nasıl ortadan kaldırır?
- Rezervasyon istasyonları (reservation stations) ve yeniden sıralama arabelleği (reorder buffer) ne gibi katkılar sağlar?
- Sırasız bir çekirdekte istisnalar ve yanlış tahminler nasıl kesin olarak kurtarılır?
Anahtar kavramlar
- dinamik zamanlama (dynamic scheduling)
- rezervasyon istasyonları (reservation stations)
- yazmaç yeniden adlandırma (register renaming)
- ortak veri yolu (common data bus)
- yeniden sıralama arabelleği (reorder buffer)
- sıralı işleme (in-order commit)
- kesin istisnalar
- spekülatif yürütme kurtarma
Temel kuramlar
- Tomasulo algoritması
- Tomasulo'nun şeması, işlenenleri kullanılabilir hale geldikçe yazmaçları yeniden adlandırmak ve komutları işlevsel birimlere (functional units) göndermek için rezervasyon istasyonları (reservation stations) ve ortak bir veri yolu (common data bus) kullanır; bu, yalnızca gerçek veri bağımlılıklarına saygı duyan sırasız yürütmeye olanak tanır.
- Sıralı işleme (in-order commit) yoluyla kesin istisnalar
- Bir yeniden sıralama arabelleği (reorder buffer), sırasız komutların sonuçlarını tutar ve bunları program sırasına göre işler; böylece istisnalar ve yanlış tahminler, yürütme kesinlikle sıralıymış gibi kesin olarak ele alınabilir.
Mekanizmalar
Çözülmüş komutlar fiziksel yazmaçlara yeniden adlandırılır ve rezervasyon istasyonlarına (reservation stations) veya bir yayın kuyruğuna (issue queue) yerleştirilir; burada bir sonuç veri yolu (result bus) üzerinden yayınlanan işlenenleri beklerler. Hazır olduklarında, mevcut işlevsel birimlerde (functional units) herhangi bir sırada yürütülürler. Bir yeniden sıralama arabelleği (reorder buffer) orijinal program sırasını takip eder ve sonuçları sıralı olarak işler; bir yanlış tahmin (misprediction) veya istisna durumunda spekülatif sonuçları atar, böylece mimari durum her zaman kesin olur.
Klinik önem
Sırasız yürütme, bağımsız işler bularak bellek ve yürütme gecikmelerini gizleyen yüksek performanslı CPU'ların temel motorudur. Ayrıca güvenlik çıkarımları da bulunmaktadır: spekülatif, sırasız işler iptal edilmeden önce geçici olarak verilere erişebildiği için, Spectre ve Meltdown sınıfı mikro mimari yan kanal saldırılarını mümkün kılmıştır.
Tarihçe
Tomasulo, dinamik zamanlamayı (dynamic scheduling) 1967'de IBM System/360 Model 91'de tanıtmıştır. 1980'lerde geliştirilen, kesin istisnalar için yeniden sıralama arabelleği (reorder buffer) ile birleşimi, sırasız yürütmeyi genel amaçlı işlemciler için pratik hale getirmiş ve 1990'ların ortalarından itibaren yüksek performanslı tasarımlarda standartlaşmıştır.
Tartışmalar
- Performans ve karmaşıklık, güç ve güvenlik
- Sırasız yürütme, güçlü tek iş parçacıklı performans sunsa da, donanım karmaşıklığı ve güç tüketimi açısından önemli bir maliyetle gelir ve spekülasyonunun istismar edilebilir olduğu kanıtlanmıştır; bu durum, ne kadar agresif spekülasyon yapılacağı ile daha basit, daha verimli veya daha güvenli tasarımların tercih edilmesi arasındaki tartışmayı körüklemektedir.
Öne çıkan isimler
- Robert Tomasulo
- Yale Patt
- James E. Smith
- John L. Hennessy
İlgili konular
Temel eserler
- tomasulo1967
- hennessy2019
Sıkça sorulan sorular
- Komutlar sırasız yürütülürse, program yine de nasıl doğru olur?
- İşlemci yalnızca yürütmeyi yeniden sıralar, sonuçları değil. Yazmaç yeniden adlandırma (register renaming), gerçek veri bağımlılıklarına saygı duyulmasını sağlar ve bir yeniden sıralama arabelleği (reorder buffer) sonuçları orijinal program sırasına göre işler; böylece görünür mimari durum, sıralı yürütmenin üreteceği ile tamamen aynı olur.
- Yazmaç yeniden adlandırma (register renaming) nedir?
- Yazmaç yeniden adlandırma (register renaming), komutlarda adlandırılan mimari yazmaçları daha büyük bir fiziksel yazmaç havuzuna eşler. Bu, yazmaç adlarının yeniden kullanılmasından kaynaklanan yanlış (isim) bağımlılıklarını ortadan kaldırarak, daha fazla bağımsız komutun yazmaç depolama konusunda çakışmadan paralel olarak yürütülmesine olanak tanır.