Cython VS C++性能比较?

Cha*_*ame 10 c c++ python dll cython

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

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

随着我走得更远,我有点困惑.据我所知,Cython将python代码包装成C.由于C具有更好的计算性能,因此性能得到了提高.我对此是否正确?

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

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

cyp*_*har 4

首先,我要澄清一下大家的一些误解。

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

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

  • Cython 将 Python 代码“包装”为 C

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

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

  • 我想澄清你的一个观点。您在 __can__ 中编写代码的语言对性能有重大影响。C、C++ 和 Fortran 之间的差异可能很小,但 C 和 Python 之间的差异可能相当大。例如,如果我们看一下[Debian的枪战项目](http://benchmarksgame.alioth.debian.org/u32/performance.php?test=nbody),nbody算法可以在C中9秒内完成,但是它使用 Python 需要 18 分钟以上。 (2认同)
  • 即使只考虑编译语言,性能差异也可能很大。在 @sharth 链接的示例中,最好的 C 程序的速度是最好的 Fortran 程序的两倍以上(在其他情况下,情况可能恰恰相反)。其他情况差异较大。该语言*确实*具有重大影响。具体来说,语言、算法、系统架构和编译器优化的结合*确实*会产生显着的差异。 (2认同)