

Intel iki yıl önce, AMD'nin dualcore teknolojisinin gerisinde kalmıştı, gerçek anlamda rekabet edebilecek bir ürünü yoktu. Ardından Conroe mimarisi geldi, Core 2 Duo ve Quad işlemciler. Bu hamle ile firma, Pentium 4 tipi mimari ile kaybettiği performans tacını geri alabildi.


O zamanlar Intel, 1990'da yaptıkları gibi, geçmişte çıkış yakaladıkları mimarilere geri dönüş yapacaklarını duyurdu. Planın ilk aşaması, Core 2 ürünlerin piyasaya sunulmasının 12 ay ardından, üretim teknolojisini bir sonraki aşamaya taşımak ve mevcut mimaride iyileştirmeler ile yeni revizyon ürünleri piyasaya sürmekti, bunu Penryn ile yaptılar. Ardından, 24 ay sonrasında tamamen yeni, Nehalem adlı bir mimariyi kullanıma sunacaklardı.
Conroe mimarisi yüksek performans ve makul güç tüketimi sundu. Herkesin kabul edeceği gibi, bu mimari geliştirilirken durum pek parlak değildi, Intel'in elinde üzerine koyarak rekabet gücünü arttıracağı bir mimari yoktu. Intel, Pentium 4'ün çıkmaz sokak olduğunu keşfedince, Intel gibi bir firma için bile kolay olmayan bir şekilde, acilen yeni bir mimari icad etmeleri gerekti.
İsrail, Haifa'daki, taşınabilir cihazların çiplerinin mimarisinden sorumlu mühendis ekibi, birden bütün Intel işlemcileri için yeni bir mimari tasarlamakla görevlendirildi. Onlar için zorlu bir görevdi çünkü Intel'in geleceğini omuzlamışlardı. Çok az vakitleri olduğunu ve büyük baskı altında çalışmak zorunda olduklarını göz önüne alırsak, başarıları dikkate değerdi. Bu da ekibin tasarımda neden bazı konularda fedakârlıkda bulunduğunu açıklıyor.
Conroe, Pentium M'nin ciddi anlamda yeniden yapılandırılmışı olmasına rağmen, bu mimari mobilite denince akla gelen bazı şeylere uymuyor. Mimari o kadar da modüler, yani isteğe göre üzerinde oynanabilir, varyasyonları değişik amaçlarda kullanılabilir değil. Neden derseniz, bu mimari Intel'in bütün ürün gamında kullanılmak durumunda kalındı, notebooklardan sunucu sistemlerine. Ama temel olarak, paketler ve soketler değişse de, çip hep aynıydı, sadece değişiklik yapılabilen alan L2 önbelleğiydi. Bu mimarinin çift çekirdekli olmak üzere geliştirildiği çok açıktı ve dört çekirdeğe geçiş için bir tür numara yapmaları gerekti, iki çift çekirdekli işlemcinin zarını, tek gövdede biraraya getirdiler. Ayrıca FSB'nin varlığı da bazı işlemcilerin tasarımında güçlük çıkardı, çünkü bu teknoloji bellek erişiminde bir darboğazdı. Son olarak, sunucularda standart çalışma modu olan macro-ops fusion, 64-bit ile çalışmadı.
İki yıl önceki şartlar göz önüne alınırsa, esgeçilen bu meseleler makul karşılanabilir, ama bugün rakibi AMD, Opteron işlemcileriyle kurumsal sistemlerde kendisini zorda bırakırken, artık bunları bahane olarak kullanamaz. Intel, Nehalem ile, şu ana kadar eksikliğini çektiği ve zayıf noktası olan modüler mimari konusundaki eksiğini gidermeye ihtiyaç duyuyor ki bu sayede üç büyük piyasadaki değişik ihtiyaçları karşılayabilsin: Taşınabilir cihazlar, masaüstü sistemler ve sunucular.
Nehalem, kısaca nasıl birşeydir?
Nehalem modüler yapıda olmak üzere tasarlandı. Intel mühendisleri, lego parçaları gibi kullanarak varyasyonlar yapabilecekleri bazı blok birimler tasarlamayı hedeflemişti.
(IA Core: Çekirdek, iGraphics: Entegre grafik işlem birimi, Cache: Önbellek, IMC: Entegre bellek denetleyicisi, QPI: Quickpath Interconnect)
Mimarinin amiral gemisi ürünleri, yüksek performanslı işistasyonları ve sunucularda kullanılacak. İlk bakışta AMD'nin Barcelona (K10) mimarisini hatırlatıyor. Doğal olarak dört çekirdekli (Yani az önce anlatıldığı gibi iki çift çekirdeklinin tek pakette sunumu değil), üç seviye önbelleği, entegre bellek denetleyicisi, çevre birimleri ile ve birden fazla işlemci kullanımında bunlarla noktadan noktaya yüksek performanslı iletişim sağlayacak arabağlantısı var. Bu, AMD'nin teknolojik seçimlerinin kötü olmadığı, yalnızca arzuladıklarını yeterince yerine getiremediği ve mevcut tasarımında tam anlamıyla kullanmaya muvaffak olamadığı anlamına geliyor.
Ama Intel, rakibinin yenilikçi fikirlerinden ilham almaktan fazlasını yaptı. Ellerindeki üretim teknolojisinin de avantajını kullanarak, 731 milyon transistörün yardımıyla, her çekirdeğin karakteristik özelliklerini geliştirirken yeni fonksiyonlar da eklediler. Meselâ, eşzamanlı çoklu-yürütme, Pentium 4 Northwood zamanında Hyper-Threading ismiyle ilk olarak ortaya çıkmıştı. Nehalem'de, dört çekirdek içeren iki zarın tek paket altında kullanımıyla, çekirdek başına 2 thread ile, 16 iş parçacığı eşzamanlı olarak işlenebilecek. İlk bakışta bu basit gibi görünse de, sonradan göreceğimiz gibi, bu bazı işhatlarında büyük etkiye sebep oluyor, birçok arabellek tekrar boyutlandırılmak zorunda bu tür çalışmanın performansı kötü etkilememesi için. Ayrıca Nehalem'e yeni SSE komutları eklendi. Mimari SSE 4.2'yi destekliyor, ki yine bunun bazı parçaları AMD'nin K10 mikromimarisinden ödünç (!) alınmışa benziyor.
Şimdi mimari hakkında kabaca bir fikir sahibisiniz, artık biraz daha detaya inme zamanı, işhattının ön-ucundaki, bellekteki komutları okuyup onları işlenmeye hazırlayan bölümle başlayalım.
Komutların okunması ve çözümlenmesi
Core'dan Core 2 mimarisine geçişten farklı olarak, Intel, Nehalem'in ön-ucunda pek bir değişiklik yapmadı. İlk Conroe ile ortaya çıkan aynı dört çözümleyiciye sahip, üç basit ve bir karmaşık. Hâlâ macro-ops fusion birleştirmesini yapabiliyor ve bu yüzden teorik olarak maksimum akış, her cycle için 4+1 x86 komutu.
İlk bakışta çok da devrimsel nitelikte değişiklik görünmüyor, ama şeytan ayrıntıda gizlidir demişler. Performansı arttırmak için, işlem birimlerinin adedini arttırmaya yönelmek, son derece verimsiz bir yol, size maliyetini hesaba katarsanız. Maliyeti yüksek ve her eklemeyle elde ettiğiniz kazanç giderek düşüyor. Bu yüzden, yeni çözümleyiciler eklemektense, mühendisler mevcut olanların etkinliğini arttırmaya yönelmiş.
İlk olarak, 64-bit modunda macro-ops fusion desteği eklenmiş, ki bu da Nehalem mimarisinin sunucular konusunda da hedefleri olduğunu açığa çıkarıyor. Ama mühendisler bununla yetinmemiş, Conroe mimarisi sınırlı sayıda komutları birleştirebilirken, Nehalem çok daha fazla çeşide izin veriyor, bu sayede daha sık macro-ops fusion kullanılabiliyor.
Conroe ile gelen bir diğer özellik de geliştirilmiş: Loop Stream Detector (Döngü akış algılayıcısı) . İsmin arkasında yatan kısaca şu, birtakım komutları tutan (Conroe'larda 18 x86 komutuydu) bir veri arabelleği var. Bir döngü algılandığında, işhattının bazı kısımlarını devredışı bırakıyor. Döngü, aynı komutların defalarca işlenmesi olduğundan, nerede işleneceğinin belirlenmesi veya döngünün her seferinde komutu L1 önbellekten alması gerekli değildir. Yani Loop Stream Detector, benzer durumlarda işhattında kısadevreler yapan küçük bir önbellek gibi çalışır. Bu yolla elde edilen kazanç iki türlüdür: Gereksiz görevleri tekrar yaptırmaktan kaçınarak güç tüketimini düşürür ve L1 komut önbelleğindeki yükü azaltarak performansı arttırır.
Nehalem mimarisi ile Intel, LSD'nin işlevselliğini geliştirdi. Arabellek eskisinden daha büyük, şimdi 28 komut tutabiliyor. Daha da fazlası, işhattındaki yeri de değiştirildi. Conroe'da, komut yakalama aşamasının hemen ardında yer alıyordu. Şimdi ise çözümleyicilerden sonra geliyor, bu şekilde işhattında daha fazla döngü tesbit edilip iptal edilerek, boşuna işlem yapma ihtimali daha da azaltılıyor. Nehalem'in LSD birimi artık x86 komutlarını tutamıyor, ama microops (x86 komutlarının daha küçük komutlara tercümesinden elde edilen komutcuklar) tutuyor. Bu bakımdan Pentium 4'ün önbellek izleme konseptine benziyor. Bu mimariden esintileri Nehalem'de görmek şaşırtıcı değil çünkü Nehalem'i tasarlama görevi verilen ekip, Pentium 4'ü yapan ekipti. Ama Pentium 4, tek çözümleyici kullanıyordu ve önbellek izlemesi o kadar verimli değildi veri ıskalama ihtimaline karşı, Nehalem'de ise dört çözümleyici var ve LSD de bu gibi durumlar için iyileştirmeler sağlıyor. Kısaca Pentium 4 ve Conroe'nun en iyi yönleri birleştirilerek kullanılmış.
Dallanma seçicileri
Önuçta yapılan son geliştirme dallanma seçicilerinde. Dallanma seçme algoritmalarının etkinliği, yüksek seviyede komut paralelliğinin gerektiği mimarilerde hayati öneme sahip. Dallanma ile paralellik kırılır, çünkü önceden işlenip de sonucunun alınması gereken bir komut beklenmelidir ki komutların işlenme akışı devam edebilsin. Dallanma seçimi ile, dallanma olup olmayacağı belirlenir, eğer olacaksa, devam etmekte olan işlemin çabucak bir sonraki hedefi seçilir. Bunu yapmak için karmaşık tekniklere gerek yoktur, tek gereken dalların dizilmesidir, Branch Target Buffer birimi dallardaki işlem durumlarının sonuçlarını depolar ve bir sonraki dallanmanın sonucunu belirler.
Intel, yeni dallanma seçicileri hakkında detay vermedi, ama bilindiği kadarıyla artık iki-seviyeli oldular. İlk seviyesi Conroe mimarisinden değiştirilmeden alınmış, ama daha fazla dallanma geçmişi tutabilen, erişimi daha yavaş yeni bir seviye eklenmiş. Intel'e göre, büyük hacimli kodlar kullanan belli uygulamalarda bu konfigürasyon dal seçiminin etkinliğini arttırıyor, veritabanları gibi, bu da yine Nehalem'in biraz da sunucu odaklı bir mimari olduğunu ortaya koyuyor. Diğer geliştirme ise Return Stack Buffer biriminde, bu birim çağrıldığında fonksiyonların geri dönüş adreslerini tutuyor. Bazı durumlarda bu arabellek taşabilir, bu da yanlış dal seçimlerine sebep olur. Bunun olma ihtimalini azaltmak için AMD, büyüklüğünü 24 girişe kadar arttırdı, Intel ise Nehalem'de bu arabellek için bir tür yeniden isimlendirme sistemi getirdi.
Hyper-Threading'in geri dönüşü
Yani, önuçta, arka uçta da olduğu gibi, pek de köklü değişiklikler olmamış. Son revizyon Core işlemcilerdekiyle tamamen aynı komut yürütme birimlerine sahip, ama burada da mühendisler bunları nasıl daha etkin kullanabilecekleri üzerinde çalışmış.
Nehalem ile Hyper-Threading muhteşem geri dönüşünü yapıyor. İlk olarak Intel'in NetBurst mimarisinde Northwood sürümünde ortaya çıkan HT, diğer ismiyle SMT, çekirdeğin işlem birimlerinin kullanımını arttırmak için iş parçacığı paralelliğini kullanarak, çekirdeğin uygulama seviyesinde çift görünmesi anlamına geliyor.
Paralel iş parçacıkları kullanabilmek için, bazı kaynakların çiftlenmesi gerekiyor, yazmaçlar (register) gibi. Diğer kaynaklar iki iş parçacığı tarafından ortak kullanılıyor, buna komut yeniden düzenleme arabelleği, yürütme birimleri ve önbellek de dahil. Basit bir gözlem SMT'nin kullanımına götürdü: İşlemciler genişledikçe (daha fazla yürütme birimi geldikçe) ve derinleştikçe (işhattındaki aşamaların artması) , her cycle da yeterince paralel işlem yaptırmak zorlaşır. Pentium 4 , 20'den fazla işhattı aşamasıyla çok derinken, Nehalem çok geniş. Üç bellek işlemi ve üç hesaplama işlemi yapabilecek altı yürütme birimi var. Eğer yürütme motoru, kullanabileceği yeterince paralel komut bulamazsa, işhattında baloncuklar (iş yapılmayan, boş cyle) oluşur.
Bunun üstesinden gelmek için, SMT çareyi komut paralelliğini tek yerine çift iş parçacığı izlemeyle arar, amaç mümkün olduğunca az kullanılmamış birim bırakmaktır. Bu yaklaşım, iki iş parçacığı birbirinden oldukça farklı görevler yürütürken aşırı derecede etkin olabilir. Diğer yandan dezavantaj olaraksa, mesela, yoğun hesaplama içine giren iki izlek, aynı hesaplama birimleri üzerindeki yükü arttıracaktır, misal, önbellekteki aynı yere ulaşmak için birbirleriyle rekabete girerler. Bu da istenmeyen, arzulanmayan, performansı kötü etkileyecek bir durumdur.
SMT'nin yürütülmesi
Yine de, SMT'nin performansa etkisi çoğu zaman olumlu yöndedir ve maliyeti kaynak olarak çok azdır, bu da, bu teknolojinin neden geri geldiğini açıklıyor. Ama programcılar Nehalem'e dikkat etmeli, çünkü bütün iş parçacıkları eşit oluşturulmuyor. Bu bulmacayı çözmelerine yardımcı olmak için, Intel işlemcinin tam topolojisinin isabetli bir şekilde kullanılması için bir yol sağlıyor (fiziksel ve mantıksal işlemcilerin sayısı) ve sonrasında programcılar işletim sisteminin atama mekanizmasını kullanarak her iş parçacığını bir işlemciye yollayabilir. Bu tür birşey, Xenon (Xbox 360'da kullanılan) işlemcisinin çalışma huyunu bilen programcılar için sorun olmamalı. Ama konsollardan farklı olarak, programcılar bilgisayarın işletim sisteminde daha düşük erişime sahip çünkü işletim sisteminin görev düzenleyicisi her zaman son sözü söyler.
SMT yürütme motoruna daha ağır yük bindirdiği için, Intel darboğazın önüne geçmek amacıyla bazı dahili tampon belleklerin boyutunu arttırdı. Bu yüzden, yürütülmekte olan bütün komutların izini sürerek onları yeniden düzenleyen arabellek, Core 2 'da 96 giriş iken, Nehalem'de 128'e yükseltildi. Bu arabellek, bir izleğin büsbütün tüm kaynakları tek başına tüketmemesi için sabit olarak bölümlenir, bu yüzden izlek başı 64 giriş olarak belirlenmiş durumda. Tek iş parçacığının işlendiği durumlarda ise bütün girişlere erişimi var, bu da Nehalem'in bu yüzden, özel durumlar sebebiyle selefi Core 2'dan performans olarak geri düşmeyeceği anlamına geliyor.
Ayrıca, komutları yürütme birimlerine atayan birimin de girişi 32'den 36'ya çıkarılmış. Ama yeniden düzenleme arabelleğinden farklı olarak, bölümlendirme burada sabit değil, o yüzden izlek, yerine getireceği işleve göre az veya çok giriş alabilir.
Yük ve tutma arabelleğinin de boyutu arttırılmış. Conroe'ya göre, birincisi 32'den 48'e, ikincisi ise 20'den 32'ye çıkarılmış giriş adedi olarak. Yine burada, izlekler arası bölümlendirme sabit.
Yine SMT'nin dönüşünün bir diğer sonucu olarak, Intel'e göre, iş parçacığı senkronizasyon komutlarının performansı arttı.
SSE 4.2 ve Güç tüketimi
Nehalem mimarisi ile, Intel zaten adedi fazla olan SSE komutsetlerine bir yenisini eklemeden edemedi. Nehalem SSE 4.2'yi destekliyor, Penryn'in desteklediği tüm (SSE 4.1) komutlarını destekliyor ve yedi tane daha ekliyor. Bunların çoğu karakter dizilimi manipülasyonunu sağlamak için, Intel'in dediğine göre XML dosyalarının işlenmesini hızlandırıyor.
Diğer iki komut ise, uygulamalara özel, birisi POPCNT, Barcelona ile ilk gez gelmişti, registerdaki sıfır olmayan bitlerin adedini saymak için kullanılıyor. Intel'e göre bu komut özellikle ses tanınması ve DNA dizilimi uygulamalarında kullanışlı. Son komut, CRC32 ise, hata algılama kodlarının hesaplamalarını ivmelendirmek için kullanılıyor.
Güç Tüketimi
Nehalem mimarisiyle, mühendisler güç tüketimini düşürmek adına geliştirdikleri tekniklerde daha da ileri gittiler. Şimdi işlemciye entegre bir mikrodenetleyici var, güç kontrol ünitesi, devamlı olarak sıcaklığı ve çekirdeklerin güç tüketimini izliyor ve kullanılmadıkları zaman onları tamamen kapatabiliyor. Bu teknoloji sayesinde, kullanılmayan çekirdeğin enerji tüketimi sıfıra yakın, Nehalem öncesinde sızıntı akımları yüzünden kayıplar vardı.
Intel yine güç yönetiminde yeni bir yöntem geliştirmiş, Turbo mod adlı. Meselâ işlemci standart TDP değerinin altında çalışırken, Turbo modu kullanımda olan çekirdeklerin frekansını arttırıyor, işlemciyi yine TDP sınırının altında tutarak.
Ayrıca, Atom gibi, Nehalem'in L1 ve L2 önbellekleri de, 6 yerine 8 transistör kullanıyor, bu da zardaki alanı büyütme pahasına güç tüketimini düşürüyor.
QPI (QuickPath Interconnect)
Core mimarisi kaydadeğer derecede etkin olmasına rağmen, bazı tasarım detayları ne kadar eskiye dayandığını gösteriyor, bunların ilki Front Side Bus (FSB) sistemi. İşlemcileri kuzey köprüsüne bağlayan bu veriyolu, zamanının modern ve en iyi mimarisiydi. Çoklu işlemci konfigürasyonlarında ise, yük sürekli arttığında bu mimarinin büyük hatası ortaya çıkıyordu. İşlemciler bu veriyolunu sadece belleğe erişmek için değil, ayrıca kendi önbelleklerindeki verilerin tutarlılığını kontrol etmek için paylaşmak zorundaydı.
Bu durumda, içeriye akış hareketleri veriyolunu doyum noktasına ulaştırabilir. Intel ise bu sorunu çözmek için, sürekli FSB hızını arttırma veya daha büyük önbellek kullanma yoluna gitti, ama şimdi işlemcilerinin bellekle ve dış bileşenlerle iletişimindeki bu sorunun altında yatan nedeni ortadan kaldırma zamanı.
Intel'in çözüm için seçtiği QPI aslında yeni bir şey değil, entegre bellek denetleyicisi noktadan noktaya çalışan son derece hızlı seri bir veriyoludur. Bu teknoloji 5 yıl önce AMD tarafından işlemcilerde kullanılmaya başladı ama aslında daha da eskiye dayanır. AMD ile başlayıp, şimdi Intel ile devam eden bu konsept, 10 yıl önce DEC'de (Digital Equipment Corporation - bir firma) Alpha 21364 (EV7) 'nin tasarımı sırasında ortaya çıkan birşeydi.
Teknik yönden bakarsak, QPI çift yönlüdür ve 20-bitlik iki köprüsü var, her biri bir yöne bakan, 16 bit data için ayrılmışken, diğer dört ise hata giderme kodları ve diğer protokollerin işlevleri için kullanılır. Bu da 6.4 GT/s, yani saniyede 6.4 milyar aktarım veya hem yazma hem okuma için kullanılabilen 12.8 GB/s bant genişliği anlamına geliyor. FSB ile karşılaştırırsak, Intel'in en son işlemcilerindeki FSB, 400 MHz frekansında çalışıyor ve adres aktarımları iki clock cyle'ı gerektiriyor (200 MT/s ) , veri transferleri de QDR (quad data rate) modunda olur, 1.6 GT/s bantgenişliği ile. 64-bit genişliğiyle, FSB de 12.8 GB/s bandgenişliğine sahip ama sadece okuma veya sadece yazmada kullanılabiliyor.
Bu yüzden, teorik olarak QPI yaklaşık iki katına kadar daha fazla bandgenişliğine sahip, sağlanan okuma ve yazma hızları dengeli. Sadece okuma veya sadece yazma hızı dikkate alınırsa, FSB ile özdeş olur. Ama FSB'nin hem belleğe erişimde, hem çevre birimlerine veya işlemciler arası her türlü veri aktarımında kullanıldığını aklınızdan çıkarmayın. Nehalem ile, bir QPI köprüsü tamamen çevre birimlerine veri aktarımı için ayrılmış, bellek ile olan aktarımlar ise entegre bellek denetleyicisi tarafından kontrol ediliyor ve çoklu-soket kullanımında işlemciler arası iletişimi ise başka bir QPI köprüsü sağlamakta. En kötü şartlarda bile, QPI köprüsü FSB'den kaydadeğer derecede yüksek performans göstermeli.
Gördüğünüz gibi, Nehalem esnek ve ölçeklenebilir bir mimari olmak için tasarlanmış ve bu yüzden hedeflenen piyasa alanına göre QPI köprülerinin adedi değişecektir, tek soketli kullanımda chipsete tek köprüden, dört soketli sunucu konfigürasyonlarında dört köprüye kadar. Bu sayede, gerçekten birbirine tamamen bağlı dört işlemcili sistemler elde edilebiliyor, bu da her işlemcinin bellekteki herhangi bir yere QPI köprüsünün tam hızıyla erişebileceği anlamına geliyor bütün işlemciler birbirine köprü ile bağlantılı olduğundan.
Intel, Nehalem ile entegre bellek denetleyicisi kullanmaya başlamasıyla, sadece bandgenişliği konusunda avantaj sağlamıyor, ayrıca belleklere erişim gecikmeleri de çok azalıyor, bu da bandgenişliği kadar önemli, çünkü her erişim yüzlerce cycle'a mâlolmakta. Entegre bellek denetleyicisi ile gecikmenin azaltılmasıyla masaüstü kullanımda kaydadeğer fayda sağlanırken, bu ölçeklenebilir mimarinin asıl yararı çoklu-soket sunucu konfigürasyonlarında görülecek. Geçmişte CPU eklendikçe bandgenişliği sabit kalırken, şimdi eklenen her işlemci ile bandgenişliği de artıyor, çünkü her işlemci kendi yerel bellek aralığına sahip.
Mucize denebilecek kadar büyük bir çözüm değil. NUMA (Non-Uniform Memory Access - Tek biçimli olmayan bellek erişimi) konfigürasyonu olarak adlandırılıyor, belleğe erişme maliyeti az veya çok olabilir, verinin bellekte nerede olduğuna bağlı olarak. Yerel belleğe erişim en düşük gecikmeye ve en yüksek bandgenişliğine sahipken, tersi durumda, uzaktaki belleğe erişim QPI köprüsünden geçişi gerektirir, bu da performansı düşürür.
Performansa etkisini öngörmek zor, çünkü uygulamaya ve işletim sistemine bağlı olarak değişken. Intel'in dediğine göre uzak belleğe erişim gecikme bazında performansı %70 azaltırken, bandgenişliğini de yarı yarıya azaltıyor, yerel bellek ile karşılaştırıldığında. Intel'e göre, QPI köprüsüyle uzak erişimle bile, gecikme önceki işlemcilerle kıyaslandığında, bellek denetleyicisinin kuzey köprüsünde olduğu durumlardan yine de daha düşük olacak. Tabii ki bunlar sunucu uygulamalarında gözönüne alınacak şeyler, zaten uzun zamandır NUMA konfigürasyonu akıllarındaydı.
Üç seviye önbellek düzeni
Conroe mimarisinin bellek düzeni son derece basitti ve Intel, L2 önbelleğin performansı üzerine yoğunlaşabiliyordu, bu da o mimaride genelde çift çekirdekli kullanımlar için en iyi çözümdü. Ama Nehalem ile, mühendisler sıfırdan başladı, rakip AMD ile aynı sonuca vardılar: Paylaşımlı L2 önbellek, doğal dört çekirdekli mimari için uygun değildi. Farklı çekirdeklerin, sık bir şekilde diğerlerinin kullanabileceği veriyi sildiği durumlar oluşabiliyordu, bu da muhakkak dahili veriyolunda ve gecikmeyi yeterince düşük tutarken bütün çekirdeklere yeteri kadar bandgenişliği dağıtımında sorunlara yol açar. Bu sorunu çözmek için mühendisler, her çekirdeğe kendine has seviye iki (L2) önbellek koydu. Tek bir çekirdeğe has olduğundan ve eskiye nazaran küçük (256KB) boyutta olmasından mühendisler onu gecikme bazında çok yüksek performanslı olacak şekilde tasarlayabildi, bildirildiğine göre Penryn'e nazaran kaydadeğer derecede geliştirildi, 15 cycle gecikme, yaklaşık 10 cycle seviyesine düşürüldü.
Ardından büyük , 8 MB'lık seviye 3 (L3) önbellek geliyor çekirdekler arası iletişimi sağlamak için. İlk bakışta, Nehalem'in bellek düzeneği Barcelona'yı hatırlatsa da, L3 önbelleğin işleyişi AMD'ninkinden çok farklı, bütün alt seviyeleri de kapsıyor. Bunun anlamı şu, eğer bir çekirdek, bir veriye ulaşmayı denerse ve onu L3'de bulamazsa, diğer çekirdeklerin kendine has önbelleklerine bakmasına gerek yok, o veri orada da olmayacak. Tersine, eğer varsa, önbellekteki her hatta atanmış bit (toplamda dört) , o verinin potansiyel olarak daha düşük seviyedeki diğer çekirdeklere ait önbelleklerde olup olmadığını belirtiyor (kesin olarak değil) ve varsa hangisinde olduğunu.
Bu teknik, çekirdeklere has önbelleklerin tutarlılığını sağlamakta etkin çünkü çekirdekler arasındaki veri takası ihtiyacını sınırlıyor. Dezavantajı ise, başka seviyelerde olan veriyi kendisinde de tutarak, bellek alanını zayi etmesi. Yine de, bu zayiat hafif kalır, çünkü bütün L2 ve L1 önbellekleri toplansa, 1.25MB ediyor maksimum, L3 ise 8 MB büyüklüğünde. Barcelona'da ise, L3 önbelleği, chipin geri kalanıyla aynı hızda çalışmıyor. Dolayısıyla, bu seviyeye erişimin gecikmesi değişken ama yaklaşık 40 cycle olmalı.
Nehalem'in yeni önbellek düzenindeki tek gerçek hayalkırıklığı ise L1 önbelleği. Komutsetlerinin olduğu önbelleğin bandgenişliği arttırılmamış, hâlâ cycle başına 16 byte, Barcelona'nın ise 32 byte. 64-bit komutlar, 32-bit olanlardan daha büyük olduğundan, bu durum sunucu odaklı bir mimaride darboğaz yapabilir, bilhassa Nehalem, Barcelona'dan bir tane daha fazla çözümleyiciye sahip olduğundan ve bu da önbelleğe çok daha fazla yük bindirdiğinden. Veri önbelleğinde ise, gecikme, Conroe'ya göre bir artışla 4 cycle'a çıkmış, daha yüksek clock frekansına çıkabilmek için. Ayrıca Intel mühendisleri mimarinin paralel işleyebilmesi için L1 veri önbelleğindeki gecikmeyi arttırmış.
TLB
Yıllardan beridir, işlemciler fiziksel adresler yerine sanal adreslerle çalışıyor. Avantajlarından birisi şu, bu yaklaşımla, bilgisayarın sahip olduğundan daha fazla bellek bir program için ayrılabilir, bu sayede o anda gereken veri bellekte tutulurken, geri kalanı harddiske yazılır. Bu da, her bellek erişiminde sanal adresin, fiziksel adrese dönüştürülmesi gerektiği anlamına geliyor ve bunu yapmak için de, ilgili tarafların kaydını tutacak devasa bir tablo gerekir. Sorun şu ki, bu tablo öylesine büyür ki, çip içinde tutulamaz, o yüzden bellekte (RAM) tutulur ve hatta tablonun bir kısmı belleğe de yazılmayıp, harddiskte tutulabilir.
Eğer bu dönüştürme işlemi, her bellek erişiminde gerekli olsaydı, erişimi çok yavaşlatırdı. Sonuç olarak, mühendisler fiziksel adresleme ilkesine geri döndüler, işlemci üzerine küçük bir önbellek eklediler, dönüştürmede ilgili tarafların son eriştiği adreslerin bir kısmını tutmak için. Bu bellek, Translation Lookaside Buffer (TLB) olarak bilinir. Intel, yeni mimarisindeki TLB işleyişini tamamen elden geçirdi. Şu ana kadar, Core 2 mimarisi, son derece küçük bir (16 girişlik) seviye 1 TLB kullanıyordu, çok hızlı yüklemeler içindi ve daha büyük (256 girişlik) seviye 2 TLB'si vardı, seviye 1 TLB'de ıskalananları tutuyordu ve depolama da yapıyordu.
Şimdi Nehalem'in ise gerçek iki seviyeli TLB'si var: İlk seviye TLB veri ve komutlar arasında paylaştırılmış. Seviye 1 veri TLB'si küçük (4K) sayfalar için 64, büyük sayfalar için (2M/4M) 32 giriş tutuyor, seviye 1 komut TLB'si ise küçük sayfalar için 128 (Core 2 ile aynı) , büyük sayfalar içinse 7 giriş tutmakta. İkinci seviye ise sadece küçük sayfalarla işlem yapan 512 giriş tutabilen tümleşik bir önbelleğe sahip. Bu geliştirmenin amacı, büyük veri kitleleri kullanan uygulamalarda performansı arttırmak. İki seviyeli dallanma seçicilerinin de getirilmesiyle, bu, mimarinin sunucu odaklı olduğuna dair bir diğer delil oluyor.
Bir an için SMT konusuna geri dönelim, TLB'yi de etkilediği için. Seviye 1 veri TLB'si ve seviye 2 TLB, iki izlek arasında dinamik olarak paylaştırılmış. Tersine, seviye 1 komut TLB'si küçük sayfalar için sabit olarak paylaştırılmış, oysa büyük sayfalar için olandan bir tane daha eklenmiş, küçük boyu göz önüne alındığında bu anlaşılabilir, bu sayede izlek başına yedi giriş oluyor.
Bellek erişimi ve ön-getirme
Core mimarisiyle, bellek erişimi performans anlamında bazı şartlara bağlıydı. İşlemci, önbellek boyu olan 64-bitlik hizalanmış bellek adreslerine erişim için iyileştirilmişti. Hizalanmamış veriye erişimin yavaş olması bir yana, hizalanmamış yükün yürütülmesi veya komutun tutulması, bellekteki verinin hizalanmasından bağımsız olarak, hizalanmış komutlara göre daha maliyetliydi. Çünkü bu komutlar çözümleyicilerin işlemesi için bazı microops üretir, bu da bu tip komutun verimini düşürür. Sonuç olarak, derleyiciler maliyeti azaltmak adına komutların sıralanışını değiştirerek bu tür komutlar üretmekten kaçındı.
Bu yüzden, bellek okumada iki önbellek hattındaki üst üste binmeler, 12 cycle'lık performans kaybına sebep oluyor, 10 cycle olan yazmaya nazaran. Intel mühendisleri bu erişimleri daha hızlı olmaları için geliştirdi. İlk olarak, verinin bellekte hizalandığı durumlarda hizalanmamış yükleme/tutma komutları kullanmanın performansa kötü etkisi yok. Diğer durumlar için ise, Intel bu erişimlerdeki performans kayıplarını Core mimarisine nazaran daha az olacak şekilde iyileştirmiş.
Daha etkin çalışan daha çok ön-getiriciler
Core mimarisinde, Intel özellikle donanımsal ön-getiricilerinden gurur duyuyordu. Bildiğiniz gibi, ön-getirme mekanizması, bellek erişim örgüsünü gözler ve sonraki cycle'larda hangi veriye ihtiyaç duyulacağını sezmeye çalışır. İşin püf noktası, veriyi önbelleğe geri döndürmektir, ki burada işlemcinin erişimi için daha hazırdır, yani işlemcinin ihtiyaç duymadığı anlarda bandgenişliğinden istifade ederek, bir sonraki hamleye hazırlık yapar.
Bu teknik pek çok masaüstü uygulamasında görülmeye değer sonuçlar ortaya çıkardı, ama sunucu dünyasında sonuç genelde performans kaybı oldu. Etkinliğini kaybetmesine sebep olan birçok şey var. İlk olarak, bellek erişimlerinin sunucu uygulamalarında öngörülmesi genelde çok daha zordur. Veritabanı erişimleri, meselâ lineer (doğrusal) değildir, bir veri nesnesi bellekte erişildiğinde, bitişiğindeki verinin bir sonraki hamlede çağrılması gerekli değildir. Bu da ön-getirme mekanizmasının etkinliğini kırıyor. Önceden dediğimiz gibi, zaten işlemciler arasında darboğaz vardı, ama ek olarak, bu aşamada ön-getiriciler ek yük getirdi. Bir mikroişlemci belleğe erişmiyorken, ön-getiriciler boşta olan belleği kullanmak için devreye girer. Ama, çoklu soket, yani bir diğer işlemci var ise, diğer işlemcinin ne yaptığını bilmenin imkânı yok. Bu da, diğer işlemci için, son derece önemli olan bandgenişliğinin, diğerinin ön-getirici mekanizması tarafından işgal edilmesi anlamına geliyor. Bu sorunu çözmek için ise, Intel'in öngetiricileri iptal etmekten daha iyi bir çözümü yoktu, kulağa pek çözüm gibi gelmese de.
Intel sorunun şimdi çözülmüş olduğunu söylüyor, ama yeni ön-getirici mekanizmanın algoritması hakkında hiçbir detay verilmemiş, tek denilen sunucu konfigürasyonlarında onları iptal etmenin gerekli olmayacağı. Intel hiçbirşey değiştirmeseydi bile, yeni bellek yönetiminin kazanımı ve sağlanan daha yüksek bandgenişliği ile ön-getiricilerin olumsuz etkisi belli bir seviyenin altında kalırdı.
Sonuç
Conroe sağlam temeller getirdi, Nehalem de onun üstüne ekledi. Aynı etkin mimariye sahipler, ama şimdi çok daha modüler ve ölçeklenebilir, bu da piyasadaki değişik alanlarda başarıyı getirmeli. Nehalem'in Core mimarisinin üstüne devrim yaptığı söylenemez, ama Intel platformu anlamında devrim sayılır, rakibi AMD karşısında tasarım anlamında yenilmesi zor bir hâle geldi bir kere daha ve teknolojilerin kullanımı anlamında rakibini geçti.
Hyper-Threading'in dönüşü önemli ve Penryn ile karşılaştırıldığında kaydadeğer performans artışı sağlamalı eş-frekanslarda. Ama en çok kazanç sağlanacak alanlar, belleğin darboğaz yaptığı alanlar olacaktır. Bu yazıyı okuduğunuzda, mühendislerin de buna odaklandığına hemfikir olmuşsunuzdur. Bellek erişiminin kritik olduğu yerlerde, entegre bellek denetleyicisinin eklenmesi en büyük kazançları sağlayacaktır şüphesiz ve okuduğunuz bir takım bazı diğer yenilikler var.
Bütün bu teorik değerlendirmelerden sonra, analiz için bir sonraki bakacağımız yer, bu yeniliklerin gerçek uygulamalarda uyandırdığı iştahtan bekleneni verip veremeyeceği.
Not: THG'den faydalanılmıştır, birebir tercüme değildir, metnin orjinali Fransızca olup, müellifi de muhtemelen İngilizce makalelerden derleyerek hazırlamıştır, sonra geriye İngilizceye tercüme edilmiş olup (bir ihtimal telif eden iki dilde birden yazdı), bu yazının hazırlanmasında en son aşaması baz alınmıştır. (İngilizce > Fransızca > İngilizce > Türkçe . Çeviri ile amatör olarak da olsa uğraşan az çok ne demek istediğimi anlar sanırım. Birebir tercüme olmamasının ana sebebi kullanılan anlatım sanatlarının dilimizde karşılığının olmaması, zorlamayla yapılsa bile monoton ve okumasının sıkıcı olmasıdır, bir diğer temel sebep ise mümkün olduğunda anlaşılabilir kılmaktır.)
Gerçekten çok vakit aldı, umarım yararlı olur. Metni beğendiğim için kırparak bir analiz yazısı yazmaya da kıyamadım. Karışıklaştığı yerlerde orjinal metne başvurabilir veya esgeçebilirsiniz, tekrar okumakla çözülmüyorsa. Hiç yoktan, konuda anlatılanları anahatları ile kavrayacağınızı düşünüyorum.
THG FR (Orjinal)
THG