Cra*_*ine 133 c c++ python code-generation
是否可以将Python程序转换为C/C++?
我需要实现几个算法,我不知道,如果性能差距大到足以证明所有的痛苦在C/C++(这我不擅长)做的时候我会去.我考虑过编写一个简单的算法,并针对这样一个转换后的解决方案进 如果仅这一点明显快于Python版本,那么除了在C/C++中做这件事之外我别无选择.
S.L*_*ott 131
如果C变体需要x小时,那么我会花时间让算法运行更长/更久
"投资"在这里不是正确的词.
在Python中构建一个工作实现.在完成C版本之前,你将完成这么久.
使用Python分析器测量性能.解决您发现的任何问题.根据需要更改数据结构和算法,以便真正做到这一点.在C完成第一个版本之前,你将完成这么久.
如果它仍然太慢,请手动将精心设计和精心构造的Python转换为C.
由于后见之明的工作方式,从现有的Python(使用现有的单元测试和现有的分析数据)执行第二个版本仍然比尝试从头开始执行C代码更快.
这句话很重要.
汤普森对第一次望远镜制造商的规则
制作一个四英寸镜子然后一个六英寸镜子比制作一个六英寸镜子更快.Bill McKeenan
Wang Institute
Len*_*bro 103
是.看看Cython.它就是这样:将Python转换为C以获得加速.
小智 14
刚刚在黑客新闻中遇到了这个新工具.
从他们的页面 - "Nuitka是Python解释器的一个很好的替代品,并编译CPython 2.6,2.7,3.2和3.3提供的每个构造.它将Python转换为C++程序,然后使用"libpython"以与CPython以非常兼容的方式完成."
jac*_*der 10
我知道这是一个较旧的线程,但我想提供我认为有用的信息。
我个人使用 PyPy,它使用 pip 非常容易安装。我交替使用 Python/PyPy 解释器,您根本不需要更改代码,我发现它比标准 Python 解释器(Python 2x 或 3x)快大约 40 倍。我使用 pyCharm 社区版来管理我的代码,我喜欢它。
我喜欢用 python 编写代码,因为我认为它可以让你更专注于任务而不是语言,这对我来说是一个巨大的优势。如果你需要它更快,你总是可以编译为适用于 Windows、Linux 或 Mac 的二进制文件(不是直接的,但可以使用其他工具)。根据我的经验,编译时我的速度比 PyPy 快 3.5 倍,这意味着比 Python 快 140 倍。PyPy 可用于 Python 3x 和 2x 代码,如果您使用像 PyCharm 这样的 IDE,您可以非常轻松地在 PyPy、Cython 和 Python 之间进行交换(尽管需要一些初始学习和设置)。
有些人可能会在这个问题上与我争论,但我发现 PyPy 比 Cython 更快。不过两者都是不错的选择。
编辑:我想再做一个关于编译的快速说明:当你编译时,生成的二进制文件比你的 python 脚本大得多,因为它把所有的依赖项都构建到其中,等等。但是你会得到一些明显的好处:速度!,现在该应用程序可以在没有 Python 或库的任何机器上运行(取决于你编译的操作系统,如果不是全部。哈哈),它也会混淆你的代码,并且在技术上已经准备好(在一定程度上)“生产”。一些编译器还生成 C 代码,我没有真正看过或看到它是否有用或只是胡言乱语。祝你好运。
希望有帮助。
http://code.google.com/p/py2c/看起来有可能 - 他们还在他们的网站上提到:Cython、Shedskin 和 RPython 并确认他们正在将 Python 代码转换为比 C 快得多的纯 C/C++ /C++ 充满了 Python API 调用。注意:我还没有尝试过,但我要去..
我意识到缺少关于一个全新解决方案的答案。如果代码中使用了 Numpy,我建议尝试 Pythran:
http://pythran.readthedocs.io/
对于我尝试过的功能,Pythran 给出了非常好的结果。生成的函数与编写的 Fortran 代码一样快(或仅稍微慢一点),并且比(相当优化的)Cython 解决方案快一点。
与 Cython 相比的优势在于,您只需在针对 Numpy 优化的 Python 函数上使用 Pythran,这意味着您不必扩展循环并为循环中的所有变量添加类型。Pythran 花时间分析代码,以便理解对numpy.ndarray.
与 Numba 或其他基于即时编译的项目相比,这也是一个巨大的优势(据我所知),您必须扩展循环才能真正高效。然后只使用 CPython 和 Numpy 的循环代码变得非常低效......
Pythran 的一个缺点:没有类!不过既然只需要编译真正需要优化的函数,那就不是很烦了。
另一点:Pythran 很好地(并且非常容易地)支持 OpenMP 并行性。但我认为不支持 mpi4py ......
另一个选择 - 除了Shed Skin之外转换为C++ - 是Pythran.
引用Micha Gorelick和Ian Ozsvald的High Performance Python:
Pythran是Python的一个Python-to-C++编译器,包含部分
numpy支持.它的行为有点像Numba和Cython - 你注释了一个函数的参数,然后它接管了进一步的类型注释和代码特化.它利用了矢量化的可能性和基于OpenMP的并行化可能性.它仅使用Python 2.7运行.Pythran的一个非常有趣的特性是它将尝试自动发现并行化机会(例如,如果你正在使用a
map),并将其转换为并行代码而无需你的额外努力.您还可以使用pragma omp>指令指定并行部分; 在这方面,它与Cython的OpenMP支持非常相似.在幕后,Pythran将采用普通的Python和numpy代码,并尝试将它们积极地编译成非常快的C++ - 甚至比Cython的结果更快.
你应该注意到这个项目很年轻,你可能会遇到错误; 你还应该注意开发团队非常友好,并且会在几个小时内修复bug.
| 归档时间: |
|
| 查看次数: |
263648 次 |
| 最近记录: |