HimenoBMTは、熱伝導や非圧縮性流体などの物理現象に関連するPoisson方程式を、ヤコビ反復法(Jacobi iteration)によって数値的に解くベンチマークプログラムです。
本ページでは、HimenoBMTプログラムにおけるGPU化を行い、高速化した事例をご紹介いたします。
ボトルネック要因(分析)
【改善前】HimenoBMT Jacobiカーネル
!$acc kernels loop reduction(+:wgosa) |
do k=2,kmax-1 |
do j=2,jmax-1 |
do i=2,imax-1 |
s0=a(I,J,K,1)*p(I+1,J,K) & |
+a(I,J,K,2)*p(I,J+1,K) & |
+a(I,J,K,3)*p(I,J,K+1) & |
+b(I,J,K,1)*(p(I+1,J+1,K)-p(I+1,J-1,K) & |
-p(I-1,J+1,K)+p(I-1,J-1,K)) & |
+b(I,J,K,2)*(p(I,J+1,K+1)-p(I,J-1,K+1) & |
-p(I,J+1,K-1)+p(I,J-1,K-1)) & |
+b(I,J,K,3)*(p(I+1,J,K+1)-p(I-1,J,K+1) & |
-p(I+1,J,K-1)+p(I-1,J,K-1)) & |
+c(I,J,K,1)*p(I-1,J,K) & |
+c(I,J,K,2)*p(I,J-1,K) & |
+c(I,J,K,3)*p(I,J,K-1)+wrk1(I,J,K) |
ss=(s0*a(I,J,K,4)-p(I,J,K))*bnd(I,J,K) |
wgosa=wgosa+ss*ss |
wrk2(I,J,K)=p(I,J,K)+omega*ss |
enddo |
enddo |
enddo |
【ご参考】北大プログラム 高コスト部2
1006 | !$acc kernels |
1007 | !$acc loop independent |
1008 | do k = 2, m*n, 2 ! even space |
1009 | j = (k - 1) / m + 1 |
1010 | i = k - (j - 1) * m |
1011 | |
1012 | !-- IF m is EVEN (Based on Column-Major Order; FORTRAN) |
1013 | if(mod(m,2)==0 .and. mod(j,2)==0) i = i - 1 |
1014 | |
1015 | p(i, j) = ( bb(i, j) & |
1016 | ae(i, j) * p_old(i+1, j) - aw(i, j) * p_old(i-1, j) & |
1017 | an(i, j) * p_old(i, j+1) - as(i, j) * p_old(i, j-1) ) & |
1018 | / ap(i, j) * relux_factor & |
1019 | p_old(i, j) * (1. - relux_factor) |
1020 | end do |
1021 | !$acc end kernels |
プログラムの特徴
HimenoBMTの演算カーネル部は、有限差分法による19点ステンシル計算となっている
要因(分析)
Occupancyの計測結果
Occupancy[%] | ||
---|---|---|
Theoretical | Achieved | |
HimenoBMT Jacobiカーネル | 43.75 | 43.13 |
【ご参考】 北大プログラム高コスト部2 |
100.00 | 95.03 |
改善アプローチ
- Theoretical Occupancyを高める
- Achieved Occupancyを近づけていく
Theoretical Occupancy ≧ Achieved Occupancy
【TUNE①+TUNE②を実施した場合】データ再利用性の最大化
ASIS
【改善前】HimenoBMT Jacobiカーネル
!$acc kernels loop reduction(+:wgosa) |
do k=2,kmax-1 |
do j=2,jmax-1 |
do i=2,imax-1 |
s0=a(I,J,K,1)*p(I+1,J,K) & |
+a(I,J,K,2)*p(I,J+1,K) & |
+a(I,J,K,3)*p(I,J,K+1) & |
+b(I,J,K,1)*(p(I+1,J+1,K)-p(I+1,J-1,K) & |
-p(I-1,J+1,K)+p(I-1,J-1,K)) & |
+b(I,J,K,2)*(p(I,J+1,K+1)-p(I,J-1,K+1) & |
-p(I,J+1,K-1)+p(I,J-1,K-1)) & |
+b(I,J,K,3)*(p(I+1,J,K+1)-p(I-1,J,K+1) & |
-p(I+1,J,K-1)+p(I-1,J,K-1)) & |
+c(I,J,K,1)*p(I-1,J,K) & |
+c(I,J,K,2)*p(I,J-1,K) & |
+c(I,J,K,3)*p(I,J,K-1)+wrk1(I,J,K) |
ss=(s0*a(I,J,K,4)-p(I,J,K))*bnd(I,J,K) |
wgosa=wgosa+ss*ss |
wrk2(I,J,K)=p(I,J,K)+omega*ss |
enddo |
enddo |
enddo |
分析
プログラムの特徴
- 配列a,b,c,wrk1,bnd,wrk2 ⇒ データの再利用不可
- 配列p ⇒ データの再利用可
後追 後追 先行
p(I,J,K-1)、p(I,J,K)、p(I,J,K+1)
データの再利用ができていない場合、
メモリアクセス量:16GB
対応
データの再利用ができている場合、
メモリアクセス量:14GB
TUNE①+TUNE②
!$acc kernels loop reduction(+:wgosa) |
do k=2,kmax-1 |
!$acc loop tile(64,16) ⇒タイリング |
do j=2,jmax-1 |
do i=2,imax-1 |
s0= abc(1,I,J,K)*p(I+1,J,K) & |
+abc(2,I,J,K)*p(I,J+1,K) & |
+abc(3,I,J,K)*p(I,J,K+1) & |
+abc(5,I,J,K)*(p(I+1,J+1,K)-p(I+1,J-1,K) & |
-p(I-1,J+1,K)+p(I-1,J-1,K)) & |
+abc(6,I,J,K)*(p(I,J+1,K+1)-p(I,J-1,K+1) & |
-p(I,J+1,K-1)+p(I,J-1,K-1)) & |
…(略) |
enddo |
enddo |
enddo |
- TUNE①:配列次元入替+配列マージabc
- TUNE②:ブロッキング(=タイリング)
GPU A100 HimenoBMT(XL) | 実行時間 [ms] | Occupancy [%] | レジスタ数 | Shared Memory Per Block [B] | メモリアクセス量 [GB] | メモリスループット [GB/s] | |
Theoretical | Achieved | ||||||
ASIS | 16.02 | 43.75 | 43.15 | 72 | 1024 | 16.11 | 1030 |
TUNE① | 14.38 | 56.25 | 55.47 | 56 | 1024 | 16.22 | 1130 |
TUNE② | 12.10 | 50.00 | 49.98 | 64 | 4096 | 14.07 | 1150 |
ホワイトペーパー全文のダウンロードはこちら
「GPU化による高速化事例と留意ポイント」について(全28ページ)

目次
- GPU高速化事例:北大プログラム × NVIDIA A100
- GPU高速化事例:北大プログラム × NVIDIA GH200
- GPU高速化事例:HimenoBMT(XL)× NVIDIA A100
※OccupancyとGPU化効果について
個人情報の取り扱いについて
お客様からいただく個人情報は、情報提供のために使用させていただきます。これにあたり、株式会社メトロからご連絡を取らせていただくことがございます。個人情報の取り扱いについてはプライバシーポリシー をご覧ください。
関連事例
関連サービス
GPU高速化サービス
HPC分野を長年に渡り支えてきた高品質・高性能な技術力を活かして、GPUを使ったアプリケーションの高速化を実現し、みなさまの研究・開発をスムーズに進める支援をいたします。
数値シミュレーションプログラム開発
お客様の研究や開発における課題解決を支援いたします。一般的なアプリにはない機能の開発や、論文の方程式の実装などを行います。