Category: CUDA

  • Warp Divergence

    GPU’da thread’ler warp adı verilen 32 thread‘lik gruplar halinde yürütülür. Bir warp içindeki thread’ler aynı instruction stream’i takip ederek farklı data üzerinde çalışır. Buraya kadar her şey güzel. Sıkıntı, farklı instructionlar çalışması gerektiğinde başlıyor. Örneğin if() koşulu koyduğumuzda threadlerin bir kısmı if bloğunu bir kısmı else bloğunu çalıştıracak. Fakat bir warp içinde her iki bloğun…

  • Measuring Execution Time

    Yaptığımız işlemin daha optimize olup olmadığını anlayabilmek için ne kadar sürede çalıştığını ölçmemiz gerekli. Bu ölçümü ilk başta std::chrono kullanarak cpu üzerinden yapacağız. Daha sonra cudaEvent(?) ile gpu üzerinde ölçüm yapmayı da göreceğiz fakat o başka bir posttun konusu. githubda gördüğüm bir kodu sınıfa döktüm: Daha sonra kernel’ı çalıştırırken Dikkat ederseniz asekron olduğu için cudaDeviceSynchronize()…

  • CUDA Device Properties

    GPU’nun özelliklerini sorgulamak istiyorsak bunu kullanıyoruz. Böylece üstünde çalıştığımız sistem hakkında daha fazla bilgi edinebiliriz. Çok fazla sayıda özellik var. Bir kısmı aşağıda listelenmiştir.

  • CUDA Error Handling

    Çeşitli CUDA fonksiyonları dönüş tipi olarak cudaError_t döndürür. Bunu yakalayıp bir if checkiyle başarılı olup olmadığını kontrol ediyoruz. Genelde bu iş için Macro yazılıyormuş. gibi

  • GPU Memory and Data Transfer

    Bazen tek başına bir array atmak yeterli olmaz yanında size da göndermemiz gerekir:

  • Kernel Dimensions

    Herhangi bir döngü yazarken genelde (int i =0; i<N; i++) gibi şeyler kullanarak içinde bulunduğumuz indexi ayarlarız. Aynı olayı GPU da yapamıyoruz. Bize sunulan threadIdx, blockIdx gibi ifadelerle içinde bulunduğumuz indexi hesaplayabiliriz. Bu kavramlara daha önceki yazıda değinmiştik. Şimdi biraz daha detaylı bakalım Indexing Eğer çok boyutlu arraylerin indexlerinin nasıl hesaplandığının mantığını biliyorsanız bunun mantığını…

  • Hello CUDA

    Bazı Kavramlar Kurulum Hello CUDA Şimdi <<< >>> olayına gelelim direk N tane thread çalışsın demek yerine bu şekilde bölerek dağıtıyoruz. Bu biraz donanımsal bir mesele. burada tek boyutlu dimension kullanıyoruz ama 2-3 boyutlu da yapabiliriz. Misal bir resmi işlerken 26. pixel yerine 27. satırdaki 14. pixel daha kullanışlı Burada sınırlarımız sonsuz değil. Misal benim…