我看到的所有stackoverflow/github问题都是关于在编组对象时加快Python函数调用的速度。 但是我的问题是关于PyBdN11 C++模块函数中纯C++函数的工作时间。p>
我有从本地C++类库加载数据集和调用Cub方法的训练函数:
void runSvm()
// read smvlight file into required sparse representation
auto problem = read_problem( "random4000x20.train.svml" );
CSvmBinaryClassifierBuilder::CParams params( CSvmKernel::KT_Linear );
params.Degree = 3;
params.Gamma = 1/20;
params.Coeff0 = 0;
// measure time here
using namespace std::chrono;
system_clock::time_point startTime = high_resolution_clock::now();
CSvmBinaryClassifierBuilder( params ).Train( *problem ); // measure time only for this line
nanoseconds delay = duration_cast<nanoseconds>( high_resolution_clock::now() - startTime );
std::cout << setprecision(3) << delay / 1e6 << std::endl;
}
我通过pybind11将此函数绑定到Python:
PYBIND11_MODULE(PythonWrapper, m) {
m.def( "runSvm", &runSvm );
}
然后编译pybind11模块库并从Python调用它。计时器值超过3000毫秒。 但是当我从纯C++调用这个函数时,定时器值大约是800毫秒。 当然,我期待一些开销,但不是在这个地方,也不是那么多
我在一个线程中运行它,两种情况下它都100%加载一个内核
问题在哪里?谁面对同样的问题?你是如何处理的
当我在一个可重复的例子中工作时,我发现我在C++实例中比较不同的SVM内核(它是基于LIbVSVM PARAMS证明的‘RBF’)和PybDn11LIB(它是硬编码的‘线性’)。在修复它并比较相同的算法后,时间上没有差异
相关问题 更多 >
编程相关推荐