6

OpenMPを使用して、ネストされたループでマルチスレッドを実行しています。このようなものは初めてなので、実際に並列プログラミングを実行できるように、OpenMPを正しい方法で使用しているかどうかはわかりません。それで、OpenMPを使用するC ++プログラムのパフォーマンスを測定できるかどうかを知りたいので、実際に機能し、正しい方向に進んでいることがわかりますか?並行して実行されているスレッドの数や、各スレッドが終了するのにかかる時間など。ありがとう、よろしく!

4

3 に答える 3

10
#include <omp.h>

...
int target_thread_num = 4;
omp_set_num_threads(target_thread_num);
unsigned long times[target_thread_num];

// Initialize all the times
#pragma omp parallel
{
   int thread_id = omp_get_thread_num();
   times[thread_id] = start_time();

   std::cout << "Thread number: " << omp_get_thread_num() << endl;

   times[thread_id] = end_time();
}
...

明らかに、2つのタイマー機能を提供する必要がありますが、それが要点です。OMP関数はかなり自明です。また、環境が適切に設定されていること、および適切なメカニズムでコンパイルしていることを確認してください。g++オプションは-fopenmpです。Visual Studioで、プロジェクト設定、C ++、言語に移動し、「OpenMPサポート」を有効にします。

于 2009-08-20T05:24:22.510 に答える
1

WindowsでWindowsタスクマネージャー(CTRL-SHIFT-ESC)を使用してCPU使用率を監視するか、*nixボックスを上にすることができます。

多くのコアが使用されているかどうかを確認するだけです

于 2009-08-19T20:15:24.420 に答える
1

デバッガー(Windowsを使用している場合はVisual Studio)を使用して、次のことができます。

  • スレッドがどのように実行されているかを確認する
  • それぞれが実行しているコードを確認する
  • 他の人に続行させながら、それらのいくつかを一時停止します
于 2009-08-19T20:47:26.337 に答える