GDEP Solutions, Inc.
  • Home
    • 新着情報一覧
    • GPU2020 開催概要 >
      • Day1-AI&GPU
      • Day2-ImagingAI
      • Day3-GPUスパコン
      • 過去開催 GPU2019
  • GPU製品
    • AI・データサイエンスおすすめ一覧 >
      • NVIDIA DGX A100
      • DGX STATION A100
      • HP Z8 G4
      • HP ZBook Fury17G7 Mobile Workstation
      • Dell Precision 7920 Tower
      • DeepLearning BOXⅡ
      • DeepLearning STATION
      • NVIDIA RTX サーバー
      • HITACHI SR24000
    • 数値計算・解析おすすめ一覧 >
      • HP Z4 G4
      • Supermicro 7049GP
    • NVIDIA GPU 一覧 >
      • NVIDIA RTX A6000
      • Quadro RTX8000
      • Quadro GV100
      • NVIDIA A100
      • NVIDIA V100S
      • NVIDIA T4
    • 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プログラミング入門 >
      • 第11回:OpenACCを使ったICCG法の高速化
      • 第10回:OpenACCでできる最適化とは?
      • 第9回:速くならない?とりあえずライブラリに頼ろう!
      • 第8回:OpenACCでも扱えるけど面倒な構造体
      • 第7回:今あるプログラムを楽に速くするためには
      • 第6回:プログラムの実行時間を確認しよう
      • 第5回:コンパイラのメッセージを確認しよう
      • 第4回:拡散現象シミュレーションのOpenACC化
      • 第3回:データ転送の最小化はほとんどのアプリケーションで必須
      • 第2回:その前に知っておきたいGPUの特長
      • 第1回:今あるプログラムを楽に速くするためには?
    • GPU Technology for CG/AI >
      • AlphaGo とその後
      • CUDAを用いたシンプルなパストレーシング
      • 流体シミュレーションの応用
      • GPUを用いた高速レンダリング
      • GPUを基盤としたCG/AIの技術進化
    • ツブ子が聞く・見る・行く! >
      • 聞く!NVIDIA DGX A100
      • 見る!NVIDIA A100 Tensor Core GPU
    • 導入事例 >
      • DGX SYSTEMS
      • GPU Computing
  • 会社情報
    • ごあいさつ
    • 会社概要
    • アクセスマップ
    • 採用情報
  • お問い合わせ

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

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

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

8/31/2020

 
今回で 拡散方程式のプログラム 例は終わりです。
ここまで学んだこと(+α)のまとめとして、何をすればどのくらい速くなるのかを見ていきます。

最適化の効果を確認しよう

ここまでで解説した指示文(+α)を使って最適化した場合、どのくらい速くなるのか確認してみましょう。

​図1のグラフは、東京大学のReedbushスパコン を使い、CPUとGPUの性能比較をしたものです。

​CPUはIntel Xeon E5-2695v4 (Broadwell-EP) を1ソケット(18 コア)、GPUはNVIDIA Tesla P100を1基使っています。
​いずれも2016年の導入当時最新のもので、少し世代の古いものですが、おおよその傾向は最新のものでも大きくは変わりません。
画像
図1:CPUとGPUの性能比較
図1の評価では、CPU向けの並列化はOpenMP、GPU向けの並列化はOpenACCまたはCUDAを使っています。

コンパイルにはそれぞれ、Intel compiler (icc –O3 –qopenmp)、PGI compiler (pgcc –O3 –acc –ta=tesla,cc60)、nvcc compiler (nvcc –O3 –arch=sm_60)を使っています。

グラフの縦軸はFlopsと呼ばれる指標で、一秒間に何回浮動小数点演算できたかを表しています。
つまり、数値が高い程、性能が良いということです。

左から2本のグラフが、CPUでの結果(1コアの場合と全18コアを使った場合)を表しています。
OpenMP版の実装では、#pragma omp parallel for の一行を挿入しただけですが、18コアを使うことによりおよそ14倍程度高速化しています。
一方で「GPU①:kernels, loop指示文で並列化」の実行では、初めからGPUの全コアを利用しています。
​それにもかかわらず性能はCPUの1コアを下回っています。
​

​これはここまでに説明してきた通り、CPUとGPUの間の冗長なデータ転送が発生してしまうためです(図2)。
画像
図2:GPU①の実装
これはGPU②(図3)のように、CPU-GPU間のデータ転送を最小化することで高速化できます。

​この時点で、CPUの18コア実装と比較して、13倍程度の性能を得られました!

​
画像
図3:GPU②の実装
ここまでは、今まで解説してきたことのおさらいです。
​

ここからは、OpenACC実装の性能をよりCUDA版に近づけるための+αについて、少しだけ解説します。

​GPU③(図4)は、その+αとして、gang, vectorによるGPUのスレッド割り当ての調整、asyncによる、CPU側のコストの隠蔽を行っています。
Gang, vectorによるスレッド割り当ての調整については、第五回の記事で少し触れました。
その時にも述べた通り、これを適切に設定することは難しいです。
解きたい問題のサイズによっても変わりますので、基本的にはコンパイラの自動的設定(gang, vectorを書かない場合には自動で設定される)に頼ってよいと思います。
​
​ただ、一般的に最も内側のループのvector値は32の倍数が良いです。

コンパイラのメッセージを見て、最も内側のループのvector値が32の倍数になっていないときは、利用を考えてみてください。
画像
図4:GPU③の実装
さてもう一方の asyncですが、これは非同期処理を行うための指示子です(図5)。
GPUのコアなどが余っているときに、別のカーネル同士を同時に実行するための指示子ですが、CPUがGPUのカーネル終了を待たなくなるという効果もあります。

実は、CPUがGPUを呼び出すときにかかる時間は馬鹿にならず、問題サイズが小さいときには特に性能に影響します。図4の最適化でasyncを使っているのは、このCPUがGPUカーネルを呼び出す時間を隠蔽するためでした。

今回の問題は1283サイズですが、1割程度性能に影響しています。なお、CUDAの場合デフォルトでもCPUはGPUの実行終了を待たないので、その分が OpenACC との差となっています。
画像
図5:asyncによる非同期実行のイメージ
今回は、OpenACCにおける最適化がどの程度の効果を示すのか、OpenMPによるCPU実行や、CUDA実装との比較により示しました。

拡散方程式のように、OpenACC で簡単に並列化できるプログラムであれば、CUDAと遜色ない性能を発揮できることがわかっていただけたかと思います。

なお、今回は指示文の変更による最適化のみを行いましたが、OpenMP版、OpenACC版、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月)
    ​一覧で見る ≫

    RSS フィード

Picture
GDEPソリューションズ株式会社
東京都文京区本郷三丁目34番3号 本郷第一ビル8階
TEL:03-5802-7050
・NVIDIA認定 Elite Partner [最上位レベル]
・NVIDIA Advanced Technology Program 達成  [DGX 販売資格]
・東京都公安委員会 古物営業許可番号
 第305471905562号
≫ 新着情報
​

GPU製品
≫ AI・データサイエンスおすすめ
≫ 数値計算・解析おすすめ
≫ NVIDIA 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製品
    • AI・データサイエンスおすすめ一覧 >
      • NVIDIA DGX A100
      • DGX STATION A100
      • HP Z8 G4
      • HP ZBook Fury17G7 Mobile Workstation
      • Dell Precision 7920 Tower
      • DeepLearning BOXⅡ
      • DeepLearning STATION
      • NVIDIA RTX サーバー
      • HITACHI SR24000
    • 数値計算・解析おすすめ一覧 >
      • HP Z4 G4
      • Supermicro 7049GP
    • NVIDIA GPU 一覧 >
      • NVIDIA RTX A6000
      • Quadro RTX8000
      • Quadro GV100
      • NVIDIA A100
      • NVIDIA V100S
      • NVIDIA T4
    • 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プログラミング入門 >
      • 第11回:OpenACCを使ったICCG法の高速化
      • 第10回:OpenACCでできる最適化とは?
      • 第9回:速くならない?とりあえずライブラリに頼ろう!
      • 第8回:OpenACCでも扱えるけど面倒な構造体
      • 第7回:今あるプログラムを楽に速くするためには
      • 第6回:プログラムの実行時間を確認しよう
      • 第5回:コンパイラのメッセージを確認しよう
      • 第4回:拡散現象シミュレーションのOpenACC化
      • 第3回:データ転送の最小化はほとんどのアプリケーションで必須
      • 第2回:その前に知っておきたいGPUの特長
      • 第1回:今あるプログラムを楽に速くするためには?
    • GPU Technology for CG/AI >
      • AlphaGo とその後
      • CUDAを用いたシンプルなパストレーシング
      • 流体シミュレーションの応用
      • GPUを用いた高速レンダリング
      • GPUを基盤としたCG/AIの技術進化
    • ツブ子が聞く・見る・行く! >
      • 聞く!NVIDIA DGX A100
      • 見る!NVIDIA A100 Tensor Core GPU
    • 導入事例 >
      • DGX SYSTEMS
      • GPU Computing
  • 会社情報
    • ごあいさつ
    • 会社概要
    • アクセスマップ
    • 採用情報
  • お問い合わせ