体力,気力,ときどき知力

情報系大学院生 兼 HPC系ソフトウェアエンジニアのメモ書き.やったことを貼って後日にコピペ再現するために書いているので新規性・汎用性・芸術性は考えてません.数値計算,高精度演算,SIMD, vim, Linuxなど.

OpenMPのスケジューリング方式"runtime"は速いのか!?

OpenMPにはstatic, dynamic, guided,auto,runtimeと5つのスケジューリング方式がある.細かいことは本記事の末尾のリンク先に任せるが,今回のテーマはruntime.

runtimeは実行時に実行ファイルが環境変数を読みに行ってstatic, dynamic, guidedの3つのうちどれにするかを切り替える方式.

runtimeを今まで使ってないなかったのは内部の挙動がわからないからで,

 

疑問1) #pragma omp句はプリプロセッサがpthreadに変換するはずなのに,実行時に実行ファイルが環境変数を読みに行って挙動を切り替えるというのは,どういう実行ファイルが生成されているんだ.という疑問.

疑問2) そして切り替えのせいで実行時間はどのくらい伸びるんだ.という疑問

 

今日は時間もないので,疑問(1)はさておき,取り敢えず使い方と(2).まず使い方は

#pragma omp parallel for schedule(runtime)

とつけて,

OMP_SCHEDULE="static"

export OMP_SCHEDULE

とやる.

 

わかったところで疑問(2)をやる.

純粋なスケジューリング方式ごとの差は僕の選んだ問題依存だから問題によって異なる.

 

対象問題:

細かいことは研究に抵触するので避けるが,研究に使っている疎行列ベクトル積.1000回の平均時間

コンパイラicc 12.0.3

 

結果(桁が小さいので1000倍した時間,単位は秒)

static 0.72

runtime(static) 0.74 

 

dynamic 2.60

runtime(dynamic) 2.62

 

guided 0.72

runtime(guided) 0.75

 

結果,やっぱりちょっとだけ遅かった.最大でguidedの+4%だから差は小さいけど,多少は違うみたい.

実行ファイルのサイズもちょっと違っていてstaticの約2.5MBと比べて,

dynamic +256byte

guided  -72KB

runtime +5KB

と,まぁどうでもいい値だけど5KBくらい多かった.っていうかguidedってファイルサイズ小さいんだね.

ということで,アプリケーションの人とかはruntime使ってもいいと思うけど,1%でも早くしたい細かいチューニング屋さんはruntimeは駄目かもしれない.

 

OpenMP* を使用したワークシェアリング

http://www2.kobe-u.ac.jp/~lerl2/l_cc_p_10.1.008/doc/main_cls/mergedProjects/optaps_cls/ccp/optaps_par_openmp_start_c.htm