MATLAB’daki gibi CUBLAS kütüphanesinde de verilerin sıralanması sütun bazlı sıralıdır. Bu bir avanyaj olarak değerlendirilebilir. CUBLAS fonksiyonları dörde ayrılır. 1-Yardımcı Fonksiyonlar 2-1.Seviye Fonksiyonlar 3-2.Seviye Fonksiyonlar 4-3.Seviye Fonksiyonlar
Kategori Arşivleri: MATLAB
MATLAB
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);
MATLAB ve C/C++ kullanırken verilerin bellekte sıralanması birbirinden farklı olarak gerçekleşmektedir. MATLAB’da sütun bazlı bir sıralama var iken, C/C++’da ise satır bazlı sıralama kullanılmaktadır. Aynı veriyi ikisinde de kullanacaksak verilerin indekslerini iyi tutmamız gerekmektedir. İkinci bir sıkıntı da C/C++’da indeksleme 0’dan başlarken, MATLAB’da 1’den başlamaktadır. Bu da aynı verilere aynı indeks formülizasyonu ile ulaşılmasına izin>>>
Paralel programlama ile hızlanmayı hedef alan çalışmalar yapan ve yapmaya devam edecek olan bir karakter olarak Matlab’da uygulanması gereken bazı önerilere yer vereceğim. 1-Döngü içerisinde dosyaya yazma ve dosyadan okuma komutları kullanılmamalıdır. Çünkü dosyaya yazma ve okuma sırasında çağrılan komutlar zaman kaybına neden olmaktadır. Döngü içerisinde illa kullanmamız gerekirse bunları minimuma indirmemiz gerekmektedir. En sağlıklı>>>
Matlab’ta veriler sütun bazlı şekilde sıralanmaktadır. Bellekteki verilerin satır bazlı sıralandığına yeni yeni alışırken, Matlab’ta verilerin sütun bazlı şekilde sıralandığını öğrenmenin şokunu yaşamaktayım. Satır bazlıya göre verilerimizi ayarlayıp, ona uygun bir indeks yapısı kurmuştuk, şimdi de sütun bazlı sıralamaya göre bir yapı kurmamız gerekli. Aynı işlemin satır ve sütun bazlı yapıldığı vakit sütun bazlının daha>>>
Matlab’ta boyutu baştan belirleyerek hız kazanımı elde edilir. Aşağıdaki kodlar incelendiğinde ilk kısımdaki kod 0.000032 saniyede çalışmış, ikinci kısımdaki kod ise 0.000014 saniyede çalışmıştır. Kullanacağımız dizilerin boyutlarını baştan belirlemek bize performans sağlayacaktır. tic x=8; x(2)=10; x(3)=11; x(4)=20; toc tic y=zeros(4,1); y(1)=8; y(2)=10; y(3)=11; y(4)=20; toc