python - Why does numba have worse optimization than Cython in this code? -


i trying optimize code numba. problem simple cython optimization (just specifying data types) 6 times faster using autojit, don't know if i'm doing wrong.

the function optimize is:

from numba import autojit  @autojit(nopython=true) def get_energy(system, i,j,m):    #system array, (i,j) indices , m size of array   up=i-1;  down=i+1;  left=j-1;  right=j+1   if up<0: total=system[m,j]   else: total=system[up,j]   if down>m: total+=system[0,j]   else: total+=system[down,j]   if left<0: total+=system[i,m]   else: total+=system[i,left]   if right>m: total+=system[i,0]   else: total+=system[i,right]   return 2*system[i,j]*total 

a simple run this:

import numpy np x=np.random.rand(50,50) get_energy(x, 3, 5, 50) 

i've understood numba @ loops may not optimize other things well. anyhow, expect similar performance cython, numba slower accessing arrays or @ conditional statements?

the .pyx file in cython is:

import numpy np cimport cython cimport numpy np  def get_energy(np.ndarray[np.float64_t, ndim=2] system, int i,int j,unsigned int m):    cdef int   cdef int down   cdef int left   cdef int right   cdef np.float64_t total   up=i-1;  down=i+1;  left=j-1;  right=j+1   if up<0: total=system[m,j]   else: total=system[up,j]   if down>m: total+=system[0,j]   else: total+=system[down,j]   if left<0: total+=system[i,m]   else: total+=system[i,left]   if right>m: total+=system[i,0]   else: total+=system[i,right]   return 2*system[i,j]*total 

please comment if need give further information.


Comments

Popular posts from this blog

javascript - AngularJS custom datepicker directive -

javascript - jQuery date picker - Disable dates after the selection from the first date picker -