NumPy en soi est très rapide, mais faire des calculs matriciels t'empêche de sortir de la boucle plus tôt quand un point donné diverge rapidement. D'ailleurs ça diverge parfois tellement qu'il y a des dépassements de flottants (!) :
/home/antoine/numba/mandel.py:39: RuntimeWarning: overflow encountered in square
/home/antoine/numba/mandel.py:39: RuntimeWarning: invalid value encountered in square
/home/antoine/numba/mandel.py:40: RuntimeWarning: invalid value encountered in less_equal
Par ailleurs, si tu augmentes la taille du résultat souhaité, l'écart s'élargit (peut-être à cause des caches CPU qui deviennent moins efficaces pour la version matricielle) :
[^] # Re: Comparaison avec numpy?
Posté par Antoine . En réponse à la dépêche Numba 0.14. Évalué à 10.
J'ai réécrit un peu ta fonction :
Au final elle reste trois fois plus lente :
NumPy en soi est très rapide, mais faire des calculs matriciels t'empêche de sortir de la boucle plus tôt quand un point donné diverge rapidement. D'ailleurs ça diverge parfois tellement qu'il y a des dépassements de flottants (!) :
Par ailleurs, si tu augmentes la taille du résultat souhaité, l'écart s'élargit (peut-être à cause des caches CPU qui deviennent moins efficaces pour la version matricielle) :
Note : on peut faire une version NumPy qui fasse les calculs sur place (sans créer de tableaux intermédiaires). La fin de la fonction s'écrit alors :
Elle réduit un peu l'écart :