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

Like this? Share it with your network

Share

Numexpr (python madrid)

on

  • 804 views

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

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

Statistics

Views

Total Views
804
Views on SlideShare
804
Embed Views
0

Actions

Likes
1
Downloads
9
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Numexpr (python madrid) Presentation 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