RPython GCのオブジェクト割り当て速度はどのくらい速いのか?

2025-06-15

この記事では、小さなRPythonベンチマークプログラムを使用して、RPythonガベージコレクタ(GC)のオブジェクト割り当て速度を評価します。結果は、驚くほど高速な割り当て速度を示しており、34GB/秒を超え、Boehm GCを大幅に上回っています。生成されたマシンコードとパフォーマンスカウンタの分析により、RPython GCの高速化は、効率的なバンプポインタ機構と最小限のGCオーバーヘッドによるものであることが明らかになりました。PyPyのJITを使用した通常のPythonコードでも、17GB/秒の割り当て速度に達します。

続きを読む
開発

Quadtreeと区間解析を用いたシェイクスピアの引用画像レンダリングの高速化

2025-04-09

著者はProsperoチャレンジに参加し、7866個の演算を含む数学式で生成された、シェイクスピアの『テンペスト』からの引用の1024x1024画像を高速にレンダリングすることを目指しました。様々な最適化手法が検討され、画像のQuadtreeによる再帰分割、式を簡素化する区間解析、「必要な情報」最適化などが含まれます。RPythonとC言語で実装され、著者は様々な最適化戦略のパフォーマンスを比較しました。 「必要な情報」最適化はレンダリング速度を大幅に向上させ、最終的なC言語実装がこの最適化を組み込むことで最高の性能を達成しました。

続きを読む

PyPyにおける低オーバーヘッド統計メモリプロファイリング:VMProfとGCの統合

2025-02-25

このブログポストでは、PyPyのための低オーバーヘッド統計メモリプロファイリングの新規アプローチについて説明します。すべてのメモリ割り当てを記録する代わりに、n番目の割り当てられたバイトごとにサンプリングを行い、PyPyのガベージコレクタ(GC)のバンプポインタアロケータチェックにサンプリングロジックを巧みに統合します。これにより、メモリサンプリングのオンオフに関わらず、高速パスが同一になり、オーバーヘッドが最小限に抑えられます。実験の結果、さまざまなサンプリングレートで良好なパフォーマンスを示し、メモリプロファイリングにおいてより精密な制御と低いオーバーヘッドを提供します。

続きを読む

PyPyにおけるトレースJIT:実用的な選択か?

2025-01-10

この記事では、トレースJITコンパイラの利点と欠点を掘り下げており、特にPyPyにおける実装に焦点を当てています。プログラムの実行をトレースすることでコードを生成するトレースJITは、Pythonなどの複雑な言語を扱う際に、抽象化レイヤーを効果的に切り捨て、オーバーヘッドを削減するという利点があります。しかし、パフォーマンスの不安定性やエッジケースの問題も抱えています。PyPyでの20年近くの経験に基づき、著者はトレースJITの適性についてニュアンスのある分析を行い、メソッドベースのJITと比較しています。結論として、PyPyのメタJITのコンテキストとリソース制約を考慮すると、トレースは比較的実際的な選択肢であると示唆しています。

続きを読む