gpu vs fpga

28
GPU vs FPGA @yukitaketake 竹村幸尚@DMP

Upload: yukitaka-takemura

Post on 09-Jun-2015

4.854 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Gpu vs fpga

GPU vs FPGA

@yukitaketake

竹村幸尚@DMP

Page 2: Gpu vs fpga

がっかりポイント

• 私は「組み込み」GPUを設計しています

– CUDAとか関係ないです

– OpenCL全然盛り上がってないです

• FPGAはあまり触ってません

– 指示出す側です

– FPGAと格闘していたのは10年以上前です

• Altera FLEX10Kとか…

Page 3: Gpu vs fpga

DMP グラフィックスIPソリューション

組込み機器向け高性能・低消費電力グラフィックスIP コア

高性能2D/3DグラフィックスIP

低電力モバイルから高性能アミューズメントまでサポート

ビルディング・ブロック構造によるスケーラブルなアーキテクチャ

フォトリアリスティック

3DグラフィックスIPコア (OpenGL ES 1.1 互換 + 独自拡張)

PICA200

標準3DグラフィックスIPコア

PICA200Lite (OpenGLES 1.1 )

SMAPH-S (OpenGLES 2.0 )

OpenVG 1.1対応

ベクターグラフィックスIPコア

SMAPH-F

Page 4: Gpu vs fpga

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);

Page 5: Gpu vs fpga

GPUの初歩

• 頂点データ処理 – 頂点ごとにデータ整形

– FP32bit化

– Index arrayに従って整列

Position0

Color0

Texture0

Palette index0

Position1

Color1

Position2

Color2

Positionx

Colorx

::

Palette index1

Palette index2

Palette indexx

::

Texture1

Texture2

Texturex

::

VPへ

FixedColor

Position0

Colo

r0

Pale

tte index0

Textu

re0

Position3

Colo

r3

Pale

tte index3

Textu

re3

Position4

Colo

r4

Pale

tte index4

Textu

re4

Fixe

dColor

Fixe

dColor

Fixe

dColor

全てfloat24/vec4

0

3

4

16

x

::

Index array

Page 6: Gpu vs fpga

GPUの初歩

• 頂点シェーダプロセッサ

– 頂点テクスチャリード

– M-V変換

• 頂点バッファ

– 頂点シェーダ処理後のデータをストア

頂点データ処理

頂点プロセサ 頂点バッファ頂点データ

テクスチャユニット

Page 7: Gpu vs fpga

GPUの初歩

• トライアングルセットアップ – 頂点をプリミティブ化

– クリッピング

– カリング

• ラスタライズ – 演算器の塊

• プロセッサでやるとかw

頂点データ処理

頂点プロセサ 頂点バッファ頂点データトライアングルセットアップ

ラスタライザ

テクスチャユニット

テクスチャ

Page 8: Gpu vs fpga

GPUの初歩

• ピクセル(フラグメント)シェーダ – テクスチャリード

• ピクセルシェーダと頂点シェーダは同じプロセッサで動作させる – 元々は別プロセッサ

– ユニファイドシェーダ

頂点データ処理

ユニファイドシェーダ

頂点バッファ

頂点データ

トライアングルセットアップ

ラスタライザ

スケ

ジュ

ーラ

テクスチャユニット

テクスチャデータ

テーブル パラメタ

Page 9: Gpu vs fpga

GPUの初歩

• ROP(Rendering Output Pipeline / Rasterize OPeration) – シェーダから1pixelのカラーを受け取って – Zバッファを読んでそのピクセルを描画すべきか判定して – そのpixelが一番手前ならZバッファを更新して – (フレームバッファから既に書かれているカラーを読んで) – (シェーダからのアルファ値に従ってブレンドして) – フレームバッファに書き込む

頂点データ処理

ユニファイドシェーダ

頂点バッファ

頂点データ

トライアングルセットアップ

ラスタライザ

スケ

ジュ

ーラ

テクスチャユニット

ROP

フレームバッファ

テクスチャデータ

テーブル/パラメタ

Zバッファ

ユニファイドシェーダと テクスチャユニットだけを使うのが

GPGPU

Page 10: Gpu vs fpga

GPUの初歩

• まとめ図

Page 11: Gpu vs fpga

GPUの特徴

• スループットコンピューティング – グラフィックスはmsの世界 – CPUはレイテンシコンピューティング? – FPGAはどちらにも振れる

• 最短のレイテンシを得るならFPGA

• 浮動小数点演算重視 – 圧倒的なFLOPS値

• もはやTFLOPSに • ただし電力食い

– 整数無視と言っても良いぐらい • 最近はそうでもないけど

– GPUで整数演算をするのはもったいないかも • 電力効率最悪かも • 整数ならFPGA大活躍の可能性

Page 12: Gpu vs fpga

GPU性能を上げるために

• 可能なら固定パイプラインで – やることが決まっていればプロセッサより高効率

• 出来るだけ沢山演算器を詰める – 最低限の精度で

• 各演算器の使用率を出来るだけ高く – 沢山入れても動いてないんじゃ意味が無い

• 動作周波数を高く – パイプライン演算器

• 浮動小数点演算だと必須 – ちょっと古いGPUだと4stage – 最近のは多分8stageとか

• 整数・固定少数でも32bitなら必要 • 段数深くすれば高周波数対応可能

– 効率良く動かすのは難しくなる

Page 13: Gpu vs fpga

パイプライン演算器

• GPUはなぜパイプライン演算器を使いこなせるのか – 各パイプラインに別々のスレッドが走っている

• GPUが性能出せる秘密はこれ

– このように動けないアプリケーションでは性能が出ない

• FPGAでも性能を出すには、同じようにパイプライン演算器にデータを詰めないといけない – レイテンシに特化するならその限りではない?

Page 14: Gpu vs fpga

GPUのほうが有利な場合

• 大量の浮動小数点演算

• 電力気にしない

• データ並列性

• レイテンシ気にしない

Page 15: Gpu vs fpga

FPGAのほうが有利な場合

• Float/int精度が不要 – 小さい演算器使える

• 消費電力重要 • レイテンシ重要 • パイプラインを深く出来る • 少ないリソースで足りるアプリケーション • 苦労を厭わない

– HW屋でもFPGAツールにはハマること多いです

• FPGAアーキテクチャに合う回路が作れる • 特殊なメモリアーキテクチャが必要

– 大きな帯域は必ずしも必要ない • 帯域だけで勝負したらGPUが上になる

Page 16: Gpu vs fpga

特徴比較

CPU GPU FPGA ASIC

コスト ○ ○ △ ?

電力 ☓ ☓ ○ ◎

メモリ帯域 ○ ◎ △ ◎

自由度 △ △ ○ ◎

Op/sec ○ ◎ △ ○

開発容易性 ◎ ○ △ ☓☓

ASIC化 △ ☓ ◎ -

データ制御 ○ ☓ ◎ ◎

Page 17: Gpu vs fpga

事例その1 - GPU

• FPGAにGPUを入れてみる。 – 使ったもの

• TED社製FPGAボード – Xilinx Virtex7使用(XC7V2000T)

» ハイエンドもいいところ

– お値段約xxx万円(当時)

– 入れたもの • DMP OpenGLES3.0準拠GPU

– SMAPH-S

– 4 shaders

» 4SIMD x 4

Page 18: Gpu vs fpga

FPGAボード例

Page 19: Gpu vs fpga

FPGAボード例

Page 20: Gpu vs fpga

FPGAボード例

Page 21: Gpu vs fpga

事例その1 - GPU

• 結果 – Slice LUT:70%

– Slice reg: 15%

– BRAM:20%

– たかが4つのSIMDプロセッサで割といっぱいということ • GPUは配線が多いので、あまり詰まらない

• 現時点ではFPGAで浮動小数点演算を扱うのはメリット少ない? – これでもかなりましになった

» Virtex6とかひどかった

• ハズレ世代に注意しましょう

Page 22: Gpu vs fpga

事例その2 – 演算器アレイ

• 目的 – FPGAにどれぐらい浮動小数点演算器が詰まるか確

かめてみる • 格安FPGAでどれぐらいのFLOPS値まで行けるか

– 浮動小数点演算アクセラレータとして使うイメージ

• 環境 – Xilinx Zynq-7000

• XC7Z020CLG484

• f:50MHz – 速い浮動小数点演算機が用意できませんで

– 頑張れば200MHzぐらいまでは行けるかと

Page 23: Gpu vs fpga

ブロック図

• 動作フローは以下の通り

– ARMからモード等をレジスタ設定

– DMACでARM側メモリからIBUF0又は1へ計算データ転送

– 起動。計算結果をOBUF0又は1に書き込み

– DMACでOBUFからARM側へ書き戻し

• IBUFへの書き込み及びOBUFからの読み出しは、ダ

ブルバッファにより計算中にも行う。

• FP Unit Arrayの規模をどこまで増やせるか

IBUF0

IBUF1

FP UnitArray

OBUF1

OBUF0

DMACSW

SW

AXI Interconnect master

Configuration Register

AXI Interconnect slave

Page 24: Gpu vs fpga

ブロック図

• 基本ユニット

– Fp32 multiply and add x 4

– Fp32 x 8 variable input

– Fp32 x 4 constant input

– 4stage pipeline

MAD

MAD

MAD

MAD

INP

UNIT

Page 25: Gpu vs fpga

ブロック図

• UNIT2つとSFU1つをセットに数珠つなぎ – SFU

• RCP/RSQ/SIN/COS/EXP/LOG • Fp32bit x 1

• あくまで評価のための回路 – 多少なりとも使い物にしようとするなら、UNITの入力及びバッファを増やさな

いといけないが… • 配線使い過ぎるとFPGAには入らない • ホントはUNIT内部に比較器等入れて、簡単な分岐が出来るようにしたい

UNITUNIT

UNITUNIT

SFU

FIFO

SFU

FIFO

IBUF0

FIFO FIFO

Constant register

FIFO

UNIT

FIFO

OBUF0

1set

Page 26: Gpu vs fpga

FPGA構成

• AXIバスでARM側とつなぐだけ

– レジスタ設定用スレーブポートもAXIで

Page 27: Gpu vs fpga

事例その2 – 演算器アレイ

• 結果 – Slice LUT: 94.91% – Slice Reg: 35.57% – 入ったもの

• これだけ→

– 33 FP units • 1.65GFLOPS

– もちろん実際こんなに出ませんが

• 200MHzなら6.6GFLOPS

– 1ランク上のFPGAの場合

• XC7Z030CLG484 • 93FP units • 29.65GFLOPS

– 200MHzなら118.6GFLOPS

– Artixクラスだと制御系でかなりリソース食ってしまい、計算にリソースが回らない? • Z030はKintexクラスだそうで

UNITUNIT

UNITSFU

FIFOIBUF0

FIFO FIFO

Constant register

OBUF0

Page 28: Gpu vs fpga

まとめ

• 安価なFPGAではやれることが少ない

– 特に演算系

– 演算系ならGPUオススメ

• ASIC化を見据えたプロトタイプ作成用に魅力