12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- % Calculs Parallèles avec la Parallel Toolbox
- % - mise en oeuvre de spmd (Single Program Multiple Data)
- % (spmd ~ une version simplifiée de MPI "sauce Matlab")
- %
- % Program spmd_ex4_int_trapeze.m:
- % - Calcul intégral par la méthode des trapèzes.
- % https://fr.wikipedia.org/wiki/Méthode_des_trapèzes
- %
- %
- % Remarque: il s'agit d'un programme exemple ... car en matlab
- % les deux lignes suivantes suffisent !!! ;-) :
- %
- % f=@(x) 4./(1+x.^2);
- % Q=integral(f,0,1)
- %function value = spmd_ex4_int_trapeze(n)
- % cf tutoriaux parfor_ex2.m: si le nombre de ressources est
- % supérieur à 12, il faut forcer le pool.
- % le script oar matlab_ex4_lauch.oar demande 16 coeurs via
- % la variable d environnement number_Threads
- if (~isempty(getenv('number_Threads')))
- % parpool(16)
- parpool(uint8(str2num(getenv('number_Threads'))))
- else
- % rien, le pool est initialisé au nb de coeurs demandés
- end
- %p = gcp;
- %p.NumWorkers
- n=100;
- % cf matlab anonymous function. (ici, (4 x) dérivé de arctan pour le calcul de pi)
- f = @(x) 4./(1+x.^2)
- fprintf ( 1 , 'calcul des bornes \n');
- spmd
- a = ( labindex -1 ) / numlabs ;
- b = labindex/ numlabs ;
- fprintf ( 1, 'le Lab %d travaille sur l intervalle [% f ,% f] \n',labindex ,a ,b ) ;
- end
- fprintf ( 1 , 'chaque workers calcule son aire locale \n') ;
- spmd
- x = linspace ( a ,b ,n );
- fx = f(x);
- formule_de_quadrature = ( b - a ) * ( (fx(1) + fx(n))/2 + sum ( fx(2:n-1) ))/(n-1);
- fprintf ( 1 , ' Approximation partielle %f \n', formule_de_quadrature) ;
- end
- %approximation = sum ( formule_de_quadrature{:} ) ;
- approximation = sum(cellfun(@double,formule_de_quadrature(:,:)));
- fprintf ( 1, 'Approximation de pi = %f \n', approximation);
-
- % merci de quitter matlab proprement pour libérer correctement les jetons
- quit
|