1

Digital Mars C++ コンパイラでアセンブリを学習し、インライン化を行っています。プログラムを改善するためにいくつかのことを検索し、プログラムを調整するためにこれらのパラメーターを用意しました。

use better C++ compiler//thinking of GCC or intel compiler

use assembly only in critical part of program 

find better algorithm

Cache miss, cache contention.

Loop-carried dependency chain.

Instruction fetching time.

Instruction decoding time.

Instruction retirement.

Register read stalls.

Execution port throughput.

Execution unit throughput.

Suboptimal reordering and scheduling of micro-ops.

Branch misprediction.

Floating point exception.

「レジスタ読み取りストール」以外はすべて理解できました。

質問: CPU と「スーパースカラー」形式の「順不同実行」でこれがどのように起こっているか教えてもらえますか? 通常の「順不同」は論理的に見えましたが、「スーパースカラー」形式の論理的な説明を見つけることができませんでした。

質問 2: コードの実際のボトルネックを見つけるために、SSE SSE2 および新しい CPU の適切な命令リストを、できれば micro-ops テーブル、ポート スループット、ユニット、およびレイテンシの計算テーブルとともに誰かが提供できますか?

次のような小さな例があれば幸いです。

//loop carried dependency chain breaking:
__asm
{
loop_begin:
....
.... 
sub edx,05h //rather than taking i*5 in each iteration, we sub 5 each iteration
sub ecx,01h //i-- counter
...
...
jnz loop_begin//edit: sub ecx must have been after the sub edx for jnz
}
//while sub edx makes us get rid of a multiplication also makes that independent of ecx, making independent

ありがとうございました。

コンピューター: Pentium-M 2GHz、Windows XP-32 ビット

4

4 に答える 4

4

Agner Fogs の最適化マニュアルを参照してください: C++ でのソフトウェアの最適化: Windows、Linux、および Mac プラットフォームの最適化ガイドまたはアセンブリ言語でのサブルーチンの最適化: x86 プラットフォームの最適化ガイド

しかし、最新のコンパイラを実際に凌駕できるようにするには、最適化したいアーキテクチャに関する十分な背景知識が必要です。Intel、AMD、および VIA CPU のマイクロアーキテクチャ: アセンブリ プログラマおよびコンパイラ メーカー向けの最適化ガイド

于 2012-07-28T15:00:28.793 に答える
1

「スーパースカラー」ストールは、命令をスケジューリングするための追加の問題です。最新のプロセッサは、命令を順不同で実行できるだけでなく、並列実行ユニットを使用して、一度に3〜4個の単純な命令を実行することもできます。

しかし、実際にそれを行うには、命令が互いに十分に独立している必要があります。たとえば、ある命令が前の命令の結果を使用する場合、その結果が使用可能になるまで待機する必要があります。

実際には、これにより、手作業で最適なアセンブリプログラムを作成することは非常に困難になります。命令の最適な順序を計算するには、実際にはコンピューター(コンパイラー)のようである必要があります。そして、1つの命令を変更した場合は、もう一度やり直す必要があります。

于 2012-07-29T12:26:48.743 に答える
1

質問 1 については、Computer Architecture: A Quantitative Approachを強くお勧めします。文脈に沿って概念を説明するのに非常に優れているため、全体像を見ることができます。これらの例は、ボトルネックの優先順位付けと改善に常に焦点を当てているため、コードの最適化に関心がある人にとっても非常に役立ちます。

于 2012-10-24T19:31:49.100 に答える
1

私の 2 セント: Intel Architecture Developers Manuals 非常に詳細です。すべての SSE 命令もあり、オペコード、命令のレイテンシとスループット、および必要なすべての詳細な情報が含まれています :)

于 2012-07-28T15:56:24.997 に答える