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

2024-12-31 08:37:00
admin
原创
158
摘要:问题描述:可以将 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 受支持...

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用