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

第1回

画像

第1回:今あるプログラムを楽に速くするためには?

1/22/2020

 
「GPUが速いのは知ってるけれど、GPUプログラミングは難し過ぎる!」と思っているそこのあなた!
​OpenACCという並列プログラミングモデルをご存じでしょうか。

OpenACCは、GPUプログラミング(正確には演算加速装置向けのプログラミング)をより楽にするために開発された並列プログラミングモデルです。
​OpenACCは、以下のような方にお勧めです。

 ✓ これからGPUプログラミングを始める初心者の方
 ✓ GPUプログラミングの工数をとにかく減らしたい私のような方

​​本記事は主に前者の人に向けて、OpenACCを紹介します。

そもそもなぜ、GPUプログラミングは難しいのか

わざわざGPUプログラミングをする目的は、プログラムの高速化にあるわけですよね?
​
しかしプログラムの高速化というのは、それだけで一研究分野(高性能計算という)を築けてしまうくらい複雑なのです。
とりわけGPUは数千個の演算コアを扱う​並列計算が必須です。
​
演算コアというのは、足し算や引き算などをしてくれる小人さんだと思ってください。

​
​GPUの高い性能は、小人さん全員の力を合わせることで実現されますから、数千人の小人さんに効率良く仕事を分散する、並列プログラミングが必須となります。
​
この並列プログラミングというのがとても難しいのです!(図1)
画像
図1:数千人の小人さんが協力して仕事をこなせるよう、適切な指示を出すのはとても大変!

ではなぜ、OpenACCは簡単か

OpenACCが簡単な理由は単純です。
OpenACCでは難しい並列処理を書けないからです!

その代わり、OpenACCの型にはまった並列処理であれば、非常にシンプルに記述できます。

​型にはまった処理というのは、①小人さんそれぞれの担当領域で、②全員同じ仕事をする並列処理のことです(図2)。
画像
図2:OpenACCで記述可能な並列処理
​(庭の草むしりなどのイメージ)
逆に書けない難しい並列処理というのは、小人さん同士のコミュニケーションを必要とする処理です。
​

​小人1の仕事が終わったら小人2が~なんて処理は、小人1が「終わったよ!」と声を掛ける必要がありますから、OpenACCでは基本的には書けません。

具体的には、どんな処理ならOpenACCで書けるのか

通常、GPUでの高速化は、プログラム中の重たいループ構造を並列実行することで達成します(図3)。
画像
図3:GPUでのプログラム実行イメージ。
​ループ構造部分のみ抜き出して、GPUに処理を任せる。
OpenACCでもループ構造を並列化しますが、前述のとおり制限があります。
​NVIDIA社のGPU向けの専用言語、CUDAと比較してみましょう。
​

​まず前提として、なんでもかんでもGPUで高速化できるわけではありません(図4)。
​GPUで高速化可能なのは世の中にあるループの一部であり、OpenACCで高速化可能なループは、さらにその一部に過ぎません。
画像
図4:GPUで高速化可能なループと、​OpenACCで高速化可能なループ。
OpenACCでは、GPUで高速化可能なループを以下の3つに分類します(図5)。
  • データ独立なループ
  • リダクション(縮約演算)ループ
  • それ以外(データ依存のあるループ)​
画像
図5:OpenACCで高速化できるループとできないループ。
データ独立なループとは、ちょうど図2のように並列処理可能なループです。

​ループの i番目の処理をi番の小人さんが担当するとしましょう。
すると、配列AとBとCの i番目の要素が、i番の小人さんの担当領域になります。
そしてこの担当領域は、他の小人さんと独立¹ ですね?
¹ ただし、配列AとBとCがaliasを持たない場合。Aliasについては後日解説。
​

データ独立なループは、ループをどのような順序で実行しても結果が変わらないという特徴があるため、明らかに並列実行できます。
​OpenACCであれば非常に簡単に並列化できますし、CUDAでも頭を使わずに並列化できます(記述量が多く面倒だけど)。

もう一つ、リダクション(縮約演算)タイプのループ(図5中央)があります。
​例によってループの i番目の処理を i番の小人さんが担当すると、sumは全員の担当領域となるため、依存関係があるように見えます。
しかし足し算の性質上、どのような順序でループを実行しても答えは変わりません。

​このようなループも、OpenACCでは非常に簡単に並列化できます。一方、CUDAを使ってリダクションを実装するのは、非常に難しいです。

一方で、図5の一番右、データ依存のあるループの場合はどうでしょう。
​同じようにループの i番目の処理を i番の小人さんが担当するとしましょう。
​

すると、i番目の小人さんが担当する領域B[i+1], B[i]と、i+1番目の小人さんが担当する領域B[i+2],B[i+1]が一部重なってしまいます。
このループを正しく実行するためには、i番目の小人さんの計算が終わってから、i+1番目の小人さんが計算しなくてはなりません。こういったループは、ループの実行順に依存関係があり、並列化が困難なループです。

​OpenACCで高速化するのはほぼ不可能ですが、CUDAであれば、shared memoryやwarp shuffleと呼ばれるGPUの機能を駆使することにより、高速実装可能です(これを自在に実装できる人々をCUDAエキスパートと呼びます)。

OpenACCには大きな制約があるようだが、​OpenACCでGPUプログラミングを始めて大丈夫か

NVIDIAのGPUをターゲットとするなら、最終的にはOpenACC+CUDAという書き方が推奨です。

OpenACCは初めからそれを前提として設計されていて、簡単にCUDAと組み合わせることができます。
数値計算を行うアプリケーションは多数のループから成りますが、経験的にそのほとんどはデータ独立なループやリダクションループです。

​まずOpenACCでアプリケーションのGPU向け実装を進め、それで満足な性能が得られればそれでいいですし、データ依存のあるループのせいなどで性能が十分でないならば、その部分のみをCUDA化するなり、ライブラリを呼び出すなりすれば良いのです。

​データ独立なループとリダクションループに限れば、OpenACC実装の性能はCUDAと遜色なく、圧倒的にシンプルに記述できます。故にCUDAエキスパートであっても、工期短縮のためにOpenACCも利用しているのです。

​結局CUDAも覚えなくてはならないようだというのはネガティブな情報かもしれませんが、OpenACCを覚えておけばかなり楽ができますので、一緒に覚えていきましょう。

​次回以降は、具体的なOpenACCの使い方について解説していきます。

    著者

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

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