| 開発者 | インテル |
|---|---|
| 安定リリース | 3.31 / 2024年6月30日 |
| オペレーティング·システム | Linux、Windows、macOS |
| プラットフォーム | IA-32、x86-64、インテル Xeon Phi |
| タイプ | インストルメンテーションフレームワーク、プロファイラー |
| ライセンス | Pin は独自のものであり、 Intel Simplified Software Licenseに基づいて無料で使用できます。 |
| Webサイト | www.intel.com/software/pintool |
Pin は、分析ツールを作成するためのプラットフォームです。 Pin ツールは、インストルメンテーション、分析、およびコールバックルーチンで構成されています。 インストルメンテーション ルーチンは、まだ再コンパイルされていないコードが実行されようとしているときに呼び出され、分析ルーチンの挿入を可能にします。 分析ルーチンは、関連付けられているコードが実行されたときに呼び出されます。 コールバック ルーチンは、特定の条件が満たされたとき、または特定のイベントが発生したときにのみ呼び出されます。 Pin は、1 つの命令からバイナリ モジュール全体まで、さまざまな抽象化レベルでのインストルメンテーション用の広範なアプリケーション プログラミング インターフェイス(API) を提供します。 また、ライブラリのロード、システム コール、シグナル/例外、スレッド作成イベントなど、多くのイベントのコールバックもサポートしています。
2020年にはACM SIGPLANからプログラミング言語ソフトウェア賞を受賞した。[1]
Pin は、プログラムがメモリにロードされた直後にその制御を取得してインストルメンテーションを実行します。その後、実行直前に Pin を使用してバイナリ コードの小さなセクションをジャストインタイム(JIT) 再コンパイルします。再コンパイルされたコードには、分析を実行するための新しい命令が追加されます。これらの新しい命令は Pintool から提供されます。実行時間とメモリ使用のオーバーヘッドを可能な限り低く抑えるために、さまざまな最適化手法が使用されています。2010 年 6 月現在、Pin の平均ベース オーバーヘッドは 30 パーセントです (pintool を実行しない場合)。[2]
特徴
計測モード
Pin は、JIT モードとプローブ モードと呼ばれる 2 つのインストルメンテーション モードをサポートしています。JIT モードは Pin のすべての機能をサポートしますが、プローブ モードは限られた機能セットをサポートしますが、はるかに高速で、プログラムの実行時間にほとんどオーバーヘッドを追加しません。JIT モードはジャストインタイム コンパイラを使用してすべてのプログラム コードを再コンパイルし、インストルメンテーションを挿入しますが、プローブ モードはインストルメンテーションに コード トランポリンを使用します。
プラットフォームの独立性
Pinはツールの移植性を考慮して設計されており、1つのISAから同じISAへのJITコンパイル(すべてのコードに単一の中間表現を使用しない)にもかかわらず、そのAPIのほとんどはアーキテクチャやオペレーティングシステムに依存しません。また、プラットフォーム固有のコードを汎用コードから慎重に分離することで、Pinを新しいプラットフォームに迅速に適応できるように設計されており、コードの約半分が汎用であり、残りはアーキテクチャまたはOSに依存しています。[3]
最適化
Pin は、インライン化、活性分析、スマートレジスタ スピルなどのさまざまな手法を使用して、インストルメンテーションおよび分析コードを最適化します。 Pin は、インライン化を可能にするためにユーザーが追加コードを挿入する必要なく、可能な限りこれらの最適化を自動的に実行します。 当然、一部の最適化ではユーザーのヒントが必要であり、一部のコード構造は他のコード構造よりもインライン化が簡単です。 JIT 化されたコード セクションの直接リンク (トレース リンクと呼ばれる手法)や、レジスタ スピルと再マッピングを最小限に抑えるレジスタ バインディング調整も使用されます。
使いやすさ
Pin の API と実装は、ピン ツールを簡単に作成できるようにすることに重点を置いています。Pin は、ピン ツールのインストルメンテーション コードがアプリケーションの状態に影響を与えないようにする責任をすべて負います。また、API により、インストルメンテーション コードは Pin から多くの情報を要求できます。たとえば、ピン ツールのインストルメンテーション コードは、Pin API を使用して、命令を詳細に調べなくても、命令によってアクセスされるメモリ アドレスを取得できます。
ツール
さまざまなタスクに使用される Pintool は多数あります。
- Intel Parallel Studioのコンポーネントは、メモリのデバッグ、パフォーマンス分析、マルチスレッドの正確性分析、並列化の準備に pintools を多用します。
- Intel ソフトウェア開発エミュレーターは、現在ハードウェアに実装されていない命令セット拡張を使用してアプリケーションの開発を可能にするピンツールです。
- CMP$IMはピンを使用して構築されたキャッシュプロファイラです。[4]
- PinPlayは、ピンの下でマルチスレッドプログラムの実行をキャプチャし、決定論的に再生することを可能にします。プログラムの実行をキャプチャすることで、開発者はマルチスレッドに固有の非決定性を克服することができます。[5]
- Pin 自体には、その機能を活用する多くのサンプル ツールが付属しています。これらのツールは、BSD のようなライセンスの下でライセンスされています。
ピンツールの代替
システム上で実行中のプログラムのリソース使用量を収集するためのツールは、ベル研究所のストラップオンツールやDyninstツールなど、他にも多数あります。ベル研究所のツールは、ツールを実行してプログラムと同時にリソースを収集するストラップオンテクノロジを使用しますが、このツールは、他のプログラムを同時に実行できるプログラムとのみ互換性があります。[6]さらに、Dyninstツールは、プログラムの実行可能ファイルとプログラム内で実装可能なコマンドのバイナリ書き換えを使用してリソース使用量をチェックし、非常に効率的です。ただし、比較的新しいツールであり、大規模なプログラムでクラッシュするため、非常に不安定です。[7] 最後に、Intel Pinツールは静的バイナリインストルメンテーションを使用し、すべてのリソースを追跡しながら、プログラムをそれ自体の一部として実行します。[8]このアプローチは、すべてのプロセスを簡単に実行でき、ウイルス対策によって定義された最大割り当て制限に達した場合にプログラムを強制終了できるため、ウイルス対策に適しています。
参照
注記
- ^ 「プログラミング言語ソフトウェア賞」www.sigplan.org。
- ^ Pin による並列プログラムの解析
- ^ Pin: 動的インストルメンテーションによるカスタマイズされたプログラム分析ツールの構築
- ^ CMP$im: ピンベースのオンザフライマルチコアキャッシュシミュレータ
- ^ PinPlay: 並列プログラムの決定論的再生と再現可能な分析のためのフレームワーク
- ^ Gupta, Chandrashekhar (2007). 「安全な製品とソリューションの構築」Bell Labs Technical Journal . 12 (3): 21-38. doi :10.1002/bltj.20247. S2CID 30412754.
- ^ Lee, Schulz (2007). 「大規模システムにおける動的バイナリ計測とデータ集約」. International Journal of Parallel Programming . 35 (3): 207–232. doi :10.1007/s10766-007-0036-3. S2CID 6653468.
- ^ Bach, M.; Charney, M.; Cohn, R.; Demikhovsky, E.; Devor, T.; Hazelwood, K.; Jaleel, A.; Luk, Chi-Keung; Lyons, G. (2010 年 3 月)。「PIN による並列プログラムの解析」。Computer . 43 ( 3): 34–41. doi :10.1109/MC.2010.60. ISSN 0018-9162. S2CID 15155077.
参考文献
- Moshe Bach、Mark Charney、Robert Cohn、Elena Demikhovsky、Tevi Devor、Kim Hazelwood、Aamer Jaleel、Chi-Keung Luk、Gail Lyons、Harish Patil および Ady Tal (2010 年 3 月)。「Pin による並列プログラムの分析」。Computer . 43 ( 3)。IEEE: 34–41。doi : 10.1109 /mc.2010.60。S2CID 15155077。2010 年 12 月 29 日のオリジナルからアーカイブ。2010 年 7 月 5 日に取得。
- Chi-Keung Luk、Robert Cohn、Robert Muth、Harish Patil、Artur Klauser、Geoff Lowney、Steven Wallace、Vijay Janapa Reddi、Kim Hazelwood (2005 年 6 月)。「Pin: 動的インストルメンテーションによるカスタマイズされたプログラム分析ツールの構築」(PDF)。プログラミング言語の設計と実装に関する 2005 ACM SIGPLAN 会議の議事録。米国イリノイ州シカゴ: ACM。pp. 190–120。
- Alex Skaletsky、Tevi Devor、Nadav Chachmon、Robert Cohn、Kim Hazelwood、Vladimir Vladimirov、Moshe Bach (2010 年 4 月)。「Microsoft Windows アプリケーションの動的プログラム分析」(PDF)。ソフトウェアおよびシステムのパフォーマンス分析に関する国際シンポジウム (ISPASS)。ニューヨーク州ホワイト プレーンズ。pp. 2 ~ 12。
外部リンク
- Pin: 動的バイナリ計測ツールのホームページ
- Pinheads、ピンユーザーコミュニティのメーリングリスト
- 書き込み前の読み取りバグの検出 (Valgrind による)
- Pin++、Pintools を作成するためのフレームワーク
