PGIコンパイラーによる ディレクティブベースのGPGPU

Slides:



Advertisements
Similar presentations
1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
Advertisements

G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
1 第5回 配列. 2 今回の目標 マクロ定義の効果を理解する。 1次元配列を理解する。 2次元配列を理解する。 ☆2 × 2の行列の行列式を求めるプログラ ムを作成する.
CPU/GPUを協調利用する ソフトウェア開発環境
在庫管理問題の動的計画法による 解法とCUDA を用いた高速化
初年次セミナー 第8回 データの入力.
連続系アルゴリズム演習 第2回 OpenMPによる課題.
CPUとGPUの 性能比較 -行列計算およびN体問題を用いて-
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
※ 対称密行列の固有値分解は特異値分解と共通点が多い
Chapter11-4(前半) 加藤健.
Intel AVX命令を用いた並列FFTの実現と評価
A Q R QR分解とは? → × ◆QR分解 QTQ = I (単位行列) ◆応用例 ◆主な計算方法 n m 今回はこの方法に注目
Fortran と有限差分法の 入門の入門の…
Ⅰ.電卓キーの基本的機能 00 0 1 2 3 6 ⑤ 4 9 8 7 M- MR MC + × % M+ - = ÷ C √ +/- GT
全体ミーティング (4/25) 村田雅之.
「R入門」 第1章: 紹介と準備 (思い切って簡単に) 第2章: 簡単な操作 10月10日(金) 発表者 新納浩幸.
シミュレーション物理5 運動方程式の方法: サブルーチンの使い方.
分散遺伝的アルゴリズムによる各種クラスタのベンチマーク
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
IT入門B2 ー 連立一次方程式 ー.
PCクラスタ上での 連立一次方程式の解の精度保証
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
TA 高田正法 B10 CPUを作る 2日目 SPIMのコンパイル TA 高田正法
スクリプト言語を用いたPHITSの連続実行
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
アスペクト指向プログラミングを用いたIDSオフロード
シミュレーション演習 G. 総合演習 (Mathematica演習) システム創成情報工学科
正方行列向け特異値分解の CUDAによる高速化
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
文献名 “Performance Tuning of a CFD Code on the Earth Simulator”
計算理工学基礎 「ハイパフォーマンスコンピューティングの基礎」
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
高速剰余算アルゴリズムとそのハードウェア実装についての研究
格子QCDにおけるGPU計算 広大理 尾崎裕介 共同研究者 石川健一.
AMR法フレームワークの様々なアーキテクチャへ向けた発展 研究背景と研究目的 Xeon Phi対応に向けた拡張
最適化の方法 中田育男著 コンパイラの構成と最適化 朝倉書店, 1999年 第11章.
KISSMEコード開発 完成まであと一歩。。かな?
コンピュータの歴史 〜計算速度の進歩〜 1E15M009-3 伊藤佳樹 1E15M035-2 柴田将馬 1E15M061-1 花岡沙紀
東京海洋大産学官連携研究員/技術コンサルタント 高須 知二 Tomoji TAKASU
プログラミング演習I 行列計算と線形方程式の求解
実行時情報に基づく OSカーネルのコンフィグ最小化
Simulation Summer School 2015 : 8/3-7 千葉大学
GPUチャレンジ 2010 規定課題マニュアル ツールキットver.0.50対応版
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
通信機構合わせた最適化をおこなう並列化ンパイラ
導電性高分子材料の電子状態計算に現れる連立一次方程式に対する 並列直接解法の高性能化
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
GPUを用いた疎行列の格納形式による行列ベクトル積の評価
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
アルゴリズムとプログラミング (Algorithms and Programming)
PA PAX パスポート・アドバンテージ パスポート・アドバンテージ PA パスポート・アドバンテージ・エクスプレス PAX +
同期処理のモジュール化を 可能にする アスペクト指向言語
「マイグレーションを支援する分散集合オブジェクト」
サブゼミ第7回 実装編① オブジェクト型とキャスト.
シミュレーション物理4 運動方程式の方法.
Make の使い方.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
プログラミング基礎a 第7回 C言語によるプログラミング入門 ファイル入出力
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
応用数理工学特論 線形計算と ハイパフォーマンスコンピューティング
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
分散メモリ型並列計算機上での行列演算の並列化
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング入門2 第5回 配列 変数宣言、初期化について
2008年 7月17日 応用数理工学特論 期末発表 鈴木綾華,程飛
第5回 配列.
Presentation transcript:

PGIコンパイラーによる ディレクティブベースのGPGPU 株式会社 ベストシステムズ 石川 直太 naota@bestsystems.co.jp

PGIによるGPGPUの概要 アクセラレータ対応ライセンスが必要 Fortran 95 または C99 のコードにディレクテ ィブ !$acc .. !$acc& … 継続行 #pragma acc … オプションを付けてコンパイル -ta=nvidia -ta=nvidia,time 実行時に統計情報を表示 -Minfo,accel コンパイル時に詳細な情報を表示

主要なディレクティブ acc region --- GPUによる処理の開始 acc end region --- GPUによる処理の終了 copyin, copy, copyout --- まとめてコピー local --- GPU側だけで使う変数 acc do vector --- GPUによる並列処理 private --- スレッドごとにインスタンスを持つ 変数

多重ループのベクトル化 多重ループをベクト ル化できる それぞれのループの 並列度を定数で指定 する 並列度の積は256以下 Cut and try 明示的に指定しなく ても、自動ベクトル 化

PGI 9.0 から 10.0 への改良 総和演算が可能 姫野ベンチマークのコードより GOSA = GOSA + SS * SS すべてのスレッドに渡る総和演算 9.0 ではコンパイルエラー 10.0 ではコンパイル、計算可能

PGI 9.0から10.0への改良 コンパイラーまかせでの、性能向上 姫野ベンチマークに、「!$acc region」と「 !$acc end region」だけを追加したコード PGI 9.0-4 では 0.229 GFLOPS (CPUより遅い) PGI 10.0 では 15.3 GFLOPS チューニングすると、9.0でも10.0でも、20.5 GFLOPS 10.1、10.2 では性能向上なし

GPGPU化可能なコード 並列化可能が大前提 リストベクトルでなく多重ループ OpenMP から GPGPU への移行は容易 倍精度演算よりも単精度演算が高速

ディレクティブベースGPGPUの特徴 CUDAプログラミングよりも容易 ディレクティブを無視すれば、通常のC/Fortran GPUによる計算とCPUによる計算の比較が容易 オリジナルコードの変更への対処が比較的容易 ハードウェアに依存しない 理論的には、AMDのGPUや将来のCPUに対応可能 ヘテロジニアスマルチコアCPUの可能性?

事例1:姫野ベンチマーク 連立一次方程式をヤコビ法で解く メモリ性能が現われる http://accc.riken.jp/HPC/HimenoBMT.html

GPU版姫野ベンチのコード主要部

姫野ベンチの配列のパディング Portland Groupによる改良 CPUによる計算:850 MFLOPS 配列の第一次元の大きさを調節する。 #ifdef PAD mimax = 272 ! GPUに適するマジックナンバー? #else mimax = 257 ! 姫野ベンチオリジナルの値 #endif CPUによる計算:850 MFLOPS GPUによる計算:20292 MFLOPS --- 23.8倍

マクロによる添え字のすり替え

Fortranのマクロ C/C++のマクロと同様 配列構造の試行錯誤に便利 大文字小文字の区別に注意 implicit none との併用をお勧め PGIではソースの拡張子が「F」または「F90」 (大文字)の場合と、オプション「-Mpreprocess 」で有効 Intel コンパイラーではオプション「-fpp」で有 効

姫野ベンチで解ったこと 配列の最も左側の添え字(Fortranの場合)を、最 も内側のループで、1づつ増やすとよい。 コンパイル時に「Non-stride-1 accesses」と表 示された場合には、性能が出にくい。 copyin, copyout ディレクティブが重要。 配列の構造を変えると、性能が上がる可能性が あるが、若干工数を要する。 vector(64) のパラメーターは試行錯誤。

姫野ベンチで効果がなかったこと private ディレクティブ ストライド 0 スレッドごとに別々のインスタンスを持つと指 定 省略しても、コンパイラーが自動的に判断 ストライド 0 構造体の配列と等価なデータ構造 CPUでは、キャッシュのヒット率向上に効果 GPUでは、遅くなる

姫野ベンチの他の研究との比較 富士通研究所 (情報処理学会HPC研究会) ソフテック NEC (2009年9月2日 セミナー資料) CUDAプログラミングで、69.7 GFLOPS メモリ転送速度がピーク性能の80%を超えるチュー ニング これと比較して本実験は 0.28倍 ソフテック PGIコンパイラーを使って、20457.79 MFLOPS NEC (2009年9月2日 セミナー資料) PGIコンパイラーを使って、18477.78 MFLOPS

事例2:行列積 SGEMM Netlibでソースコード公開 BLASに含まれるサブルーチン S --- 単精度実数 http://www.netlib.org/blas/index.html

オリジナルコード主要部

ないほうがよい条件分枝を除去

ループの回し方を変更

不可解な現象 vector(16) ディレクティブがあると 1 GFLOPS 診断メッセージによると、どちらも16x16ブロ ック 試行錯誤が必要 PGI コンパイラーは、まだ発展途上か?

実習 行列積のコードをGPUで計算しましょう

用意してあるファイル sample.f --- GPU化していないサブルーチンコ ード sgemm-4.f --- GPU化の例 Makefile test-sgemm.f --- 評価用メインプログラム

まずはCPUで実行 make sample ./sample

最初の一歩 高速化したいブロックの最初に !$acc region 終わりに !$acc end region 転置行列の積を計算するブロックもあるが、と りあえずは、最初のブロックだけ make sample ./sample

チューニング(1) オリジナルコードには、0による乗算を避ける ための条件分枝があります。 なくてもよい条件分枝を削除しましょう。

チューニング(2) ループの回し方を変えてみましょう。 ヒントは「sgemm-4.f」

試行錯誤の例 明示的な、「local」、「private」 !$acc do vector(並列度) 「copyin」、「copy」、「copyout」 コンパイルオプション「-ta=nvidia,mul24」

終わりに、最新 Bad know how 2010年3月5日に、PGI 10.3 リリース アクセラレータコンパイラーは枯れていない ライセンスファイルとライセンスサーバーが新 しければ、古いコンパイラーも動く 複数のバージョンのコンパイラーをインストー ルして、パスの設定で選択可能

お問い合わせは 価格表、オンライン見積もりによる割引 ご注文窓口 技術ご質問、ライセンス発行窓口 http://www.bestsystems.co.jp/ ご注文窓口 sales@bestsystems.co.jp 技術ご質問、ライセンス発行窓口 license@bestsystems.co.jp

Happy hacking!