0

このサイトではまだ答えが出ていないと思います。

4つの数字の多くの組み合わせを通過するコードを作成しました. 数値は0から51までなので6ビットで格納できるので、1バイトでいいですか?これらの 4 つの数値を入れ子にしてサイクルに使用し、最下位レベルでサイクルに使用します。では、少なくとも 52 個の値を格納できる c++ 型のうち、ネストされた 4 つのサイクルを反復処理するのに最も速いのはどの c++ 型でしょうか?

The code looks like: 
for(type first = 0; first != 49; ++first)
 for(type second = first+1; second != 50; ++second)
  for(type third = second+1; third != 51; ++third)
   for(type fourth = third+1; fourth != 52; ++fourth) {
    //using those values for about 1 bilion bit operations made in another for cycles 
   }

そのコードは非常に単純化されており、この種の反復にはもっと良い方法があるかもしれません。それについても助けてください。

4

3 に答える 3

1

std::uint_fast8_theaderの typedef を使用します<cstdint>。これは、少なくとも 8 ビットの「最速」の符号なし整数型であると想定されています。

于 2012-09-09T09:45:17.960 に答える
0

ほとんどのマシンでintは、最速の整数型です。私が使用しているすべてのコンピューターで、intは よりも高速でunsigned、 よりも大幅に高速ですsigned char

もう 1 つの問題は、おそらくもっと大きな問題ですが、これらの数値をどう処理するかという問題です。コードを表示していないので、わかりません。期待される整数値を生成するintことが期待される場合に使用します。first*second

さらにもう 1 つの問題は、このコードの移植性がどれだけ広く期待できるかということです。さまざまなアーキテクチャやさまざまなコンパイラに移植されるコードと、制限され制御された設定で使用されるコードとの間には大きな違いがあります。後者の場合は、いくつかのベンチマークを作成し、ベンチマークが最適に機能するタイプを使用します。幅広い消費のために何かを書いている場合、問題は少し難しくなります。

于 2012-09-09T10:54:03.907 に答える
0

最速は、基盤となるプロセッサ ALU がネイティブに動作できるものです。現在、レジスタは複数の形式でアドレス指定できます。その場合、これらのフォーマットはすべて同等に高速です。

したがって、これは C++ 固有ではなく、プロセッサ アーキテクチャ固有になります。現代の PC プロセッサで作業している場合、int は for ループの他の何よりも高速です。

組み込みシステムでは、考慮すべきことが他にもあります。例えば。変数が位置合わせされた場所に格納されているかどうか。

于 2012-09-09T10:31:10.023 に答える