2012-03-15 10 views
-1

これをGoogleに入力する方法がわからないので、ここでそれを聞いています。異なる演算子でCPU使用量が異なりますか?

プログラミングでは、オペレータは異なる時間またはCPU使用量を使用しますか?たとえばます:

x = y * z 

x = y + z 

は、時間の少ない量/よりCPUを取りますか?

私は気づいていないことは知っています。ただ好奇心の質問です。

また、+ =、 - =、* =、および/ =など、できる限り多くの演算子をすべての通常の演算子とともに含めることができます。

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

+0

演算子のパフォーマンスは、データ型などによって大きく変わる可能性があります。おそらく、バイナリ算術、浮動小数点計算などを検索することができます。 – joshuahealy

答えて

3

可変性が大きすぎるため、すべての言語、データ型、CPUなどのマスターリストはありません。

一部の言語では、演算子は完全に動的に決定される型ディスパッチ関数呼び出しの構文糖であるため、 "a + b"は数分かかる複雑な関数呼び出しになる可能性がありますが、 "a * b"ミリ秒かかる単純な関数呼び出し、またはその逆。

コンパイル時の型(C++やC++に過負荷があってもC++を含む)を持つ言語では、コンパイル時に何が起きるかを判断することができます。それでもあなたには最終的な答えは与えられません。

"拡張演算子"(+ =など)は、通常、展開後の割り当て操作の短縮形です。実際の操作には同じ時間がかかります。動的型ディスパッチを使用する言語では、補助演算(非演算子)の作業を切断することもあります。これは、拡張操作では変数の型を一度検索するだけで済むからです。静的(コンパイル時)の型付けでは、コンパイラが合理的にスマートである限り、単純なa += b型の操作では実行時にa = a + b以上のものを保存することはありません。 p->q->r->s += tのようなもっと複雑なケースは、(厄介なケースでは)p->q->r->sの評価が繰り返し書き出される場合には、繰り返し実行する必要があるため、時間を実際に節約することができます。

は、基礎となるCPUの動作については、親指のいくつかのルールがありますが、あなたはどれが適用される確認するために、適切なCPUのマニュアルを上陸する必要があります。

整数、加算、減算、および論理演算のために
  • likeおよび/または/ xorは決して他の操作より遅いことはありません
  • 整数の場合、乗算は加算よりも「困難」です。つまり、加算などよりも遅いかもしれませんが、十分なCPUがある限り、それ専用のパワー。浮動小数点演算の場合、加算と減算は乗算と除算よりも「難しい」ため、遅くなる可能性があります(または、実際のトランジスタの実数に依存します)。浮動小数点数が整数よりも遅い可能性があります。
  • バレルまたはファンネルシフタがある場合、シフトは常に高速ですが、そうでなければシフトに時間がかかることがあります(例えば、x >> 4はx >> 1よりも遅くなる可能性があります)
  • 最新のCPUでは、上記の命令スケジューリング@Alexは、命令の順序に依存する場合もあれば、そうでない場合もあります。 、それは助けるかもしれません
  • キャッシュ効果(キャッシュ・ライン内の特定のポイントに近いブランチの配置、マルチレベル・キャッシュ・ミス、TLBミスなど)は、効果を完全に揺るがすことができますいくつかのCPUで慎重な命令スケジューリングを行う

これらの種類のものでは、現代のコンパイラ最適化ツールを書くのが面倒です。 :-)

1

はい、最低レベルでa * ba + bよりも高くなることがあります。また、逆の場合もあります。それは実際に使用されるハードウェアと使用される言語に依存します。

参照してください。いくつかのテストを実行して、操作を数千回繰り返します。

+0

ありがとうございますが、私は演算子のリストと時間の使用ですか? そうでなければ、私はあなたが言ったことを行い、複数のテストXDを実行します。 –

1

CPUのマニュアルをチェックして、実行するロジックと算術命令とサイクル数を確認する必要があります。

整数除算または乗算の命令がない場合、プログラミング言語は、より基本的なもの(シフトや加算/減算など)を使用してこれらの演算を構成する必要があります。加算、減算、比較、シフト、および/またはxor、ビット反転などの長い整数に対する簡単な演算にも同じことが当てはまります。長い整数でこれらを行う命令がない場合は、短い整数を使用して構築する必要があります。つまり、演算子のパフォーマンスは、関連する型のサイズに依存します。

一部のCPUには浮動小数点演算の命令がありません。つまり、すべての浮動小数点演算は整数で動作する命令を使用して構築する必要があり、同様の演算よりも比較的遅くなります。

もう1つ考慮すべきことは、問題の命令をCPU内の他の命令とペアにすることができるかどうか(ペアリング(並列実行)が可能な場合)です。彼らがペアを組むことができない場合、彼らは近くの話しやすい指示を遅らせるでしょう。いくつかのCPUは、同時に実行できる単純な命令用に複数のALUを持っています。単純なペアリングの他に、複雑な命令の中には、CPUのパイプラインのステージを増やすものや、単純な命令とは異なる命令を使用するものがあります。

究極の答えは、CPUとプログラミング言語/コンパイラ/インタプリタによって異なります。

関連する問題