PyPy JIT调用优化

时间:2016-04-28 05:40:48

标签: jit pypy

请考虑以下代码段:

class Duck:
    def duck(self):
        pass

ducks = [Duck() for i in range(10)]
for duck in ducks:
   duck.duck() #<-----

是否会动态调度duck.duck()调用(即每次完成方法查找),或者JIT将能够推断出我们正在迭代一个稳定的ducks列表并用mem +替换调用偏移θ

如果是,那我怎么可能自己看到它(即如果有任何或生成的组件,如何检查IR代码);如果不是,为什么呢?

1 个答案:

答案 0 :(得分:3)

PyPy团队中的人们正在以合理的方式为外部人员做这件事。与此同时,以下是查看JIT编译器生成的IR(以及可选的机器代码)的当前方法的说明。

这些说明在Linux上进行了测试。他们也应该在OS / X上工作。对于Windows,您需要像往常一样调整大多数命令的语法。

  • 查看主PyPy存储库的副本(需要很长时间!):例如:对于5.x版本,hg clone https://bitbucket.org/pypy/pypy -r release-5.x -u release-5.x pypysrc

  • 为PyPy安装https://bitbucket.org/pypy/jitviewer(通常我们会先使用hg clone https://bitbucket.org/pypy/jitviewer查看,然后virtualenv -p pypy pypy-venv; . pypy-venv/bin/activate; cd /path/to/jitviewer; pypy setup.py install

  • 像这样运行你的示例程序:PYPYLOG=jit:log pypy mytest.py;这会生成一个名为log

  • 的文件
  • 查看日志,方法是启动PYTHONPATH=/path/to/pypysrc jitviewer.py --log log,然后在http://127.0.0.1:5000/查看网址。