出力を後処理objdump --disassemble
してサイクル数で注釈を付けるためのスクリプトはありますか? 特にARMファミリーの場合。 ほとんどの場合、これはカウントのテーブル ルックアップを伴うパターン マッチのみです。 Perl、python、bash+5M
5 メモリ サイクルのような注釈が必要になる可能性があると思います。C
などは問題ありません。これは一般的に実行できると思いますが、直交命令セットを持つARMに興味があります。これは、同じことをしている68HC11のスレッドです。スクリプトには、適切なサイクル数を選択するための CPUモデルオプションが必要です。これらの数は、マシンの説明に既に存在していると思います。gcc
これに対するスイッチはないと思いますがobjdump
、RTFM は素晴らしいでしょう。
編集:明確にするために、コードがキャッシュから実行される場合のように、メモリ サブシステムの最適なケースなどの仮定は問題ありません。目標は、一部の実行中のマシンのように 100% 正確なサイクル カウントではありません。合理的な見積もりを取得することは可能です。そうでなければ、コンパイラの設計は不可能です。
DWelchが指摘しているように、最近の Cortex チップのようにパイプライン化された深いアーキテクチャでは、単純な累計は不可能です。objdump
後処理では、周囲のオペコードを調べる必要があります。gcc プラグインはこれを達成できる可能性が高く、それは新しい (4.5+) であるため、そのようなものは存在しないと思います。ARM926 用のスクリプトは確かに可能であり、かなり単純です。
メモリのレイテンシは問題ではありません。メモリ コントローラは別のCPU
. CPUが算術演算などを行っている間、それはビジネスを行っています。適切に調整されたアルゴリズムは、メモリアクセスと計算を並行させます。ロード/ストアとサイクルをカウントすることで、タイマーを使用してアクティブにプロファイリングするときに、どの程度の並列処理が達成されたかを判断できます。パイプラインはレジスタ間のインターロックのために重要ですが、基本ブロックのサイクル カウントは最新の ARM プロセッサでも確実に計算して使用できます。これは単純なスクリプトには複雑すぎます。