gpt4 book ai didi

c++ - Python 最大化一个核心,而 C++ 没有

转载 作者:行者123 更新时间:2023-11-28 01:07:54 24 4
gpt4 key购买 nike

我用 python 和 c++ 编写了一个简单的程序(使用 collat​​z 猜想计算数字 1-10^10 的步数)。它们几乎相同,而且都不是为多线程编写的。我在 python 中运行了一个,据我的系统经理说,一个核心直接达到 100% 使用率,其他核心保持不变。我运行了 c++ 程序,核心保持在 10% 到 15% 的使用状态之间波动,从未真正改变过。他们几乎同时完成,几秒钟之内。有人可以向我解释为什么会这样吗?

最佳答案

一般来说,Python 在处理原始数字时相当慢。这是因为它对所有内容(包括数字)都使用其完整的通用对象模型。您可以将其与 Java 和 C++ 进行对比,它们具有“ native 类型”,它们不提供任何真实类的优点(方法、继承、数据属性等),但提供对底层原始速度的访问中央处理器。

因此,C++ 中的 x = a + b 在运行时通常比 Python 中的 x = a + b 要少得多,尽管语法表面上相同。 Python 的统一对象模型是使其相对易于使用的原因之一,但它在原始速度方面也有缺点。

有多种替代方法可以恢复丢失的速度:

  • 使用自定义 C 扩展程序返回到原始 CPU 计算并直接恢复速度
  • 使用现有的数字库做同样的事情
  • 使用即时编译器(例如通过 psyco 项目或 PyPy)
  • 使用multiprocessingconcurrent.futures 来利用多核,甚至是分布式计算库来利用多台机器

附言既然描述了算法,这是一个更好的问题:)

关于c++ - Python 最大化一个核心,而 C++ 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5150550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com