技術と感動をつなぐMetro

GPU高速化事例(Vol.2)
HimenoBMTプログラムにおけるGPU化効果とOccupancyとの相関関係の分析

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を近づけていく

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 parallel 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ページ)

目次

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

※OccupancyとGPU化効果について

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

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

関連事例

  • スパコン/HPC

    GPU高速化事例(Vol.1)

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

    詳しく見る

    詳細ページへ

関連サービス

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

資料請求・お問合わせはこちらから

まずはお気軽にお電話またはフォームからお問合わせください

ページトップへ戻る