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プログラミング

第10回

画像

第10回:OpenACCでできる最適化とは?

11/30/2020

 
前回は、OpenACCプログラムにおけるGPU向けライブラリプログラムの呼び出し方の解説に加え、行列積のような計算量オーダーの大きな計算パターンにおいては、GPUの性能を発揮するためのプログラムの最適化を十分に行えず、満足な性能が得られない可能性があることを解説しました。

​今回はここをもう少し掘り下げて、GPUプログラミングにおける最適化とOpenACCの関係性について解説します。

OpenACCでできる最適化とは?

アプリケーションプログラムを極限まで高速化しようと思ったら、CPUでもGPUでも最適化は欠かせません。
​
では、OpenACCで可能な最適化、不可能な最適化とはどんなものがあるでしょうか。代表的な最適化を表にしてみましょう。
表1:OpenACCでできる最適化・できない最適化
 
OpenACC
CUDA
Pinned memory の利用
(使うとCPU-GPU間のデータ転送速度が上がる)
△  ※1
〇
GPUのスレッド数の調整
△  ※2
〇
L1キャッシュやレジスタ利用の効率化
△  ※3
〇
Shared memory の利用
△  ※4
〇
Shuffle 命令の利用
×
〇
※1 OpenACCとしてはサポートされてないが、PGI compiler の機能として一応使える。(その場合は全てPinned memory として扱われる)

※2 多重ループに対するスレッド割り当てをCUDAほど細かく調整することはできない。意図通りのスレッド割り当てをするためには工夫(多重ループの一重化など)が必要なケースが多い。

※3 NVIDIAのGPUはL1キャッシュのサイズを調整できる作りになっているが、OpenACCでサイズ調整はできない。

※4 OpenACCでも、限定的な状況でのみ使用できるcache指示文というものを使うと、一応shared memory が利用されるので、全く使えないというと嘘になるが、基本的には使えない。
…と、よく使われる最適化でも、ほとんどに制限がかかっています。

このうち最も影響が大きいのが、Shared memoryやShuffle命令の制限です。
これらは、スレッドブロックやWarpと呼ばれる、スレッドの小グループ内における、データのやりとりを行うための機能です。
​どのくらい性能に影響を与えるか、行列積プログラムを例に見てみましょう。
まず、図1がなんの最適化も施していないコード(Baseline)です。
カーネル部分だけみると、OpenACCの実装とCUDAの実装で大差ないですね(CUDAは関数呼び出し部分で色々処理が入る)。

図2が性能を表すグラフですが、Baselineのコードに関してはほとんど変わらないです。

一方で、図3の最適化を行ったコード(Optimized)に関してはどうでしょうか。
ここではキャッシュメモリまたはshared memoryを用いたブロッキング(ここでは詳しく解説しません。「行列積 キャッシュブロッキング」などで検索してください。)と、ループアンローリング(同じく検索してください。)と呼ばれる最適化を行っています。

​OpenACC版とCUDA版で、4倍程の差がついてしまっていますね。限界まで最適化された行列積と言える、CUBLASの性能と比べると、その差はさらに大きいです。
この行列積のプログラムのように、計算量オーダーの大きな計算パターンは、各種最適化によりGPUの限界に近い演算性能を達成し得ます。
特にshared memoryなどの役割は大きく、OpenACCで限界性能を目指すのは難しいと言えます。
画像
図1:行列積のOpenACC/CUDA実装。
画像
図2:P100 GPUにおける、行列積のOpenACC/CUDA実装の性能。
(なお、コンパイラの条件を合わせるために、本結果はOpenACC/CUDA両者ともFortranにより実装し、
PGI Compilerを用いた際のものです。実装内容はC版と同等。)
画像
図3:行列積のOpenACC/CUDA実装の最適化版。
​(この実装は簡単のために、行列サイズNが2のべき乗であることを前提とした実装となっています。)
一方で、shared memory の利用があまり重要ではない拡散方程式のプログラムなどにおいては、CUDAとほとんど遜色のない性能が得られます(図5)
​(大変面倒くさい最適化である、テンポラルブロッキングを実装する場合には、やはりshared memoryが必要となるため、性能差は大きくなると思われる。)。
​

OpenACCの最適化版コードは図4です。
CUDA版もほとんど同様の実装をしています。
​最適化版の実装においても、行列積プログラム程の極端な性能差はありませんね。

​図5のグラフ右軸は、メモリバンド幅性能を表しています。

P100 GPUの場合、メモリの中でただデータをコピーする際の性能(おおよそメモリ読み書きの限界性能と思ってよい)が550GB/sec程度ですので、このプログラムはメモリ転送性能をほとんど使いきっています。

​計算量オーダーの小さい計算パターンにおいては、この拡散方程式のプログラムのようにメモリの性能が重要になり、またshared memoryを利用したデータの再利用の最適化が効きづらく、従ってOpenACCでも性能が得やすい傾向にあります。
画像
図4:拡散方程式プログラムの
​OpenACC最適化版の実装。
とは言え、図3や図4を見ていただければわかるように、プログラムの最適化は非常に大変です!

アプリケーション中の全てのループにこのような最適化を施していては、いつまでたってもアプリケーションの開発が終わりません。

故に私は、
  1. まずはアプリケーション全体をOpenACCで並列化
  2. 実行時間が大きい場所を探し、そこだけCUDAに切り替えて最適化

という、OpenACC+CUDAの利用を推奨しているのです!
画像
図5:P100 GPUにおける拡散方程式プログラムのOpenACC/CUDA実装の性能。
前回解説したhost_data指示文を使えば、CUDAの関数も簡単に呼び出せます。
​

​限界の性能を求める場合、ぜひCUDAも覚えてくださいね。

< 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年:東京工業大学
    ​大学院情報理工学研究科 数理・計算科学専攻 博士課程修了 博士(理学)

    アーカイブ
    第1回(2020年1月)
    ​第2回(2020年3月)
    第3回(2020年4月)
    第4回(2020年5月)
    ​第5回(2020年6月)
    ​
    第6回(2020年7月)
    第7回(2020年8月)
    第8回(2020年9月)
    第9回(2020年10月)
    第10回(2020年11月)

    第11回(2020年12月)
    ​
    第12回(2021年3月)
    ​一覧で見る ≫
    ​一覧で見る ≫

    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
  • 会社情報
    • ごあいさつ
    • 会社概要
    • アクセスマップ
    • 採用情報
  • お問い合わせ