2011年11月21日月曜日

PyPy 1.7 - スイートスポットの拡大

原文はこちら: PyPy 1.7 - widening the sweet spot

PyPy 1.7のリリースをアナウンスできることを嬉しく思います。バージョン1.6から、いつも通り多くのバグフィックスとパフォーマンスの改善が行われました。しかしながら、以前のバージョンとは異なり、このバージョンではPyPyの"スイートスポットの拡大"に焦点を当てています。すなわち、PyPyによって高速化できるPythonコードのクラスの幅がとても広がりました。PyPy 1.7はこちらからダウンロードできます。

http://pypy.org/download.html

PyPyとはなにか

PyPyはとても素直なPythonインタプリタで、CPython 2.7とほぼ完全な互換性があります。トレーシングJITを採用したことで高速化を実現しました(pypy 1.7とCPython 2.7.1の性能比較はこちら)。

このリリースは、x86上で動作するLinux 32/64、Mac OS X 32/64、Windows 32をサポートしています。Windows 64は現在作業中ですが、ネイティブではサポートされません。

このリリースのメイントピックは、PyPyが高速化できるコードの幅が広がったことにあります。我々のベンチマークによれば、PyPy 1.7はPyPy1.6と比較して平均して30%以上、いくつかのベンチマークでは20倍以上高速化しています。

ハイライト

  • 多くのパフォーマンスの改善。例を上げればキリがないほど高速化された部分があります。
  • バグフィックスと、CPythonとの互換性の確保。
  • Windowsにおける修正
  • デフォルトでスタックレスを実現しました。しかしながら、多くループはJITに割り込んでしまいます。ですから、スタックレスを基礎としたプログラムの高速化は実現していません。この制約を取り除くための情報がありましたらpypy-devまでコンタクトしてください。
  • PyPyにおけるNumPyの名称がnumpypyに変更されました。numpypyを試すためには、シンプルに、import numpypy as numpy と、プログラムの始めに記述してください。PyPyのnumpyは1.6と比較して飛躍的に進化しています。主な特徴はdtypeの実装にあります。
  • JSONのエンコーダが新しいものに置き換わっています(デコーダではありません)。これはPure Pythonで書かれていますが、CPythonのC拡張を用いたものと比較して、いくつかのケースで2倍高速になっています。これはPyPy 1.6と比較すると20倍以上高速化しています。
  • RPythonモジュールにおけるメモリのフットプリントがいくつか改善されています。これは暗号やtornadoなどにおいてインパクトがあります。
  • cpyextで動くCPython C APIにおいてさらなる進展がありました。

まだ完成していないが、1.8において期待される事項

このリリースでは完成しなかったが、次のリリース 1.8において期待してよいかもしれないこと(これはここで書くべきではないかもしれませんが)。

  • リストの特別な実装。整数/浮動小数/文字列のリストにおいて、array.arrayと同様のコンパクトな実装のブランチがあります。いくつかの応用において、パフォーマンス/メモリ使用量の劇的な改善が見込まれます。
  • NumPyにおいて進行中の成果。多次元配列はすぐ実現するでしょう。
  • ふたつの新しいJITアセンブラのバックエンドがあります。PowerPCとARM向けのものです。

資金調達

ここで触れるべきことではないかもしれませんが、PyPyにおけるNumPyとPython 3のプロジェクトにおいて資金調達のキャンペーンが行われています。この件について素早く情報が欲しいかたは、numpy proposalpy3k proposalをご覧ください。PyPyの進捗に関心があり、全体としての方向性に信頼をおいているならば、genral potへの寄付もご検討ください(寄付は常に受け入れています)。

Cheers,

Maciej Fijałkowki, Armin Rigo and the entire PyPy team

(原文:Posted by Maciej Fijalkowski)

(翻訳:Kentaro Iizuka)

0 件のコメント:

コメントを投稿