04 Şubat 2009

ATI Kartlarında PhysX Kullanmak Mümkün mü?


Nvidia'nın yaptığı açıklamalara göre, AMD-ATI tarafında, Nvidia'nın satın aldığı Ageia PhysX fizik hızlandırma motoru çalışabilir. Ama küçük bir gereksinim var.


Nvidia'nın PhysX'i, Intel'in ise Havok'u satın alması, AMD'yi fizik hızlandırıcı bir iş ortağından mahrum bırakmış gibi gözükse de aslında çeşitli teknoloji uyarlamalarıyla bu eksikliği devreden çıkartabilir. Zira Nvidia'nın en güncel açıklamasına göre AMD-ATI birlikteliğinin önünde PhysX'i çalıştırmakla ilgili bir engel yok. Tek yapmaları gereken şey, CUDA teknolojisine bir şekilde yazılımsal destek vermek.

Mümkün mü? Evet!

AMD kendi genel amaçlı GPU (GPGPU, general purpose GPU) sistemini geliştiriyor. Dolayısıyla bu sistem üzerinde Nvidia CUDA teknolojisi için bir köprü oluşturması yeterli gibi gözüküyor. Sonuçta birleştirilmiş gölgelendirici (unified shader), yeni nesil tüm grafik işlemcilerinde benzer şekilde uygulanan bir teknoloji durumunda.


NVIDIA CUDA Nedir?

CUDA, GPU üzerindeki yüzlerce(ilerde binlerce) çekirdeği kullanarak genel amaçlı matematik işlemleri yapmaya imkan sağlayan bir GPU mimarisi, yazılımı ve programlama platformudur. Programcılar C ve C++ programlama dillerine yapacakları bir ekleme sayesinde CUDA’yı edinebilir ve kullanabilirler.


CUDA CPU üzerinde de çalışır mı?

Evet. CUDA’nın yeni çıkacak versiyonu çok çekirdekli CPU’ları da destekliyor.


CUDA ve GPGPU arasındaki fark nedir?

GPGPU, DirectX ve OpenGL gibi API’ler kullanır. Grafik API’leri ve donanımı üzerinde ileri derecede programlama bilgisi gerektirir. Programlama modeli, rastgele okunan ve yazılan iş parçacıklarının birlikte çalışması üzerine kurulmuştur.
CUDA ise paralel programlama için C diline yapılan bir eklentidir. Programcının problemleri grafik konseptine dönüştürme mecburiyetini ortadan kaldırır. C üzerinde programlama yapabilen herkes CUDA’yı kolayca öğrenip kullanabilir.


Paralel Programlamanın zorlukları nelerdir? CUDA’da programlama ne kadar zor?

Paralel programlama, birden çok CPU’nun bir arada çalışmasını hedeflediği için zordur. Masaüstü uygulamalarının, (tek bir programı birden çok iş parçacığına dağıtılarak çalıştırılmak üzere hazırlanmasının zorluğundan dolayı) çok çekirdekli CPU’ların avantajlarını kullanmada yavaş kaldıkları bilinmektedir. Bu zorlukların sebebi, CPU’ların aslen seri işlemciler olmaları ve birden çok CPU’nun bir arada kullanılabilmesi için karmaşık yazılımlar gerekmesidir.
CUDA ise, manuel olarak paralellik yarattığı için bu zorlukları ortadan kaldırır. CUDA’da yazılmış bir program, aslında “kernel” adı verilen seri bir programdır. GPU bu kernel’in binlerce kopyasını çalıştırarak onu paralel hale getirir. CUDA, C dilinin bir uzantısı olduğu için genellikle programları CUDA’ya yönlendirmek veya onları multi-thread hale getirmek için mimarilerini değiştirmeye gerek yoktur. Bir döngüyü CUDA çağrısına dönüştürmek basit ve yeterlidir.


- CUDA’nın ana özellikleri nelerdir?

Paylaşılan bellek: CUDA kullanabilen GPU’lardaki çoklu işlemcilerin her biri 16KB’lık bir paylaşılan belleğe sahiptir. Bu, farklı iş parçacıklarının birbirleri ile iletişim kurmalarına ve veri paylaşmalarına olanak verir. Paylaştırılmış bellek aynı zamanda yazılımsal olarak yönetilebilen tampon bellek olarak değerlendirilebilir, bu da ana belleğe ciddi miktarda bant genişliği kazandırarak önemli ölçüde hız artışı sağlar. Lineer cebir, hızlı Fourier dönüşümleri ve görüntü işleme filtreleri gibi yaygın uygulamalar bu özellikten faydalanabilirler.


Rastgele Yazma-Okuma (Toplama-dağıtma): Grafik API’lerde parça programlar belirli bir bellek adresine 32 float (RGBA x 8 render hedefi) çıktı vermekle sınırlı iken, CUDA dağınık şekilde yazabilme (herhangi bir bellek adresine sınırsız sayıda yazma) özelliğine sahiptir. Bu, grafik API’lerini kullanılarak yapılamayacak yeni logaritmaların kullanılmasına olanak tanır.


Diziler ve Tamsayı Adreslemeleri: Grafik API’leri, kullanıcıyı verileri doku olarak depolamaya yöneltirler. Bu da uzun dizileri 2D dokular halinde gruplandırmayı mecbur kılar, dolayısı ile kullanışsızdır ve fazladan adresleme hesapları gerektirir. CUDA ise verilerin standart diziler halinde depolanmasına olanak verir ve herhangi bir adresten birçok işlemi yapabilir.


Dokulandırma Desteği: CUDA, otomatik arabellek (cache), serbest filtreleme ve tamsayı adresleme özellikleri ile birlikte optimize edilmiş doku erişimi sağlar.


Bütünleştirilmiş Bellek Yığınları ve Depolanması: CUDA, birden fazla bellek yığın isteğini ve yine birden fazla depolama isteğini birlikte gruplandırır, böylece bellekteki verileri parçalar halinde okuyup yazabilir. Bellek bant genişliğini maksimum düzeyde kullanır.


- CUDA programının yaratılma süreci ve GPU üzerinde çalıştırılması

İlk aşamada halihazırdaki uygulama veya logaritmanın bir profili çıkartılıp, hangi kısımlarının paralel çalıştırma için uygun olduğu ve diğer tarafta hangi kısımlarının darboğaza sebep olduğu belirlenir. Daha sonra bu işlevler CUDA’nın C eklentisine yönlendirilerek paralel veri yapıları ve işlemleri tanımlanır. Program, NVIDIA’nın CUDA derleyicisi kullanılarak hem CPU, hem de GPU için derlenir. Program çalıştırıldığında CPU kodun kendisine ait olan seri kısmını, GPU ise ağır hesaplamalar gerektiren paralel CUDA kodunu çalıştırır. Kodun GPU kısmına “kernel” adı verilir. Kernel, belirli bir veri kümesine uygulanacak olan işlemleri tanımlar.
GPU, veri kümesinin her unsuru için ayrı bir kernel kopyası yaratır. Bu kernel kopyalarına “iş parçacığı” (thread) adı verilir. Her iş parçacığı, kendine ait program sayacı, kayıt (register) ve durumu (state) barındırır. Görüntü veya veri işleme gibi geniş veri kümelerinde, bir seferde milyonlarca iş parçacığı yaratılabilir.

İş parçacıkları, “warp” (çözgü) adı verilen 32’li gruplar halinde yürütülürler. Warp’lar, çoklu akış işlemcilerine (streaming multiprocessor, SM) atanır ve buradan yürütülürler. Bir SM, sekiz çekirdekli bir işlemcidir. Her parçacık (veya saat döngüsü) başına bir yönerge çalıştırabilen her çekirdeğe akış işlemcisi (streaming processor,SP) veya parçacık işlemcisi adı verilir. Bu yüzden bir SM, her warp’ı yürütmek için 4 işlemci saatine ihtiyaç duyar. Yani bir akış çoklu-işlemcisinin, 32 iş parçacığını yürütmesi için 4 işlemci saati gerekir.

SM, geleneksel çok çekirdekli işlemci değildir. Bir seferde 32 warp’ı destekler ve yüksek miktarda çoklu iş parçacığını bir arada yürütebilir. Her saatte (döngüde) donanım hangi warp’ı (32’li iş parçacığı grubunu) çalıştıracağını belirler. Gecikmesiz olarak bir warp’tan diğerine geçiş yapar. CPU işlemlerine benzetilirse; 32 programı aynı anda çalıştırabilme, programlar arasında her saat döngüsünde gecikmesiz geçiş yapabilme özelliğine sahiptir. Pratikte çoğu CPU çekirdeği aynı anda birden fazla programa destek vermez, ancak programlar arasında yüzlerce saat döngüsü zamanda geçiş yapar.

Özetlemek gerekirse; yürütmenin üst seviyedeki akışı şu şekilde gerçekleşir:Kernel’in tanımlanması, GPU’nun bu kernel’e göre iş parçacıklarını belirleyip çalıştırması, iş parçacıklarının warp adı verilen 32’lik gruplar halinde paketlenmesi ve bu warp’ların SM adı verilen yüksek multi-thread özellikli işlemciler tarafından yürütülmesi.

- CPU tarafında işlem modeli anlaşılabilir. Peki GPU işlemleri nasıl yapıyor?

Diyelim ki elimizde her biri 1000’er öğeden oluşan 2 adet dizi var ve bu öğelerin toplamını bulmak istiyoruz. CPU üzerinde çalışan program, iki dizide de her noktada tekrar tekrar toplamları alarak 1000 öğeli diziyi 1000 tekrarda tamamlar.


GPU üzerinde ise program 2 dizi üzerinde bir toplam işlemi olarak tanımlanır. GPU programı çalıştırdığında, dizideki her öğe için toplama programının ayrı bir kopyasını oluşturur. 1000 öğeli bir dizi için 1000 adet “toplama işi parçacığı” yaratır. GeForce GTX280 üzerinde 240 adet çekirdek bulunur, yani her saat döngüsünde 240 iş parçacığı hesaplanabilir. Kısacası 1000 öğeli bir toplama işlemi GeForce GTX280 üzerinde 5 saat döngüsü zamanda tamamlanmış olur.
Burada önemli nokta, CUDA programının paralelliği tanımlayabilmesi ve GPU’nun da bu bilgiyi donanım üzerinde iş parçacıklarına dönüştürebilmesidir. Programcı böylece iş parçacıklarını yaratma, yönetme ve sonlandırma gibi işleri kendisi yapmak zorunda kalmaz. Aynı zamanda bir program bir kez derlendikten sonra değişik çekirdek sayısına sahip farkı GPU’lar üzerinde de çalıştırılabilir.


PhysX Download Sayfası

Cuda Download Sayfası

Hiç yorum yok:

Yorum Gönder

Lütfen yorum yapın!