遺伝的アルゴリズムを使用して、gccの最適化をたくさん書きたいと思います。一部の統計および近似関数のアセンブリ関数の実行時間を測定する必要があります。キャッシュサイズの影響を受けるため、通常の時間測定は使用できません。
だから私はこのようなものを見ることができるテーブルが必要です。
command | operands | operands sizes | execution cycles
私は何かを誤解していますか?英語が下手でごめんなさい。
遺伝的アルゴリズムを使用して、gccの最適化をたくさん書きたいと思います。一部の統計および近似関数のアセンブリ関数の実行時間を測定する必要があります。キャッシュサイズの影響を受けるため、通常の時間測定は使用できません。
だから私はこのようなものを見ることができるテーブルが必要です。
command | operands | operands sizes | execution cycles
私は何かを誤解していますか?英語が下手でごめんなさい。
最新のCPUでは、命令が完了するまでにかかる時間を調べるための単純なテーブルはありません(ただし、このようなテーブルは一部の古いプロセッサ(486など)に存在します)。各命令の機能と所要時間に関する最良の情報は、チップメーカーから提供されます。たとえば、 Intelのドキュメントマニュアルは非常に優れています(そのページには最適化マニュアルもあります)。
最近のほとんどすべてのCPUにRDTSC
は、コードが実行されているプロセッサのタイムスタンプカウンターを読み取る命令もありEDX:EAX
ます。これにも落とし穴がありますが、基本的に、プロファイリングしているコードが実際の使用状況を表している場合、その実行が中断されたり、別のCPUコアにシフトされたりすることはありません。この命令を使用して、必要なタイミングを取得できます。つまり、最適化するコードを2つの命令で囲み、RDTSC
TSCの違いをタイミングとして取ります。(さまざまなテスト/状況でのタイミングの変化は素晴らしい場合があります。統計はあなたの友達です。)
アセンブリ ( rdtscとその仲間) を使用するか、 PAPIなどの計測 API を使用して、コードを計測できます。ただし、1 つの命令の実行中に費やされたクロック サイクルを正確に測定することはできません。最適な見積もりについては、アーキテクチャ開発者のマニュアルを参照してください。
いずれの場合も、SMP 環境での実行による影響を考慮する際には注意が必要です。