Kategori Arşivleri: MATLAB

MATLAB

Matlab Kıyasla Değiştir İşlemi

Bir matristeki elemanları tarayıp, büyük veya küçük olduğu durumlarda değişim yapmak istersek; Örneğin: A = [1 7 3; 6 2 9] A = 1 7 3 6 2 9 B = 5; C = max(A,B) dediğimizde; A matrisindeki tüm elemanlar ile B değeri kıyaslanır ve büyük olmadığı durumlarda bu değer yazılır, böylelikle C matrisinin son>>>

Matlab Eleman Eleman Operatör İşlemi Yaptırma

Matlab matris eksenli bir ortam olduğundan olduğundan *(çarpma) operatörü direk matris çarpma yapmaktadır. O yüzden vektörleri veya elemanları tek tek çarpmak için bu operatörlerin başına .(nokta) koyulmalıdır. Örneğin: x =[1 2 3]; v =[4 5 6]; k = x .* v; k = 4 10 18 sonucunu verir.

Matlab Vektörizasyon ile Hızlanma

Matlab Vektörizasyon uyumlu çalışma yapısı ile for döngülerinin gereksiz yere kullanımını önler. Aşağıdaki kodlar incelendiği zaman durum daha net anlaşılacaktır. clear all; tic A = 0:0.000001:10; B = 0:0.000001:10; Z = zeros(size(A)); y = 0; for i = 1:10000001 Z(i) = sin(0.5*A(i)) * exp(B(i)^2); y = y+Z(i); end toc Bu kod 0.944395 saniyede -1.3042e+48 sonucunu>>>

MATLAB GPU CUDA Thread, Block, Grid boyutlarının ayarlanması

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

GPU hesaplamada veri transferinin etkisinin FFT hesaplama ile gösterimi

GPU hesaplamada veri transferinin etkisinin FFT hesaplama ile gösterimi… GPU hesaplamada kullanılacak verinin CPU’dan GPU’ya aktarılması ek bir zaman maliyeti getirmektedir. Bu da performansı etkilemektedir. Aşağıdaki örnekte bunun etki boyutları araştırılmıştır. Gerekli açıklamalar kodların yanında yorum olarak mevcuttur. A1 = rand(3000,3000); tic; B1 = fft(A1); time1 = toc; A2 = gpuArray(A1); tic; B2 = fft(A2);>>>

class() Matlab Komutu

Kullanmakta olduğumuz değişkenin tipini veren faydalı bir komuttur. Özellikle CPU-GPU veri taşıma sırasında datanın ne durumda olduğu sorgulanabilir. A2 = gpuArray(A1); tic; B2 = fft(A2); time2 = toc; class(B2); % Burada gpuArray sonucu döner B2=gather(B2); class(B2); % Burada double sonucu döner

İki sayının ve iki vektörün toplanması – MATLAB(Parallel Computing Toolbox) GPU Hesaplama

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

PTX dosyası nasıl oluşturulur?

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

wait (GPUDevice) Komutu – MATLAB(Parallel Computing Toolbox) GPU Computing

GPU’daki işlemlerin bitmesini beklerken MATLAB’daki diğer işlemleri bekletir. Verileri gather ile GPU’dan CPU’ya aktardığınız zamanlarda kullanımına gerek yoktur, zira GPU’daki işlem bitmeden gather devreye girmemektedir. gpu = gpuDevice % gpu değişkenine cihazın ataması yapılır wait(gpu); % Bekleme işlemi gerçekleştirilir

MATLAB(Parallel Computing Toolbox) GPU Hesaplama Örneği – Monte Carlo Simülasyonu

MATLAB(Parallel Computing Toolbox) GPU Hesaplama Örneği – Monte Carlo Simülasyonu close all; clear all N = 1e8; gpu = gpuDevice for pass = 1:2 disp(‘ ‘) if (pass==1) disp(‘Single precision:’) prec = ‘single’; else disp(‘Double precision:’) prec = ‘double’; end disp(‘ ‘) disp(‘GPU’) for M = [1e5 1e6 1e7] parallel.gpu.rng(‘default’); tic e4 = 0; for>>>