CPP 调用比 Python 接口调用慢

Posted

技术标签:

【中文标题】CPP 调用比 Python 接口调用慢【英文标题】:CPP Call slower than Python Interface Call 【发布时间】:2016-06-23 07:20:23 【问题描述】:

Caffe 的 Github 页面包含一个 Windows 分支。我采用了这个分支并创建了一个 Windows DLL。它是基于https://github.com/BVLC/caffe/blob/master/examples/cpp_classification/classification.cpp 的。

DLL 工作并输出正确的分类结果。但比pyCaffe接口慢1.5-5倍。非常有趣的是,pyCaffe 接口在所有测试的计算机上使用 AlexNet 需要大约 1 秒的时间来处理四张图像。 DLL 时间范围从 1.5 秒到 2 秒到 4 秒。

我们测量了循环前后的时间(使用Easily measure elapsed time)

template <typename Dtype> Dtype Net<Dtype>::ForwardFromTo(int start, int end)

此函数位于https://github.com/BVLC/caffe/blob/master/src/caffe/net.cpp,由 CPP 和 Python 代码调用。

我们使用 Visual Studio 2013 将 Caffe 编译为不支持 GPU 的 32 位程序

到目前为止我们已经检查过的可能的事情。

编译器优化 数据 操作系统和计算机配置(如 CPU/内存等) 我们在一次执行中测量了多次,因此基准更加稳定。 我们还使用 CodeXL 对代码进行了概要分析,但我找不到任何异常之处,但这当然有点模糊。

【问题讨论】:

你启用了哪些编译器优化? 您在分析数据中究竟得到了什么?它在哪里消磨时间? 【参考方案1】:

我们得出以下结论:Caffe 使用 GLog。 GLog 有可能看起来像这样的致命警告

CHECK(a<=b) << "a must be bigger than b";

这些警告让程序崩溃并且难以捕捉。为此,我们创建了一个类来替换 GLog。它相当简单并且使用std::stringstream。谷歌做了一些聪明的事情。只要条件为真,就不会评估右侧。

https://github.com/google/glog/blob/de6149ef8e67b064a433a8b88924fa9f606ad5d5/src/windows/glog/logging.h#L569

他们使用 (void) 0 解决了它。我们错过了那部分。当我想在此处发布分析数据时,我意识到由于

【讨论】:

以上是关于CPP 调用比 Python 接口调用慢的主要内容,如果未能解决你的问题,请参考以下文章

使用第三方接口调用工具调用Jenkins REST Api

python调用c++接口,参数为opencv读取数据

springcloud 通过gateway路由转发调用接口很慢问题

什么工具可以做FORTRAN调用关系分析?

关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢

为啥实现Autoclosable接口的类的close方法比Sql连接关闭先调用?