将 Python 程序转换为 C/C++ 代码?[关闭]

2024-12-31 08:37:00
admin
原创
42
摘要:问题描述:可以将 Python 程序转换为 C/C++ 吗?我需要实现几个算法,但我不确定性能差距是否大到足以弥补我在用 C/C++(我不擅长)实现时所经历的所有痛苦。我考虑编写一个简单的算法,并将其与转换后的解决方案进行基准测试。如果仅此一项就比 Python 版本快得多,那么我别无选择,只能用 C/C++...

问题描述:

可以将 Python 程序转换为 C/C++ 吗?

我需要实现几个算法,但我不确定性能差距是否大到足以弥补我在用 C/C++(我不擅长)实现时所经历的所有痛苦。我考虑编写一个简单的算法,并将其与转换后的解决方案进行基准测试。如果仅此一项就比 Python 版本快得多,那么我别无选择,只能用 C/C++ 来实现。


解决方案 1:

如果 C 版本需要的时间减少了 x 小时,那么我会将这段时间花在让算法运行更长时间/再次运行上

“投资”这个词在这里不太合适。

  1. 用 Python 构建一个工作实现。你将在完成 C 版本之前完成它。

  2. 使用 Python 分析器测量性能。修复您发现的任何问题。根据需要更改数据结构和算法以真正正确地完成此操作。您将在完成 C 中的第一个版本之前完成这项工作。

  3. 如果还是太慢,就手动将精心设计和构建的 Python 翻译成 C。

由于事后看来,使用现有 Python(使用现有单元测试和现有分析数据)执行第二个版本仍然比从头开始执行 C 代码更快。

这句话很重要。

汤普森针对首次制造望远镜的规则:

先制造一面四英寸的镜子,然后再制造一面六英寸的镜子,比制造一面六英寸的镜子要快。

比尔·麦基南

王研究所

解决方案 2:

是的。看看Cython。它的作用就是:将 Python 转换为 C 以提高速度。

解决方案 3:

Shed Skin是“一个(受限的)Python 到 C++ 编译器”。

来自文档:

Shed Skin 是一款实验性编译器,可以将纯 Python(2.4-2.6)程序(但隐式静态类型)转换为优化的 C++。它可以生成独立程序或扩展模块,这些模块可以导入到更大的 Python 程序中使用。

除了类型限制之外,程序无法自由使用 Python 标准库(尽管目前支持大约 25 个常用模块,例如randomre)。此外,并非所有 Python 功能(例如嵌套函数和可变数量的参数)都受支持。

对于一组75 个非平凡程序(总共超过 25,000 行(sloccount)),测量表明,与 CPython 相比,速度通常提高 2-200 倍。

解决方案 4:

刚刚在黑客新闻中看到这个新工具。

在他们的页面上 - “Nuitka 是 Python 解释器的一个很好的替代品,可以编译 CPython 2.6、2.7、3.2 和 3.3 提供的每个结构。它将 Python 转换为 C++ 程序,然后使用“libpython”以与 CPython 相同的方式执行,而且非常兼容。”

解决方案 5:

我知道这是一个较老的话题但我想提供我认为有用的信息。

我个人使用 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 代码,我还没有真正看过或看到它是否有用或只是胡言乱语。祝你好运。

希望有所帮助。

解决方案 6:

除了Shed Skin之外,转换为 C++ 的另一种选择是Pythran。

引用Micha Gorelick 和 Ian Ozsvald 所著的《高性能 Python》

Pythran 是 Python 子集的 Python 到 C++ 编译器,包含部分numpy支持。它的作用有点像 Numba 和 Cython - 您注释函数的参数,然后它接管进一步的类型注释和代码专门化。它利用了矢量化可能性和基于 OpenMP 的并行化可能性。它仅使用 Python 2.7 运行。

Pythran 的一个非常有趣的功能是,它会尝试自动发现并行化机会(例如,如果您使用map),并将其转换为并行代码,而无需您付出额外努力。您还可以使用pragma omp > 指令指定并行部分;在这方面,它感觉非常类似于 Cython 的 OpenMP 支持。

在幕后,Pythran 将采用普通的 Python 和 numpy 代码,并尝试将它们编译成非常快的 C++——甚至比 Cython 的结果还要快。

您应该注意到这个项目还很年轻,您可能会遇到错误;您还应该注意到开发团队非常友好,并且倾向于在几个小时内修复错误。

解决方案 7:

http://code.google.com/p/py2c/看起来是可行的 - 他们还在网站上提到:Cython、Shedskin 和 RPython,并确认他们正在将 Python 代码转换为纯 C/C++,这比充斥着 Python API 调用的 C/C++ 快得多。注意:我还没有尝试过,但我打算尝试一下。

解决方案 8:

我意识到缺少一个相当新的解决方案的答案。 如果在代码中使用了 Numpy,我建议尝试 Pythran:

http://pythran.readthedocs.io/

对于我尝试过的函数,Pythran 给出了非常好的结果。生成的函数与编写良好的 Fortran 代码一样快(或仅稍慢一点),并且比(相当优化的)Cython 解决方案快一点。

与 Cython 相比,其优势在于您只需要在针对 Numpy 优化的 Python 函数上使用 Pythran,这意味着您不必扩展循环并为循环中的所有变量添加类型。Pythran 会花时间分析代码,以便理解上的操作numpy.ndarray

与 Numba 或其他基于即时编译的项目相比,这也是一个巨大的优势,据我所知,你必须扩展循环才能真正提高效率。然后,如果只使用 CPython 和 Numpy,带有循环的代码就会变得非常低效……

Pythran 的一个缺点是:没有类!但由于只有真正需要优化的函数才需要编译,所以这并不令人讨厌。

另一点:Pythran 很好地(并且非常容易地)支持 OpenMP 并行性。但我不认为 mpi4py 受支持...

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   990  
  在项目管理领域,CDCP(Certified Data Center Professional)认证评审是一个至关重要的环节,它不仅验证了项目团队的专业能力,还直接关系到项目的成功与否。在这一评审过程中,沟通技巧的运用至关重要。有效的沟通不仅能够确保信息的准确传递,还能增强团队协作,提升评审效率。本文将深入探讨CDCP...
华为IPD流程   26  
  IPD(Integrated Product Development,集成产品开发)是一种以客户需求为核心、跨部门协同的产品开发模式,旨在通过高效的资源整合和流程优化,提升产品开发的成功率和市场竞争力。在IPD培训课程中,掌握关键成功因素是确保团队能够有效实施这一模式的核心。以下将从五个关键成功因素展开讨论,帮助企业和...
IPD项目流程图   27  
  华为IPD(Integrated Product Development,集成产品开发)流程是华为公司在其全球化进程中逐步构建和完善的一套高效产品开发管理体系。这一流程不仅帮助华为在技术创新和产品交付上实现了质的飞跃,还为其在全球市场中赢得了显著的竞争优势。IPD的核心在于通过跨部门协作、阶段性评审和市场需求驱动,确保...
华为IPD   26  
  华为作为全球领先的通信技术解决方案提供商,其成功的背后离不开一套成熟的管理体系——集成产品开发(IPD)。IPD不仅是一种产品开发流程,更是一种系统化的管理思想,它通过跨职能团队的协作、阶段评审机制和市场需求驱动的开发模式,帮助华为在全球市场中脱颖而出。从最初的国内市场到如今的全球化布局,华为的IPD体系在多个领域展现...
IPD管理流程   53  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用