Sırasız yürütüm

Sırasız yürütüm, bilgisayar mühendisliğinde,, günümüz yüksek performanslı işlemcilerinde kullanılan, yüksek gecikmeler tarafından harcanan buyruk çevrimlerini kullanıma sunan bir bir paradigmadır.
Tarihçe
1970'lerde ve 1980'lerin başında bilgisayar mimarisinin ana araştırma alanlarından biri olan sırasız yürütüm, veri akış hesaplamasının sınırlı bir formudur. Bu konuda Yale Patt tarafından önemli bir akademik araştırma yapılmış ve yine onun HPSm simülatöründe sunulmuştur. James E. Smith ve A. R. Pleszkun tarafından 1985 yılında yayınlanan makalede kural dışı durumlardaki kesin davranışların nasıl koruncağı açıklanarak tasarı tamamlanmıştır.
Tartışmalı da olsa sırasız yürütüm kullanan ilk makine, skor tahtası kullanarak çakışmaları çözümleyen, CDC 6600 (1964) olmuştur. Modern kullanımda skor tahtası kullanımı, okuduktan sonra yazma durumunda bekleme yapması özelliğinden ötürü, sırasız yürütümün değil de, daha çok sıralı yürütümün bir parçası olarak görülmektedir.
Üç yıl kadar sonra, IBM 360/91 (1966) sırasız yürütümü tam olarak destekleyen Tomasulo algoritmasını tanıttı.
1990 yılında, sadece kayan nokta işlemleriyle sınırlı olmasına rağmen IBM ilk sırasız mikroişlemci olan POWER1'i tanıttı.
Bundan sonra sırasız yürütüm, IBM/Motorola PowerPC 601 (1993), Fujitsu/HAL SPARC64 (1995), Intel Pentium Pro (1995), MIPS R10000 (1996), HP PA-8000 (1996), AMD K5 (1996) ve DEC Alpha 21264 (1998) gibi öne çıkan örneklerle 1990'lı yıllarda daha yaygın hale geldi. Sun UltraSPARC, HP/Intel Itanium, Transmeta Crusoe, Intel Atom ve IBM POWER6 ise bu akımın dışında kalan dikkat çekici örneklerdir.
1990'lı yılların ortalarına kadar bu tekniğin makinelerde temel tasarım olarak kendini gösterememesinin nedeni, sırasız yürütümün mantıksal karmaşıklığıdır. Bu sınıfta bir makine oluşturmak için gerekli olan yüksek miktarda silikon alanın getireceği yüksek maliyetlerden ötürü fiyata duyarlı marketlere hitap eden üreticiler hala bu paradigmayı kullanmamaktadır. Sırasız yürütüm tasarımında ulaşılması zor hedeflerden biri de düşük tüketimi hedefidir.
Genel Konsept
Sıralı Yürütüm

Eski işlemcilerde sıralı yürütüm yapılmaktaydı ve buyrukların işlenmesi aşağıdaki adımlarla gerçekleşiyordu;
Buyruğu getirilmesi.
Eğer girdi işlenenleri ulaşılabilir durumda ise buyruğun uygun fonksiyon ünitesine iletilmesi. Eğer bir ya da daha fazla işlenen, içinde bulunulan saat vuruşunda ulaşılamaz durumda ise işlemci işlenenler ulaşılabilir duruma gelene kadar bekler.
Buyruğun ilgili fonksiyon ünitesi tarafından işletilmesi.
Sonuçların yazmaç dosyasına geri yazılması.
Sırasız Yürütüm
Sırsız yürütümde buyrukların işlenmesi aşağıdaki şekilde gerçekleştirilir.

Buyruğun getirilmesi
Buyruğun buyruk kuyruğuna girmesi
Buyruğun işlenenlerinin tamamı ulaşılabilir olana kadar kuyrukta bekler ve işlenenler ulaşılabilir duruma geldiğinde kuyruktan çıkmasına izin verilir. Program sırasına göre kendisinden önce bulunan buyruktan daha önce kuyruktan çıkabilir.
Buyruk ilgili fonksiyonel birim tarafından işlenir.
Sonuçlar kuyruğa girer.
Sonuç, kendisinden önceki buyrukların sonuçları yazmaç dosyasına yazıldıktan sonra kuyruktan çıkabilir ve yazmaç dosyasına yazılır.
Sırasız yürütme de amaç, işlenecek veriler ulaşılamaz durumda iken işlemcinin bekletilmesini önlemektir. Yukarıdaki sıralı yürütme basamaklarında 2. basamakta bulunan veri eksikliği yüzünden oluşan işlemcinin boşta bekleme gerekliliği sırasız yürütme basamaklarında ortadan kaldırılmıştır. Sırasız yürütme yapan işlemciler gerekli olan bekleme süresini işlemeye hazır olan diğer buyruklarla doldurup, işlemlerin sonunda sonuçları sıraya sokarak işlemlerin program sırasına uygun olarak işlenmiş gibi görünmesini sağlar.
Buyrukların bilgisayar kodlarındaki orijinal sırasında program sırası, işlemcide ele alınma sırasına ise veri sırası denir. Veri sırası, verilerin işlemci yazmaçları tarafından ulaşılacak halde bulunup bulunmamasına göre belirlenir. Açıkçası, bir sıradan diğerine çevrim yapmak, sonuçların kuyruktan doğru sırada çıkmasını sağlamak için mantıksal bir sıra sürdürmek için karmaşık devreler gereklidir. Yeniden sıralama belleği sırasız yürütülen buyrukların yeniden program sırasına sokulması için kullanılır.
Sırasız yürütmenin faydaları boru hattının pratikte uygulanması derinleştikçe ve bellek ile işlemci hızları arasındaki fark arttıkça önem kazanmakta ve artmaktadır.
Dağıtım ve konu bağlantılarının kesilmesi
Yeni paradigmayla yaratılan farklılıklardan biri de, kuyrukların oluşturulması ile, dağıtım basamağının konu basamağı ile bağlantısının koparılması ve bitirilme aşamasının yürütme aşamasından ayrılmasına olanak tanımasıdır. Sıralı yürütüm yapan önceki işlemcilerde bu aşamalar, boru hattı kullanılarak, birbiri ardından aralık bırakmaksızın yapılmaktaydı.
Frekansı düşürecek yanlış terim bağımlılıklarından korunmak amacıyla yazmaçların tekrar adlandırılması adı verilen bir teknik kullanılır. Bu tasarımda, mimaride tanımlanmış olandan daha fazla sayıda yazmaç vardır. Fiziksel yazmaçlar aynı mimari yazmacın birçok versiyonu olabilecek şekilde işaretlenir.
Yürütme ve geri yazmanın birbirinden ayrılması
Kural dışı durumlar, dallanma tahmini hataları gibi çözülmesi gereken durumlar için sonuçların bir kuyrukta tutulması gereklidir. Sonuç kuyruğu, buyrukların program sırasına uygun olarak tamamlanabilmelerni sağlamak için, programların kural dışı bir durumdan sonra tekrar başlamasına izin verir. Sonuç kuyruğu sonuçların, eski buyrukların hatalı dallanma tahminleri ve kural dışı durumlarından ötürü iptal edilebilmesine olanak sağlar. Buyrukların önceki dallanmalarının çözümlemelerinin bildirilebilmesi yeteneğine şüpheli yürütüm denir.
Mikro-mimari seviyede değişiklikler
Buyruklar merkezi bir kuyruğa mı yoksa birden fazla ayrık kuyruklara mı dağıtılır?
IBM PowerPC işlemcileri farklı fonksiyonel birimler arasında dağıtılmış birçok kuyruk kullanırken, diğer sırasız yürütüm yapan işlemciler merkezi bir kuyruk kullanır. IBM dağıtılmış kuyruklar için rezervasyon durakları adı verilen bir terim kullanır.
Güncel bir sonuç kuyruğu var mıdır veya sonuçlar direkt olarak yazmaç dosyasına mı kaydedilir? İkinci olarak, o an yürütülmekte olan her bir buyruğun yazmaç yeniden adlandırma bilgilerinin tutulduğu yazmaç haritası kuyruklama fonksiyonunu işletir.
İlk Intel sırasız işlemcileri tekrar sıralama önbelleği adı verilen bir sonuç kuyruğu kullanırken, daha sonraki sırasız işlemciler yazmaç haritaları kullanır.
Tam olarak söylemek gerekirse, Intel P6 ailesi işlemcilerinde hem yeniden sıralama önbelleği (ROB) hem de yazmaç haritası mekanizması (RAT) vardır. ROB bütünüyle dallanma tahmini hatalarını düzeltmek amacıyla tasarlanmıştır.
Intel P6 ailesi ilk sırasız işlemciler arasında olmasına rağmen, hala INTEL'in amiral gemisi mikroişlemci ailesidir.
Komut işleme