j'ai changé l'intégration d'une liste dans une liste des intégrations afin que je puisse utiliser ParallelTable
:
X1par=ParallelTable[Integrate[i, {x, -1, 1}], {i, Nw.Transpose[Nw]}];
X1par==X1
(* ===> True *)
Y1par = ParallelTable[Integrate[i,{x,-1,1}],{i,D[Nw,{x,2}].Transpose[D[Nw,{x,2}]]}]
Y1 == Y1par
(* ===> True *)
Dans mes horaires, avec {j, 5, 30, 1}
au lieu de {j, 5, 200, 1}
pour limiter le temps utilisé un peu, ce est environ 3,4 fois plus rapide sur mon quod-core. Mais il peut faire encore plus vite avec:
X2par = Parallelize[Integrate[#, {x, -1, 1}] & /@ (Nw.Transpose[Nw])]
X2par == X1par == X1
(* ===> True *)
Ceci est environ 6,8 fois plus rapide, un facteur de 2,3 dont est due à Parallelize
.
Timing
et AbsoluteTiming
ne sont pas très fiables en cas d'exécution parallèle. J'ai utilisé AbsoluteTime
avant et après chaque ligne et a pris la différence.
EDIT
Nous ne devons pas oublier ParallelMap:
Au niveau de la liste grossière (1):
ParallelMap[Integrate[#, {x, -1, 1}] &, Nw.Transpose[Nw], {1}]
Au plus profond de la liste (la plus fine parallélisation grainée):
ParallelMap[Integrate[#, {x, -1, 1}] &, Nw.Transpose[Nw], {2}]
également [sur math.SE] (http://math.stackexchange.com/q/79218/954) et question connexe sur [superuser] (http://superuser.com/q/315337/45585). – Simon