NetBurst (mikromimari)

**NetBurst**, İntel'in 2000 yılında piyasaya sürdüğü Pentium 4 işlemci markasının mikromimarisine verilen isimdir. 2006 Temmuz'unda Core mikromimarisinin çıkışına kadar İntel işlemcilerin mikromimarisi olmuştur. Selefi P6 mikromimarisine göre en önemli özelliği derin boru hattı yapılanmasıyla avantaj sağladığı yüksek saat sıklığıdır. Temel olarak dört ana parçadan oluşmaktadır: Sıralı(ing. *In-order*) Ön-Uç(ing. *Front-end*), Sırasız(ing. *out-of-order*) yürütme birimi, Tam sayı ve kayan nokta yürütme birimleri ve bellek altdizgesi.
## Sıralı Ön-Uç
### İz Önbelleği
Pentium 4'ün 1. seviye buyruk önbelleğine iz önbelleği (ing. *Trace cache*) adı verilmiştir ve bir saat vuruşu içerisinde 3 adet UOP İntel buyruğunu sırasız yürütme birimine gönderebilmektedir. Bİr programdaki buyrukların büyük çoğunluğu iz önbelleğinden ulaşılabilmektedir, fakat buyruk iz önbelleğinde bulunamadığı zaman ikinci seviye önbellek ve ana bellekte aranmaktadır. İz önbelleği 12K'lık UOP kapasitesine sahiptir ki bu geleneksel seviye 1 önbelleklerde 8K-16K'lık bir bellek hacmine denkgelmektedir. İz önbelleği, kod çözücü tarafından daha önce çözülmüş buyrukları program sırasının dinamik akışına göre sıralayarak *iz*ler oluşturmaktadır ve sırasız yürütme birimine bu izlerin içinden sırayla buyrukları göndermektedir. İz önbelleği özellikle dallanma buyruklarını takip eden bağımlı buyruklar bellekte çok uzak bir yerde ise büyük performans kazanımı sağlamaktadır. İz önbelleğinin performansının artması için Pentium 4'te dallanma hedef tamponu (ing. *Branch target buffer*) dallanma buyruklarının sonuçlarını tahmin ederek tahmine dayalı yürütüm sağlar. Bu tahmin algoritmaları o kadar kuvvetlidir ki doğru tahmin oranı %99'un üzerindedir.
### Mikrokodlu ROM
IA-32 buyrukları düzenli yapıda değildirler, mesela bir buyruk 1 bayt uzunluğunda iken bir başka buyruk 19 bayt uzunluğunda olabilir. Bu durumda IA-32 buyruklarını çözmek oldukça zahmetli bir iş haline dönüşmektedir. Bazı çok karmaşık buyrukları (örn. string move, fault&interrupt handling) çözüp UOP'lara sıralamak normal kod çözücü için performansı düşürecek seviyede uzun sürebilir, bu tarz buyruklar için önceden kodlanmış bir bellek birimi hızlı bir şekilde UOPlara ayırıcı olarak kullanılabilir. Pentium 4, bu iş için mikrokodlu ROM'u kullanmaktadır. 
### Buyruk Etkin Sayfalar Önbelleği ve Dallanma Hedef Tamponu

Etkin sayfalar önbelleği, sanal bellek kullanan işlemcilerde sanal adresleri gerçek adrese dönüşüm işlemini hızlandırmak için tasarlanmıştır. Dallanma hedef tamponu, dallanma buyruklarının tahmin edilerek işlemcinin beklemesinin önüne geçmek için tasarlanmıştır. Pentium 4'te dallanma hedef tamponu 4K'lık bir dallanma buyruğu girişine sahiptir ve oldukça büyüktür. Pentium 4'te, dallanma hedef tamponunda bulunamayan dallanma buyrukları, eğer dallanma buyruğunun atlayacağı adres dallanma buyruğundan geride ise durağan olarak atlar, dallanma buyruğundan daha ileride ise durayan olarak atlamaz olarak tahmin edilir.
### IA-32 Kod Çözücüsü
Kod çözücü, IA-32 buyruklarını ikinci seviye buyruk önbelleğinden bir saat çevriminde 64-bit boyutunda alır ve boru hattının anlayacağı UOP'lara çevirir. Birçok IA-32 buyruğu bir adet UOP'a dönüşürken daha karmaşık buyruklar birden daha fazla UOP'a çevrilebilir. Eğer gerekli UOP sayısı 4'ten fazla ise kod çözücü bu buyruğu mikrokodlu ROM'a gönderir. Dizi taşıma buyruğu binlerce UOP'a ihtiyaç duyabilir, bu tarz buyruklar kod çözücü tarafından mikrokodlu ROM'a gönderilir.
## Sırasız Yürütme Birimi
### Ayırıcı
Pentium 4'te ayırıcı birimi (ing. *allocator*), sırasız yürütme biriminde bulunan tamponlarda UOP'lar için yer ayırır. Eğer istenen birimde yeteri kadar alan yoksa, isteyen UOP'ları bekletir, yer boşaldığı zaman UOP'ları tamponlara atar. Ayırıcı birimi, sırasız yürütme birimine gelen her bir buyruk için 126 adet buyruk taşıyabilen sıralayıcı tampondan (ing. *Reorder buffer(ROB)*) yer alır. Böylece boru hattı içerisinde 126 adet buyruk aynı anda işleniyor durumda olur. 
### Yazmaç Yeniden Adlandırma
IA-32 buyruk kümesi mimarisinde 8 adet mantıksal yazmaç bulunmaktadır. Bu 8 adet yazmaçtan oluşan mimari 1978 yılında piyasaya çıkarılan 8086 mikroişlemcisinden kalma bir özelliktir. İntel firması, yeni çıkan geriye yönelik uyumlu olabilmesi için bu mantıksal 8 adet yazmacı koruma yoluna gitmiştir. Fakat gelişen teknolojiyle birlikte büyüyen yazılımlar ve programlar için 8 adet yazmaç çok yetersiz kalmıştır. Yazmacın yetersiz kaldığı noktalarda bellek işlemleri artar ve bu da işlemcinin performansında büyük bir düşüşe sebep olur. İntel, bu problemi ortadan kaldırmak için mantıksal yazmaçları fiziksel yazmaçlar olarak yeniden adlandırma (ing. *register renaming*) yöntemine gitmiştir. Bu yöntemde boru hattına giren mantıksal yazmaçlar, boş bir fiziksel yazmaca atanır ve gerçek olmayan veri bağımlılıklarından kurtulunmuş olunur. Pentium 4 içerisinde 128 adet tam sayı ve 128 adet kayan nokta yazmacı içeren fiziksel yazmaç dosyaları bulunmaktadır.

### UOP Zamanlayıcı
Zamanlayıcı (ing. scheduler) birimi buyrukların yürütme aşamasına geçebilmesi için hazır olup olmadıklarını kontrol edip hangi yürütme birimine gönderilecekse oraya gönderen bir birimdir ve sırasız işlem yürütme biriminin kalbi olarak nitelendirilmiştir. İşlenenleri hazır olan herhangi bir buyruk ilgili yürütme birimi müsait durumda ise program sırasından kendisinden önde bulunan buyruklar olmasına rağmen yürütme birimine girebilir. Eğer birden fazla buyruk aynı anda hazırsa ve yürütme birimi için bir rekabet varsa, bu durumda zamanlayıcı hazır buyruklar içerisinden birisini seçer. Bu seçme algoritması ise *İntel sırrı* olarak bilinmektedir ve kamuoyuna açık durumda değildir.
## Tamsayı ve Kayan Nokta Yürütme Birimleri
### Düşük Gecikmeli Tamsayı AMB
Pentium 4'te program çalışmasını hızlandırmak için izlenen yol, sürekli tekrar eden durumları hızlandırarak daha fazla performans artışı sağlamaktır. AMB'yi kullanan buyrukların tüm buyruklara oranla yaklaşık olarak %60-70'lik bir oranda olduğu gözlemlenmiştir. Pentium 4'te AMB islemleri normal saat hızının yarısında tamamlanabilecek şekilde tasarlanmıştır. Aşamalı toplama işlemi (Staggered Add) olarak tanımlanan AMB operasyonunda 32-bitlik iki sayının toplanması 3 aşamada gerçekleşir ve her aşamanın gerçekleşme zamanı sistem periyodunun yarısı kadardır. İlk aşamada 16-bitlik ilk kısmın toplama işlemi yapılır ve sonuç ve elde üretilir, daha sonraki aşamada diğer 16-bitlik kısım toplanır, son aşamada ise işlemcinin bayrak bitlerinin değişmesi gereken bir durum varsa bu durum halledilir. İlk 16-bitlik toplamanın sonucu genellikle 1. seviye önbelleğe erişim işleminin başlayabilmesi için gereklidir ve erişimin başlangıcı böylece sistem periyodunun yarı zamanında başlamış olur. Düşük gecikmeli işlemler bu birimde işlenirken daha karmaşık tam sayı buyrukları için ise farklı bir donanım birimi ayrılmış ve bu karmaşık buyrukların hızlı AMB'yi işgal etmesi engellenmiştir.

### Karmaşık Tamsayı İşlemleri
Pentium 4 işlemcisinde basit ve sık rastlanan tam sayı işlemleri *Düşük Gecikmeli Tamsayı AMB* birimine yönlendirilirken karmaşık buyruklar için farklı bir donanım modülü oluşturulmuştur. Bu karmaşık buyruklar genel olarak tam sayı kaydırma ve döndürme (shift & rotate) buyrukları, çarpma ve bölme buyruklarıdır. Kaydırma buyruğu 4 saat vuruşu kadar sürmekteyken, çarpma buyruğu 14, bölme buyruğu ise 60 saat vuruşu kadar sürebilmektedir.

### Düşük Gecikmeli S1 Veri Önbelleği
Pentium 4'te veri için ayrılmış birinci seviye önbellek boyutu 8 KB'dir. Bu veri önbelleğinde hem tam sayı, hem de kayan nokta verileri ve SSE verileri birlikte tutulmaktadır. Önbellek veri öbeği, 64 bayttır ve önbellek mimarisi kümeli ilişkili olarak düzenlenmiştir ve 4 adet kümeden meydana gelmektedir. 1. seviye önbellleğe yazılan her veri, otomatik olarak 2. seviye önbelleğe de yazılmaktadır. 16 bitlik verilerin yükleme ve saklama işlemleri 1 saat vuruşunda tamamlanabilmektedir. Tam sayı verileri için ise 1. seviye önbellekten yükleme yapmak 2 saat vuruşu, kayan nokta ve SSE verileri içinse 6 saat vuruşu sürmektedir. Zamanlayıcı birimi (scheduler), yükle buyruklarının her zaman 1. seviye önbellekte aradığı veriyi bulacağını tahmin ederek bu veriye bağlı buyrukları da boru hattına yollar. Eğer önbellekte aranan veri bulunamazsa buna bağlı buyrukların tekrar zamanlayıcıya geri dönmesi gerekir, bu duruma da İntel içerisinde tekrar çalma (replay) ismi verilmiştir. Yükle buyruklarının tahmin edilme özelliğinden dolayı Pentium 4 işlemcisi sadece 4 adet yükle buyruğunun yanlış tahmin edilebilmesine izin vermiştir.

### Sakla-Yükle Yönlendirmesi
Sırasız yürütme yapan bir işlemcide, sakla buyruklarının tamamlanabilmesi için emekli olma aşamasını (retire) geçmesi gerekmektedir. Sakla buyruğunun emekli edilmesi binlerce vuruş sürebilir ve kendisinden önceki sakla buyruklarının da işlerini tamamlamasını beklemesi gerekir. Sakla buyruğu emekli olmadan buyruğun yazacağı adres modifiye edilmez, bu yüzden bu adresteki veriyi kullanacak olan yükle buyruğu da beklemede kalır. Bu durumu engellemek için Pentium 4'te yükle buyruklarının, sakla buyrukları emekli olmadan bunların verilerine erişebileceği bir tampon tasarlanmıştır.

### Kayan Nokta/SSE Yürütme Birimleri
Kayan nokta, MMX, SSE ve SSE2 buyruklarının işlenmesi için Pentium 4'te bunlara özel farklı bir donanım birimi tasarlanmıştır. Bu buyruklar 32-bitle işlem yapan tam sayı buyrukları yerine genelde 64 veya 128-bitlik işlenenler üzerinde işlem yapmaktadır. Kayan nokta/SSE yazmaç dosyası 128 adet, 128-bitlik yazmaç saklayabilecek bir kapasiteye sahiptir. Birçok kayan nokta ve çokluortam (ing. multimedia) programı üst üste gelen toplama ve çarpma buyruklarının dengeli bir dağılımına sahiptir ve Pentium 4 bu durumu hızlandıracak şekilde ayrı donanım birimleri hazırlamıştır.

## Bellek Altdizgesi
### S2 Buyruk ve Veri Önbelleği
Pentium 4'te 1. saviye veri önbelleğinde yalnızca veri değerleri, iz belleğinde de IA-32 buyruklarından çözülmüş UOP'lar tutulmaktaydı. Fakat 256 KB'lık 2. seviye önbellekte veri ve buyruklar aynı yerde tutulmaktadırlar. İkinci seviye önbellek kümeli ilişkili olarak tasarlanmıştır ve 8 adet kümeden meydana gelmektedir. Veri öbeği, 2 adet 64 baytlık birimden oluşur 128 bayttır. Yükle işleminin tamamlanması ikinci seviye önbellekte 7 saat vuruşu kadar sürmektedir. Önceden yakalama (ing. prefetch) algoritmalarıyla Pentium 4, boru hattında işlenecek olması muhtemel verileri henüz çağrılmamışken ana bellekten ikinci seviye önbelleğe getirir ve boru hattında işlenen verilerin 256 bit önünde olmaya çalışır.

### 400 MHz Sistem Yolu
Pentium 4 sistem yolu, 3.2 GB/saniyelik bir bant genişliğine sahiptir. 64-bit genişliğindeki sistem veriyolu 400&nbsp;MHz saat sıklığında çalışır.

## Kaynakça
*Glenn Hinton et al., *A 0.18-um CMOS IA-32 Processor With a 4-GHz Integer Execution Unit*, IEEE Journal of Solid-State Circuits, Vol 36, No 11, Nov 2001
*Eric Rotenberg et al. *Trace cache: a low latency approach to high bandwidth instruction fetching*, MICRO 29