“GPU based parallel cooperative particle swarm optimization using C-CUDA: a case study.” başlıklı çalışma Kumar, Jitendra, Lotika Singh ve Sandeep Paul tarafından yapılmış olup Fuzzy Systems (FUZZ), 2013 IEEE International Conference on. IEEE konferansında 2013 yılında sunulmuştur. Evrimsel algoritmaları CUDA üzerinde gerçeklemenin hızlanmaya katkısı olduğu gibi, yakınsama zamanında iyileşme(improvement in convergence time) yaptığı da görülmektedir.>>>
Etiket Arşivleri: GPU
“A parallel Bees Algorithm implementation on GPU” başlıklı makale Journal of Systems Architecture dergisinin 2014 yılında yayınlanan 60.sayısının 271-279.sayfalarında yayınlanmıştır. Makaleyi Guo-Heng Luo, Sheng-Kai Huang, Yue-Shan Chang ve Shyan-Ming Yuan yazmıştır. Makaleyi indirmek için: A-parallel-Bees-Algorithm-implementation-on-GPU Çalışmada Arı Algoritması için paralel bir yaklaşım geliştirilerek CUBA(CUDA based Bees Algorithm) ismi verilmiştir. Arı Algoritması bal arılarından esinlenen, popülasyon>>>
MATLAB’ın GPU hesaplamada önerdiği yöntemlerden birisi de arrayfun fonksiyonunun kullanılmasıdır. sonuc = arrayfun(@Fonksiyonum, giris1, giris2,…); şeklinde bir yapı ile kullanılmaktadır. Giriş parametreleri(giris1, giris2,…) gpuArray olarak tanımlanmak zorundadır. Fonksiyonumuz sayılarla ifade edilebilen ve eleman bazlı (scalar/elementwise) olmalıdır. Yani vektör ve matris hesaplamaları yapılamamaktadır. sonuc, Fonksiyonumuzun çıktısı olarak GPU belleğinde oluşur. Örneğin 4 farklı diziyi giriş olarak>>>
GPU hesaplama işleminde özellikle büyük boyutlu verilerle çalışırken verinin doğruluğunu kontrol etmemiz gerekmektedir. CPU hesaplamada büyük boyutlu veriler işletim sistemi tarafından belirlenen mevcut bellek boyutuna geldiği zaman otomatik olarak harddisk’te bir takas hafızası(swapping memory) oluşturarak veri doğrulama işini yapmış olur, bu yüzden de CPU’da işlemler daha yavaştır. GPU belleği ile harddist arasında böyle bir takas>>>
GPU hesaplama her zaman neden hızlı değildir? A = 1:0.01:50000; Agpu = gpuArray(A); tic; B = fft(A); toc tic; Bgpu = fft(Agpu); toc B_from_gpu = gather(Bgpu); Yukarıdaki kodu incelediğimizde 1’en başlayaran 0.01’er artarak 50000’e kadar giden bir dizi oluşturulmaktadır. fft işlemi hem CPU’da hem de CPU’dan GPU’ya gönderilen Agpu verisiyle GPU’da yaptırılmakta, sonuçlarda B_from_gpu değişkenine>>>
MATLAB ile GPU’yu resetlemek için aşağıdaki komutlar kullanılabilir. GPU belleğinde taşma olmaması için resetleme işlemi yapılması gerekmektedir. g = gpuDevice(1); reset(g);
Kerneli aşağıdaki şekilde oluşturabiliriz: k = parallel.gpu.CUDAKernel(‘test.ptx’,’test.cu’); Peki bu kaç kere çalıştırılacak? Bunun ayarlanmasını ise GridSize ve ThreadBlockSize özellikleri ile yapmaktayız. Örneğin: k.ThreadBlockSize = [500,1,1]; kodu 500 kere ilgili kernelin çalıştırılacağını belirtir. GridSize: Blok sayısını belirleyen 3 boyutlu bir vektördür = [a b c] = Varsayılan değeri = [1 1 1]’dir. ThreadBlockSize: Bloklardaki thread sayısını>>>
MATLAB(Parallel Computing Toolbox) GPU Hesaplama ile örnek olarak iki sayının ve iki vektörün toplanması işlemi nasıl gerçekleştirilir? 1.adımda toplama işlemlerini yapacak olan kernel kodunun .cu dosyası içerisine doğru bir şekilde yazılması ve derlenerek .ptx dosyasının oluşturulması gerekmektedir. test.cu dosyamız: __global__ void add1( double * pi, double c ) { *pi += c; } __global__ void>>>
MATLAB(Parallel Computing Toolbox) GPU Hesaplama yaparken çağıracağımız kernelleri daha önceden derleyip, onlara ait .cu (kaynak kod) ve .ptx (parallel thread execution) dosyalarını ilgili Matlab dosyamızın bulunduğu klasöre koyarak gerekli tanımlamaları yapmamız gerekmektedir. Kullanmış olduğum sistemde nvcc derleyicisinin ihtiyaç duyduğu cl.exe dosyası “C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin” adresinde olduğundan bunu derleme yaparken yazdığım kod satırına>>>