我有两个非常简单的cython函数,如下所示(用-fopenmp
编译):
#cython: language_level=3
#cython: wraparound=False
#cython: boundscheck=False
#cython: nonecheck=False
#cython: cdivision=True
import numpy as np
cimport numpy as np
cimport cython
from cython.parallel cimport prange, parallel
def ta_pa(double[:,::1] out, double[:,::1] u, double[:,::1] K, double a):
cdef Py_ssize_t ix, iz
cdef Py_ssize_t nx = out.shape[0]
cdef Py_ssize_t nz = out.shape[1]
with nogil, parallel():
for ix in prange(nx):
for iz in range(nz):
out[ix, iz] = u[ix, iz] - a*K[ix, iz]
def ta_li(double[:,::1] out, double[:,::1] u, double[:,::1] K, double a):
cdef Py_ssize_t ix, iz
cdef Py_ssize_t nx = out.shape[0]
cdef Py_ssize_t nz = out.shape[1]
for ix in range(nx):
for iz in range(nz):
out[ix, iz] = u[ix, iz] - a*K[ix, iz]
使用timeit
在笔记本中测试这两个函数时,使用256x256数组得到以下结果:
ta_li
:43.3µs码ta_pa
:28.1µs码在这里之前,一切都好!但是当我在一个更大的脚本中用ta_pa
替换ta_li
时(这个函数在其他脚本中运行了几千次),它的执行速度会比与ta_li
一起使用时慢得多
ta_li
执行脚本时,1个cpu正在运行ta_pa
执行脚本时,有4个cpu在运行我确信对这种行为有恰当的解释,但我不明白。有什么假设吗
目前没有回答
相关问题 更多 >
编程相关推荐