2009-08-19 13 views
5

OpenMPを使用して、ネストされたループでマルチスレッドを実行しています。このようなことから、OpenMPを正しい方法で使用しているのかどうかは分かりませんので、実際に並列プログラミングを行うことができます。 OpenMPを使用しているC++プログラムのパフォーマンスを測定できるかどうかを知りたいので、実際にはうまくいくと私は正しい軌道に乗っていると言えますか?並行して実行されているスレッドの数、各スレッドが終了するまでの時間などです。 ありがとうございました!OpenMPがC++プログラムで動作するかどうかを確認する方法

+0

OpenMPIでOpenMPを混乱させていただき、ありがとうございました!私のエラーを丁寧に指摘してくれたDirk Eddelbuettelに感謝します! –

答えて

9
#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 Support"を有効にします。

  • 1

    Windowsのtaskmanager(CTRL-SHIFT-ESC)を使用して、CPU使用率を監視したり、* nixボックスの上に表示することができます。

    だけに(Windows上でならVisual Studioの)あなたは、あなたのデバッガを使用することができます

    1

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

    • は、スレッドが
    • 参照を実行していることがわかりさせる他の人が
    +0

    Linuxでgdb /でこれらを行う方法を知っていますか? – Tim

    +0

    これは役立ちます:http://www.delorie.com/gnu/docs/gdb/gdb_25.htmlそのページの下部にあるリンクも参照してください。 (警告:私はGoogleでこれを見つけた、私はGDBのユーザではない) – RichieHindle

    +0

    Linuxでは、あなたのコアをすべて見て、彼らが何をしているのかを常に確認するために「トップ」を使うことができる。 – Anna

    関連する問題