狠狠撸
Submit Search
Gpu vs fpga
?
34 likes
?
18,834 views
Yukitaka Takemura
1 of 28
Download now
Downloaded 141 times
More Related Content
Gpu vs fpga
1.
GPU vs FPGA @yukitaketake 竹村幸尚@DMP
2.
がっかりポイント ? 私は「組み込み」GPUを設計しています – CUDAとか関係ないです –
OpenCL全然盛り上がってないです ? FPGAはあまり触ってません – 指示出す側です – FPGAと格闘していたのは10年以上前です ? Altera FLEX10Kとか…
3.
DMP グラフィックスIPソリューション ? 組込み機器向け高性能?低消費電力グラフィックスIP
コア ? 高性能2D/3DグラフィックスIP ? 低電力モバイルから高性能アミューズメントまでサポート ? ビルディング?ブロック構造によるスケーラブルなアーキテクチャ OpenVG 1.1対応 PICA200Lite (OpenGLES 1.1 ) ベクターグラフィックスIPコア フォトリアリスティック 3DグラフィックスIPコア 標準3DグラフィックスIPコア (OpenGL ES 1.1 互換 + 独自拡 張) SMAPH-S (OpenGLES 2.0 ) PICA200 SMAPH-F
4.
GPUの初歩 ? 材料 – 頂点データ –
Indexデータ – テクスチャ – シェーダ ? パラメタ/テーブル等をレジスタへ void main() { #if defined MASK vec4 mask = texture2D( texture_unit2, out_texcoord0); #else const vec4 mask = vec4( 1.0, 1.0, 1.0, 1.0); #endif #if defined ALPHA_TEST if( mask.x < 0.6) discard; #endif vec3 color = texture2D( texture_unit0, out_texcoord0).xyz; color = planar_reflection2( color);
5.
GPUの初歩 ? 頂点データ処理 Position0 – 頂点ごとにデータ整形 –
FP32bit化 – Index arrayに従って整列 Color 0 Position1 Color 1 Position2 Color 2 : : Color0 : : Palette indexx 0 3 4 16 : : x Index array Position0 Palette index0 Texture0 FixedColor Color3 全てfloat24/vec4 Texturex FixedColor Position3 Palette index3 Texture3 Position4 Palette index2 FixedColor : : Palette index0 Palette index1 Color4 Texture2 Texture4 Texture1 Palette index4 Colorx Texture0 FixedColor Positionx VPへ
6.
GPUの初歩 ? 頂点シェーダプロセッサ – 頂点テクスチャリード –
M-V変換 ? 頂点バッファ – 頂点シェーダ処理後のデータをストア テクスチャ ユニット 頂点データ 頂点データ 処理 頂点プロセサ 頂点バッファ
7.
GPUの初歩 ? トライアングルセットアップ – 頂点をプリミティブ化 –
クリッピング – カリング ? ラスタライズ テクスチャ – 演算器の塊 ? プロセッサでやるとかw テクスチャ ユニット 頂点データ 頂点データ 処理 頂点プロセサ 頂点バッファ トライアングル セットアップ ラスタライザ
8.
GPUの初歩 テーブル パラメタ ? ピクセル(フラグメント)シェーダ – テクスチャリード 頂点データ 処理 頂点バッファ トライアングル セットアップ ラスタライザ スケジューラ 頂点データ ユニファイド シェーダ テクスチャユニット テクスチャデータ ?
ピクセルシェーダと頂点シェー ダは同じプロセッサで動作させ る – 元々は別プロセッサ – ユニファイドシェーダ
9.
GPUの初歩 ? ROP(Rendering Output Pipeline
/ Rasterize OPeration) – – – – – – シェーダから1pixelのカラーを受け取って Zバッファを読んでそのピクセルを描画すべきか判定して そのpixelが一番手前ならZバッファを更新して (フレームバッファから既に書かれているカラーを読んで) (シェーダからのアルファ値に従ってブレンドして) フレームバッファに書き込む 頂点データ テーブル/パラメタ 頂点データ 処理 Zバッファ トライアングル セットアップ スケジューラ ユニファイドシェーダと テクスチャユニットだけを使うのが GPGPU 頂点バッファ ユニファイド シェーダ ROP フレームバッファ ラスタライザ テクスチャユニット テクスチャデータ
10.
GPUの初歩 ? まとめ図
11.
GPUの特徴 ? スループットコンピューティング – グラフィックスはmsの世界 –
CPUはレイテンシコンピューティング? – FPGAはどちらにも振れる ? 最短のレイテンシを得るならFPGA ? 浮動小数点演算重視 – 圧倒的なFLOPS値 ? もはやTFLOPSに ? ただし電力食い – 整数無視と言っても良いぐらい ? 最近はそうでもないけど – GPUで整数演算をするのはもったいないかも ? 電力効率最悪かも ? 整数ならFPGA大活躍の可能性
12.
GPU性能を上げるために ? 可能なら固定パイプラインで – やることが決まっていればプロセッサより高効率 ?
出来るだけ沢山演算器を詰める – 最低限の精度で ? 各演算器の使用率を出来るだけ高く – 沢山入れても動いてないんじゃ意味が無い ? 動作周波数を高く – パイプライン演算器 ? 浮動小数点演算だと必須 – ちょっと古いGPUだと4stage – 最近のは多分8stageとか ? 整数?固定少数でも32bitなら必要 ? 段数深くすれば高周波数対応可能 – 効率良く動かすのは難しくなる
13.
パイプライン演算器 ? GPUはなぜパイプライン演算器を使いこなせる のか – 各パイプラインに別々のスレッドが走っている ?
GPUが性能出せる秘密はこれ – このように動けないアプリケーションでは性能が出な い ? FPGAでも性能を出すには、同じようにパイプライ ン演算器にデータを詰めないといけない – レイテンシに特化するならその限りではない?
14.
GPUのほうが有利な場合 ? ? ? ? 大量の浮動小数点演算 電力気にしない データ並列性 レイテンシ気にしない
15.
FPGAのほうが有利な場合 ? Float/int精度が不要 – 小さい演算器使える ? ? ? ? ? 消費電力重要 レイテンシ重要 パイプラインを深く出来る 少ないリソースで足りるアプリケーション 苦労を厭わない –
HW屋でもFPGAツールにはハマること多いです ? FPGAアーキテクチャに合う回路が作れる ? 特殊なメモリアーキテクチャが必要 – 大きな帯域は必ずしも必要ない ? 帯域だけで勝負したらGPUが上になる
16.
特徴比較 CPU GPU FPGA ASIC コスト ○ ○ △ ? 電力 ? ? ○ ◎ メモリ帯域 ○ ◎ △ ◎ 自由度 △ △ ○ ◎ Op/sec ○ ◎ △ ○ 開発容易性 ◎ ○ △ ?? ASIC化 △ ? ◎ - データ制御 ○ ? ◎ ◎
17.
事例その1 - GPU ?
FPGAにGPUを入れてみる。 – 使ったもの ? TED社製FPGAボード – Xilinx Virtex7使用(XC7V2000T) ? ハイエンドもいいところ – お値段約xxx万円(当時) – 入れたもの ? DMP OpenGLES3.0準拠GPU – SMAPH-S – 4 shaders ? 4SIMD x 4
18.
贵笔骋础ボード例
19.
贵笔骋础ボード例
20.
贵笔骋础ボード例
21.
事例その1 - GPU ?
結果 – Slice LUT:70% – Slice reg: 15% – BRAM:20% – たかが4つのSIMDプロセッサで割といっぱいということ ? GPUは配線が多いので、あまり詰まらない ? 現時点ではFPGAで浮動小数点演算を扱うのはメリット少ない? – これでもかなりましになった ? Virtex6とかひどかった ? ハズレ世代に注意しましょう
22.
事例その2 – 演算器アレイ ?
目的 – FPGAにどれぐらい浮動小数点演算器が詰まるか確 かめてみる ? 格安FPGAでどれぐらいのFLOPS値まで行けるか – 浮動小数点演算アクセラレータとして使うイメージ ? 環境 – Xilinx Zynq-7000 ? XC7Z020CLG484 ? f:50MHz – 速い浮動小数点演算機が用意できませんで – 頑張れば200MHzぐらいまでは行けるかと
23.
ブロック図 ? 動作フローは以下の通り AXI Interconnect master – DMAC – – FP
Unit Array IBUF1 SW OBUF0 SW IBUF0 – OBUF1 ? IBUFへの書き込み及び OBUFからの読み出しは、ダ ブルバッファにより計算中 にも行う。 ? FP Unit Arrayの規模をどこ まで増やせるか Configuration Register AXI Interconnect slave ARMからモード等をレジス タ設定 DMACでARM側メモリから IBUF0又は1へ計算データ 転送 起動。計算結果をOBUF0 又は1に書き込み DMACでOBUFからARM側 へ書き戻し
24.
ブロック図 MAD MAD INP MAD MAD UNIT ? 基本ユニット – Fp32
multiply and add x 4 – Fp32 x 8 variable input – Fp32 x 4 constant input – 4stage pipeline
25.
ブロック図 1set IBUF0 UNIT FIFO UNIT SFU UNIT FIFO UNIT SFU UNIT FIFO FIFO FIFO OBUF0 FIFO Constant register ? UNIT2つとSFU1つをセットに数珠つなぎ – SFU ?
RCP/RSQ/SIN/COS/EXP/LOG ? Fp32bit x 1 ? あくまで評価のための回路 – 多少なりとも使い物にしようとするなら、UNITの入力及びバッファを増やさな いといけないが… ? 配線使い過ぎるとFPGAには入らない ? ホントはUNIT内部に比較器等入れて、簡単な分岐が出来るようにしたい
26.
FPGA構成 ? AXIバスでARM側と つなぐだけ – レジスタ設定用ス レーブポートも AXIで
27.
事例その2 – 演算器アレイ ? 結果 –
Slice LUT: 94.91% – Slice Reg: 35.57% – 入ったもの ? IBUF0 UNIT FIFO UNIT SFU UNIT これだけ→ – 33 FP units FIFO ? 1.65GFLOPS ? 200MHzなら6.6GFLOPS FIFO – もちろん実際こんなに出ませんが Constant register – 1ランク上のFPGAの場合 ? ? ? XC7Z030CLG484 93FP units 29.65GFLOPS – 200MHzなら118.6GFLOPS – Artixクラスだと制御系でかなりリソース食ってしまい、計算にリソースが回らない? ? Z030はKintexクラスだそうで OBUF0
28.
まとめ ? 安価なFPGAではやれることが少ない – 特に演算系 –
演算系ならGPUオススメ ? ASIC化を見据えたプロトタイプ作成用に魅力
Download