1. ホーム
  2. パイソン

[解決済み】PyPy -- CPythonに勝てるわけがない?

2022-04-01 02:07:22

質問

から Googleオープンソースブログ :

<ブロッククオート

PyPy は、Python の再実装です。 Pythonで、高度な技術を使って より良いパフォーマンスを達成するために CPythonよりも。長年の努力の結果 が、ようやく実を結んだ。私たちのスピードは の結果は、しばしばCPythonに勝り、その範囲は 若干の遅さから 実機で最大2倍のスピードアップを実現。 アプリケーションコードから、最大で 小規模なベンチマークで10倍。

どうしてそんなことが可能なのでしょうか?どのPythonの実装でPyPyを実装したのでしょうか? CPython ? また、PyPyPyやPyPyPyが彼らのスコアに勝る可能性はどのくらいあるのでしょうか?

(関連して...なぜこんなことに挑戦する人がいるのか)

解決方法は?

Q1. どうしてこんなことが可能なのでしょうか?

手動でのメモリ管理(CPythonがカウントを行うもの)は、場合によっては自動管理よりも遅くなることがあります。

CPythonインタプリタの実装の制限により、PyPyができる特定の最適化(例:fine grainedロック)ができなくなっています。

マルセロが言っていたように、JITです。オブジェクトの型をその場で確認できれば、最終的に呼び出したいメソッドにたどり着くまでに何度もポインターを参照し直す必要がなくなります。

Q2. PyPyの実装には、どのPythonの実装が使われていますか?

PyPyのインタプリタは、Pythonの静的型付けされたサブセットであるRPythonで実装されています(CPythonインタプリタではなく言語です)。- 参照 https://pypy.readthedocs.org/en/latest/architecture.html をご覧ください。

Q3. また、PyPyPyやPyPyPyが自分のスコアを更新する可能性はどのくらいですか?

それは、これらの仮想のインタープリターの実装次第でしょう。例えば、ソースを受け取って、何らかの解析を行い、しばらく実行した後にターゲットに特化したタイトなアセンブリコードに直接変換するとしたら、CPythonよりもかなり速くなるのではないかと想像しています。

更新しました。 最近、あるサイトで 謹製例 でコンパイルした同様のC言語プログラムを、PyPyが上回った。 gcc -O3 . これは意図的なケースですが、いくつかのアイデアを示しています。

Q4. なぜこのようなことに挑戦するのでしょうか?

公式サイトより https://pypy.readthedocs.org/en/latest/architecture.html#mission-statement

<ブロッククオート

提供することを目指しています。

  • 制作のための共通の翻訳・サポートフレームワーク

    動的言語の実装で、きれいな

    言語仕様と実装の分離

    の側面があります。 私たちはこれを RPython toolchain _.

  • Python_のコンプライアンス、柔軟性、高速性を備えた実装です。 上記のツールチェインを使用し、新しい高度な 低レベルをエンコードすることなく、高水準の機能 の詳細です。

このように関心事を分離することで、Pythonの実装は - あるいは を自動的に生成することができます。 あらゆる動的言語用のジャストインタイムコンパイラ。 また 実装上の決定事項に対して、ミックスアンドマッチアプローチを採用し、その中には これまでユーザーがコントロールできなかった ターゲットプラットフォーム、メモリとスレッドモデル、ガベージコレクション 戦略、最適化の適用など。 そもそもJITがある。

CコンパイラのgccはCで実装され、HaskellコンパイラのGHCはHaskellで書かれています。Pythonのインタプリタ/コンパイラがPythonで書かれていない理由はあるのでしょうか?