Hello,

IMHO parallel_run is very unstable and should be considered as an experimental feature. I never managed to make it work with multiple arguments. The workaround is the following :

function U=fct(i)
    U1 = R1(i) * i1(i);
    U2 = R2(i) * i2(i);
    U = [U1 U2]';
endfunction

n = 1000;

// les vecteurs doivent etre en ligne pour la parallelisation

i1 = grand(1,n,'unf',0,0.1);
R1 = grand(1,n,'unf',0,500);
i2 = grand(1,n,'unf',0,0.1);
R2 = grand(1,n,'unf',0,1000);

// using parallel_run

Result = zeros(2,n); // au final, on a une matrice de dim (2xn)
tic()
Result = parallel_run(1:n, fct,[2,1]); // pour les n calculs, on sont un vecteur de dim (2x1) = meme dimension que U en sortie
disp(Result);
time = toc(); printf("time = %g\n",time);

The "1:n" trick allows to use any kind of data type, but be aware that the mechanism of parallel_run is based on subprocess (not threads) hence Scilab and its actual main workspace is cloned as many times as the number of cores. This is not a problem if you have a lot of memory...

However, I don't fully understand what you meant by mixing parallel_run and vectorization. Your original script did

Result = parallel_run([R1,i1,R2,i2], fct,[2,1]);

which should be (without the brackets)

Result = parallel_run(R1,i1,R2,i2, fct,[2,1]);

however, this syntax leads to a Scilab freeze (with 100% CPU on all cores) : it should be ok but as I already said parallel_run is quite buggy...

Moreover the ".*" instead of "*" was not useful since fct() is called with scalar arguments.

S.

Le 14/06/2016 à 14:31, Carrico, Paul a écrit :

Hi again

In the following new example, there’s something I do not caught ; I cannot figure out what I’m misunderstanding

Am I right to say that n calculations are splitted on the available processors?

Paul

################################################################”

mode(0);

stacksize('max');

clear;

function*U*=_fct_(*R1*, *i1*, *R2*, *i2*)

U1 = *R1*. * *i1*;

U2 = *R2*. * *i2*;

*U* = [U1 U2]'; /// matrice (2x1) a chaque iteration  apres tansposition /

clearU1; clear U2;

endfunction

n= 1000;

/// les vecteurs doivent etre en ligne pour la parallelisation/

i1= grand(1,n,'unf',0,0.1);

R1= grand(1,n,'unf',0,500);

i2= grand(1,n,'unf',0,0.1);

R2= grand(1,n,'unf',0,1000);

/// using parallel_run/

Result= zeros(2,n); /// au final, on a une matrice de dim (2xn)/

_tic_()

Result= parallel_run([R1,i1,R2,i2], _fct_,[2,1]); /// pour les n calculs, on sont un vecteur de dim (2x1) = meme dimension que U en sortie/

disp(Result);

time= _toc_(); printf("time = %g\n",time);

*/EXPORT CONTROL :
/**Cet email ne contient pas de données techniques
This email does not contain technical data*



_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users


--
Département de Génie Informatique
EA 4297 Transformations Intégrées de la Matière Renouvelable
Université de Technologie de Compiègne -  CS 60319
60203 Compiègne cedex

_______________________________________________
users mailing list
[email protected]
http://lists.scilab.org/mailman/listinfo/users

Reply via email to