Cython比相应的C ++函数慢

时间:2018-04-20 12:08:24

标签: c++ numpy cython

我对Cython C ++编译感到困惑。 我有一个用C ++实现的算法,我要么用C ++调用它,要么用python调用Cython包装器。 代码的包装部分花费的时间可以忽略不计, 但如果我不使用Cython,算法的运行速度要快10倍。

Cython的运行时间与没有优化的C ++时间非常相似。

我按照这样编译我的程序:

setup(ext_modules = cythonize(Extension(
           "max_depth_cpp", 
           sources=["cpp/wrap.pyx", "cpp/count_inliers.cpp", 
                    "cpp/max_depth.cpp", "cpp/misc.cpp", "cpp/solver.cpp", 
                    "cpp/vec3.cpp" , "cpp/wrapper.cpp"], 
           language="c++",          
           extra_compile_args=["-O3","-std=c++17"],
           extra_link_args = ["-std=c++17"]
      )))

删除-O3选项不会改变运行时间。

wrap.pyx 导入numpy为np cimport numpy as np#for np.ndarray np.import_array()#verk important(seg faults)

来自“wrapper.h”的

cdef extern:     void wrapper(double *,double *,int,double,double *)

cpdef max_depth_cpp(np_v1, np_v2, eps):
    cdef np.ndarray[double, ndim=2, mode='c'] v1 = np_v1
    cdef np.ndarray[double, ndim=2, mode='c'] v2 = np_v2
    cdef np.ndarray[double, ndim=1, mode='c'] t
    t = np.zeros(3, dtype=np.double)

    wrapper(&v1[0,0], &v2[0,0], len(v1), eps, &t[0])
    return t

wrapper.cpp

#include "wrapper.h"
#include "solver.h"

void wrapper(double* v1_in, double* v2_in, int N,  double eps, double* t){
    solver(v1_in, v2_in, N, eps, t);   //changes t
}

Solver只是调用我的C ++方法调用。它首先从numpy数组中获取所有数据,但这只花费了很少的总时间

0 个答案:

没有答案