3

研究目的で C++ でプログラムを開発しました。完成まで数日かかります。

今、ラボの 8 コア サーバー マシンで実行して結果をすばやく取得していますが、マシンがプログラムに 1 つのプロセッサしか割り当てておらず、プロセッサ使用率が 13% のままであることがわかります (プロセスの優先度を高レベルに設定し、8 コアのアフィニティを設定しても)。

(並列処理やマルチスレッドのない単純なオブジェクト指向プログラムです)

強力なサーバー マシンの真のメリットを得るにはどうすればよいですか? 前もって感謝します。

4

4 に答える 4

5

コードを並列実行できるチャンクに分割します。

データの並列処理タスクの並列処理について読む必要があります。

その後、OpenMPまたは MPI を使用してプログラムを分割できます。

于 2011-10-20T09:06:03.487 に答える
3

(並列処理やマルチスレッドのない単純なオブジェクト指向プログラムです)

強力なサーバー マシンの真のメリットを得るにはどうすればよいですか?

より多くのスレッドを使用する。コンピューターがどれほど強力であっても、スレッドを複数のプロセッサに分散させることはできません。プログラムの独立した部分を見つけて、それらを並行して実行します。

  • C++0x スレッド
  • ブーストスレッド
  • OpenMP

個人的には、OpenMP はおもちゃだと思っています。おそらく、残りの 2 つのうちの 1 つを使用する必要があります。

于 2011-10-20T09:04:36.940 に答える
1

コードを独立して実行できる複数のタスクに分割し、スレッド プリミティブを直接使用するか、OpenMPなどの高レベルの並列化フレームワークを使用することで、マルチ並列処理を明示的に活用する必要があります。

于 2011-10-20T09:06:19.147 に答える
0

プログラム自体でマルチスレッド ライブラリや手法を使用したくない場合は、作業をいくつかの独立したチャンクに分割してみてください。次に、プログラムの複数のコピーを実行します...それぞれが異なるチャンクに割り当てられ、異なるコマンドラインパラメーターを取得することで指定されます。

一般的にプログラムのパフォーマンスを向上させることに関しては...メモリ使用量、I/O、CPU の速度を上げたり、ボトルネックを見つけたりするのに役立つプロファイリング ツールがあります。

https://stackoverflow.com/questions/tagged/c%2b%2b%20プロファイリング

コア間で作業を分割するのには役立ちませんが、アルゴリズムで 8 倍のスピードアップが得られれば、8 コアでのマルチスレッドよりも多くの助けになる可能性があります。他に考慮すべきことがあります。

于 2011-10-20T09:09:40.893 に答える