2016-10-30 11 views
0

私は計算でCPUを飽和させることができるプログラムの簡単なアイデアを探しています。今のところ、私が持っている唯一のアイデアは、素数生成器を使うことです。素数の桁数が増えると、生成するのが難しくなります。同じことをすることができるアルゴリズムの他のタイプはありますか?CPUを飽和させるプログラムの簡単な考え方

+2

私は計算自体は本当に重要とは思わない、それはありませんか?あなたは大規模な文字列をループし、それを変更したコピーを作成することができます。 CPUを実際に食べるには、すべての処理ユニットを接続するためにこれを行う1トンのスレッドを生成する必要があります。好奇心からなぜこれが必要ですか? – Carcigenicate

+1

多くの電力を使用するか熱を加える必要がありますか?それとも、CPU時間を使うだけですか?後者の場合、1Mから1000Mまでの繰り返し回数を持つ単純なループがどれだけ長く実行されているかに応じて良好です。あなたのループがどのようにハイパースレッディングに適しているかは重要ですか? (または、Intelの以外のCPUのマイクロアーキテクチャ上のSMTの他の種類。) –

答えて

0
  • CPUの操作である限り、CPUの動作の種類は気にする必要はありません。あなたはスーパーのリレーを試すことができますが

    std::atomic<bool> flag_exit;
    int a = 1;
    int b = 1;
    while(!flag_exit)
    b = a + b;
    }
    cout << b; // using 'b' just to make sure it isn't optimized away.

  • あなたはすべてのあなたのコア
    にあなたの仕事を広げる検討する必要がありますスカラーアウト無関係な命令を分割するために注文実行(感謝Peter Cordes)に感謝します。コアごとに別のスレッドを作成することをお勧めします。

+0

flag_exit'は 'のstd ::アトミックである' 'ない限りか何か(またはとして、一般的にはこの場合には動作しませんが、' volatile'、原子タイプの代わりに)、大部分のコンパイラは 'if(!flag_exit){while(true){}}'を最適化します。もちろん、これはgcc6.2(Godbolt(https://godbolt.org/g/c0x8PG))の –

+0

とまったく同じです。もちろん、-O0で動作します(この場合、 'cout'は必要ありません)あなたは 'のstd ::アトミック flag_exit'使用している場合、または:。。「全体で無関係の指示を分割するハイパースレッディングのリレー」をhttps://godbolt.org/g/IG9mKa –

+0

それはHTが何をするかの反対だこれは、複数のスレッドをすることができます単一スレッドのパフォーマンスを犠牲にして全体的なスループットを向上通常のスーパスカラのアウトオブオーダー実行は、命令ストリームで命令レベルの並列性を利用するものです –

関連する問題