3

私はここで少し立ち往生しています。

アイデアは、実行中にプログラムによって実行されるすべての命令のファイルを取得したいということです。手元にある実行可能ファイル(ソースなし)だけでそれを実行し、どのアドレスでどの操作がいつ発生しているかを判別できるようにしたいと思います。

たとえば、Google Chrome、Firefoxなどで実行できるようにしたいと思います。

これを、現在取り組んでいるパフォーマンス予測システムに使用したいと思います。システム1で実行される順序で実行される各命令を取得できるかどうかを判断します。システム2で実行されている同じプログラムの実行時間をシミュレート/モデル化できるため、次のことが可能になります。予測(100%の精度ではわかりませんが)L1 / L2キャッシュミス、L1 / L2キャッシュヒット、TLBヒット/ミス、ページフォールト、浮動小数点乗算操作にかかる時間など。

これを2つの異なるシステムで実行してみたいと思います。

システム1:Intel Core 2DuoCPU上のUbuntu10.10

システム2:2x AMD SixteenCoreOpteronモデル6274を搭載したシステム上のUbuntu12.04

(必要に応じてOSを確実に変更できますが、可能であればUbuntuを使用したいと思います)

これは可能ですか/どうすればそれを行うことができますか?私はデバッガーで知っています、あなたはそれらを使ってすべてをステップスルーすることができます、しかし私は利用可能なソースを持っていません。

4

1 に答える 1

1

qemu(またはbochs)またはvalgrindを使用して、実行されたすべての命令を監視できると思います。これらはx86バイナリ変換ツールです(bochsを除く-x86コードのインタープリターです)。(+ kcachegrind gui)と呼ばれるvalgrindツールがあります。これは、cachegrindすべてのメモリアクセスを計測し、いくつかのL1 / L2キャッシュモデルをシミュレートすることでキャッシュをエミュレートする準備ができています(サイズはコマンドラインオプションで構成できます)。

(パイプラインに)深く入り込むには、無料のptlsim(http://www.ptlsim.org/)を参照してください。

于 2012-09-07T13:40:30.957 に答える