Contenu connexe
Similaire à Making Python computations fast (20)
Plus de Russel Winder (20)
Making Python computations fast
- 1. Copyright © 2015 Russel Winder 1
Making Python
computations fast
Dr Russel Winder
email: russel@winder.org.uk
twitter: @russel_winder
Web: http://www.russel.org.uk
- 7. Copyright © 2007–2015 Russel Winder 7
The Maths
The equation:
Leads to the approximation formula:
∑i=0
n 4
(1+xi
2
)
Δ x≈π
∫0
1 4
(1+x
2
)
dx=π¿
- 8. Copyright © 2007–2015 Russel Winder 8
The Conception
Calculate an approximation to the area under
a conic section by filling the area with a known
number of rectangles of known size and then
sum the areas of the rectangles.
The narrower the rectangles, the more accurate the approximation.
This is a data parallel problem and
embarrassingly parallel.
- 9. Copyright © 2007–2015 Russel Winder 9
The Parallelism
● Addition is commutative and associative so we
can partition the overall summation in any way
we want:
a + b + c + d + e + f
( a + b ) + ( c + d ) + ( e + f )
Can partition the overall sum into bits to
be done on different processors.
This should make things faster.
- 10. Copyright © 2007–2015 Russel Winder 10
Adding the Parallelism
● Instead of doing all the calculations sequentially,
partition the problem into a number of chunks.
problem
subproblem
result
subproblem
subproblem
subproblem
.
.
.
scatter gather
fork join
reduce
Data parallel
map
- 11. Copyright © 2007–2015 Russel Winder 11
Some Code
● Sequential.
● Use threads to obtain parallelism…not.
● Use process to obtain parallelism.
Friends don't let friends use Python 2 instead of Python 3.
- 13. Copyright © 2007–2015 Russel Winder 13
More Code
● Use Cython.
● Use Numba.
cf. lightning talk at PyConUK 2014.
- 14. Copyright © 2007–2015 Russel Winder 14
A lot faster but… is
controlling parallelism in
Python the thing to do…
- 15. Copyright © 2007–2015 Russel Winder 15
Even More Code
● Use NumPy.
● Use C.
● Use C++/Boost.
● Use D/PyD.
● Use Chapel/PyChapel.
Offload the whole computation,
Leaving Python code as the
coordination code.
https://github.com/russel/Pi_Quadrature/tree/master/Python
http://dlang.org/
http://pyd.readthedocs.org/
http://chapel.cray.com/
http://pychapel.readthedocs.org/
- 16. Copyright © 2007–2015 Russel Winder 16
Parallelism and computation
is not Python's forte.
(Even though Python is a great language.)
- 20. Copyright © 2015 Russel Winder 20
Making Python
computations fast
Dr Russel Winder
email: russel@winder.org.uk
twitter: @russel_winder
Web: http://www.russel.org.uk
- 21. Copyright © 2015 Russel Winder 21
John, you were a truly Pythonic hero,
I miss your physical presence here.