GDEP Solutions, Inc.
  • Home
    • 新着情報一覧
    • NVIDIA NEWS
    • GPU2021 開催概要 >
      • Day1 AI & GPU セッション
      • Day2 イメージングAI
      • Day3 GPUスパコン
      • 講演レポート | Denso
      • 過去開催 >
        • GPU2020
        • GPU2019
  • GPU製品
    • 即納モデル
    • NVIDIA GPU 一覧 >
      • NVIDIA H100
      • NVIDIA A100
      • NVIDIA RTX スペック比較 >
        • NVIDIA RTX A6000
        • NVIDIA RTX A5000
        • NVIDIA RTX A4500
        • NVIDIA RTX A4000
        • NVIDIA RTX A2000
      • Quadro GV100
    • GPUレンタル一覧
    • GPU年定額プラン
    • AI・データサイエンスおすすめ一覧 >
      • NVIDIA DGX H100
      • NVIDIA DGX A100
      • DGX STATION A100
      • HP Z8 G4 Workstation
      • HP ZBook Fury17G7 Mobile Workstation
      • Dell Precision 7920 Tower
      • DeepLearning BOXⅡ
      • DeepLearning STATION
      • NVIDIA EGX サーバー
      • HITACHI SR24000
    • 数値計算・解析おすすめ一覧 >
      • HP Z4 G4 Workstation
      • HP Z8 G4 解析ソフトウェア動作確認済みモデル
      • Supermicro 7049GP
    • NVIDIA A100搭載 Supermicro 740GP
  • ストレージ
    • Synology
    • DDN STORAGE
    • PURESTORAGE
  • HPC
    • HPC Workstation
    • HPCおすすめGPUサーバー
    • HPC SIサービス
    • AXXE-L by XTREME-D
    • NVIDIA HPC SDK
    • プログラム高速化サービス
  • クラウド製品
    • セキュリティ >
      • KernelCare
    • 仮想化 >
      • Login VSI
      • Login PI
    • リモートアクセス >
      • FastX
      • NiceDCV
      • NoMachine
    • ハイブリッドクラウドNAS >
      • Morro Data
    • クラウドストレージ >
      • クラウドストレージ Wasabi
  • GPUコラム / 導入事例
    • GPUプログラミング >
      • 初級編
      • 中級編 >
        • 第4回:MPI+OpenACC実装における計算と通信のオーバーラップ
        • 第3回:拡散現象シミュレーションのおさらい
        • 第2回:簡単なOpenACC + MPI コードで考える
        • 第1回:複数のGPUを使う方法とは?
    • GPU Technology for CG/AI >
      • 深層学習を利用した画像処理・必要なGPU性能
      • トランスフォーマー 最近流行のニューラルネットワーク
      • GAN Inversion による写実的画像生成の制御
      • 深層学習におけるアノテーションコストを抑えるための取り組み Active Learning
      • 深層学習に基づく人物画像の再照明
      • GPUの起源と進化
      • AlphaGo とその後
      • CUDAを用いたシンプルなパストレーシング
      • 流体シミュレーションの応用
      • GPUを用いた高速レンダリング
      • GPUを基盤としたCG/AIの技術進化
    • シリコンバレー発信 New Technology Report >
      • 最新記事から
    • ツブ子が聞く・見る・行く! >
      • 見る!NVIDIA RTX A6000
      • 聞く!NVIDIA DGX A100
      • 見る!NVIDIA A100 Tensor Core GPU
    • 導入事例 >
      • DGX SYSTEMS >
        • NVIDIA DGX A100 | 金沢大学
      • GPU Computing
  • 会社情報
    • ごあいさつ
    • 会社概要
    • アクセスマップ
    • 採用情報
  • お問い合わせ

OpenACCではじめるGPUプログラミング

中級編 第4回

画像

第4回:MPI+OpenACC実装における計算と通信のオーバーラップ

2/28/2022

 
前回はMPI + OpenACCによる拡散方程式のマルチGPU実装を行いましたが、性能向上できたのは4GPUまでで、8GPUでは逆に遅くなってしまったのでした。

今回はより高速化するためにはどうしたらいいのかについて解説していきます。
今回扱うコードも全てgithub上で公開されています。https://github.com/hoshino-UTokyo/lecture_openacc_mpi.git

MPI+OpenACC実装における計算と通信のオーバーラップ

画像
図1:A100 GPU 8枚を用いた性能評価(再掲)
図1は前回の実装の性能です。8 GPUで遅くなってしまってる原因はなんでしょうか。
​
一つは、1 GPUあたりの担当領域が少なくなった結果、各GPUの実行効率が落ちてしまった、というのが理由としてあげられるでしょう。

​問題を均等サイズに切り分けて並列数を増していく強スケーリング方式では、ある程度仕方のないことです。
画像
図2:袖領域付きの領域分割とMPIによる袖領域交換の例(再掲)
もう一つは、やはりMPI通信です。
図2は3 MPIプロセスによる袖領域交換のイメージですが、プロセス数が増えたらどうなるでしょうか。

​図2の例だとnzの長さは5ですが、例えば5 MPIプロセスで並列化するときはnzの長さが3になります。それに対して袖領域の幅は変わらないので、3 MPIプロセスでも5 MPIプロセスでも幅2のMPI通信が必要になります。

​つまり、MPIによる並列数が増えれば増えるほど、相対的に通信時間の比重が大きくなってしまうのです!
画像
図3:計算と通信のオーバーラップのイメージ。
この通信時間をうまいこと隠して高速化する手法として、計算と通信のオーバーラップと呼ばれる手法が良く使われます。
図3が計算と通信のオーバーラップのイメージです。
​計算時間 >= 通信時間が成り立つ間は速くなりそうですね。

​ただしこれをするには、計算と通信が同時に実行可能でなければなりません。
​拡散方程式の場合にはどうしたらいいのか、考えてみましょう。
画像
図4:k番目のGPUの担当領域の詳細区分。
図4のようにGPUの計算担当領域を細かく分けてみます。
各格子点を計算するには、一つ前の時刻における近傍点の値が必要なわけですから、k番目のGPUが時刻t+1の②を計算するには時刻tの①をk-1番目のGPUからもらう必要があります。

​同様に、時刻t+1の④を計算するには時刻tの⑤をk+1番目のGPUからもらう必要があります。
​一方で③の内点領域は、隣のGPUからデータをもらわずに計算できますから、MPIの通信と関係なく実行できそうです。つまり、③の計算とMPIによる通信は同時に実行しうるわけです。
画像
図5:拡散方程式における計算と通信のオーバーラップのイメージ。
先ほどの依存関係を踏まえて、通信と計算のオーバーラップを考えると、例えば図5のようになります。

②、④の計算が終わった後に送信を行うこと、①、②、④、⑤の送受信は計算と同時に行うこと、時刻t+1の計算時には時刻tにおける①〜⑤全てのデータが揃っていること、という条件を図5は満たしています。

通信をオーバラップするためには、MPI_Isend, MPI_Irecv関数を使って①、②、④、⑤の送受信をします。
前回利用したMPI_Send, MPI_Recvが同期関数と呼ばれ、データの送受信の終了を待つのに対し、MPI_Isend, MPI_Irecv関数は非同期関数と呼ばれ、データの送受信の終了を待たずに先の処理に進みます。

​MPI_waitが呼ばれて初めて終了を待つので、③の計算が終わった後でMPI_waitを呼べばいいわけですね。
画像
図6:Async節による②、③、④の同時実行のイメージ。
さらにOpenACCのasync節を使うと、②、③、④も同時に実行することができます。
​
②、④は格子数が少ないので、GPUのリソースを使い切ることができず、効率的に実行できません。③と同時に動かすことでリソースを埋めることができるわけです。
画像
図7:Async節による②、③、④の同時実行の擬似コード。
​実際のコードはlecture_openacc_mpi/C/openacc_mpi_diffusion/03_openacc/diffusion.c
図7は拡散方程式のカーネルの疑似コードです。
元々は一つの三重ループでしたが、②、④を分離して3つのカーネルになっています。

​②のカーネルにaysnc(0)、④のカーネルにasync(1)、③のカーネルにasync(2)と別々の番号を付けることで、これらは同時に実行可能なカーネルとして処理されます。
画像
図8:②、③、④の同時実行+通信隠蔽のコード。
​lecture_openacc_mpi/C/openacc_mpi_diffusion/03_openacc/main.c
図8は通信を行っている時間ループ部分です。
図7のカーネルは122行のdiffusion3d関数内で実行されます。Asyncを付与したカーネルはどこかで終了を待たなくてはならないのですが、それが110, 111, 120行目のwait指示文です。

②の送信は116行目、④の送信は117行目で行っていますから、それより前にwait指示文で②、④の計算の終了を待つ必要があるわけです。
​
114, 115行目で先に受信関数を呼んでいるのはおかしい気がするかもしれませんが、これは良く用いられる手法です。MPI_Recvが「受信」であるとするならば、MPI_Irecvは「受信準備」というべき関数で、この関数呼び出し以降のデータが送られてきたタイミングで受け取ることができます。

​受信準備を先に済ませた方が効率がいいので、114〜117行目はこのような順序になっています。これらの通信は119行目のMPI_Waitallで完了します。それより1行後の120行目のwait指示文で③の終了を待ちますので、これにより③の計算と②、④の通信のオーバーラップが達成できるのです。
画像
図9:A100 GPU 8枚を用いた性能評価
今回作った実装を前回の実装と比較したものです。

GPU数が少ない時は大差ないですが、8 GPU実行時には大きな差が出てきました。

一見細かい最適化ですが、このくらいの性能差が生まれてしまうのが難しいところですね。

< 1ヵ月間有効のスパコンお試しアカウント >
​

東京大学情報基盤センターでは、教育の一環として、制限はあるものの一ヵ月の間有効なスパコンアカウントを提供しています。
現在3つのスパコンが運用されていますが、そのうちReedbushと呼ばれるスパコンには、一世代前のものではありますがGPUが搭載されていて、OpenACCを使える環境も整っています。
自分でどんどん自習したい場合は、ご利用を考えてみてください。

トライアルアカウント申し込みページ
https://www.cc.u-tokyo.ac.jp/guide/trial/free_trial.php

< 過去の講習会の資料やプログラム公開中 >
東大センターが行った過去のOpenACCに関する講習会の資料やプログラムも公開されていますので、自習する場合にはぜひご利用ください。

講習会ページ ※オンライン講習会 定期開催中!
https://www.cc.u-tokyo.ac.jp/events/lectures/

講習会で用いているプログラム
https://www.dropbox.com/s/z4fmc4ibdggdi0y/openacc_samples.tar.gz?dl=0​

コメントはクローズされています。

    著者

    東京大学
    助教 星野 哲也 先生
    <略歴>
    ​​2016年~現在:東京大学
    情報基盤センター
    スーパーコンピューティング研究部門 助教
    2018年:東京工業大学
    ​大学院情報理工学研究科 数理・計算科学専攻 博士課程修了 博士(理学)

    アーカイブ
    中級編
    第4回(2022年2月)

    第3回(2021年12月)
    ​第2回(2021年9月)
    ​第1回(2021年7月)

    ​
    初級編 もくじ ≫
    ​中級編 もくじ ≫

    RSS フィード

Picture
GDEPソリューションズ株式会社
東京都文京区本郷三丁目34番3号 本郷第一ビル8階
TEL:03-5802-7050
・NVIDIA認定 Elite Partner [最上位レベル]
・NVIDIA Advanced Technology Program 達成  [DGX 販売資格]
・東京都公安委員会 古物営業許可番号
 第305471905562号
≫ 新着情報
≫ GPU2021開催概要
​
GPU製品
​≫ 即納モデル
≫ NVIDIA GPU一覧
 ≫NVDIA RTX スペック比較

≫ GPUレンタル一覧
≫ GPU年定額プラン
≫ AI・データサイエンスおすすめ
≫ 数値計算・解析おすすめ一覧
≫ NVIDIA A100搭載 SM740GP


​ストレージ
​≫ Synology
≫ DDN STORAGE
≫ PURESTORAGE
​
HPC
≫ HPC Workstation
≫ HPCおすすめGPUサーバー
≫ AXXE-L by XTREME-D
≫ NVIDIA HPC SDK
≫ プログラム高速化サービス
クラウド製品
​≫ セキュリティ
≫ 仮想化
≫ リモートアクセス

≫ ハイブリッドクラウドNAS
≫ クラウドストレージ
​
​GPUコラム
≫ GPUプログラミング入門
≫ GPU Technology for CG/AI
≫ シリコンバレー発信 New Technology Repot
≫ ツブ子が聞く・見る・行く
​

導入事例
≫ DGX SYSTEMS
≫ GPU Computing
会社情報
≫ ごあいさつ
≫ 会社概要
≫ アクセスマップ
≫ 採用情報
​
≫ お問い合わせ
​
≫ 個人情報の取扱いについて
≫ 利用規約

​
≫ メルマガを購読する
グループ会社
Prometech Softwareサイト
©2021 GDEP Solutions,Inc.
  • Home
    • 新着情報一覧
    • NVIDIA NEWS
    • GPU2021 開催概要 >
      • Day1 AI & GPU セッション
      • Day2 イメージングAI
      • Day3 GPUスパコン
      • 講演レポート | Denso
      • 過去開催 >
        • GPU2020
        • GPU2019
  • GPU製品
    • 即納モデル
    • NVIDIA GPU 一覧 >
      • NVIDIA H100
      • NVIDIA A100
      • NVIDIA RTX スペック比較 >
        • NVIDIA RTX A6000
        • NVIDIA RTX A5000
        • NVIDIA RTX A4500
        • NVIDIA RTX A4000
        • NVIDIA RTX A2000
      • Quadro GV100
    • GPUレンタル一覧
    • GPU年定額プラン
    • AI・データサイエンスおすすめ一覧 >
      • NVIDIA DGX H100
      • NVIDIA DGX A100
      • DGX STATION A100
      • HP Z8 G4 Workstation
      • HP ZBook Fury17G7 Mobile Workstation
      • Dell Precision 7920 Tower
      • DeepLearning BOXⅡ
      • DeepLearning STATION
      • NVIDIA EGX サーバー
      • HITACHI SR24000
    • 数値計算・解析おすすめ一覧 >
      • HP Z4 G4 Workstation
      • HP Z8 G4 解析ソフトウェア動作確認済みモデル
      • Supermicro 7049GP
    • NVIDIA A100搭載 Supermicro 740GP
  • ストレージ
    • Synology
    • DDN STORAGE
    • PURESTORAGE
  • HPC
    • HPC Workstation
    • HPCおすすめGPUサーバー
    • HPC SIサービス
    • AXXE-L by XTREME-D
    • NVIDIA HPC SDK
    • プログラム高速化サービス
  • クラウド製品
    • セキュリティ >
      • KernelCare
    • 仮想化 >
      • Login VSI
      • Login PI
    • リモートアクセス >
      • FastX
      • NiceDCV
      • NoMachine
    • ハイブリッドクラウドNAS >
      • Morro Data
    • クラウドストレージ >
      • クラウドストレージ Wasabi
  • GPUコラム / 導入事例
    • GPUプログラミング >
      • 初級編
      • 中級編 >
        • 第4回:MPI+OpenACC実装における計算と通信のオーバーラップ
        • 第3回:拡散現象シミュレーションのおさらい
        • 第2回:簡単なOpenACC + MPI コードで考える
        • 第1回:複数のGPUを使う方法とは?
    • GPU Technology for CG/AI >
      • 深層学習を利用した画像処理・必要なGPU性能
      • トランスフォーマー 最近流行のニューラルネットワーク
      • GAN Inversion による写実的画像生成の制御
      • 深層学習におけるアノテーションコストを抑えるための取り組み Active Learning
      • 深層学習に基づく人物画像の再照明
      • GPUの起源と進化
      • AlphaGo とその後
      • CUDAを用いたシンプルなパストレーシング
      • 流体シミュレーションの応用
      • GPUを用いた高速レンダリング
      • GPUを基盤としたCG/AIの技術進化
    • シリコンバレー発信 New Technology Report >
      • 最新記事から
    • ツブ子が聞く・見る・行く! >
      • 見る!NVIDIA RTX A6000
      • 聞く!NVIDIA DGX A100
      • 見る!NVIDIA A100 Tensor Core GPU
    • 導入事例 >
      • DGX SYSTEMS >
        • NVIDIA DGX A100 | 金沢大学
      • GPU Computing
  • 会社情報
    • ごあいさつ
    • 会社概要
    • アクセスマップ
    • 採用情報
  • お問い合わせ