Kategori Arşivleri: Programlama Dilleri

Programlama Dilleri

MATLAB ve CUBLAS(CUDA Temel Lineer Cebir Alt Programları)

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

MATLAB CUDA kernel çıkış değişkenleri nasıl tanımlanır?

[output1, output2] = feval(CUDA_Kernel,input1, input2, input3) şeklinde tanımlanan bir kernel fonksiyonunda ilk iki giriş değişkeni, çıkış değişkeni olarak kullanılır. İki veya daha az giriş değişkeni var ise ilk giriş değişkeni, çıkış değişkeni olarak belirlenir. Örneğin:

MATLAB’da arrayfun nasıl kullanılır?

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 Hesaplamadaki Yetersiz Bellek Hatasının Nedeni ve Çözümü

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?

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 ve C/C++ kullanırken verilerin bellekte sıralanması

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>>>

Matlab ile performans artırmak için bazı öneriler…

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

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

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