メニーコアと格闘ブログ:PGIコンパイラの新機能の性能検証~その3:if文を使って関数solve中の複数のfor文を一つのfor文にまとめる

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

結果4(性能を違う方法で再検証)


if文を使って関数solve中の複数のfor文を一つのfor文にまとめます。
またこのsolveをmain関数でnlimit回数呼ぶことを辞めて一回呼べばnlimit回実行するようにそのfor文をsolve関数側に置きます。
それに関連して必要な変数をsolveの中に新たに定義します。
さらにmain関数のfor文(count)にあった //Over write HEATERと/* Update temp. */ の部分もsolveの中にまとめます。
メディア:sgfdm2d05.txt
0m13sかかった。かなり早くなりました。CPUに比べて2.6倍speed upです。
しかし出力結果(bmpファイル)を見るとCPUの結果と一致しません。現在その理由と解決方法を探っているところです。

[kim@localhost ~]$ pgcc -ta=nvidia,time -Minfo sgfdm2d05.c
 solve:
   149, Accelerator clause: upper bound for dimension 1 of array 'T_new' is unknown
        Accelerator clause: upper bound for dimension 0 of array 'T_new' is unknown
        Accelerator clause: upper bound for dimension 1 of array 'T' is unknown
        Accelerator clause: upper bound for dimension 0 of array 'T' is unknown
        Generating copy(T[0:255][0:255])
        Generating copy(T_new[0:255][0:255])
   152, Loop carried dependence due to exposed use of T[-1:256][0:255] prevents parallelization
        Loop carried dependence due to exposed use of T[0:255][-1:256] prevents parallelization
        Parallelization would require privatization of array T_new[i2][0:255]
        Sequential loop scheduled on host
   154, Loop is parallelizable
   156, Loop is parallelizable
        Accelerator kernel generated
       154, #pragma for parallel, vector(16)
       156, #pragma for parallel, vector(16)
            Using register for 'T_new'
            Cached references to size [18x18] block of 'T'
   227, Loop is parallelizable
   228, Loop is parallelizable
        Accelerator kernel generated
       227, #pragma for parallel, vector(16)
       228, #pragma for parallel, vector(16)
[kim@localhost ~]$ time ./a.out
gamma = 1.000244e-02
t = 0.000000
q_in = 3.200000e+06, q_out = 0.000000e+00, dQ = 3.200000e+06
FILENAME=0.000000.bmp
t = 0.000100
q_in = 6.786993e+04, q_out = 4.067052e+04, dQ = 2.719941e+04
FILENAME=0.000100.bmp
Accelerator Kernel Timing data
sgfdm2d05.c
 solve
   149: region entered 1 time
       time(us): total=12898520 init=1104680 region=11793840
                 kernels=11375954 data=417886
       w/o init: total=11793840 max=11793840 min=11793840 avg=11793840
       156: kernel launched 100000 times
           grid: [16x16]  block: [16x16]
           time(us): total=7715257 max=6364 min=70 avg=77
       228: kernel launched 100000 times
           grid: [16x16]  block: [16x16]
           time(us): total=3660697 max=6197 min=29 avg=36
real    0m12.989s
user    0m0.022s
sys     0m12.878s

この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:メニーコアと格闘ブログ:PGIコンパイラの新機能の性能検証~その3:if文を使って関数solve中の複数のfor文を一つのfor文にまとめる

個人用ツール