私のC ++プログラムでOpenMPが機能するかどうかを判断する方法

StackOverflow https://stackoverflow.com/questions/1302368

  •  19-09-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

#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サポート」を有効にします。

他のヒント

WindowsでWindows TaskManager(Ctrl-Shift-ESC)を使用して、CPUの使用量を監視するか、 *nixボックスの上に監視できます。

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

デバッガー(Windowsにいる場合はビジュアルスタジオ)を使用できます。

  • スレッドがどのように実行されているかをご覧ください
  • それぞれが実行されているコードを確認してください
  • 他の人を続けながらそれらのいくつかを一時停止します
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top