Your SlideShare is downloading. ×
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Numexpr   (python madrid)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Numexpr (python madrid)

508

Published on

Mini charla presentación de Numexpr en python-madrid (2012-06-14)

Mini charla presentación de Numexpr en python-madrid (2012-06-14)

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
508
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Numexpr Python-madrid 14/06/2012
  • 2. Numexpr¿Qué es?Evalua expresiones con numpy arraysLas reescribe de forma más eficienteLas compila al vuelo (gracias a su JIT) a códigopara su máquina virtual (escrita en C)
  • 3. Numexpr¿Qué es?Además tiene soporte para multi-threading quepermite evitar el GIL
  • 4. Numexpr¿Dependencias?Numpy
  • 5. Numexpr• Veamos un ejemplox es un numpy array de 100.000.000 floatsEvaluamos x4Python:y = [x1 ** 4 for x1 in x] (~74 segundos)y = [x1 * x1 * x1 * x1 for x1 in x] (~70 segundos)Numpy:y = x**4 (6.25 segundos) ~12xy=x*x*x*x (0.993 segundos) ~70xNumexpr (1 thread):y = ne.evaluate(‘x**4’) (0.313 segundos) ~210xy = ne.evaluate(‘x * x * x * x’) (0.369 segundos) ~18x
  • 6. Numexpr• Veamos un ejemplox es un numpy array de 100.000.000 floatsEvaluamos x4
  • 7. NumexprOperaciones CPU-boundOperaciones donde correrá más si tenemos CPU más rápida, e.g., sin, cos,exp, log, sqrt,... (funciones transcendentes)x, y, z son numpy arrays de 100.000.000 floatsSi hacemos la siguiente operación sin(x) + cos(y) + tan(z)Numpy: 9.12 segundosNumexpr: 9.85 segundos (1 thread) 5.09 segundos (2 threads) 1.8x 3.48 segundos (3 threads) 2.6x 2.71 segundos (4 threads) 3.4x 2.43 segundos (5 threads) 3.8x 2.21 segundos (6 threads) 4.1x 2.02 segundos (7 threads) 4.5x 1.89 segundos (8 threads) 4.8x
  • 8. NumexprOperaciones CPU-boundOperaciones donde correrá más si tenemos CPU más rápida, e.g., sin, cos,exp, log, sqrt,... (funciones transcendentes)x, y, z son numpy arrays de 100.000.000 floatsSi hacemos la siguiente operación sin(x) + cos(y) + tan(z)
  • 9. NumexprOperaciones Memory-boundOperaciones donde correrá más si tenemos velocidad de acceso más rápida amemoriax, y, z son numpy arrays de 100.000.000 floatsSi hacemos la siguiente operación x3 + 2y – 3x/zNumpy: 9.98 segundosNumexpr: 1.19 segundos (1 thread) 8.4x 0.64 segundos (2 threads) 15.6x 0.45 segundos (3 threads) 22.2x 0.36 segundos (4 threads) 27.7x 0.33 segundos (5 threads) 30.2x 0.30 segundos (6 threads) 33.3x 0.28 segundos (7 threads) 35.6x 0.26 segundos (8 threads) 38.4x
  • 10. NumexprOperaciones Memory-boundOperaciones donde correrá más si tenemos velocidad de acceso más rápida amemoriax, y, z son numpy arrays de 100.000.000 floatsSi hacemos la siguiente operación x3 + 2y – 3x/z
  • 11. NumexprOtro ejemplox, y, z son numpy arrays de 100.000.000 floatsSi hacemos la siguiente operación sin(sqrt(x3 + 2y – 3x/z))Numpy: 6.08 segundosNumexpr: 5.23 segundos (1 thread) 1.2x 2.74 segundos (2 threads) 2.2x 1.88 segundos (3 threads) 3.2x 1.46 segundos (4 threads) 4.2x 1.31 segundos (5 threads) 4.6x 1.19 segundos (6 threads) 5.1x 1.08 segundos (7 threads) 5.6x 0.99 segundos (8 threads) 6.1x
  • 12. NumexprOtro ejemplox, y, z son numpy arrays de 100.000.000 floatsSi hacemos la siguiente operación sin(sqrt(x3 + 2y – 3x/z))
  • 13. NumexprFuente: Francesc Alted http://www.youtube.com/watch?v=J3-oN_TulTg
  • 14. NumexprFuente: Francesc Alted http://www.youtube.com/watch?v=J3-oN_TulTg
  • 15. NumexprLimitaciones: operaciones element-wise
  • 16. NumexprUso:>> import numexpr as ne>> ne.evaluate(expresión a evaluar) Lista de operaciones y funciones que se pueden usar: http://code.google.com/p/numexpr/wiki/UsersGuide
  • 17. NumexprMás numexpr:http://code.google.com/p/numexpr/http://www.youtube.com/watch?v=J3-oN_TulTghttps://python.g-node.org/python-autumnschool-2010/_media/materials/starving_cpus/starvingcpus.pdfhttp://www.pytables.org/docs/CISE-12-2-ScientificPro.pdfPequeños trucos para tus cálculos con numpy y scipy:http://www.scipy.org/PerformanceTips
  • 18. Numexpr (anexo)• Veamos un ejemplox es un numpy array de 100.000.000 floatsEvaluamos x4 (prueba de última hora) Python: y = [x1 ** 4 for x1 in x] (~74 segundos) y = [x1 * x1 * x1 * x1 for x1 in x] (~70 segundos) Numpy: y = x**4 (6.25 segundos) y=x*x*x*x (0.993 segundos) Numexpr (1 thread): y = ne.evaluate(‘x**4’) (0.313 segundos) y = ne.evaluate(‘x * x * x * x’) (0.369 segundos) Pypy: y = [x1 ** 4 for x1 in x] (~16 segundos) y = [x1 * x1 * x1 * x1 for x1 in x] (~9.5 segundos) Numpypy: y = x**4 (0.00002 segundos) y=x*x*x*x (0.00001 segundos) Numpypy status: http://buildbot.pypy.org/numpy-status/latest.html

×