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