Parallize vectorwise on GPU in Matlab using arrayfun

2 vues (au cours des 30 derniers jours)
Johannes Maul
Johannes Maul le 19 Fév 2021
Déplacé(e) : Matt J le 18 Jan 2023
Hello together,
I'm a student who tries diffrent parallelisation techniques with Matlab. Therefore I'm using the Runge-Kutta (snippet1) to solve the van-der-pol equation(snippet 2).
code snippert 1:
function [y,x] = ownRungeKutta(t, x0, Mu)
y = zeros(length(t),2);
y(1,:) = x0;
x = t;
for i = 1:length(t)-1
h = abs(t(i)-t(i+1));
k1 = vdP_fkt1("",y(i,:)',Mu);
k2 = vdP_fkt1("",y(i,:)'+.5*k1*h,Mu);
k3 = vdP_fkt1("",y(i,:)'+.5*k2*h,Mu);
k4 = vdP_fkt1("",y(i,:)'+k3*h,Mu);
y(i+1,:) = y(i,:)'+((k1+2*k2+2*k3+k4)/6)*h;
end
end
The VDP function looks like: Code snippet 2:
function dxdt = vdP_fkt1(t,x,Mu)
dxdt= [x(2); Mu*(1-x(1)^2)*x(2)-x(1)];
end
Now, I know that the RungeKutta is not able to paralize. But I can paralize above diffrent parametrisations, which means we can use diffrent x0 and Mu to analyse the behavior of the function. In my opinion that should be very easy to paralize because its a trivial problem. Just call the funtion 100 times with diffrent parameters. The Problem is, that arrayfun just can be used elementwise. But x0 is a 1x2 vector and t is a n x 1 vector too. (t is to compare the own RungeKutta with other methods with dynamic steps). I also tried cellfun but that seems not running parallel on GPU...
So is there another possibility to paralize this on GPU?
Update:
I found a way to use GPUArrays in arrayfun with vectors (it's one of the examples, I did not recognize that), but I think it is not paralized over the size of i ( look at code snippet 3)
Code snippet 3:
for i = 1:anzGesamt
testGPUArray(i).T = gpuArray(t);
testGPUArray(i).x0 = gpuArray(1);
testGPUArray(i).x1 = gpuArray(0);
testGPUArray(i).Mu = gpuArray(Mutmp);
end
total = tic;
arrayfun(@(a) ownRungeKutta(a.T,a.x0,a.x1,a.Mu),testGPUArray);
totalTime = toc(total);
Everything is a gpuArray now also the variables in the code snippets 1-2. vdp_fkt1 also returns a gpuArray. But the overall code is slow as hell. Do I miss something?
It is also possible to debug it procedural. It looks like arrafun is executed linear. Is that normal?
Thank you for your help!
Johannes

Réponses (1)

Alvaro
Alvaro le 18 Jan 2023
Déplacé(e) : Matt J le 18 Jan 2023
Have you tried parallelizing using parfor?

Catégories

En savoir plus sur Parallel Computing Fundamentals dans Help Center et File Exchange

Produits


Version

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by