GDEP Solutions, Inc.
  • Home
    • 新着情報一覧
    • GPU2020 開催概要 >
      • Day1-AI&GPU
      • Day2-ImagingAI
      • Day3-GPUスパコン
      • 過去開催 GPU2019
  • GPU製品
    • 3月納品可能!GPU搭載ワークステーション
    • AI・データサイエンスおすすめ一覧 >
      • 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 GPU 一覧 >
      • NVIDIA RTX A6000
      • Quadro RTX8000
      • Quadro GV100
      • NVIDIA A100
      • NVIDIA V100S
      • NVIDIA T4
    • GPUレンタル一覧
    • GPU年定額プラン
  • ストレージ
    • ストレージ一覧 >
      • Synology
      • DDN STORAGE
      • PURESTORAGE
  • HPC
    • HPC Workstation
    • AXXE-L by XTREME-D
    • NVIDIA HPC SDK
    • 高速化受託サービス
  • クラウド製品
    • セキュリティ >
      • KernelCare
    • 仮想化 >
      • Login VSI
      • Login PI
    • リモートアクセス >
      • FastX
      • NiceDCV
      • NoMachine
    • ハイブリッドクラウドNAS >
      • Morro Data
    • クラウドストレージ
  • GPUコラム / 導入事例
    • GPUプログラミング入門 >
      • 第12回:OpenACCを使ったICCG法の高速化
      • 第11回:OpenACCを使ったICCG法の高速化
      • 第10回:OpenACCでできる最適化とは?
      • 第9回:速くならない?とりあえずライブラリに頼ろう!
      • 第8回:OpenACCでも扱えるけど面倒な構造体
      • 第7回:今あるプログラムを楽に速くするためには
      • 第6回:プログラムの実行時間を確認しよう
      • 第5回:コンパイラのメッセージを確認しよう
      • 第4回:拡散現象シミュレーションのOpenACC化
      • 第3回:データ転送の最小化はほとんどのアプリケーションで必須
      • 第2回:その前に知っておきたいGPUの特長
      • 第1回:今あるプログラムを楽に速くするためには?
    • GPU Technology for CG/AI >
      • GPUの起源と進化
      • AlphaGo とその後
      • CUDAを用いたシンプルなパストレーシング
      • 流体シミュレーションの応用
      • GPUを用いた高速レンダリング
      • GPUを基盤としたCG/AIの技術進化
    • ツブ子が聞く・見る・行く! >
      • 見る!NVIDIA RTX A6000
      • 聞く!NVIDIA DGX A100
      • 見る!NVIDIA A100 Tensor Core GPU
    • 導入事例 >
      • DGX SYSTEMS
      • GPU Computing
  • 会社情報
    • ごあいさつ
    • 会社概要
    • アクセスマップ
    • 採用情報
  • お問い合わせ

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

第3回

画像

第3回:データ転送の最小化はほとんどのアプリケーションで必須

4/28/2020

 
前回は、図1のプログラムを例にして、OpenACCの主要な3つの指示文:kernels, data, loop指示文を紹介しました。
​今回はプログラムの効率について考えてみましょう。
画像
図1: OpenACCの主要指示文を使ったサンプルプログラム

OpenACCによるデータ転送の最小化

OpenACCを使うからには、元のCPU向けのプログラムより速くならなきゃ意味がないですよね!

しかしOpenACCには、答えは正しいものの非常に遅いプログラムを簡単に書けてしまうという落とし穴があります。
例えば、図1の5行目のdata指示文を、6行目のfor文の内側、7行目のkernelsのすぐ上に記述したらどうなるでしょう。
​
​このような変更を行った場合、15行目のprintfで出力される答えは変わらないにも関わらず、100倍近く遅くなってしまいます!

​理由は簡単。
​​本来1回でよかったはずのdata指示文によるデータ転送を、tのループで100回繰り返してしまうからです。
​前回と同じ図(図2)をもう一度​掲載します。
​これを見てもらえればわかるように、CPUとGPUの間のデータ転送性能は、CPUのメモリのデータ転送性能より低いのです。

つまり、GPUで計算を行う度にデータ転送を行っていては、CPUより速くなるはずがないのです!

​さて、それを踏まえてうえで、もう一度図1の効率化を考えてみましょう。

​このプログラムでは4行目のループで配列aを初期化していますが、これ、わざわざCPUでやる必要はないですよね?
​図3のように修正してみましょう​。
画像
図2: CPUとGPUの間のデータ転送には、
​長くて狭い道を通らなくてはならない!

​
画像
図3: 初期化部分もOpenACCで並列化。それに伴い、data指示文を変更。
これで、図1の4行目のループがGPUで並列実行されます(図3の6-8行目)。

それによっても多少速くなりますが、ここで重要なのはdata指示文の変化です。
まず、初期化部分を並列化したことに伴い、data指示文がその部分もカバーするように移動したことがわかります。

さらにdata指示文の指示子がcopyからcopyoutに変更されています。copyと指定された配列は、data指示文の始まりでCPUからGPUへ、終わりでGPUからCPUへコピーされますが、copyoutの場合にはGPUからCPUへのコピーのみが行われます。

​図3では配列aの初期化をGPUで行っていますから、CPUからGPUへのコピーは必要ないのです。この修正を行うことで、CPU-GPU間のデータ転送コストを半分にすることができました!

​この調子で、sumを計算するループについても並列化してしまいましょう。図4です。
画像
図4:sumの計算ループもOpenACCで並列化。それに伴い、data指示文を変更。
Sumを計算するループは、リダクションと呼ばれる演算パターンですね。

データ独立ではないのでindependent指示子は指定できませんが、reduction指示子を使うことで並列化することができる特殊なパターンです。
​詳しくは次回以降に解説しますが、変数sumのCPU-GPU間のデータ転送はOpenACCが勝手にやってくれます。

重要なのはまた、data指示文の変化です。
リダクションループを囲むように移動したのと同時に、今度はcopyoutからcreateに代わっています。
createと指定された配列はGPU上にmallocされるだけで、CPU-GPU間のコピーは一切行われません。

このプログラムでは変数sumの値さえわかれば配列aは必要ないわけですから、GPUからCPUへのデータコピーも必要ないわけです。変数sumのデータコピーは勝手に行われているわけですが、10万要素の配列aをコピーするよりは遥かに短い時間で済みます。
これによって、CPU-GPU間のデータ転送はほぼ削減できました!
ちなみに、data指示文の指示子には以下のようなものがあります。
​これらは、メモリ領域の確保(malloc)、CPUからGPUへの入力(CPU->GPU)、GPUからCPUへの出力(CPU<-GPU)、メモリ領域の開放(free)の組み合わせです。
  • Copy : malloc, CPU->GPU, CPU<-GPU, free
  • Copyin : malloc, CPU->GPU, free
  • Copyout : malloc, CPU<-GPU, free
  • Create : malloc, free

データ転送の最小化はほとんどのアプリケーションで必須!

今回扱ったのは、main文ひとつの非常に小さなプログラムでしたが、多くのシミュレーションプログラムでも同じような手順でOpenACC実装を進めていきます。

​多くの数値シミュレーションでは、時間発展のループが一番外側にあり、その内側で例えばx,y,zの三重ループを並列化します。

​従って、データの転送を最小化するためには、時間発展ループの外側まで、data指示文を追いやる必要があるのです。
​
​次回以降、簡単な拡散方程式を題材として、OpenACC化の解説を行います。

一ヵ月間有効のスパコンお試しアカウント

東京大学情報基盤センターでは、教育の一環として、制限はあるものの一ヵ月の間有効なスパコンアカウントを提供しています。

現在3つのスパコンが運用されていますが、そのうちReedbushと呼ばれるスパコンには、一世代前のものではありますがGPUが搭載されていて、OpenACCを使える環境も整っています。

自分でどんどん自習したい場合は、ご利用を考えてみてください。

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

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

講習会ページ
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年4月)
    第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号
≫ 新着情報
​

GPU製品
≫ 3月納品可能!GPU搭載ワークステーション
≫ AI・データサイエンスおすすめ
≫ 数値計算・解析おすすめ一覧
≫ NVIDIA GPU一覧

≫ GPUレンタル一覧
≫ GPU年定額プラン

HPC
≫ HPC Workstation
≫ AXXE-L by XTREME-D
≫ NVIDIA HPC SDK
≫ 高速化 受託サービス
​ストレージ
​≫ ストレージ一覧

クラウド製品
​≫ セキュリティ
≫ 仮想化
≫ リモートアクセス

≫ ハイブリッドクラウドNAS

​GPUコラム/導入事例
≫ GPUプログラミング入門
≫ GPU Technology for CG/AI
≫ ツブ子が聞く・見る・行く
≫ 導入事例
会社情報
≫ ごあいさつ
≫ 会社概要
≫ アクセスマップ
≫ 採用情報
​
≫ お問い合わせ
​
≫ 個人情報の取扱いについて
≫ 利用規約
©2020 GDEP Solutions,Inc.
  • Home
    • 新着情報一覧
    • GPU2020 開催概要 >
      • Day1-AI&GPU
      • Day2-ImagingAI
      • Day3-GPUスパコン
      • 過去開催 GPU2019
  • GPU製品
    • 3月納品可能!GPU搭載ワークステーション
    • AI・データサイエンスおすすめ一覧 >
      • 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 GPU 一覧 >
      • NVIDIA RTX A6000
      • Quadro RTX8000
      • Quadro GV100
      • NVIDIA A100
      • NVIDIA V100S
      • NVIDIA T4
    • GPUレンタル一覧
    • GPU年定額プラン
  • ストレージ
    • ストレージ一覧 >
      • Synology
      • DDN STORAGE
      • PURESTORAGE
  • HPC
    • HPC Workstation
    • AXXE-L by XTREME-D
    • NVIDIA HPC SDK
    • 高速化受託サービス
  • クラウド製品
    • セキュリティ >
      • KernelCare
    • 仮想化 >
      • Login VSI
      • Login PI
    • リモートアクセス >
      • FastX
      • NiceDCV
      • NoMachine
    • ハイブリッドクラウドNAS >
      • Morro Data
    • クラウドストレージ
  • GPUコラム / 導入事例
    • GPUプログラミング入門 >
      • 第12回:OpenACCを使ったICCG法の高速化
      • 第11回:OpenACCを使ったICCG法の高速化
      • 第10回:OpenACCでできる最適化とは?
      • 第9回:速くならない?とりあえずライブラリに頼ろう!
      • 第8回:OpenACCでも扱えるけど面倒な構造体
      • 第7回:今あるプログラムを楽に速くするためには
      • 第6回:プログラムの実行時間を確認しよう
      • 第5回:コンパイラのメッセージを確認しよう
      • 第4回:拡散現象シミュレーションのOpenACC化
      • 第3回:データ転送の最小化はほとんどのアプリケーションで必須
      • 第2回:その前に知っておきたいGPUの特長
      • 第1回:今あるプログラムを楽に速くするためには?
    • GPU Technology for CG/AI >
      • GPUの起源と進化
      • AlphaGo とその後
      • CUDAを用いたシンプルなパストレーシング
      • 流体シミュレーションの応用
      • GPUを用いた高速レンダリング
      • GPUを基盤としたCG/AIの技術進化
    • ツブ子が聞く・見る・行く! >
      • 見る!NVIDIA RTX A6000
      • 聞く!NVIDIA DGX A100
      • 見る!NVIDIA A100 Tensor Core GPU
    • 導入事例 >
      • DGX SYSTEMS
      • GPU Computing
  • 会社情報
    • ごあいさつ
    • 会社概要
    • アクセスマップ
    • 採用情報
  • お問い合わせ