More Related Content
Similar to Gpu vs fpga (20)
Gpu vs fpga
- 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へ
- 9. GPUの初歩
•
ROP(Rendering Output Pipeline / Rasterize OPeration)
–
–
–
–
–
–
シェーダから1pixelのカラーを受け取って
Zバッファを読んでそのピクセルを描画すべきか判定して
そのpixelが一番手前ならZバッファを更新して
(フレームバッファから既に書かれているカラーを読んで)
(シェーダからのアルファ値に従ってブレンドして)
フレームバッファに書き込む
頂点データ
テーブル/パラメタ
頂点データ
処理
Zバッファ
トライアングル
セットアップ
スケジューラ
ユニファイドシェーダと
テクスチャユニットだけを使うのが
GPGPU
頂点バッファ
ユニファイド
シェーダ
ROP
フレームバッファ
ラスタライザ
テクスチャユニット
テクスチャデータ
- 11. GPUの特徴
• スループットコンピューティング
– グラフィックスはmsの世界
– CPUはレイテンシコンピューティング?
– FPGAはどちらにも振れる
• 最短のレイテンシを得るならFPGA
• 浮動小数点演算重視
– 圧倒的なFLOPS値
• もはやTFLOPSに
• ただし電力食い
– 整数無視と言っても良いぐらい
• 最近はそうでもないけど
– GPUで整数演算をするのはもったいないかも
• 電力効率最悪かも
• 整数ならFPGA大活躍の可能性
- 17. 事例その1 - GPU
• FPGAにGPUを入れてみる。
– 使ったもの
• TED社製FPGAボード
– Xilinx Virtex7使用(XC7V2000T)
» ハイエンドもいいところ
– お値段約xxx万円(当時)
– 入れたもの
• DMP OpenGLES3.0準拠GPU
– SMAPH-S
– 4 shaders
» 4SIMD x 4
- 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側
へ書き戻し
- 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