【问题标题】:Cython VS C++ Performance Comparison? [closed]Cython VS C++ 性能比较? [关闭]
【发布时间】:2013-10-11 11:55:26
【问题描述】:

我正在尝试使用 Cython 来编写我的项目。

我的计划是用 C++ 编写 .dll,然后通过 Cython 从 Python 调用它们。这样我就可以拥有C++的高计算性能,同时保持Python开发的简单性。

当我走得更远时,我有点困惑。据我了解,Cython 将 python 代码包装到 C 中。由于 C 具有更好的计算性能,因此性能得到了提高。我说的对吗?

如果我在上面,那么是否有必要用 C++ 编写 .dll 并从 Python 调用它以提高性能?

如果我编写 python 代码并将其包装成 C,然后从 Python 调用它,它是否比调用用 C++ 编写的 .dll 执行得更好?

【问题讨论】:

标签: c++ python c dll cython


【解决方案1】:

首先,让我解开你似乎有的一些误解。

  • 从另一个程序调用库将加速您的库。

不,不,不,不,不。这就像说“以设定的速度驾驶汽车比让 F1 赛车手以相同的速度驾驶汽车要慢”一样有意义。这只是没有的意义。当 Python 加载您的库时,它会加载和处理它类似于内核加载和处理它的方式(事实上,内核在 Python 的情况下也是这样做的)。事实上,这种“双重加载”(这不是动态库的原始设计)可以减慢您的库。我要强调的是,这是一个微小的差异,不应该关心普通程序员。

  • Cython 将 Python 代码“包装”到 C 中

它没有。它将python代码编译成C,然后编译成动态库供Python稍后加载。这可能会在一定程度上优化您的 Python 代码,并让您能够与原子 C 数据类型进行交互,并在顶部使用 Python 的魔法酱。虽然这很酷,但它并没有给你的代码任何“神奇”的能力。

我还想补充一点,一些测试已经证明,Java(鼓声)实际上比 C、C++、Python 和其他语言更快,因为 JVM 非常优化。这并不意味着您应该使用 Java(因为它还有其他问题),但它应该提供观点。

【讨论】:

  • 我想澄清你的一个观点。您编写代码所使用的语言可以对性能产生重大影响。 C、C++ 和 Fortran 之间的差异可能很小,但 C 和 Python 之间的差异可能相当大。例如,如果我们查看Debian's shootout project,nbody 算法在 C 中可以在 9 秒内完成,但在 Python 中需要超过 18 分钟。
  • 即使只看编译语言,性能差异也可能很大。在@sharth 链接的示例中,最好的 C 程序比最好的 Fortran 快两倍多(在其他情况下,可能相反)。其他情况差异较大。语言确实会产生重大影响。具体来说,语言、算法、系统架构和编译器优化的组合确实会产生重大影响。
  • @cyphar 感谢您的回答。据我所知,一些银行正在使用类似的架构。他们用 C++ 或其他高性能语言编写 .dll,并用 Python 调用它们。在这种情况下,可能缺乏编程经验的财务分析师可以轻松开发分析程序。这就是我的想法的来源。
  • @bogatron 重要的是要了解算法、架构和编译器会产生最的显着差异。我从未说过语言之间没有区别,但与设计良好的算法的主要关注点相比,这不应该是主要关注点。
  • @cyphar 在我的计划中,我将处理对象内和类之间的大量数据和大量计算。所以我想使用 C++,因为它支持多线程,而 Python 用 GIL 禁止它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2018-10-24
  • 2015-01-28
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多