# Çok uzun buyruk kelimesi
Çok uzun buyruk kelimesi, buyruk düzeyindeki paralelliğin avantajından yararlanmak için geliştirilmiş bir işlemci tasarımıdır. Her buyruğu arka arkaya çalıştıran işlemciler, işlemci kaynaklarını verimsiz bir şekilde kullanabilmekte ve bu durum da başarımın düşmesine neden olmaktadır. Başarım, sıralı çalışan buyrukların çalıştırılma basamaklarında farklı aşamalarda olmasıyla (Boru hattı yöntemi) veya aynı anda birden fazla buyruğun birbirinden bağımsız olarak çalıştırılmasıyla (Superscalar işlemciler) arttırılabilir. Bu yöntemlerin daha da iyileştirilmesi, buyrukların programdaki sırasından farklı bir sırada çalıştırılması ile sağlanabilir; bu yönteme de Sırasız yürütüm (İngilizcesi: out-of-order execution) denir.
Bu üç teknik gerçekleştirildiğinde hepsinin maliyeti aynıdır: donanım karmaşıklığı. İşlemci buyrukları paralel olarak çalıştırmadan önce, buyrukların birbirlerine bağımlılıkları olup olmadığını kontrol etmek zorundadır. Örneğin, ilk buyruğun sonucu ikinci buyrukta girdi olarak verilecekse bu iki buyruk paralel olarak çalıştırılamaz. Aynı zamanda ikinci buyruk birincisinden önce de çalıştırılamayacaktır. Modern Sırasız yürütüm yöntemi ile çalışan işlemciler, buyrukların zamanlamasını yapan ve buyruk bağımlılıklarını bulan donanım öğelerinin kaynak kullanımını artırmaktadır.
Çok uzun buyruk cümlesi yöntemi ise işlemleri derleme zamanında belirlenen, sabit bir sırada paralel olarak yürütür. Yürütme sırası derleyici tarafından belirlendiği için, işlemcinin yukarıdaki üç yöntemde kullanılan buyrukların zamanlamasını ayarlayan donanıma gerek kalmamaktadır. Sonuç olarak, çok uzun buyruk kelimesi kullanan işlemciler superscalar işlemcilere göre daha az donanım karmaşıklığı ile güçlü hesaplama yeteneği sunarken; derleyici yönünden daha karmaşık yapıdadır.
Yeni mimariler ortaya çıksa da, yenilikler ancak kod neslinin izin verdiği ölçüde yarar sağlar. Ayrıca özel amaçlı buyruklar her ne kadar karmaşık yapıdaki işlemleri çözme yeteneğine sahip olsalar da (örneğin Fourier dönüşümü veya tomografik hesaplamalar) derleyiciler işlemciye yeterli kaynak sağlayamadığı müddetçe kullanımları anlamsızdır.


## Tasarım.
Superscalar tasarımlarda, buyruk kümesi yürütme elemanlarının durumlarından haberdar değildir. Her buyruk yalnızca bir işleme karşılık gelir. Çoğu superscalar tasarımda, buyruk genişliği 32 bit veya daha azdır. Çok uzun buyruk kelimesi bir "Çoklu buyruk çoklu veri (ingilizcesi "multiple instruction multiple data")" türüdür.
Öte yandan bir adet çok uzun buyruk kelimesi birden fazla işleme karşılık gelir. Bir buyruk her yürütme elemanına bir işlem göndermek üzere tasarlanmıştır. Örneğin, 5 yürütme elemanı olan birçok uzun buyruk kelimeli işlemcide, buyruk kelimesi her yürütme elemanının hangi işlemi yürüteceğini saklar ve her işlem ilgili yürütme elemanında yürütülür. Bu durumu düzenlemek için çok uzun buyruk kelimeleri genellikle en az 64 bitten oluşur ve bazı mimarilerde çok daha uzundur.
Örnek; aşağıda SHARC(Super Harvard Architecture Single-Chip Computer) adlı mimari için birçok uzun buyruk kelimesi verilmiştir. Bir çevrimde işlemci, kayan noktalı çarpma işlemi, kayan noktalı toplama işlemi ve iki adet arttırarak yükleme işlemi gerçekleştirmektedir. Bunların hepsi 48 bitlik bir buyruk kelimesine denk gelmektedir.
 f12=f0*f4, f8=f8+f12, f0=dm(i0,m³), f4=pm(i8,m9);
Bilgisayar mimarisinin ilk günlerinden bu yana bazı işlemciler paralel işlem yapabilmek adına birkaç adet AMB(Aritmetik Mantık Birimi) barındırmaktadır. Superscalar işlemcilerde ise hangi işlemlerin paralel olarak çalışacağına donanım karar verir. Çok uzun buyruk kelimesi mimarisinde hangi işlemlerin paralel çalışacağına yazılım yani derleyici karar vermektedir. Buyrukların zamanlanması için gerekli olan karmaşıklık derleyiciye yüklendiği için bu mimaride donanım karmaşıklığı azalmaktadır.
Benzer bir sorun da paralelleştirilebilen bir buyruk bir dallanmanın girdisi olarak geldiği durumlarda meydana gelir. Modern işlemciler dallanmaların ne yöne gideceğini daha işlem sonuçları ortaya çıkmadan tahmin ederek belirlenen yöndeki buyrukları yürütmeye hazır konuma getirir, hatta bazı mimarilerde bu buyrukları yürütmeye başlar. İşlemci yanlış tahmin ettiyse tüm bu buyruklar ve içerikleri işlemciden dışarı atılır ve doğru buyruklar yüklenir ki bu da çok zaman kaybı anlamına gelir.
Buyrukların tahmin sırasında dispatch mantığında oluşan bu karmaşıklık, orijinal olarak çok basit bir yapıya sahip olan İndirgenmiş komut takımı bilgisayarı tasarımı sekteye uğramış olur. Çok uzun buyruk kelimesi kullanan bilgisayarlar bu mantıktan yoksundurlar, ancak bu mantığın sebep olduğu güç tüketimi ve olası tasarım sorunları ve başka olumsuz etkilerinden de korunmuş durumdadır.
Çok uzun buyruk kelimesi tasarımında, derleyici bulgusal(heuristics) bir yöntem veya geçmişe bakma yöntemini kullanarak dallanmaları tahmin etmeye çalışır. Bu sayede buyrukların sırasını dallanmadan önce belirler ve en olası yöne doğru tahminlerle ilerler. Dallanma beklenenin aksi yönde giderse, derleyici programın anlamsal bütünlüğünü koruyacak olan dengeleyici kodu üretmiş olacaktır.


## Tarihçe.
Çok uzun buyruk kelimesi deyimi ve mimarisi, 1980'lerin başında Yale Üniversitesi'nde Josh Fisher ve takımı tarafından geliştirilmiştir. Çok uzun buyruk kelimesi için kullanılan derleyiciler için izlemsel zamanlama (trace scheduling) kavramını New York Üniversitesi'nde yüksek lisans yaparken geliştirmiştir. Çok uzun buyruk kelimesi ile ilgili olarak, kaynakları önceden zamanlama ve 
buyruk düzeyi paralellik kavramları yatay ve çok uzun mikrokodlar için yazılım tabanlı olarak tasarlanmıştı. Fisher'ın getirdiği yenilik ise, normal bir programlama dili ile yazılmış olan kodları yatay ve uzun mikrokodlara çeviren bir derleyici geliştirmek olmuştur. Fisher, iyi bir başarım elde etmenin ve geniş işlem kapasitesine sahip bir makine elde etmenin, basit bloklardaki paralelliklerden daha iyisini elde etmekten geçtiğini fark etmişti. Bölgesel planlama için bir teknik geliştirerek basit bloklarda olandan daha ileri seviyede paralellik elde etti.
Fisher'ın diğer bir yeni fikri de işlemcinin derleyiciye uygun olarak tasarlanması yönündedir (hatta derleyici ile işlemci tasarımı beraber yapılmalı). Bu fikri Fisher, Yale Üniversitesi'nde gözlemlediği mimari düzeydeki FPS164 benzeri işlemcilerin derleyicilerinden kaynaklanan zorluklardan esinlenerek ortaya koymuştur.
FPS164 gibi Karmaşık komut setli bilgisayarlar, buyruk tanımlamasını sonuçları kaydeden buyruklardan ayırırlar ve bunun için de çok karmaşık planlama algoritmaları kullanırlar. Fisher uygun Çok uzun buyruk kelimesi tasarımı elde etmek için bir dizi ilke belirlemiştir. Bunlar arasında kendiliğinden tüketimli boru hattı yöntemi, geniş çok portlu yazmaç öbeği ve bellek mimarileri vardır. Bu ilkeler derleyicileri daha hızlı kod üretmesine olanak sağlamıştır.
İlk Çok uzun buyruk kelimeli derleyici John Ellis tarafından Fisher denetiminde doktora tezinde tanımlanmıştır. John Ruttenberg da planlama evrelerinde kullanılmak üzere önemli algoritmalar geliştirmiştir.
Fisher 1984 yılında Yale'dan ayrılarak, John O'Donnell ve John Ruttenberg ile birlikte Multiflow adında bir şirket kurmuştur. Multiflow, TRACE serisi Çok uzun buyruk kelimeli bilgisayarların nakliyesine 1987 yılında başlamıştır. Multiflow'un çok uzun buyruk kelimeli bilgisayarı buyruk başına 28 tane operasyonu paralel olarak işleyebiliyordu. TRACE sistemi orta-geniş ve Çok geniş ölçekli tümleşik devrelerin karışımı şeklindedir. Ancak bellek harici parçaların birleştiriminin pahalılaşmasıyla birlikte bu sistem rafa kaldırılmıştır. Yonga mimarisinin çoklu yayımlı işlemcilere izin verdiği dönemi yakalayamamış ve bu dönemde önce Multiflow teknolojisi son bulmuştur. Büyük yarı-iletken şirketleri bu kapsamda Multiflow teknolojisinin değerini anlamıştır. Multiflow derleyicisi ve mimarisi daha sonradan bu şirketler üzerine lisanslanmıştır.


## Gerçekleştirim.
Cydrome firması 1980'lerin sonunda çok uzun buyruk kelimesi kullanan nümerik işlemci geliştirmiştir. Bu şirket, Multiflow şirketi gibi birkaç yıl sonra kapanmıştır.
Multiflow teknolojisinin bir lisans sahibi de Hewlett-Packard firmasıdır ve Josh Fisher Multiflow şirketi battıktan sonra bu firmaya katılmıştır. Cydrome firmasının kurucusu olan Bob Rau da firmanın batmasından sonra HP'de çalışmaya başlamıştır. Bu iki kişi 90'lı yıllarda HP'nin bilgisayar mimarisi araştırmalarında liderlik etmişlerdir.
Yukarıdaki sistemlere ek olarak, onlarla aynı zamanlarda, Intel çok uzun buyruk kelimeli bir işlemci olan Intel i860'ı geliştirmiştir. Bu işlemci Intel'in ilk 64bit işlemcisidir. i860 aynı zamanda çok uzun buyruk kelimesini tek yongada kullanan ilk işlemcidir. Çok uzun buyruk kelimesi ve İndirgenmiş komut takımı bilgisayarı olmak üzere iki seçenekte de çalışabilmektedir.
90'ların başında Intel i860 ndirgenmiş komut takımı bilgisayarını tanıttı. Bu tek yonga işlemci iki modda çalışabiliyordu: skalar mod ve çok uzun buyruk kelimeli mod. Çok uzun buyruk kelimeli modda işlemci her zaman 2 buyruk getirerek birinin tam sayı işlemi diğerinin ondalık sayı işlemi olduğunu varsayıyordu.
i860'ın çok uzun buyruk kelimesi modu çoğunlukla gömülü dijital sinyal işleme uygulamalarında kullanılıyordu. Bunun sebebi sinyal işleme uygulamalarının verilerinin basit, sıralı ve tahmin edilebilir olması ve tasarımcıya paralel yürütmenin tüm artılarını sağlamasıdır. Çok uzun buyruk kelimeli modda i860 işlemcisi 20-40 arası çift duyarlılıkta MFLOPS(Mega derecesinde ondalık sayı işlemi) yapabiliyordu.
1990 yılında Hewlett-Packard firması geliştirdikleri PA-RISC işlemci ailesinin bir yan etkisi olarak bu problemi araştırmaya başladılar. Sonuç olarak da işlemcideki karmaşık olan dispatch mantığının kaldırılarak bu yükün derleyiciye aktarılması ile işlemciler büyük oranda basitleştirilmekteydi. Bugünün derleyicileri 1980'lerdeki derleyicilerden çok daha karmaşık olduğu için derleyiciye eklenen karmaşıklık bugün çok düşük bir maliyet sayılmaktadır.
Çok uzun buyruk kelimeli bilgisayarlar çoğunlukla çok sayıda birbirinden bağımsız RISC-benzeri fonksiyonel üniteden oluşur. Güncel versiyonlar dört ila sekiz arasında fonksiyonel üniteye sahiptirler. Derleyiciler buyruk sıralamasını normal işlemcilerinkine benzer bir yapıda oluştururlar. Derleyici aynı zamanda bu derlenen sıralı buyrukların birbirleri ile olan kaynak ve bağımlılık problemlerini de analiz eder. Bu kısıtlara göre buyrukların sırasını planlar. Bu işlem devam ederken bağımsız olan buyruklar paralel olarak planlanır. Çok uzun buyruk kelimeli işlemciler buyrukları paralel olarak planlarken bağımsız buyrukları birleştirerek daha uzun tek bir buyruk elde eder. Çok uzun kelimesi de birleştirilerek elde edilen buyruktan gelmektedir.
Çok uzun buyruk kelimesi özelliği daha sonradan çip üstü işlemci tasarımlarının ayarlanabilen işlemci çekirdeklerinde kullanılmıştır. Örneğin, Tensilica firması Xtensa LX2 işlemcisi FLIX(Flexible Length Instruction eXtensions) adında çok operasyonlu buyruklara izin veren teknolojiyi geliştirmiştir. Xtensa C/C++ derleyicisi 32 ya da 64 bitlik FLIX buyruklarını yine aynı işlemcinin 16 veya 24 bitlik RISC buyrukları ile birleştirebilme özelliğine sahipti. Birden fazla RISC buyruğunu paketleyerek 32-64 bitlik uzun buyruklar oluşturan FLIX teknolojisi çok uzun buyruk kelimesinin başarım avantajını kullanırken kodun şişmesini de engelliyordu.
Gömülü sistemler dışında çok uzun buyruk kelimeli işlemcilerin kullanımı olarak Intel'in Itanium işlemcisi örnek olarak verilebilir. Bunlar dışında ise en çok grafik işlemci piyasasında kullanılmaktadırlar. Özellikle ATI/AMD Radeon R600 ailesi grafik işlemcileri çok uzun buyruk kelimeli işlemcilerdir.


## Geriye Uyumluluk.
Silikon teknolojisi daha geniş gerçekleştirimlerin yapımına izin verdikçe önceki jenerasyonda derlenen programların buyrukları fonksiyonel ünitelerin sayısına bağımlı olduğundan yeni jenerasyonlarda çalışamaz hale gelmiştir.
Transmeta firması bu sorunu binary-binary bir derleyici katmanı kullanarak Crusoe gerçekleştirimlerinde ortadan kaldırmışlardır. Bu mekanizma tekrar-derleme, optimize ve çevirme işlemlerini x86 buyruklarından çalışma zamanı sırasında işlemci koduna gerçekleştiriyordu. Bu Transmeta çipi çok uzun buyruk kelimeli bir işlemci idi.
Intel'in Itanium mimarisi geriye uyumluluk problemini daha genel bir yaklaşım ile çözdü. Her çoklu-opcode buyruk içinde, bir bit bölgesinin yeri tayin edilerek daha önceki çok uzun buyruk kelimesindeki bağımlılıklar belirlenmektedir. Bu bitler derleme zamanında belirlenir ve donanım bu bağımlılık hesaplamalarından kurtarılır. Bu bağımlılık bilgisinin çözümlenmesi ile daha geniş gerçekleştirimler daha çok bağımsız ÇUBK buyruğu issue edebilir.
Başka bir dezavantaj da kod şişmesi olarak geçmektedir ki bazı fonksiyonel ünitelerin boş kalması durumunda ortaya çıkmaktadır. Kod içerisinde bağımlılıkların olması durumunda ve boru hattında sonraki buyrukların ilerleyememesi durumunda gerçekleşir.
Çiplerdeki transistor sayısının artması ile gözlemlenen dezavantajlar önemini kaybetmekte ve giderek yok olmaktadır. ÇUBK mimarisi gün geçtikçe, özellikle gömülü sistem piyasasında, popülerliğini artırmaktadır.