ATI Radeon HD 5000 serisiyle çok başarılı bir yeni ürün ailesi çıkışı yakalarken NVIDIA'dan düzenli aralıklarla gelen "Fermi" haberlerinden başka pek fazla bir şey almadık -en azından grafik yongası tarafında. Fermi için NVIDIA pek çok söz verdi ama kartlar ortalıkta yoktu. Bugün incelemesini okuyacağınız GeForce GTX 480 ile NVIDIA'nın yeni Fermi mimarisine giriş yapıyoruz. Bu incelemede görecekleriniz ana hatlarıyla şu şekilde:
* Fermi mimarisi hakkında bazı detaylar
* Fermi tabanlı GF100 ile ilgili detaylar
* GeForce GTX 480
* Performans karşılaştırmaları
* DirectX 11 ve CUDA/PhysX
* Gizemli Adam Fehmi ile tanışma
GeForce ailesinin G80 çekirdeklilerinin çıkışını hatırlarsınız. NVIDIA da Fermi'nin G80'in kendi zamanında olduğu gibi bir devrim niteliğinde olduğunu söylüyor. Firmanın yeni mimarisi paralel işlemci sayısındaki artışlar gibi yöntemlerle kas gücünü yükseltmekten fazlası -en azından mimari hakkındaki dokümanlarda bunu öne çıkarıyor. Bu arada NVIDIA'nın doküman sağlamadaki başarısını da anmak istiyoruz; günlerdir taradığım dokümanın haddi hesabı yok ve NVIDIA bu kadar çok dokümanı sağlamamış olsaydı bu yazının detay seviyesi debu kadar yüksek olmazdı.
NVIDIA'nın dokümantasyonunda Fermi için "NVIDIA'nın yeni nesil CUDA Hesaplama Mimarisi" deniyor. CUDA dediği, bizim daha çok yazılım tarafını andığımız yapının donanımla bağlantısından kaynaklanıyor: CUDA sadece bir yazılım altyapısı değil, aynı zamanda donanımı da kapsıyor. Zaten Fermi'nin temel işlem çekirdeklerine de CUDA çekirdeği deniyor.
Fermi, adını İtalyan fizikçi Enrico Fermi'den alıyor. Enrico Fermi, nükleer ve parçacık fiziği, kuantum teorisine katkılarının yanısıra ilk nükleer reaktörün geliştirilmesinde de önemli rol sahibi. Bu NVIDIA'nın büyük bilim insanlarından birinin adını kullandığı ilk sefer değil; daha önceki mimarilerindeki Tesla adını hatırlayın: Nikola Tesla. Her iki bilim insanının da hayatını okumanızı öneririz.
NVIDIA Fermi yeni nesil grafiklerin yanısıra genel amaçlı hesaplama ve programlanabilirliğe de daha fazla önem veriyor. Bu anlamda hem paralel işlemci çekirdeklerinin gruplanmasından oluşan Streaming Multiprocessor'ların (SM) gücü artırılmış, hem bunların tessellation gibi güncel grafik problemlerine daha verimli yaklaşmaları sağlanmış, hem de çeşitli yöntemlerle genel amaçlı programlanabilirlik tam C++ desteğine kadar genişletilmiş.
Hemen bir Fermi çekirdeği görelim:
Bu tam bir Fermi çekirdeği. Yeşil ufak dikdörtgenler temel işlem birimleri olan CUDA çekirdeklerini temsil ediyor. Bunlara uzun zamandır paralel işlemci adını takmıştık. Tam bir Fermi yongası bu çekirdeklerden 512 tane içeriyor -bugün göreceğiniz Fermi tabanlı ilk GeForce kartlarda bu kadar çok sayıda yoklar gerçi. CUDA çekirdekleri 32'şerli gruplar halinde toplanmış ve bu gruplardan da 16 tane var: 32 x 16 = 512 çekirdek. 32'li CUDA çekirdeği gruplarına Streaming Multiprocessor deniyor. Bunların detayına gireceğiz birazdan. Her GPU altı tane bellel partisyonu içeriyor ve bellek arayüzü 384 bit. Yani her bir bellek partisyonu 64 bit arayüzlere sahip. Host interface yazan blok PCIe arayüzüne bağlanıyor. GigaThread yazan kısım iş parçacığı bloklarını SM'lere, daha doğrusu SM iş parçacığı sıralayıcılara dağıtmakla yükümlü.
Orta kısımda ortak kullanıma açık bir önbellek var. Her bir SM'nin alt tarafındaki mavi kısımlar yazmaç (register) alanı ve L1 önbelleği temsil ediyor. Turuncu kısımlar SM iş parçacığı sıralama ve dağıtma birimleri.
Tüm bunlar 3.2 milyar transistörle oluşturuluyor. Yani NVIDIA bir kez daha şimdiye kadar gördüğümüz en büyük grafik çekirdeğini çıkardı lafını tekrarlatıyor.
Bu SM'lere yakından bakalım.
Core yazanlar CUDA çekirdekleri. Bunlar iki tane Warp Scheduler ve dağıtım birimiyle destekleniyor. Warp dediği, CUDA mimarisinde paralel iş parçacıklarından oluşan gruplar. SM'ler paralel iş parçacıklarını 32'li gruplar halinde alıyorlar ve 32 iş parçacığından oluşan bu bloğa bir "warp" deniyor. Eski mimaridekinin iki katına çıkmış.
CUDA çekirdeği sayısı her SM için 32 tane. Bunlar önceki GT200 çekirdeklerinde sekizer taneydi, yani her SM bir önceki mimarinin dört katı kadar CUDA çekirdeği içeriyor. Alt kısımda 64 KB paylaşılan bellek/L1 önbellek var. Bu notasyonun bir nedeni bulunuyor: Bu alan gereksinime göre iki şekilde ayarlanabiliyor:
* 16 KB L1 önbellek ve 48 KB paylaşılan bellek
* 16 KB paylaşılan bellek ve 48 KB L1 önbellek
Bu da önbelleğe duyarlı kod parçacıkları ve paylaşılan belleğe duyarlı kod parçacıklarının her ikisi için de daha iyi performans anlamına geliyor. Bu arada her SM için bu L1 önbellek/paylaşılan bellek alanından birer tane var. GT200 mimarisinde SM'ler için sadece 16 KB paylaşılan bellek vardı.
İkinci nesil paralel İş Parçacığı Çalıştırma Komut Seti (Parallel Thread eXecution, PTX) 2.0 bu performansa yönelik kavramlara programlanabilirlik yönünde daha fazlasını katıyor. Ayrıca bir de birleştirilmiş bellek adres alanı var. Daha önce üç ayrı adres alanı kullanılıyordu ve pointer'larınızın adres alanını önceden bilemediğiniz için C kodlamada zorluk getiriyordu. Fermi ve PTX 2.0 komut setiyle birlikte gelen birleştirilmiş adres alanı sayesinde tam bir C++ desteği geliypr. Geliştiriciler birleştirilmiş adres alanını kullanıyor ve Fermi'nin donanımdan adres çevrim birimleri pointer referanslarını olması gereken adres alanına haritalıyorlar.
Tüm bunların arasında hata denetim ve düzeltmeli (ECC) bellek desteğiyle çift duyarlıklı IEEE 754-2008 standardındaki kayar nokta işlemleri gibileri de geliyor ve Ferm'nin amacının grafikten fazlası olduğunu iyice ortaya seriyorlar: Bilimsel uygulamalar dahil genel hesaplama.
[#ALINTI PC LABS]