OPENACC とその周辺 2013 1/27 東京大学 中村研究室 薦田 登志矢 13/01/26 1 研究室ミーティング
OPENACC とその周辺 2013 1/27 東京大学 中村研究室 薦田 登志矢
13/01/26 1 研究室ミーティング
自己紹介
• 最近は, GPU向けの処理系の話に注力してます • 最近の研究内容
• OpenACCのマルチGPUサポート • CPUとGPUを協調動作させたときの消費電力モデリング
• 昨年のSCには, 聴講参加してきました!
13/01/26 研究室ミーティング 2
NVIDIAのブース Key note IBM のブース
今日紹介する論文
• 「Early Evaluation of Directive-Based GPU Programming Models for Productive Exascale Computing 」 Seyong Lee, et al.
• Oak Ridge National Laboratoryの人 • 2009年に最初に, OpenMPからCUDA GPUを使えるようにした人
• 論文中で出てくるOpenMPCを作った.
• 内容 • OpenMPみたいな指示文ベースの処理系から, CUDA GPUを使うため
に現状提案されている指示文の整理と評価, 今後の課題のまとめ
13/01/26 研究室ミーティング 3
GPU Computing • メニーコアプロセッサとしてのGPU
• データ並列アプリケーションを高性能・高効率に実行
Intel Sandy Bridge-E 8 Cores
NVIDIA GTX680 1536 Cores
13/01/26 4 研究室ミーティング
Five years from CUDA Launch • GPUコンピューティングの普及
• ケーススタディ • See 「GPU Computing Gems」, Morgan Kauffman, 2012
• Top 500 super computers • 52/500 のスパコンにGPUが搭載 (ICS, 2012)
• 課題も浮き彫りに • 既存のプログラムをCUDAにポーティングするのはやっぱり大変
• 大量のコード書き換えが発生. • CUDA APIに合わせるためだけの非本質的な書き換えも多い.
13/01/26 5 研究室ミーティング
指示文を用いたGPUの利用 • OpenMP
• CUDAと同様、データ並列ループがターゲット • Weak Memory Consistency(ループに繰り越し依存がない) • Incremental Parallelization
• 既存コードのポーティングに適している
• GPU利用を可能にするOpenMP拡張の提案と評価が なされている最中 • Academic
• 「OpenMP to GPGPU」, PPoPP 2009 • 「OpenMPC」, SC’10 • 「Mint」, ICS’11
• Industry • PGI Accelerator Model, GPGPU 2010 • OpenACC API is specified in 2012.
13/01/26 6 研究室ミーティング
指示文ベースのGPUプログラミング いろいろ
13/01/26 研究室ミーティング 7
指示文ベースのGPUプログラミング いろいろ
13/01/26 研究室ミーティング 8
Industry
指示文ベースのGPUプログラミング いろいろ
13/01/26 研究室ミーティング 9
Academic
指示文ベースのGPUプログラミング いろいろ
13/01/26 研究室ミーティング 10
CPU-GPU間のデータ移動を制御する指示文が特徴的
OpenACCのコード例
13/01/26 研究室ミーティング 11
CPU-GPU間でのデータ移動を 明示的に記述
指示文ベースのGPUプログラミング いろいろ
13/01/26 研究室ミーティング 12
GPU上のオンチップのメモリ階層を利用するための 指示文が特徴的 (shared memory, register etc)
OpenMPCコード例
13/01/26 研究室ミーティング 13
オンチップメモリの利用を 明示的に記述
実験内容
• 13個のOpenMPプログラムを, 前述の指示文を使ってGPU プログラムに書き換え • 2 kernel Benchmakr : JACOBI, SPMUL • NAS Parallel Benchmark: EP, CG, FT • Rodinia Benchmark : BACKPROP, BFS, CFD, SRAD, HOTSPOT,
KEMEANS, LUD, NW
• 移植作業に関する詳細な報告
• 性能評価 • GPU: TeslaM2090 512 streming processors • データ転送時間込み • Baseline: : Intel Xeon X5660 CPU(2.8GHz), 1CPUでの実行
13/01/26 研究室ミーティング 14
移植コストの話
• OpenMPに比べてできないことが多く、 結果としてコードの書き換えが必要になるケースも多かった
• 指示文の仕様の微妙な違いでポーティングコストが変わる • GPU化対称コード内で関数呼び出しできるか? • CPU-GPU間のデータ移動の記述の仕方
• 現状のOpenACCでは, 完全にユーザー任せで結構大変 • OpenMPCでは関数間のデータフロー解析を頑張ることで結構自動化できる
13/01/26 研究室ミーティング 15
商用のものはだいたい どれも似たような感じ
移植コストの話
• OpenMPに比べてできないことが多く、 結果としてコードの書き換えが必要になるケースも多かった
• 指示文の仕様の微妙な違いでポーティングコストが変わる • GPU化対称コード内で関数呼び出しできるか? • CPU-GPU間のデータ移動の記述の仕方
• 現状のOpenACCでは, 完全にユーザー任せで結構大変 • OpenMPCでは関数間のデータフロー解析を頑張ることで結構自動化できる
13/01/26 研究室ミーティング 16
データ移動の記述が 少なくすむので追加の 指示文自体は少ない
移植コストの話
• OpenMPに比べてできないことが多く、 結果としてコードの書き換えが必要になるケースも多かった
• 指示文の仕様の微妙な違いでポーティングコストが変わる • GPU化対称コード内で関数呼び出しできるか? • CPU-GPU間のデータ移動の記述の仕方
• 現状のOpenACCでは, 完全にユーザー任せで結構大変 • OpenMPCでは関数間のデータフロー解析を頑張ることで結構自動化できる
13/01/26 研究室ミーティング 17
データ移動の記述が 少なくすむので追加の 指示文自体は少ない
移植コストの話
• デバッグが大変だった • 指示文ベースのプログラミングのデバッグは, 中で何が起きているか
分からないので大変 • デバッグのための何らかの仕組みが必要不可欠
13/01/26 研究室ミーティング 18
性能評価
13/01/26 研究室ミーティング 19
GPU: TeslaM2090 512 streming processors (データ転送も込みの性能) Baseline: Intel Xeon X5660 CPU(2.8GHz), 1CPUでの実行
性能評価
13/01/26 研究室ミーティング 20
GPU: TeslaM2090 512 streming processors (データ転送も込みの性能) Baseline: Intel Xeon X5660 CPU(2.8GHz), 1CPUでの実行
どの処理系もCUDA実装に対して, リーズナブルな 性能を達成している (平均で, 60 ~ 75 %くらい?)
性能評価
13/01/26 研究室ミーティング 21
GPU: TeslaM2090 512 streming processors (データ転送も込みの性能) Baseline: Intel Xeon X5660 CPU(2.8GHz), 1CPUでの実行
オンチップのメモリ階層に対してチューニングして いるので, OpenMPCが良い結果を出している
まとめ
• 指示文を用いたGPU利用に関する現状報告 • 性能的にはまあまあ出る
• CUDA に対して, 60 ~ 75 % • 一部のアプリケーションでは, オンチップ最適化を可能にする指示文が必要
• ポーティングコストについては改良の余地あり • OpenMPに比べて機能的にできないことが多い.
• reductionやcriticalセクションのサポート, 細流度な同期 etc • 関数呼び出しの取り扱い
• なんらかのデバッグサポートは必須 • 指示文ベースのプログラミングのデバッグは, 中で何が起きているか
分からないので大変
13/01/26 研究室ミーティング 22