Aynı altı buyruk, tek yollu bir boru hattında on çevrimde, çift yollu bir boru hattında yedi çevrimde tamamlanır. İşaretli çevrimde her aşamada iki buyruk bulunur.

Çoklu buyruk başlatımlı işlemci (İngilizce: superscalar processor), bir saat çevriminde birden çok buyruğu aynı anda başlatıp yürütebilen işlemci tasarımıdır. Bu tasarım, işlemci içinde birden çok işlem birimi (örneğin birden fazla aritmetik mantık birimi ya da yükleme/saklama birimi) bulundurarak, birbirinden bağımsız buyrukların koşut olarak işlenmesini sağlar. Böylece tek bir çekirdek, çevrim başına buyruk (ÇBB) değerini birden büyük seviyelere çıkarabilir. Buna karşılık bir boru hattı işlemcisi her çevrimde en çok bir buyruk başlatır.

Boru hattıyla ilişkisi

Sıradan bir boru hattı işlemcisi, buyruk işlemeyi aşamalara bölerek üst üste bindirir; yine de her çevrimde en çok bir buyruğu tamamlamayı hedefler (ÇBB ≤ 1). Çoklu buyruk başlatımlı işlemci ise her çevrimde birden çok buyruğu aynı anda getirip çözer ve farklı işlem birimlerine dağıtır; bu sayede ÇBB değeri 1'in üzerine çıkabilir. Başka bir deyişle boru hattı zamanda (her aşamada farklı bir buyruk), çoklu buyruk başlatımı ise uzayda (aynı anda birden çok birim) koşutluk sağlar; çağdaş işlemcilerde iki teknik birlikte kullanılır.

Çalışma ilkesi

Çoklu buyruk başlatımlı bir işlemci her çevrimde bellekten birden çok buyruk getirir; bir dağıtıcı (dispatcher), bu buyruklar arasındaki bağımlılıkları çözümleyerek hangilerinin aynı anda hangi işlem birimlerine gönderilebileceğine karar verir.

Yapı

Çoklu buyruk başlatımlı bir işlemcinin boru hattı iki bölümden oluşur. Buyrukların getirilip hazırlandığı bölüm program sırasında çalışır; buyrukların yürütüldüğü bölüm ise sırayı bırakıp hazır olanı önce ele alır. Sonuçların kalıcı yapıldığı son bölümde sıra yeniden kurulur.

Getirme ve çözme

Her çevrimde bellekten birden çok buyruk getirilir. Getirme genişliği çoğu zaman başlatım genişliğinden büyük tutulur, çünkü getirilen öbeğin ortasına düşen bir dallanma öbeğin geri kalanını kullanılamaz kılar; geniş getirme bu kaybı bir ölçüde karşılar.

Çözme aşamasında her buyruğun türü, işlenenleri ve hedefi belirlenir. Sabit uzunluklu buyruk kümelerinde getirilen öbeğin nerelerinden bölüneceği baştan bellidir ve çözme koşut yapılabilir. Değişken uzunluklu kümelerde ise bir buyruğun nerede bittiği çözülmeden bilinemediğinden, aynı anda birden çok buyruğu çözmek ek donanım gerektirir.

Yazmaçların yeniden adlandırılması

Çözülen buyrukların mimari yazmaç adları fiziksel yazmaçlarla eşleştirilir. Bu işlem, aynı yazmacın art arda kullanılmasından doğan sahte bağımlılıkları ortadan kaldırır ve buyrukların gerçekte bağımsız olduğu durumları görünür kılar; gerçek veri bağımlılıkları ise yerinde kalır. Eşleştirmenin her çevrimde genişlik kadar buyruk için yapılması gerekir.

Bekleme ve başlatım

Yeniden adlandırılan buyruklar bekleme alanlarına yerleştirilir ve işlenenleri hazır olana dek orada durur. Her çevrimde, işlenenleri hazır olan buyruklar arasından en çok genişlik kadarı seçilerek işlem birimlerine gönderilir. Bu seçim program sırasına bakmaz; bekleyenler arasında sonradan gelmiş bir buyruk, kendinden önceki bir buyruktan önce başlatılabilir.

İşlem birimleri

Birimler yaptıkları işe göre ayrışır: tam sayı işlemleri için aritmetik mantık birimleri, çarpma birimi, kayan noktalı birim, bellek erişimi için yükle-sakla birimi ve dallanmaları çözen birim. Bir buyruk yalnızca kendi türüne uygun bir birime gönderilebildiğinden, genişliği artırmak birim sayısını artırmakla aynı şey değildir; birim karışımının programın buyruk karışımına uyması gerekir.

Kesinleştirme

Yürütme sırasız olsa da sonuçlar program sırasında kalıcı yapılır. Böylece dışarıdan görünen davranış sıralı bir işlemciyle aynı kalır ve bir kural dışı durumda işlemcinin durumu kesin biçimde belirlenebilir.

Sıralı ve sırasız başlatım

Çoklu buyruk başlatımlı işlemciler, buyrukları hangi sırayla başlattıklarına göre ikiye ayrılır. Ayrım buyruk kümesinde değil mikromimaridedir; aynı buyruk kümesi her iki biçimde de gerçeklenebilir.

Sıralı başlatımda buyruklar program sırasında başlatılır. İşlenenleri hazır olmayan bir buyruk beklediğinde arkasındaki bütün buyruklar da bekler, hazır olsalar bile onu geçemezler. Böyle bir işlemci her çevrimde birden çok buyruk başlatabilir, ama yalnızca art arda gelen ve aynı anda hazır olan buyruklar birlikte gidebilir; bu yüzden başarımı buyrukların program içindeki dizilişine duyarlıdır ve derleyicinin buyrukları uygun sıraya yerleştirmesi önem kazanır.

Sırasız başlatımda bir buyruk, işlenenleri hazır olur olmaz başlatılabilir. Program sırasında kendinden önce gelen bir buyruk beklerken sonraki bir buyruk onu geçebilir; böylece önbellekte bulunamayan bir bellek erişimi, arkasındaki bağımsız işi durdurmaz. Buna karşılık sıra yalnızca yürütmede bozulur, sonuçlar yine program sırasında kalıcı yapılır.

Aradaki fark donanım maliyetindedir. Sırasız başlatım; bekleme alanlarını, yazmaç yeniden adlandırma donanımını, hazır buyrukları saptayıp seçen mantığı ve sırayı geri kuran yeniden sıralama belleğini gerektirir. Bu yapılar hem yonga alanı hem de güç harcar ve işlemcinin saat süresini belirleyen yollar üzerinde bulunur.

Bu nedenle iki biçim de kullanımda kalmıştır. Enerji ve alanın belirleyici olduğu tasarımlarda dar ve sıralı bir çekirdek yeğlenirken, en yüksek başarımın arandığı tasarımlarda sırasız başlatım kullanılır. Aynı yongada iki türü birleştiren düzenlemeler de yaygındır: yüksek başarımlı sırasız çekirdeklerin yanına, aynı işi daha az güçle yapan daha yalın çekirdekler konur ve iş yükü ikisi arasında dağıtılır.

RISC-V ekosistemi bu iki yolun aynı buyruk kümesi üzerinde yan yana durabildiğini gösterir: SiFive U74 çekirdeği iki yollu ve sıralıdır, Berkeley'de geliştirilen açık kaynaklı BOOM çekirdeği ise sırasız yürütüm yapar.

Buyruk düzeyinde koşutluk

Çoklu buyruk başlatımlı işlemcilerin başarımı, bir programdaki birbirinden bağımsız ve aynı anda yürütülebilen buyrukların oranına, başka bir deyişle buyruk düzeyinde koşutluğa (İngilizce: instruction-level parallelism, ILP) bağlıdır. Veri ve denetim bağımlılıkları bu koşutluğu sınırlar. İşlemciler, koşutluğu artırmak için dallanma öngörüsü, yazmaçların yeniden adlandırılması ve sırasız yürütüm gibi tekniklerle birlikte çalışır. Tipik programlarda elde edilebilen buyruk düzeyinde koşutluk sınırlı olduğundan, çevrim başına başlatılan buyruk sayısını (işlemcinin genişliğini) artırmanın başarıma katkısı bir noktadan sonra azalır.

Sınırlamalar

Çoklu buyruk başlatımlı bir işlemcinin ulaşabileceği başarımı başlıca üç etken sınırlar:

  • Program akışındaki içkin buyruk düzeyinde koşutluğun derecesi.
  • Bağımlılık denetimi ve yazmaç yeniden adlandırma mantığının karmaşıklığı ile gecikmesi; çevrim başına genişlik arttıkça bu mantığın maliyeti hızla büyür.
  • Koşullu dalların işlenmesi; her dal, hangi buyrukların başlatılacağı konusunda belirsizlik yaratır ve dallanma öngörüsü gerektirir.

Bu etkenler yüzünden çoğu genel amaçlı işlemcide çevrim başına başlatılan buyruk sayısı tipik olarak dört ile sekiz arasında kalır.

Genişliğin donanım maliyeti

Veri yönlendirme ağının genişlikle büyümesi. Yatay çizgiler birim çıkışlarını, dikey çizgiler birim girişlerini gösterir; her kesişme bir bağlantıdır. Genişlik ikiden sekize çıktığında bağlantı sayısı dörtten altmış dörde çıkar.

Genişliği artırmanın önündeki engel yalnızca programda bulunabilecek koşutluğun azlığı değildir; genişleyen donanımın kendisi de yavaşlar. Subrata Palacharla, Norman Jouppi ve James Smith 1997'de, çoklu buyruk başlatımlı bir işlemcide hangi yapıların genişlikle birlikte ne hızla büyüdüğünü inceleyerek üç darboğaz belirlemiştir.

  • Yeniden adlandırma mantığı. Her çevrimde genişlik kadar buyruğun yazmaç adları eşleştirilmeli, üstelik aynı çevrimde getirilen buyruklar arasındaki bağımlılıklar da göz önüne alınmalıdır. Gereken karşılaştırma sayısı genişlikle birlikte hızla artar.
  • Uyandırma ve seçme mantığı. Bir işlem birimi sonuç ürettiğinde, bekleme alanlarında o sonucu bekleyen bütün buyrukların hazır duruma geçirilmesi gerekir; ardından hazır olanlar arasından o çevrim başlatılacaklar seçilir. Bu iki işin gecikmesi hem bekleyen buyruk sayısıyla hem de genişlikle büyür.
  • Veri yönlendirme ağı. Bir birimin ürettiği sonucun, o değeri bekleyen bütün birimlerin girişlerine ulaşabilmesi gerekir. Gereken yol sayısı birim sayısının karesiyle orantılı olarak arttığından, ağın kapladığı alan ve tellerin gecikmesi genişlikle birlikte hızla büyür.

Bu yapıların gecikmesi işlemcinin saat süresini doğrudan belirler. Genişliği artırmak bu yüzden iki yönlü bir ödünleşmedir: çevrim başına daha çok buyruk başlatılırken çevrimin kendisi uzayabilir ve toplam kazanç eriyebilir.

Yazmaç öbeği de aynı baskı altındadır. Her çevrimde genişlik kadar buyruk işlenenlerini okuyup sonuçlarını yazacaksa, öbeğin okuma ve yazma kapıları aynı oranda çoğalmalıdır; kapı sayısı arttıkça öbeğin alanı ve erişim süresi büyür.

Bu nedenlerin toplamı, genişlikte bir üst sınır oluşturur. Genişletmenin getirisi azalırken maliyeti hızlanarak arttığından, 1990'ların sonundan bu yana tasarımlar tek çekirdeği genişletmek yerine çekirdek sayısını ve iş parçacığı sayısını artırma yönüne kaymıştır.

Genişlik ile ulaşılan başarım

Bir işlemcinin genişliği, çevrim başına başlatabileceği buyruk sayısının üst sınırıdır; gerçekte ulaşılan çevrim başına buyruk değeri bu sınırın belirgin biçimde altında kalır. Aradaki farkı birkaç etken birlikte açar: buyruklar arasındaki veri bağımlılıkları, önbellekte bulunamayan bellek erişimleri, yanlış öngörülen dallanmalar ve programın buyruk karışımının işlem birimlerinin karışımına tam olarak uymaması.

Bu fark ölçülmüştür. Norman Jouppi ile David Wall 1989'da çoklu buyruk başlatımlı tasarımlarla derin boru hattılı tasarımları aynı ölçüte vurmuş ve gerçek programlarda bulunabilen koşutluğun iki yaklaşımı da benzer biçimde sınırladığını göstermiştir. Wall 1991'de aynı soruyu daha geniş bir varsayım aralığında ele almış; bulunabilen koşutluğun, dallanma öngörüsünün ve yazmaç yeniden adlandırmanın ne kadar iyimser varsayıldığına güçlü biçimde bağlı olduğunu, gerçekçi kabullerle ise sınırlı kaldığını ortaya koymuştur.

Bunun doğrudan sonucu, genişletmenin getirisinin azalmasıdır: genişlik iki katına çıkarıldığında çevrimde tamamlanan buyruk sayısı iki katına çıkmaz. Azalan getiri, genişletmenin donanım maliyetiyle birlikte değerlendirildiğinde çevrim başına başlatılan buyruk sayısına bir üst sınır koyar.

Çok uzun buyruk sözcüğü ile karşılaştırma

Koşutluğu bulma işini kimin üstlendiği, iki mimari yaklaşımı birbirinden ayırır. Çoklu buyruk başlatımlı işlemcide bu iş donanımdadır: buyruklar arasındaki bağımlılıklar çalışma anında çözümlenir ve hangi buyruğun hangi birime gideceğine işlemci karar verir. Çok uzun buyruk sözcüğü mimarisinde ise karar önceden derleyicide verilir; aynı çevrimde yürütülecek işlemler tek bir uzun buyruk sözcüğünün ayrı alanlarına yerleştirilir ve donanım onları olduğu gibi ilgili birimlere gönderir. Yaklaşımı 1983'te Joseph Fisher tanımlamıştır.

Donanım maliyeti

Kararın derleyiciye taşınması, çoklu buyruk başlatımını pahalı yapan yapıları gereksiz kılar. Bağımlılık denetimi, hazır buyrukları saptayıp seçen mantık ve sırayı geri kurma işi donanımdan düşer; aynı genişlikte daha küçük ve daha az güç harcayan bir çekirdek elde edilir.

Sınırları

Karşılığında derleyicinin bilmesi gereken şeyler artar. Bir bellek erişiminin önbellekte bulunup bulunmayacağı derleme anında bilinemez; derleyici en kötü durumu varsayarsa buyruk sözcüğünde boş alanlar üretir, iyimser varsayarsa donanımın beklemesi gerekir. Çoklu buyruk başlatımlı bir işlemci aynı durumu çalışma anında görüp bekleyen buyruğun yerine başka bir buyruğu öne alabilir.

İkinci sınır, derlenmiş programların ömrüyle ilgilidir. Çok uzun buyruk sözcüğünde genişlik ve birim gecikmeleri buyruk kodlamasının içine girdiğinden, aynı programın daha geniş ya da farklı gecikmeli bir makinede çalışması için yeniden derlenmesi gerekir. Çoklu buyruk başlatımında ise genişlik yalnızca mikromimariye ait bir seçimdir; buyruk kümesi değişmediğinden yıllar önce derlenmiş programlar yeni işlemcilerde çalışmayı sürdürür ve geriye uyumluluk korunur.

Bu ikinci fark, iki yaklaşımın nerede kullanıldığını büyük ölçüde belirlemiştir. Üzerinde çalışacak yazılımın çok önce derlenmiş olabildiği genel amaçlı işlemcilerde çoklu buyruk başlatımı benimsenmiştir. Derleyicinin donanımla birlikte güncellenebildiği ve iş yükünün düzenli olduğu gömülü alanlarda ise derleyiciye dayanan çözümler kullanılmayı sürdürmektedir.

Tarihçe

Öncüller

Çoklu işlem birimiyle koşut işleme fikri, Seymour Cray'in 1964'te piyasaya sürülen CDC 6600 bilgisayarına dayanır; bu makine on adet bağımsız işlem birimi içeriyordu. 1960'ların ortasında geliştirilen IBM System/360 Model 91, Tomasulo algoritmasıyla sırasız yürütümü tanıttı. Bu makineler koşut çalışan birimleri ve buyrukları program sırasının dışında yürütmeyi getirdi; her çevrimde birden çok buyruğun başlatılması ise sonraki adım oldu.

İlk tek yongalı gerçeklemeler

Tek yongada gerçeklenen ticari çoklu buyruk başlatımlı işlemciler 1980'lerin sonunda ortaya çıktı. Bunların ilklerinden biri, gömülü kullanım için tasarlanan Intel i960CA (1989) oldu. Onu AMD 29050 (1990) ve Motorola MC88110 (1991) izledi. IBM'in 1990'da tanıttığı RS/6000 işlemcisi, tam sayı, kayan noktalı ve dallanma işlerini ayrı birimlere aynı çevrimde gönderebilen bir yapıya sahipti.

Yaygınlaşma

Teknik 1990'ların ortasında yüksek başarımlı işlemcilerin ortak özelliği hâline geldi. Digital'in dört yollu Alpha 21164'ü (1995) ve MIPS R10000 (1996) bu kuşağın örnekleridir. Alpha 21264 (1998) ile birlikte dallanma öngörüsü ve sırasız yürütüm daha da derinleştirildi.

x86 dünyasında ilk çoklu buyruk başlatımlı işlemci, Intel'in 1993'te tanıttığı Pentium'dur; onu izleyen Pentium Pro ve AMD K5, karmaşık x86 buyruklarını içeride daha basit mikro işlemlere ayrıştırarak sırasız yürüttü. Bu ayrıştırma, buyruk kümesinin karmaşıklığını mikromimariden yalıtarak x86'nın çoklu buyruk başlatımından yararlanmasını sağladı.

Yaklaşık 1998'den sonra, düşük güçlü ve gömülü uygulamalar dışındaki genel amaçlı işlemcilerin neredeyse tamamı çoklu buyruk başlatımlı tasarımları benimsemiştir. Bundan sonraki gelişme genişliğin büyümesinden çok, aynı genişlikte daha isabetli öngörü, daha büyük bekleme yapıları ve daha çok çekirdek yönünde olmuştur.

Ayrıca bakınız

Kaynakça

  1. ^ a b c d e f g h i j k l m n o Hennessy, John L.; Patterson, David A. (2019). Computer Architecture: A Quantitative Approach (6 bas.). Morgan Kaufmann. ISBN 978-0128119051. 
  2. ^ a b c d e f g h Smith, James E.; Sohi, Gurindar S. (1995). "The Microarchitecture of Superscalar Processors". Proceedings of the IEEE. 83 (12). ss. 1609-1624. doi:10.1109/5.476078. 
  3. ^ a b c d e Johnson, Mike (1991). Superscalar Microprocessor Design. Prentice-Hall. ISBN 0138756341. 
  4. ^ a b c d Palacharla, Subbarao; Jouppi, Norman P.; Smith, James E. (1997). "Complexity-effective superscalar processors". Proceedings of the 24th Annual International Symposium on Computer Architecture. ss. 206-218. doi:10.1145/264107.264201. 
  5. ^ Celio, Christopher; Patterson, David A.; Asanović, Krste (2015). "The Berkeley Out-of-Order Machine (BOOM): An Industry-Competitive, Synthesizable, Parameterized RISC-V Processor" (PDF). Technical Report UCB/EECS-2015-167, University of California, Berkeley. 13 Haziran 2024 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 3 Eylül 2026. 
  6. ^ Patterson, David A.; Hennessy, John L. (2020). Computer Organization and Design RISC-V Edition (2 bas.). Morgan Kaufmann. ISBN 978-0128203316. 
  7. ^ Jouppi, Norman P.; Wall, David W. (1989). "Available instruction-level parallelism for superscalar and superpipelined machines". Proceedings of the Third International Conference on Architectural Support for Programming Languages and Operating Systems. ss. 272-282. doi:10.1145/70082.68207. 
  8. ^ Wall, David W. (1991). "Limits of instruction-level parallelism". ACM SIGPLAN Notices. 26 (4). ss. 176-188. doi:10.1145/106973.106991. 
  9. ^ Fisher, Joseph A. (1983). "Very Long Instruction Word architectures and the ELI-512". Proceedings of the 10th Annual International Symposium on Computer Architecture. ss. 140-150. doi:10.1145/800046.801649. 
  10. ^ McGeady, Steven (1990). "Inside Intel's i960CA superscalar processor". Microprocessors and Microsystems. 14 (6). ss. 385-396. doi:10.1016/0141-9331(90)90111-8. 
  11. ^ Grohoski, Gregory F. (1990). "Machine organization of the IBM RISC System/6000 processor". IBM Journal of Research and Development. 34 (1). ss. 37-58. doi:10.1147/rd.341.0037. 
  12. ^ Edmondson, John H.; Rubinfeld, Paul; Preston, Ronald (1995). "Superscalar instruction execution in the 21164 Alpha microprocessor". IEEE Micro. 15 (2). ss. 33-43. doi:10.1109/40.372349. 
  13. ^ Yeager, Kenneth C. (1996). "The MIPS R10000 superscalar microprocessor". IEEE Micro. 16 (2). ss. 28-41. doi:10.1109/40.491460. 
  14. ^ Kessler, Richard E. (1999). "The Alpha 21264 microprocessor". IEEE Micro. 19 (2). ss. 24-36. doi:10.1109/40.755465. 
  15. ^ Papworth, David B. (1996). "Tuning the Pentium Pro microarchitecture". IEEE Micro. 16 (2). ss. 8-15. doi:10.1109/40.491458.