• cpu her cesit islemi yapar. dual core ve üstleri bunu 1-2-4 vs sekilde hallederler. yani ayni anda 2 islem, ne olursa olsun, sirasi ne olursa olsun. gpu ise ayni tip islemi manyak hizli bir sekilde yapar. lakin sadece tek bisiye odaklanabilir. o yüzdendir ki, gpu her ne kadar manyak hizli olsa da, her seyi yapamaz. söyle diyleim, rainmen deki tom kuruz cpu iken, dastin abi gpu dur. mina kor kagitlarin, tom mel mel bakar. olmadi sanki örnek tam. neyse, cuda bu gpu hedesini cpuya yardimci olmak icin gelistirilmis bi teknelocidir, ama cok öyle ises yarar bir konuda basarili oldugunu göremedim daha. bi benim wirellesima brute force la hack denemesinde bulundum, basarili da oldum. ilgilnenler icin ilgili site surada bulunabilir:

    www.google.com

    edit: apaçi gibi entry girmişim. kulağıma küpe olsun diye aslı gibi bırakıyorum.
  • nvidia'nın halen geliştirmekte olduğu, yanlış anlamadıysam, cpu üzerine düşen yükü gpu'nun da paylaşmasına olanak tanıyan bir ...eee... hede. =) **

    sanıyorum pc'niz 3d oyun oynamak gibi gpu'yu full force çalıştıran bir uygulama yokken (mesela müzik çalışıyorsun, gpu neredeyse olmasa bile olur halde ense yaparken) gebermek üzere "imdat!" çağrısında bulunan cpu'ya "bre yettim yiidim!" diye koşuyor yardıma.

    ilk fırsatta deneyeceğim, üşenmezsem anlatırım.

    not: kalmadı di mi donanım konusunda kastıracak delikanlı eleman koca sözlükte. eskiden negzeldi, şimdi işin yoksa forum falan dolaş..=/ benim gibi sadece meraklıların gubidik entry'leriyle karşılaş beyle...
  • cpu'dan gpu'ya veri taşırken pinned memory kullanmakta fayda var, süreyi iki üç kat hızlandırabiliyor. pinned memory kullanmak için de cudanın sunduğu memory allocatıon fonksiyonlarını kullanmanız yeterli; cudamalloc gibi.. aksi durumda malloc ya da new kullanarak allocate ettiğiniz adres bir mmap'te de olabileceği için memcpy fonksiyonu pek çok kontrol yapıyor ve yavaşlıyor.

    task based bir paralel algoritmanız varsa ya da çok fazla if clause kullanıyorsanız gpu felaketiniz olabilir. o yüzden ilk optimizasyon olarak olabildiğince kodunuzdaki dallanmalardan kurtulmaya çalışın.

    algoritmanız compute bound ise memory movement ve computation ı cuda streams kullanarak overlap etmek faydalı olacaktır. fakat kişisel tecrübeme göre irregular/sparse data üzerinde bu pek işe yaramıyor. işe başlamadan önce datayı locality aware bir şekilde parçalamak en mantıklı çözüm.

    kernel fonksiyonu asenkron şekilde çağrılıyor, yani cpu tarafında bir beklemeye sebep olmuyor. dolayısıyla tüm yükü gpu'ya vermek yerine hybrid bir şekilde pthread ya da openmp kullanarak cpulardan da faydalanmak mantıklı. gene kişisel denemelerimde gözlemlediğim kadarıyla tek cpunun yaptığı bir işi en iyi durumda 10 kata kadar daha hızlı yapıyor modern bir gpu. benchmarklardaki yüz kat hızlanmalar çok sık rastlanır değil korkarım. sonuç olarak elinizde birden fazla cpu core varsa bunları kullanmak mantıklı.

    atomik operasyonlar kepler mimarisinde buyuk yavaşlamalara sebep olabiliyor ama pascal mimarisinde oldukça başarılılar.

    tüm bunlar dışında paralel algoritmalar hakkında bilgi sahibi ve c/c++ bilen biri için öğrenip kod yazmaya başlaması için gerekli süre muhtemelen bir iki gundur. nvidianın tutorıalları da çok başarılı.
  • paralel programlama konusunda acemi olsaniz bile cok sey ögrenebileceginiz bir platform gelistirilmis. konunun temeliyle ilgili derslerden tut deep learning'e kadar elinizdeki nvidia bilgisayarla neler yapabileceginize iliskin:

    - genel linkler (nedir ne degildir, getting started):
    http://www.nvidia.com/object/cuda_home_new.html
    https://developer.nvidia.com/how-to-cuda-c-cpp

    - udacity'de intro to parallel programming dersi: nvidia'nin organize ettigi bir ders, tamamen ücretsiz. videolari izleyip, soru cevaplayip, kod yaziyorsunuz (c'de) ve paralel programlama ve gpu ile ilgili temeliniz oturuyor. bunun icin bilgisayarinizda cuda olmasi da gerekmiyor, bunu ekleyeyim. her sey web üzerinden, ayni codeacademy gibi.

    - ilgi alaniniza göre ek olarak neler yapabileceginize bakabilirsiniz biraz tecrübe edindikten sonra. mesela detayli bir deep learning kaynagi icin (simdilerde baya popüler oldugu asikar):
    https://developer.nvidia.com/deep-learning-courses

    sahsen isin ortalarindayim. özellikle udacity'nin dersini tasarlayan güzel insanlara minnettarim.

    edit: udacity'deki ders ölüymüs bir süredir.
  • bir dezavantajı main memory'de bulunan data'nın, gpu ram'ine taşınması gerekliliğidir; ki problemin özelliğine göre işi cpu'da yapmaktan pahalıya gelebilir eğer bu taşıma işlemleri çok olursa.
    ayrıca shared memory, thread registers, constant memory gibi memory management ayrıntıları vardır, ki düzgün kullanımları amacınıza ulaşmanız için gerekli iken, yanlış kullanımları cpu'da yazmanın daha iyi sonuçlar verdiği çıkarımını doğurabilir.
  • matlab'ta parallel computing toolbox'taki fonksiyonları kullanarak bazı işlemleri cpu yerine nvidia'nın cudasını kullanarak gpu'da yapabilirsiniz.

    matlab diyorki eğer yaptınız işlem bir çok parçaya bölünebiliyorsa ve cpu'da hesaplama yapmak için geçen süre veriyi gpu'nun ramine atmak için geçen süreden fazlaysa, o zaman cuda sizing işinizi bayağı kolaylaştırabilir.
  • programciya c/c++ benzeri bir api sunup gpu programlamayi kolaylastiran nvidia gpgpu teknolojisi, simdilik geforce 8 serisinde (ve otesinde) calismaktadir.
  • nvidia'nin kendine has tutmak için özel bir çaba sarfettiği aşikardır.
  • ayni cipte bulunan heterojen cpu-gpu sistemlerinin yayginlasmasi ile daha da onem kazanacaktir.
  • sadece nvidia ekran kartlı bilgisayarda çalışan programlama dilidir. yapısal olarak c ye benzese de mantık olarak tamamen farklıdır. yüksek lisans tezim için kullanmak zorunda kaldım. öğrendikçe keyifli hale geliyor. şayet görüntü işleme üzerine uygulama geliştirecekseniz, matlab gibi ortamlarda saatlerce sonucu almak için beklemek yerine cuda da anında sonucu elde edebilirsiniz.
hesabın var mı? giriş yap