2017-05-02 5 views
1

実行時にopenmpスケジュールをチェックする方法は?openmpのスケジュールは何ですか?

私は

#pragma omp parallel for schedule(runtime) collapse(2) 
for(j=1;j>-2;j-=2){ 
    for(i=0;i<n;i++){ 
    //nested loop code here 
    } 
} 

scheduele並列ループおよびランタイムと私のコードをコンパイルし、私は環境変数OMP_SCHEDULE=dynamic,50を指定します。

実行時にプログラムで実際にOMP_SCHEDULE変数が使用されたことを確認するにはどうすればよいですか?

私はhttp://www.openmp.org/wp-content/uploads/openmp-4.5.pdf

をダウンロード4.7.3

+0

は、プログラムが実行されたすべてのランタイム情報を出力OpenMPのAPI関数がありませんでした報告?私はそれに手を差し伸べることができませんでした。 – Marouen

+1

'void omp_get_schedule(omp_sched_t * kind、int * chunk_size)' –

+1

@Z Boson、それを答えて、彼を基準にしましょう! (私はちょうどその答えを自分で書いていますが、あなたの雷を盗んではいけません:-)) –

答えて

4

gccでのOpenMP 3.1を使用していますがその後の "C/C++スタブルーチン" に行ってきましたし、この

void omp_get_schedule(omp_sched_t *kind, int *chunk_size) 
{ 
*kind = omp_sched_static; 
*chunk_size = 0; 
} 

は次にこれを作りましたテスト

/*                                            
    typedef enum omp_sched_t {                                     
    omp_sched_static = 1,                                      
    omp_sched_dynamic = 2,                                      
    omp_sched_guided = 3,                                      
    omp_sched_auto = 4                                       
    } omp_sched_t;                                        
*/ 

#include <omp.h> 
#include <stdio.h> 
int main(void) { 
    omp_sched_t kind; 
    int chunk; 
    omp_get_schedule(&kind, &chunk); 
    printf("%d %d\n", kind, chunk); 
} 

とコンパイル

gcc -fopenmp -O3 foo.c 

、その後

export OMP_SCHEDULE=static,50 
./a.out 
1 50 
export OMP_SCHEDULE=dynamic,100 
2 100 

omp_get_scheduleのみランタイムスケジューリング定義OMP_SCHEDULEを報告することに注意してください。たとえば、次のようにスケジュールを変更すると

#pragma omp parallel for schedule(static,1) 

、その後OMP_SCHEDULE=dynamic,100を定義omp_get_scheduleまだ動的スケジューリングとチャンクサイズ100

関連する問題