私のC ++プログラムでOpenMPが機能するかどうかを判断する方法
-
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にいる場合はビジュアルスタジオ)を使用できます。
- スレッドがどのように実行されているかをご覧ください
- それぞれが実行されているコードを確認してください
- 他の人を続けながらそれらのいくつかを一時停止します
所属していません StackOverflow