Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 28 Anuncio

Más Contenido Relacionado

Presentaciones para usted (20)

A los espectadores también les gustó (20)

Anuncio

Similares a Gpu vs fpga (20)

Más reciente (20)

Anuncio

Gpu vs fpga

  1. 1. GPU vs FPGA @yukitaketake 竹村幸尚@DMP
  2. 2. がっかりポイント • 私は「組み込み」GPUを設計しています – CUDAとか関係ないです – OpenCL全然盛り上がってないです • FPGAはあまり触ってません – 指示出す側です – FPGAと格闘していたのは10年以上前です • Altera FLEX10Kとか…
  3. 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. 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. 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. 6. GPUの初歩 • 頂点シェーダプロセッサ – 頂点テクスチャリード – M-V変換 • 頂点バッファ – 頂点シェーダ処理後のデータをストア テクスチャ ユニット 頂点データ 頂点データ 処理 頂点プロセサ 頂点バッファ
  7. 7. GPUの初歩 • トライアングルセットアップ – 頂点をプリミティブ化 – クリッピング – カリング • ラスタライズ テクスチャ – 演算器の塊 • プロセッサでやるとかw テクスチャ ユニット 頂点データ 頂点データ 処理 頂点プロセサ 頂点バッファ トライアングル セットアップ ラスタライザ
  8. 8. GPUの初歩 テーブル パラメタ • ピクセル(フラグメント)シェーダ – テクスチャリード 頂点データ 処理 頂点バッファ トライアングル セットアップ ラスタライザ スケジューラ 頂点データ ユニファイド シェーダ テクスチャユニット テクスチャデータ • ピクセルシェーダと頂点シェー ダは同じプロセッサで動作させ る – 元々は別プロセッサ – ユニファイドシェーダ
  9. 9. GPUの初歩 • ROP(Rendering Output Pipeline / Rasterize OPeration) – – – – – – シェーダから1pixelのカラーを受け取って Zバッファを読んでそのピクセルを描画すべきか判定して そのpixelが一番手前ならZバッファを更新して (フレームバッファから既に書かれているカラーを読んで) (シェーダからのアルファ値に従ってブレンドして) フレームバッファに書き込む 頂点データ テーブル/パラメタ 頂点データ 処理 Zバッファ トライアングル セットアップ スケジューラ ユニファイドシェーダと テクスチャユニットだけを使うのが GPGPU 頂点バッファ ユニファイド シェーダ ROP フレームバッファ ラスタライザ テクスチャユニット テクスチャデータ
  10. 10. GPUの初歩 • まとめ図
  11. 11. GPUの特徴 • スループットコンピューティング – グラフィックスはmsの世界 – CPUはレイテンシコンピューティング? – FPGAはどちらにも振れる • 最短のレイテンシを得るならFPGA • 浮動小数点演算重視 – 圧倒的なFLOPS値 • もはやTFLOPSに • ただし電力食い – 整数無視と言っても良いぐらい • 最近はそうでもないけど – GPUで整数演算をするのはもったいないかも • 電力効率最悪かも • 整数ならFPGA大活躍の可能性
  12. 12. GPU性能を上げるために • 可能なら固定パイプラインで – やることが決まっていればプロセッサより高効率 • 出来るだけ沢山演算器を詰める – 最低限の精度で • 各演算器の使用率を出来るだけ高く – 沢山入れても動いてないんじゃ意味が無い • 動作周波数を高く – パイプライン演算器 • 浮動小数点演算だと必須 – ちょっと古いGPUだと4stage – 最近のは多分8stageとか • 整数・固定少数でも32bitなら必要 • 段数深くすれば高周波数対応可能 – 効率良く動かすのは難しくなる
  13. 13. パイプライン演算器 • GPUはなぜパイプライン演算器を使いこなせる のか – 各パイプラインに別々のスレッドが走っている • GPUが性能出せる秘密はこれ – このように動けないアプリケーションでは性能が出な い • FPGAでも性能を出すには、同じようにパイプライ ン演算器にデータを詰めないといけない – レイテンシに特化するならその限りではない?
  14. 14. GPUのほうが有利な場合 • • • • 大量の浮動小数点演算 電力気にしない データ並列性 レイテンシ気にしない
  15. 15. FPGAのほうが有利な場合 • Float/int精度が不要 – 小さい演算器使える • • • • • 消費電力重要 レイテンシ重要 パイプラインを深く出来る 少ないリソースで足りるアプリケーション 苦労を厭わない – HW屋でもFPGAツールにはハマること多いです • FPGAアーキテクチャに合う回路が作れる • 特殊なメモリアーキテクチャが必要 – 大きな帯域は必ずしも必要ない • 帯域だけで勝負したらGPUが上になる
  16. 16. 特徴比較 CPU GPU FPGA ASIC コスト ○ ○ △ ? 電力 ☓ ☓ ○ ◎ メモリ帯域 ○ ◎ △ ◎ 自由度 △ △ ○ ◎ Op/sec ○ ◎ △ ○ 開発容易性 ◎ ○ △ ☓☓ ASIC化 △ ☓ ◎ - データ制御 ○ ☓ ◎ ◎
  17. 17. 事例その1 - GPU • FPGAにGPUを入れてみる。 – 使ったもの • TED社製FPGAボード – Xilinx Virtex7使用(XC7V2000T) » ハイエンドもいいところ – お値段約xxx万円(当時) – 入れたもの • DMP OpenGLES3.0準拠GPU – SMAPH-S – 4 shaders » 4SIMD x 4
  18. 18. FPGAボード例
  19. 19. FPGAボード例
  20. 20. FPGAボード例
  21. 21. 事例その1 - GPU • 結果 – Slice LUT:70% – Slice reg: 15% – BRAM:20% – たかが4つのSIMDプロセッサで割といっぱいということ • GPUは配線が多いので、あまり詰まらない • 現時点ではFPGAで浮動小数点演算を扱うのはメリット少ない? – これでもかなりましになった » Virtex6とかひどかった • ハズレ世代に注意しましょう
  22. 22. 事例その2 – 演算器アレイ • 目的 – FPGAにどれぐらい浮動小数点演算器が詰まるか確 かめてみる • 格安FPGAでどれぐらいのFLOPS値まで行けるか – 浮動小数点演算アクセラレータとして使うイメージ • 環境 – Xilinx Zynq-7000 • XC7Z020CLG484 • f:50MHz – 速い浮動小数点演算機が用意できませんで – 頑張れば200MHzぐらいまでは行けるかと
  23. 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. 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. 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. 26. FPGA構成 • AXIバスでARM側と つなぐだけ – レジスタ設定用ス レーブポートも AXIで
  27. 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. 28. まとめ • 安価なFPGAではやれることが少ない – 特に演算系 – 演算系ならGPUオススメ • ASIC化を見据えたプロトタイプ作成用に魅力

×