root / Pi / MP / PiMP.py.orig2 @ 185
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) |