Statistiques
| Révision :

root / Pi / MP / PiMP.py.orig2 @ 308

Historique | Voir | Annoter | Télécharger (1,2 ko)

1 7 equemene
#!/usr/bin/env python
2 7 equemene
3 7 equemene
# If numpy is loaded without being used, it does not work !
4 7 equemene
from math import exp
5 7 equemene
from random import random
6 7 equemene
# Multithread library call
7 7 equemene
from multiprocessing import Pool
8 7 equemene
9 7 equemene
def MainLoop(iterations):
10 7 equemene
11 7 equemene
    total=0
12 7 equemene
    for i in xrange(iterations):
13 7 equemene
        # Random access coordonate
14 7 equemene
        x,y=random(),random()
15 7 equemene
16 7 equemene
        if ((x*x+y*y) < 1.0):
17 7 equemene
                total+=1
18 7 equemene
19 7 equemene
    return(total)
20 7 equemene
21 7 equemene
if __name__=='__main__':
22 7 equemene
23 7 equemene
   # Machine
24 7 equemene
   CORES=4
25 7 equemene
26 7 equemene
   # Au dessus de 4 10^7, le MPI ne veut plus se lancer...
27 7 equemene
   Iterations=1000000000
28 7 equemene
29 7 equemene
   total=0
30 7 equemene
31 7 equemene
   # Define iterations to send to each node
32 7 equemene
   if Iterations%CORES==0:
33 7 equemene
	   iterations=Iterations/CORES
34 7 equemene
   else:
35 7 equemene
	   iterations=Iterations/CORES+1
36 7 equemene
   print "%i iterations will be send to each core" % iterations
37 7 equemene
38 7 equemene
   IT=[]
39 7 equemene
   for i in range(0,CORES):
40 7 equemene
	   IT.append(iterations)
41 7 equemene
42 7 equemene
   print IT
43 7 equemene
44 7 equemene
   # Define the number of processes to be launched at a time
45 7 equemene
   # POOL: resources to be used (
46 7 equemene
   #pool=Pool(processes=CORES)
47 7 equemene
   pool=Pool(CORES)
48 7 equemene
   print "Start on %i processors..." % CORES
49 7 equemene
50 7 equemene
   # MAP: distribution of usecases T to be applied to MetropolisStrip
51 7 equemene
   Results=[ pool.apply_async(MainLoop,(i,)) for i in IT]
52 7 equemene
53 7 equemene
   results=[r.get() for r in Results]
54 7 equemene
   print results,sum(results)