[解決済み】PyPy -- CPythonに勝てるわけがない?
質問
から 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で書かれていない理由はあるのでしょうか?
関連
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】PyPyが6.3倍速いなら、CPythonよりPyPyを使うべきじゃないのか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Python jiabaライブラリの使用方法について説明
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない