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 

改善アプローチ

  1. Theoretical Occupancyを高める
  2. 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 ⇒ データの再利用可

後追  後追  先行

対応

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]
TheoreticalAchieved
ASIS16.0243.7543.1572102416.111030
TUNE①14.3856.2555.4756102416.221130
TUNE②12.1050.0049.9864409614.071150

ホワイトペーパー全文のダウンロードはこちら

「GPU化による高速化事例と留意ポイント」について(全28ページ)

目次

  1. GPU高速化事例:北大プログラム × NVIDIA A100
  2. GPU高速化事例:北大プログラム × NVIDIA GH200
  3. GPU高速化事例:HimenoBMT(XL)× NVIDIA A100

※OccupancyとGPU化効果について

個人情報の取り扱いについて

お客様からいただく個人情報は、情報提供のために使用させていただきます。これにあたり、株式会社メトロからご連絡を取らせていただくことがございます。個人情報の取り扱いについてはプライバシーポリシー をご覧ください。

関連事例

GPU高速化事例(Vol.1)

固体境界が埋め込まれた改良ナビエ・ストークス方程式の解法

詳しく見る

関連サービス

GPU高速化サービス

HPC分野を長年に渡り支えてきた高品質・高性能な技術力を活かして、GPUを使ったアプリケーションの高速化を実現し、みなさまの研究・開発をスムーズに進める支援をいたします。

数値シミュレーションプログラム開発

お客様の研究や開発における課題解決を支援いたします。一般的なアプリにはない機能の開発や、論文の方程式の実装などを行います。