xor
ALUが1バイトで実行できる最速の演算はありますか?私の教授は、2つのことが同じかどうかを確認することほど簡単なことはないからだと言っていました。これは、オペランドが異なり、同じである場合に返されるxor
ことを考える正しい方法ですか?1
0
3 に答える
これはすべて、CPUの動作に依存します。実際には、最新のチップでのALU演算はすべて1クロックサイクルですが、算術演算を行う方法は複数あることが多いため、そのステートメントでさえ一般化されすぎています。
SIMD機能を使用すると、クロックサイクルごとに複数のデータを処理できるため、スループットが向上します。特定のアーキテクチャ(x86などLEA
)の特定の命令を使用すると、複数の算術演算を1つの命令にまとめて、単一のクロックサイクルで再度実行し、特定の観点で高速化できます。
ほとんどのアーキテクチャでは、ALUは値を返すだけでなく、フラグ(オーバーフロー(キャリー)、ゼロなど)も変更します。他の命令がこれらのフラグに依存している場合、特に条件が存在する場合、算術演算の実行に必要な時間は変わる可能性があります。関与。マニュアルを確認してください。
また、レイテンシーの点で「高速」は、1秒あたりの操作数の点で「高速」とは異なります。XORはALUで実行するのに1クロックサイクルかかる場合がありますが、結果が別の命令やフラグなどで使用できるようになるまで、別のクロックサイクルかかります。それでも、アウトオブオーダー実行により、結果がすぐに利用可能であるように見える場合がありますが、これは、チップが命令をシャッフルしてビジー状態を維持しているためです。
実際、NANDとNORは、CMOS実装のため、最も単純な2項演算です(大まかに言えば、ゲート数が少ない)。もちろん、NOTはビットを反転するだけなので、最も簡単な操作です。ただし、実際のCPUに関しては、加算/減算操作でさえ1サイクルしかかからない可能性があります。
私はその議論を疑う。ALUにはいくつかの操作が実装されています。第一に、それは明らかに実際のCPUに依存し、第二に、それは全体的なCPUアーキテクチャ(ロードストアなど)に依存します。
しかし、もっともらしい議論の1つは、ウィキペディアから引用しています。
一部のコンピュータアーキテクチャでは、値ゼロをロードして格納する代わりに、レジスタをそれ自体と排他的論理和することによって(ビット自体が常にゼロになる)、レジスタにゼロを格納する方が効率的です。
これは、追加のオペランドが必要ないためです。