330 likes | 378 Views
大規模再構成可能データパスにおける 実行前処理削減方式の検討. ○片岡広志 a) , 本田宏明 b) , Farhad Mehdipour a) , 井上弘士 a) , 村上和彰 a) a) 九州大学、 b) ISIT. 発表の流れ. 背景 提案 手法 性能評価実験 おわりに. 研究背景. PowerXcell を 搭載したスーパーコンピュータ 「 Roadrunner 」. NVIDIA 「 Tesla S1070 」.
E N D
大規模再構成可能データパスにおける実行前処理削減方式の検討大規模再構成可能データパスにおける実行前処理削減方式の検討 ○片岡広志a),本田宏明b) , FarhadMehdipour a) , 井上弘士a) ,村上和彰a) a) 九州大学、b)ISIT
発表の流れ • 背景 • 提案手法 • 性能評価実験 • おわりに
研究背景 PowerXcellを搭載したスーパーコンピュータ「 Roadrunner」 NVIDIA 「Tesla S1070」 • High Performance Computing (HPC)分野では汎用プロセッサ(GPP) を集積したスーパコンピュータが主流 • 背景:GPPの低コスト化 • 方針:GPPの低い演算性能をプロセッサ数で補う • 「GPP+アクセラレータ」方式も注目されている • アクセラレータ:演算性能を重視したハードウェア • 多数の演算器の並列演算 • GPPは演算負荷が高い処理をアクセラレータに実行させる • 例:PowerXcell, ClearSpeed, Tesla, GRAPE-DR, FPGA, etc. 3 http://www.top500.org/system/9485 http://www.elsa-jp.co.jp/products/hpc/tesla/s1070/index.html
大規模再構成可能データパスの提案(LSRDP: Large-Scale Reconfigurable Data-Path) • アクセラレータではメモリウォール問題が深刻化 • 多数の並列演算によるメモリプレッシャーの増加 • メモリバンド幅の有効利用が重要 • (GPUでは)メモリのマルチバンク・マルチポート化 • 一方,単一ポートからの連続アクセスでもメモリバンド幅の有効利用は可能 • 大規模再構成可能データパスの提案 • ストリーム処理方式 • 連続アクセス限定のメモリアクセス方式 • DRAMのバースト転送機能を用いメモリバンド幅を有効利用 • 2D-array型演算器によるデータパス方式の利用 • 演算器間の直接データ転送 • メモリアクセス回数を削減しメモリウォール問題の影響を低減 4 4
LSRDPの動作 ソースコード 大規模データパスの再構成 主記憶上データの再配置 loop; ループボディ end ・・・ LSRDPが主記憶から連続アクセスで読み出せるように入力データを生成 ・・・ PE:Processing Element FP:Floating Point unit TU:data Transfer Unit
LSRDPの実行における問題点 実行時間 (GPP単体による実行時間で正規化) 実行時 オーバーヘッド LSRDP実行時間 GPP実行時間 ※評価環境については後述 • 再配置時間が支配的 • GPPを用いて主記憶へのランダムアクセスにより実行 性能向上のためには再配置時間の削減が必要
発表概要 • 目的 • 再配置(実行前処理)時間の削減 • 手法 • プログラム作成時にデータ構造を変更 • GPPを用いずに再配置を実行 • LSRDPを用いて再配置を実行 • 重複化専用ハードウェアをSMAC上に導入し再配置処理を削減
発表の流れ • 背景 • 提案手法 • 従来の再配置手法 • データ構造の変更 • データの重複作成 • 性能評価実験 • おわりに
従来の再配置手法(1/4) a(n)[1] a(n-1)[0] a(n-1)[1] ... a(n-1)[i+M] a(n)[0] ... a(n)[i+M] a(n-1)[]: a(n)[]: LSRDP 向けコード 再構成 loop n 入力ストリーム用データ生成 LSRDP 計算 (DFG:a(n+1)[i] = a(n)[i-1] + a(n)[i] + a(n)[i+1] + a(n-1)[i]) 出力ストリームデータの書戻し end Main Mem. 計算対象の配列はメモリ上離れた箇所に分散保持
従来の再配置手法(2/4) a(n)[1] a(n-1)[0] a(n-1)[1] ... a(n-1)[i+M] a(n)[0] ... a(n)[i+M] a(n-1)[]: a(n)[]: X(n)[]: a(n-1)[i+M] a(n-1)[0] a(n)[0] a(n)[i+M] a(n-1)[1] a(n)[1] ... LSRDP 向けコード 再構成 loop n 入力ストリーム用データ生成 LSRDP 計算 (DFG:a(n+1)[i] = a(n)[i-1] + a(n)[i] + a(n)[i+1] + a(n-1)[i]) 出力ストリームデータの書戻し end Main Mem. LSRDP 計算の入力順に並び変えた入力用データ配列 X[] の生成 GPP により主記憶へのランダムアクセスを行う必要あり
従来の再配置手法(3/4) X(n+m)[]: a(n+m-1)[] a(n+m-1)[0] a(n+m)[0] a(n+m)[] a(n+m-1)[1] a(n+m)[1] ... X(n)[]: a(n-1)[i+M] a(n-1)[0] a(n)[0] a(n)[i+M] a(n-1)[1] a(n)[1] ... LSRDP 向けコード 再構成 loop n 入力ストリーム用データ生成 LSRDP 計算 (DFG:a(n+1)[i] = a(n)[i-1] + a(n)[i] + a(n)[i+1] + a(n-1)[i]) 出力ストリームデータの書戻し end Main Mem. LSRDP 計算により X(n)[] から X(n+m)[] が生成 X(n)[] の読み込みと X(n+m)[] の書き込みの際に連続アクセス可能
従来の再配置手法(4/4) X(n+m)[]: a(n+m-1)[] a(n+m-1)[0] a(n+m)[0] a(n+m)[] a(n+m-1)[1] a(n+m)[1] ... LSRDP 向けコード 再構成 loop n 入力ストリーム用データ生成 LSRDP 計算 (DFG:a(n+1)[i] = a(n)[i-1] + a(n)[i] + a(n)[i+1] + a(n-1)[i]) 出力ストリームデータの書戻し end Main Mem. a(n+m-1)[0] a(n+m-1)[1] ... ... a(n+m)[0] ... ... a(n+m-1)[]: a(n+m)[] a(n+m)[1] X[] から a[] への書戻し GPP により主記憶へのランダムアクセスを行う必要あり
a(n)[1] a(n-1)[0] a(n-1)[1] ... a(n-1)[i+M] a(n)[0] ... a(n)[i+M] a(n-1)[]: a(n)[]: X(n)[]: a(n-1)[i+M] a(n-1)[0] a(n)[0] a(n)[i+M] a(n-1)[1] a(n)[1] ... データ構造の変更 • 従来方式ではプログラム実行時に入力ストリームを生成 • 本手法ではプログラム作成時にストリーム処理を意識したデータ構造を作成 Main Mem.
データ構造の変更による問題点 入力4,出力2の DFG 計算 Main Mem. … X(n)[]: … X(n+m)[]: … 計算結果 X(n+m)[] を再び入力データとして使用する際, 更新されていないデータが存在する
データの重複化による入力ストリーム向けデータ構造の再生成データの重複化による入力ストリーム向けデータ構造の再生成 入力4,出力2の DFG 計算 Main Mem. X(n)[]: … X(n+m)[]: … • データを両隣からコピー(データの重複化)することで入力ストリーム向けデータ構造を再生成 • GPP を使用すると多数のランダムアクセスが発生 • LSRDPを用いる方式 • 重複化専用HWを導入する方式
LSRDP を用いたデータの重複化(1/2) LSRDP 再構成 データ重複用DFG Main Mem. 重複化前 … 重複化前 … • LSRDP にてデータ重複処理を行うためにデータ重複用DFGで再構成
LSRDP を用いたデータの重複化(2/2) 入力4,出力4の 重複生成用 DFG による処理 Main Mem. 重複化前 … 重複化後 … メモリに対する連続アクセスが可能
専用ハードウェアによるデータの重複化 重複化後 … バッファ controller input_data バッファ Main Mem. 重複化前 … ピンク部分のみ重複化に必要 ⇒ 空白部分を圧縮して保存可能 ⇒ 入出力時の転送データ量を削減
発表の流れ • 背景 • 提案手法 • 性能評価実験 • おわりに
性能評価実験 • 評価環境 • GPP:Simple Scalarを用いて実行時間を計測 • LSRDP:性能モデル式とパラメータから実行時間を算出 ※性能モデル式は予稿を参照 • 評価ベンチマーク • 2変数2階偏微分方程式の差分法計算 • 振動方程式(Vib),熱伝導方程式(Heat)
評価環境 • GPP • 動作周波数:3.2GHz • ISA:PISA • 4wayout of order スーパースカラ • Main Memory • メモリバンド幅:102.4GB/s • LSRDP • サイズ:幅48,高さ35 • 隣接行間接続数:9 • 動作周波数:80GHz • 演算器スループット:2.5GFLOPS / PE • 再構成時間:30,000cc • 追加HW • 動作周波数:80GHz 追加HW PE:Processing Element FP:Floating Point unit TU:data Transfer Unit
実験結果 実行時間:gpp-onlyで正規化 (性能:[GFLOPS]) 0.84 (1.7) 0.24 (8.0) 0.13 (11.5) 0.018 (109.2) 0.009 (210.0) 0.01 (104.9)
実験結果 実行時間:gpp-onlyで正規化 (性能:[GFLOPS]) 0.84 (1.7) 0.24 (8.0) 0.13 (11.5) 0.018 (109.2) 0.009 (210.0) 0.01 (104.9) • pack+dup • - naiveと比較して再配置を削減 • -Vibにおいて LSRDP演算、LSRDPストールが増加 • pack+hw • naiveと比較して再配置、LSRDPストールを削減 DFGを用いて LSRDPで実行
考察 • pack+dup:naiveと比較してVibにおいてLSRDP演算,LSRDPストールが増加 • 重複作成のためにnaiveよりも演算性能が低いDFGを実装 • naiveと同じDFGではデータ重複用DFGを用いても重複が作成不可能 • pack+hw:naiveと比較して再配置、LSRDPストールを削減 • 再配置処理そのものを削減 • LSRDPストール削減率 Heat:40%,Vib:67% • naiveの再配置処理における重複データが多いほど高い効果 • 実効効率 : Heatのpack+hwモデルで5% • 原因 • DFGの演算器利用効率:52% • LSRDPへの1入出力あたり6サイクルのストールが発生
発表の流れ • 背景 • 提案手法 • 性能評価実験 • おわりに
おわりに • まとめ • LSRDPにおける実行前処理の削減方式を検討 • プログラム作成時にデータ構造を変更 • GPPを用いずに再配置を実行 • 少数のメモリアクセスポートを前提としたアクセラレータにおける高性能化の可能性を示した • 今後の課題 • 実効性能の向上 • 演算性能/ 入出力数の高いDFGの探索
LSRDP へのプログラム実装(1/3)(振動方程式差分法計算) オリジナルコード: GPP で計算 ループアンローリングされたコード loop n loop i a(n+1)[i] = a(n)[i-1] + a(n)[i] + a(n)[i+1] + a(n-1)[i] end end loop n (mnスキップ) loop i (miスキップ) a(n+1)[i] = a(n)[i-1] + a(n)[i] + a(n)[i+1] + a(n-1)[i] a(n+1)[i+1] = a(n)[i] + a(n)[i+1] + a(n)[i+2] + a(n-1)[i+1] … a(n+2)[i] = a(n+1)[i-1] + a(n+1)[i] + a(n+1)[i+1] + a(n)[i] a(n+2)[i+1] = a(n+1)[i] + a(n+1)[i+1] + a(n+1)[i+2] + a(n)[i+1] … end end mi mn iと nについて ループアンローリング 入力: a(n)[], a(n-1)[] 出力: a(n+mn)[]
LSRDP へのプログラム実装(1/3)(振動方程式差分法計算) ループアンローリングされたコード loop n (mnスキップ) loop i (miスキップ) a(n+1)[i] = a(n)[i-1] + a(n)[i] + a(n)[i+1] + a(n-1)[i] a(n+1)[i+1] = a(n)[i] + a(n)[i+1] + a(n)[i+2] + a(n-1)[i+1] … a(n+2)[i] = a(n+1)[i-1] + a(n+1)[i] + a(n+1)[i+1] + a(n)[i] a(n+2)[i+1] = a(n+1)[i] + a(n+1)[i+1] + a(n+1)[i+2] + a(n)[i+1] … end end mi mn
LSRDP へのプログラム実装(2/3)(振動方程式差分法計算) ループアンローリングされたコード LSRDPへのマッピング結果: loop n (mnスキップ) loop i (miスキップ) end end 入力: a(n-1)[], a(n)[] 出力: a(n+m-1)[], a(n+m)[] ループアンローリングされた 差分法計算を データフローグラフ(DFG)化し LSRDPにマッピング LSRDP への入出力データ順: In:a(n-1)[i], a(n)[i], a(n-1)[i+1],a(n)[i+1], … Out :a(n+m-1)[i], a(n+m)[i], a(n+m-1)[i+1], a(n+m)[i+1], … 主記憶上で LSRDP への入出力順に データを並び変え,主記憶への 連続アクセスを可能とする必要がある ⇒入力ストリーム生成(データ再配置)
LSRDP へのプログラム実装(2/3)(振動方程式差分法計算) LSRDPへのマッピング結果: LSRDP 向けコード 再構成 loop n 入力ストリーム生成 LSRDP 計算 (差分法計算) 出力ストリームデータの書戻し end LSRDP への入出力データ順: In:a(n-1)[i], a(n)[i], a(n-1)[i+1],a(n)[i+1], … Out :a(n+m-1)[i], a(n+m)[i], a(n+m-1)[i+1], a(n+m)[i+1], … 主記憶上で LSRDP への入出力順に データを並び変え,主記憶への 連続アクセスを可能とする必要がある ⇒入力ストリーム生成(データ再配置)
Vertical vs. Horizontal DFG Decomposition Original Horizontal Decomp. Loop N ReconfigurationLoop M LSRDP pipeline calc. End Loop End Loop Loop N ReconfigurationLoop M 1stLSRDP pipeline calc. End Loop End Loop Loop N ReconfigurationLoop M 2ndLSRDP pipeline calc. End Loop End Loop Vertical Decomp. Loop n ( > N) ReconfigurationLoop M LSRDP pipeline calc. End Loop End Loop 33