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

第2回

画像

第2回:その前に知っておきたいGPUの特徴

3/26/2020

 
前回の記事では、GPUプログラミングにおけるOpenACCの立ち位置や、OpenACCで記述可能な並列処理など、OpenACCの概要を説明しました。
​今回からは、具体的なOpenACCの使い方について解説していきます。

その前に知っておきたいGPUの特徴

具体的なOpenACCの使い方を解説する前に、最低限知っておいてほしいGPUの特徴があります。これはCUDAを使う場合にも同様です。

 ✓ GPUにはたくさんのコアがあり、並列計算が必須。
 ✓ CPUとGPUの記憶領域(メモリ)が物理的に独立であるため、CPUとGPUの間のデータ転送が必須。

並列計算が必須なことについては前回説明しました。
それと同じくらい重要なこととして、CPU-GPU間のデータ転送があります。

計算はオペレーティングシステム(WindowsやMac OSなど)の動いているCPUから始まりますので、GPUでの計算に必要なデータはCPUから転送しなくてはならないのです。
ここで問題なのが、CPU-GPU間のデータ転送が遅いことなのです!

​CPUのデータをGPUに複製するスピードは、GPUの中でデータを複製する場合より2桁遅いと思っていいです。従ってGPUプログラミングでは、CPU-GPU間のデータ転送を最小化する最適化が必須となります!
画像
図1:CPUとGPUの間のデータ転送には、長くて狭い道を通らなくてはならない!

最低限覚えるべきOpenACCの3つの指示文

さて、ここまでに説明したGPUの特徴を踏まえると、GPUプログラミングでは以下が必要になります。
​
 1.  GPUプログラミングではプログラム中の重たいループ構造を抜き出して高速化するため、
  プログラム中のどの部分をGPUで実行するかを決める

 2. 多数の小人さん(以降ではスレッドっと言います)に仕事を割り付けるため、ループ構造を並列化する

 3. CPUとGPUのメモリが物理的に分かれており、かつデータ転送に時間がかかるため、
  CPU-GPU間のデータの転送とその最小化をする 

​これをOpenACCでは、それぞれ対応する以下の三つの指示文で記述します。
 
 Ⅰ. kernels指示文
 
 Ⅱ. loop指示文
 
​ Ⅲ. data 指示文

​ちなみに指示文とは、プログラム中に挿入する特殊なコメント行のことで、コンパイラに指示を行うために使われます。指示文に対応していないコンパイラでは単にコメントとして扱われるため、元のプログラムを壊さないことが利点です。OpenACCの指示文は、すでに出来上がったC/C++/Fortranのプログラムに挿入することで、上記の1,2,3を指示します。

百聞は一見にしかず!実際のコード例を用いて説明しましょう。
画像
​図2:OpenACCの主要指示文を使ったサンプルプログラム
図2は、OpenACCの中で最も重要な指示文である、kernels, loop, data 指示文を利用したサンプルプログラムです。
5行目がdata指示文、7行目がkernels指示文、8行目がloop指示文です。

まずはkernels指示文ですが、これは直後のループ構造に作用します。
図2の場合、9行目から11行目のforループ部分がGPU上で実行されることとなります。
次にdata指示文、これは直後の構造ブロック(“{}”で囲まれた部分)に作用します。

​図2の場合、6行目の実行直前に、CPUのメモリからGPUのメモリへ配列aをコピーします。そして12行目終了直後に、今度はGPUのメモリからCPUのメモリへ配列aをコピーします。

​このように、GPU上での計算と、CPU-GPU間のデータ移動は、kernels指示文とdata指示文を用いることによって、バラバラに行うことができます。ただし、data指示文は必ずkernels指示文の外側になくてはなりません。
​まずデータを準備しないことには計算もできませんからね。
​ちなみに、領域の設定方法はC言語とFortranの場合で異なります(図3)。
画像
図3:C言語とFortranにおける、領域設定方法の違い。
最後にloop指示文ですが、これはkernels指示文の内側に現れるループが、どのような性質を持ったループであるかを示すために主に使われます。故に、kernels指示文の内側でしか使えません。
図2では、9行目のループがindependentなループ、すなわちデータ独立であり並列化可能なループであることを示しています。

結局、図2のプログラムでは、5行目において一度だけ、CPUからGPUに配列aをコピーし、9行目から11行目のループがGPU上で並列に100回実行され、12行目で一度だけ、GPUからCPUに配列aをコピーし、CPU側で結果が得られる。
というプログラムになっています。

今回は、GPUプログラミングにおいて必須である、GPUで実行する場所を決めること、ループを並列化すること、CPU-GPU間のデータ移動をすること、を可能にする、kernels指示文、loop指示文、data指示文について、非常に簡単なプログラム例を用いて紹介しました。

しかし図2を見ていただくと、このプログラムはもっと工夫の余地がありそうですよね?
​(4行目や14行目も並列化できるのでは?データ転送をもっと少なくできるのでは?)

次回は、この簡単なプログラムを用いて、プログラムの性能を意識しながら、kernels, loop, data指示文についてのさらに詳しい使い方を紹介していきます。
画像
質問をいただいた方の中から毎月抽選で5名に、
​Amazonギフト券(500円)を進呈しています。

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

    略歴

    東京大学
    助教 星野 哲也 先生

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