gpt4 book ai didi

python - CPP 调用比 Python 接口(interface)调用慢

转载 作者:行者123 更新时间:2023-11-28 05:37:11 25 4
gpt4 key购买 nike

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

DLL 工作并输出正确的分类结果。但是比pyCaffe接口(interface)慢1.5-5倍。非常有趣的是,pyCaffe 接口(interface)在所有测试的计算机上使用 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 编译为 32 位程序,没有 GPU 支持

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

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

最佳答案

我们得出以下结论: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 解决了这个问题。我们错过了那部分。当我想在这里发布分析数据时,我意识到 << 运算符会浪费一些时间。我们开始更仔细地查看分析数据并增加函数调用的次数,这样每个数字都会变得更大更清晰。这让我们找到了解决方案。

关于python - CPP 调用比 Python 接口(interface)调用慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37984768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com