为什么 PyPy 翻译这么慢?

2024-03-25

将 pypy 实现转换为 c 文件并在具有 2G mem 和 Intel Core2 2GHz CPU 的现代笔记本电脑上构建 pypy-c 需要几个小时。

我知道这是一个 CPU 密集型任务,但是有必要这么慢吗?有没有机会或者空间来减少计算量,重新安排计算顺序,把时间缩短到几十分钟?


免责声明:我不是 PyPy 方面的专家 - 特别是,我不了解 RPython 翻译的细节,我只是引用docs http://doc.pypy.org/en/latest/translation.html#overview以及在邮件列表和博客中无意中听到的内容。

“CPU 密集型任务”?被提名为本月轻描淡写的作品。我自己不太了解翻译过程的细节,但即使我可以告诉你,它的每一个分析和优化过程都会对大量代码进行大量非常复杂的工作。

  1. 它开始正常运行Python代码,例如导入模块,执行模块级变量定义,定义函数和类,对其应用装饰器等。在某些时候,当应该实现“足够的静态性”时,它会停止并继续实际的翻译过程。
  2. 它采用冻结的内存中进行中的 Python 程序,并在一个特殊的对象空间中运行所有程序,该对象空间模拟流程控制、变量的可能值等。它本质上是象征性地运行解释器!它这样做是为了执行类型推断(在 Python 这样的语言中一切都很简单)和附加分析。
  3. 结果被转换为低级代码。
  4. 或者,随后进行大量优化(我猜默认情况下启用)和无堆栈支持的复杂转换(我猜默认情况下禁用)。
  5. 然后,它将所有这些内容降低到适合指定后端的类型系统中,生成数百万行代码(从最近的邮件列表条目来看,似乎至少有 19 个 .c 文件,并且其中至少一个包含至少 247,560 个行 - 只是为了让您了解我们正在讨论的数量级)。
  6. 所有代码都是用gcc -O2或类似的,当然有很多解析和检查要做,并且本身也有很多分析和优化过程要做。

是的,这是一项非常艰巨的任务。难怪你那微不足道的CPU会丢掉。作为参考,PyPy 人员在使用 Intel Xeon W3580 (3.33 GHz) 时2010 年 11 月对翻译流程进行基准测试 http://morepypy.blogspot.com/2010/11/snake-which-bites-its-tail-pypy-jitting.html。尽管他们也有 12 GB RAM,但他们仍然花了大约 76 分钟 - 这导致了下一个问题:A lot在此过程中需要 RAM(当时 64 位 Ubuntu 上需要 2.3 GB,不知道这些数字如何转换为您的情况)。我很确定你最终会超出你的物理内存 - 输入过多的交换和相关的性能影响。

再加上您可能有其他几个程序正在运行,窃取 CPU 时间和 RAM,我认为这很好地解释了您的经历。翻译 PyPy 是为更强大的计算机保留的。如果有什么东西可以从根本上改善这个时代,像我们这样的局外人就不太可能找到它。我会把这些担忧留给开发人员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 PyPy 翻译这么慢? 的相关文章

  • 致 Python 初学者

    文章目录 1 前言 2 明确学习目标 不急于求成 不好高骛远 3 在开始学习 Python 之前 你需要做一些准备 2 1 Python 的各种发行版 2 2 安装 Python 2 3 选择一款趁手的开发工具 3 习惯使用IDLE 这是学
  • PyPy 安装

    目录 前言 1 下载 2 安装 2 1 安装包解压缩 2 2 添加路径至系统变量 3 cmd 调用 4 对比 Python 3 8的界面 总结 前言 提示 这里可以添加本文要记录的大概内容 听说 PyPy 的纯 Python 环境的运行速度
  • 无法使用 pypy 安装 scipy (g++ 构建错误)

    截至 2020 年 可以使用 pypy 安装 scipy pypy下可以安装scipy吗 pypy3 mpip install scipy 然而 轮子因这种错误而失败 error Command g pthread DNDEBUG O2 f
  • PyPy 显示的基准测试结果不准确?

    我正在研究欧拉计划并想知道我是否可以使用 PyPy 加速我的解决方案 然而 我发现结果非常令人失望 因为计算需要更多时间 d projeuler gt pypy problem204 py 3462 08630405 mseconds d
  • CPython 和 PyPy 小数运算性能

    我想使用数百万个数据点 以小数表示 运行 100k 次模拟 我选择小数而不是浮点数是为了浮点精度和易于对我的逻辑进行单元测试 因为0 1 0 1 0 1对于浮点数不等于 0 3 我希望通过使用 PyPy 来加快模拟速度 但在我的测试过程中我
  • 如何使用 cffi 在 C 中嵌入返回字符串的 Python 函数?

    我正在尝试使用 PyPy 和 cffi 在 C 中嵌入 Python 函数 我正在跟进本指南来自 PyPy 文档 问题是 我发现的所有示例都对整数进行操作 而我的函数接受一个字符串并返回一个字符串 我似乎不知道如何在 C 中嵌入这个函数 因
  • 在 Windows 10 上为 PyPy3 安装 numpy 时出现问题

    我在尝试在 Windows 10 计算机上安装 pypy3 的 numpy 时遇到问题 由于我无法判断这个问题是源于我的 pypy3 安装还是其他原因 所以我在这里描述了迄今为止我所遵循的所有步骤 正如官方所示下载页面 I have 下载并
  • pypy 内存使用量永远增长?

    我有一个复杂的 python 服务器应用程序 它一直持续运行 下面是它的一个非常简化的版本 当我使用 python 运行以下应用程序时 python Main py 它立即使用 8mb 的内存 并保持在 8mb 的内存 这是应该的 当我使用
  • 为什么 cython 嵌入插件在 python 解释器中比 rust-c 接口版本具有更高的性能?

    我想问一些关于python解释器的底层原理的问题 因为我自己搜索的过程中并没有得到太多有用的信息 我最近一直在使用 rust 编写 python 插件 这为 python 的 cpu 密集型任务提供了显着的加速 并且与 c 相比 编写速度也
  • 为什么 cffi 比 numpy 快这么多?

    我一直在尝试用 python 编写 cffi 模块 它们的速度让我想知道我是否正确使用了标准 python 这让我想彻底转向C 说实话 有一些很棒的 python 库我永远无法用 C 重新实现自己 所以这比任何实际情况都更假设 此示例显示了
  • PyPy 中的 GIL 在哪里?

    PyPy GIL 是 RPython 中 PyPy 解释器实现的一部分 还是 translate py 自动添加的东西 也就是说 如果我用 RPython 编写自己的新语言解释器并通过 translate py 运行它 它是否会先验地受到
  • 枕头安装PyPy3缺少zlib

    我当前正在尝试将 PIL 与 PyPy3 一起使用 但无论我如何尝试安装它 我都会收到错误 首先我尝试使用正常安装pypy3 pip install pillow 但出现我需要 zlib 的错误 因此 在寻找解决方案一段时间后 我发现了ea
  • 我使用 PyPy 是否错误?它比标准 Python 慢 10 倍

    我听说过有关 PyPy 的好消息 特别是我听说它非常快 这让我想知道它是否可用于我的嵌入式项目 我下载了PyPy 2 6 for my Windows 7PC 并将内容解压到一个目录中 我编写了一个小型测试程序来进行基准测试 import
  • 为什么 PyPy 没有包含在标准 Python 中?

    我在看PyPy http pypy org 我只是想知道为什么它没有被主流 Python 发行版采用 像 JIT 编译和更低的内存占用这样的东西不会大大提高所有 Python 代码的速度吗 简而言之 PyPy 的主要缺点是什么导致它仍然是一
  • 为什么使用 Python 解释器计算小斐波那契数列比 PyPy 更快

    我正在使用 PyPy 进行一些斐波那契计算 首先我从较大的数字开始 PyPy 更快一点 但是对于较小的数字 它提供几乎相同的性能 并且某些情况下普通解释器比 pypy 快得多 有什么具体原因吗 from time import time d
  • 如何将 PIL 与 PyPy 一起使用?

    我进行了一些搜索 但找不到将 PIL 与 PyPy 一起使用的教程 根据 PyPy 的博客 支持 PIL 我在 PYTHONPATH 中使用 pip 安装了 PIL 下载后 pip make 2个 pyd文件 imaging pyd和 im
  • 在 pypy 中调用 python 文件

    我最近搬到了 PyPy 它的速度快得惊人 但是很多 python 库还没有实现 所以我有很多自制的 python 函数 我想在 PyPy 代码中调用它们 这是我的问题 有没有办法在 PyPy 中调用 python 文件或函数 并向其传递一些
  • 禁用标准。 Python 沙箱实现中的文件 I/O 和文件 I/O

    我正在尝试设置 Python 沙箱并希望禁止访问标准和文件 I O 我正在运行的 Python 服务器内运行沙箱 我已经看过类似的模块RestrictedPython and PyPy 但是 我希望能够在正在运行的 Python 服务器内部
  • PyPy 明显慢于 CPython

    我一直在测试我制作的缓存系统 其目的是加速 Django Web 应用程序 它将所有内容存储在内存中 根据 cProfile 我的测试中的大部分时间都花在 QuerySet clone 内 结果证明效率非常低 考虑到实现 这实际上并不奇怪
  • 针对 PyPy 进行优化

    这是后续PyPy 的统计分析器 https stackoverflow com questions 17346226 statistical profiler for pypy 我正在 PyPy 下运行一些 Python 代码 并希望对其进

随机推荐

  • 如何在nodeJS项目中使用Jest全局Setup和Teardown?

    我使用 jest 将测试添加到我的 Node js 项目中 但对于每个测试套件 都有一个 beforeAll 方法用于创建新的测试服务器并连接到 mongo 数据库 还有一个 afterAll 方法用于关闭测试服务器和数据库 我想对所有测试
  • AWS DocumentDB 与 Robo 3T (Robomongo)

    我想将 Mac 笔记本电脑上的 Robo 3T 以前称为 robomongo 与 AWS 的 DocumentDB 连接 我遵循了大量教程 但找不到任何特定于 DocumentDB 的教程 在测试阶段 它通过了步骤 1 连接到我的 EC2
  • INSTALL_FAILED_OLDER_SDK 的 minSdkVersion 低于设备 API 版本

    在全新安装最新的 AndroidStudio 时 运行新项目模板 最小 SDK 选择为 15 ICS 尝试在运行 API 19 的 Nexus 5 上运行 我收到 INSTALL FAILED OLDER SDK 错误并显示以下输出 我没有
  • 类型不匹配:无法从连接转换为连接

    我想要 JDBC 连接到 MS Access 但 Class forName sun jdbc odbc JdbcOdbcDriver Connection con DriverManager getConnection jdbc odbc
  • 如何在 Room 中插入具有一对多关系的实体

    我正在使用 Room 构建一个数据库 但我不知道如何将具有关系 在我的例子中是一对多 的新元素插入到数据库中 没有解决方案曾经讨论过插入 他们只讨论了查询数据 这是 DAO Dao abstract class ShoppingListsD
  • 在WPF中,为什么MouseLeave触发而不是MouseDown?

    这是我的代码
  • 这个特权准则有什么问题吗?

    如何检查 检查 php代码或页面中的权限 我使用爆炸和 in array 用户登录并进入 检查 页面后 代码必须检查用户的权限是否具有 dataDisplay 权限 但 检查 页面中的代码不会执行此操作 我的 检查 页面代码有什么问题 这是
  • Windows10 上使用 VirtualBox 的 Vagrant:在您的 PATH 中找不到“Rsync”

    我在 Windows 7 系统上使用 Vagrant 一段时间了 现在我有一台装有 Windows 10 的新 PC 我安装了 Oracle Virtual Box 和 Vagrant 并尝试使用命令 vagrant up 启动计算机 Va
  • r 中的 ifelse 匹配向量

    我有一个如下所示的数据框 gt df lt data frame A c NA 1 2 3 4 B c NA 5 2 6 4 C c NA NA 2 NA NA gt df A B C 1 NA NA NA 2 1 5 NA 3 2 2 2
  • C/C++ 的多线程内存分配器

    我目前有大量的多线程服务器应用程序 并且我正在寻找一个好的多线程内存分配器 到目前为止 我在以下两点之间左右为难 太阳乌梅 谷歌的tcmalloc 英特尔的线程构建块分配器 埃默里 伯杰的宝藏 据我所知 hoard 可能是最快的 但我在今天
  • 为什么冒泡排序最好情况的时间复杂度是O(n)

    我按照书中使用的方法推导了冒泡排序在最佳情况下的时间复杂度算法2 2 但结果是 O n 2 以下是我的推导 希望大家帮我找出哪里错了 public void bubbleSort int arr for int i 0 len arr le
  • 让 Kotlin 序列化器与 Retrofit 配合使用

    我无法让 Kotlin Serializer 与 Retrofit 一起使用 我在用com jakewharton retrofit retrofit2 kotlinx serialization converter 0 5 0与 Retr
  • 如何用networkx绘制社区

    如何使用 python networkx 绘制其社区的图表 如下图所示 图片网址 https data graphstream project org talks CSSS2012 media Community Structure2 jp
  • Pentaho Data Integration(最新版本)-未检测到 MySQL 驱动程序

    我是这个工具的新手 我正在尝试创建与数据库的 MySQL 连接 但是当我按下 测试 按钮时 它会显示以下消息 Error connecting to database MySQL configuracionesEF org pentaho
  • 将 UITableView 作为容器视图嵌入到 UIViewController 中

    我想添加一个文本字段和发送按钮 该按钮粘贴在 uitableview 的底部 类似于聊天应用程序 我遇到过关于将 UITableView 作为容器视图嵌入到 UIViewController 中的评论 然而 他们似乎缺乏如何实现这一目标的例
  • 自应用签名后文档已被更改或损坏 itext 5.5.11

    基本上 我收到错误 自应用签名以来文档已被更改或损坏 我按照 itext 网站的示例并根据我的情况进行了调整 准备好要签名的文档 添加append模式 因为可以 已经签署的文件 调用 Web 服务来签署哈希值 将签名哈希添加到准备好的文档中
  • 如何在 Django 中验证电子邮件地址? [复制]

    这个问题在这里已经有答案了 我编写了一个用于将电子邮件添加到时事通讯库的函数 在我添加检查发送电子邮件的有效性之前 它一直运行得很好 现在每次我都会收到 错误的电子邮件 回复 有人能看到这里有任何错误吗 使用的正则表达式是 b w w w
  • 在 Pandas DataFrame 中拆分列列表

    我正在寻找解决以下问题的好方法 我当前的修复不是特别干净 我希望从您的见解中学习 假设我有一个 Panda DataFrame 其条目如下所示 gt gt gt df pd DataFrame index 1 2 3 columns Col
  • 两个3D点云变换矩阵

    我试图猜测两个 3D 点云之间的刚性变换矩阵是哪个 这两个点云是 来自 kinect 的关键点 kinect keypoints 来自 3D 对象 盒子 的关键点 object keypoints 我尝试过两种选择 1 实现寻找刚性变换的算
  • 为什么 PyPy 翻译这么慢?

    将 pypy 实现转换为 c 文件并在具有 2G mem 和 Intel Core2 2GHz CPU 的现代笔记本电脑上构建 pypy c 需要几个小时 我知道这是一个 CPU 密集型任务 但是有必要这么慢吗 有没有机会或者空间来减少计算