3

さまざまなマシンの CPU オペコード サイクル カウントを取得するには、どこに行けばよいのだろうと思っていました。私が話していることの例は、このリンクで見ることができます:

https://web.archive.org/web/20150217051448/http://www.obelisk.demon.co.uk/6502/reference.html

MAME ソース コード、特に src\emu\cpu を調べると、ほとんどの CPU モデルが同様の方法でサイクル カウントを追跡していることがわかります。私の質問は、この情報をどこで取得するか、または利用できない場合はリバース エンジニアリングを行うかということです。「公式」の ASM プログラマーズ ガイドにサイクル カウント情報が含まれているのを見たことがありません。私の最初の推測では、小さなプログラムが実際のハードウェアのブート ROM にスローされ、RDTSC と同等のオペコードが含まれている場合、次のようなことが行われます。

RDTSC

//opcode of choosing

RDTSC

しかし、そのようなサポートが利用できなかったらどうしますか? 古いハードウェアの場合、MAME チームは ROM と散在するドキュメント以外にはアクセスできません。

4

2 に答える 2

3

Pentium までは、Intel および AMD プロセッサ (およびほとんどの競合他社) のサイクル カウントを簡単に見つけることができました。ただし、Pentium Pro および AMD K5 以降、CPU は動的実行モデルに移行し、命令を順不同で実行できるようになりました。この場合、命令の実行にかかる時間は、それが使用するデータ、および (たとえば) 前の命令からのデータに依存するかどうかに大きく依存します (その場合、その命令が完了するまで待機する必要があります)。実行する)。

サイクルごとにデコードできる命令の数 (たとえば、「単純」である限り、少なくとも 1 つ、さらに 2 つ) や、サイクルごとにリタイアできる命令の数 (通常は約 3 または 4) などの制約もあります。

その結果、最新の CPU では、特定の命令のサイクルを個別に説明することはほとんど意味がありません。意味のある結果を得るには、一連の指示が必要なので、その指示だけでなく、その前後にあるものにも注目します。ある命令ストリームで深刻なボトルネックとなっている命令は、別のストリームでは本質的に無料である可能性があります (たとえば、1 つの乗算に多くの加算が混在している場合、その乗算はほとんど無料である可能性がありますが、他の多くの乗算に囲まれている場合) 、それは比較的高価かもしれません)。

于 2010-02-24T05:01:26.257 に答える
1

受け入れられた RDTSC カウントには、カウントを取得する前に以前のすべての命令が確実にリタイアするようにするシリアル化命令が必要です。これによりカウントにオーバーヘッドが追加されますが、単純にゼロ命令を「カウント」して、測定された命令からその値を差し引くことができます。

これを非常によくカバーするいくつかのpdfマニュアル。

http://www.agner.org/optimize/#manuals

于 2010-02-24T05:30:05.093 に答える