1

並行して動作すると言われているC++プログラム(ソース)を入手しました。ただし、g ++でコンパイル(Ubuntu10.04とg++ 4.4.3を使用)して実行すると、2つのCPUコアの一方がフルロードされ、もう一方は「何も」実行されません。

それで私は私にプログラムをくれた人と話しました。プログラムを2CPUコア用にコンパイルするには、g++に特定のフラグを設定する必要があると言われました。ただし、コードを見ると、並列処理を指す行は見つかりません。

だから私は2つの質問があります:

  • マルチスレッドアプリケーション用のC++組み込み関数はありますか?つまり、追加のライブラリなしで並​​列コードを記述できますか(非標準ライブラリが含まれていないため)?
  • プログラムを2つのCPUコア用にコンパイルし、並列で実行されるようにコンパイルするようにコンパイラーに指示するg ++のフラグが実際にあるというのは本当ですか?
4

4 に答える 4

3

私の知る限り、ループ反復の並列化 (-ftree-parallelize-loops) を除いて、シングルスレッド アプリケーションで並列処理を活用するように設計されたコンパイラ フラグはありません (これは間違いなく重要な操作です)。それでも、明示的なスレッド作成がない場合でも、いくつかの命令シーケンスを並列化するためのOpenMPディレクティブがいくつかある場合があります。

于 2010-06-14T07:46:45.890 に答える
2

ソースコードで「thread」や「std::thread」が出現するかどうかを確認します。

于 2010-06-14T08:06:26.040 に答える
1

私が思いつくのは、openMosixLinuxPMI (openMosix の後継) だけです。コードがプロセスを使用する場合、プロセスの「移行」手法により、プロセスを別のマシン (指定された Linux ディストリビューションがインストールされている) で動作させることができます。

コード内のスレッド ( grep -i thread )、プロセス ( grep fork ) を確認します。これが存在しない場合は、MPIを確認してください。私が覚えているので、MPI には追加の設定が必要です (教員の宿題にのみ使用しました)。

前述のように、gcc (およびその他) は、いくつかの pragma を使用して、OpenMP との並列処理のいくつかの方法を実装しています。

于 2010-06-14T12:26:12.560 に答える
1

現在の C++ 言語標準では、言語または標準ライブラリでマルチプロセッシングがサポートされていません。提案された C++0x 標準は、スレッド、ロックなどをいくらかサポートしています。プログラムに魔法のようにマルチプロセッシングを実行させる g++ のフラグを私は知りません。

于 2010-06-14T07:47:51.800 に答える