Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
pub
pi
Commits
73cc9da0
Commit
73cc9da0
authored
Feb 06, 2020
by
Neil Gershenfeld
Browse files
wip
parent
e95d406f
Pipeline
#4918
passed with stage
in 0 seconds
Changes
1
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Python/mpipi.py
→
Python/mpipi
2
.py
View file @
73cc9da0
#
# mpipi.py
# mpipi
2
.py
# Neil Gershenfeld 2/6/20
# calculation of pi by an MPI Numba sum
# pi = 3.14159265358979323846
...
...
@@ -9,6 +9,13 @@ import time
from
numba
import
jit
from
mpi4py
import
MPI
NPTS
=
1000000000
NLOOP
=
10
comm
=
MPI
.
COMM_WORLD
rank
=
comm
.
Get_rank
()
nproc
=
comm
.
Get_size
()
@
jit
(
nopython
=
True
)
def
calc
(
istart
,
iend
):
sum
=
0.0
...
...
@@ -16,22 +23,26 @@ def calc(istart,iend):
sum
+=
0.5
/
((
i
-
0.75
)
*
(
i
-
0.25
))
return
sum
NPTS
=
100000000000
comm
=
MPI
.
COMM_WORLD
rank
=
comm
.
Get_rank
()
nproc
=
comm
.
Get_size
()
if
(
rank
==
0
):
istart
=
1
+
rank
*
NPTS
;
iend
=
(
rank
+
1
)
*
NPTS
;
max
=
0
for
j
in
range
(
NLOOP
):
comm
.
Barrier
()
start_time
=
time
.
time
()
istart
=
int
(
1
+
NPTS
*
((
rank
+
0
)
/
nproc
))
iend
=
int
(
NPTS
*
((
rank
+
1
)
/
nproc
))
pi
=
calc
(
istart
,
iend
)
comm
.
reduce
(
pi
,
op
=
MPI
.
SUM
,
root
=
0
)
sum
=
0.0
;
sum
=
calc
(
istart
,
iend
)
pi
=
comm
.
reduce
(
sum
,
op
=
MPI
.
SUM
,
root
=
0
)
end_time
=
time
.
time
()
mflops
=
NPTS
*
5.0
/
(
1.0e6
*
(
end_time
-
start_time
))
print
(
"NPTS = %d, pi = %f"
%
(
NPTS
,
pi
))
print
(
"time = %f, estimated MFlops = %f"
%
(
end_time
-
start_time
,
mflops
))
mflops
=
nproc
*
NPTS
*
5.0
/
(
1.0e6
*
(
end_time
-
start_time
))
print
(
"processes = %d, NPTS = %d, pi = %f"
%
(
nproc
,
NPTS
,
pi
))
if
(
mflops
>
max
):
max
=
mflops
print
(
"time = %f, estimated MFlops = %f, max = %f"
%
(
end_time
-
start_time
,
mflops
,
max
))
else
:
istart
=
int
(
1
+
NPTS
*
((
rank
+
0
)
/
nproc
))
iend
=
int
(
NPTS
*
((
rank
+
1
)
/
nproc
))
pi
=
calc
(
istart
,
iend
)
comm
.
reduce
(
pi
,
op
=
MPI
.
SUM
,
root
=
0
)
istart
=
1
+
rank
*
NPTS
iend
=
(
rank
+
1
)
*
NPTS
for
j
in
range
(
NLOOP
):
comm
.
Barrier
()
sum
=
calc
(
istart
,
iend
)
comm
.
reduce
(
sum
,
op
=
MPI
.
SUM
,
root
=
0
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment