FPGAベースのソーティング
アクセラレータの設計と実装
小林 諒平† 吉瀬 謙二†
†東京工業大学 大学院情報理工学研究科
2015年04月17日 10:50-11:15
コンピュータシステム研究会@明治大学中野キャンパス
ディペンダブルコンピューティングシステムおよび一般
講演時間20分 + 質疑5分
l FPGAベースのソーティングアクセラレータの
設計と実装
Ø キーワード
﹣ FPGA
﹣ アクセラレータ
﹣ ソーティングネットワーク
﹣ マージソートツリー
概要
1
……, 3, 1, 2, 4
1
2
34
2
はじめに
l FPGAによる高速化の研究が注目されている
FPGAベースのソーティングシステム(1/2)
3
データベース[1] 画像処理[2] データ圧縮[3]
[1] Rene Mueller et al, Sorting Networks on FPGAs, The VLDB Journal 2012
[2] Ratnayake, K et al,
An FPGA Architecture of Stable-Sorting on a Large Data Volume : Application to Video Signals,
CISS 2007
[3] Martinez, J et al,
An FPGA-based parallel sorting architecture for the Burrows Wheeler transform
ReConFig 2005
l しかし,提案されたシステムはさほど高性能
ではない.
l [1]では
Ø Xilinx Virtex-5に提案システムを実装し評価
Ø Virtex-5に組み込まれているPower PC440と比較
して1.1倍高速
l [2]では
Ø Altera Stratix IVに提案システムを実装し評価
Ø 666MHzで動作するARM CortexA9と比較して
13倍高速
FPGAベースのソーティングシステム(2/2)
4
[1] Rene Mueller et al, The VLDB Journal 2012
[2] Yuhui Bai et al, FPGA 14
l 以下の2つのソーティングアーキテクチャを
採用したハードウェアを提案
Ø ソーティングネットワーク
Ø マージソートツリー
提案手法
5
1
4
3
2
4
3
2
1
>
>
>
ソーティングネットワーク
FPGA
マージソートツリー
6
ソーティングネットワーク
l ワイヤ,コンパレータから構成される,数列を
ソートするネットワーク
l 例:4つの要素をソートするネットワーク
ソーティングネットワーク*
7
1
4
3
2
4
3
2
1
バブルソートのネットワーク
* Donald E. Knuth. The Art of Computer Programming. 1998.
l バッチャー奇遇マージソート*
Ø 最も高効率なソーティングネットワーク**
提案するハードウェアに組み込まれている
ソーティングネットワーク
8
IN OUT
16本の入出力を有するバッチャー奇遇マージソーティングネットワーク
* K. E. Batcher et al, Sorting Networks and Their Applications, AFIPS '68
** Rene Mueller et al, Sorting Networks on FPGAs, The VLDB Journal 2012
l ソーティングネットワークとは
Ø ワイヤ,コンパレータから構成される数列をソート
するネットワーク
Ø コンパレータの接続方法を変更することで様々な
ソーティングアルゴリズムを実装出来る
l 利点
Ø 要素を並列にソートできる
Ø 複雑な制御機構を必要としない
l 欠点
Ø 大きなデータセットには不向き
﹣ コンパレータの数が膨大に...
ソーティングネットワークのまとめ
9
10
マージソートツリー
l ソートセルを2分木状に接続することによって構
成される,マージソートを実行するデータパス
マージソートツリー*
11
>
>
>
FIFO
ソートセル>
4-way マージソートツリー
* Dirk Koch et al, FPGASort, FPGA 11
l マージソートツリーでソートが実行される様子
マージソートツリーでのソート
12
>
>
>
>
>
>
>
>
>
89
35
13
22 1
3
3
22
1
2
1
89
5
3
7 5
1
2
3
2
5
22
3
7
98
x
x: Invalid Value
Cycle N Cycle N+1 Cycle N+2
13
提案するソーティングハードウェアの
設計と実装
l ソーティングハードウェアのデータパス
Ø データ型は32bitの整数型
提案するソーティングハードウェア
14
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
デバッグ用のモジュール
15
例:1 256のソーティング
l Initial Data Generatorから生成された
初期データをDRAMにライトする
1 256を昇順にソートする
16
256 255 254 … 64 63 …
3 2 1
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
l 降順の並びのデータ列がDRAMに書き込まれる
Ø これを昇順にソートする
1 256を昇順にソートする
17
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
256
255
254
253
252
1
l DRAMから読み出してSorting Networkに
転送する
1 256を昇順にソートする
18
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
256
255
254
…
6463…321
256
255
254
253
252
1
l Sorting Networkで16要素ずつソートされる
Ø ソート済みのデータ列が16個できる
1 256を昇順にソートする
19
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
16 … 3 2 1 32 … 19 18 17 256 … 243 242 241
ソート済みのデータ列(16要素)
256
255
254
253
252
1
l Input Bufferに格納された後,Merge Sorter
Treeに送られる
1 256を昇順にソートする
20
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
241242243256…
225226240…
224…
208…
227
210211
194195
209
193
256
255
254
253
252
1
l Merge Sorter Treeの根からソートされた
データ列が出力される
1 256を昇順にソートする
21
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
241242243256…
226227240…
224…
208…
228
210211 209
193 194
195
…
196
201
202
225
203
256
255
254
253
252
1
l 16要素ずつソートされたデータ列がマージされ,
ソート済みのデータ列が4個できる
1 256を昇順にソートする
22
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
64 … 3 2 1 128 … 67 66 65 256 … 195 194 193
ソート済みのデータ列(64要素)
192 … 131 130 129256
255
254
253
252
1
l Merge Sorter Treeから出力されたデータ列を
DRAMにライトする
1 256を昇順にソートする
23
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
193 194 195 196 197
198
199 200 201 202 203 204 ……
この領域にライト256
255
254
253
252
1
l データ列が完全にソートされていない
(部分的にソートされた列が4つ)
Ø 再び,Merge Sorter Treeに通す必要がある
1 256を昇順にソートする
24
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
256
255
254
253
252
1
193
194
195
62
63
64
l DRAMから読み出してSorting Networkに
転送する
1 256を昇順にソートする
25
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
193
194
195
…
129130…626364
この領域からリード256
255
254
253
252
1
193
194
195
62
63
64
l このとき,Sorting Networkはただのデータの
通り道
Ø 既に部分ごとのソートは実行されているため
1 256を昇順にソートする
26
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
256
255
254
253
252
1
193
194
195
62
63
64
l Input Bufferに格納された後,Merge Sorter
Treeに送られる
1 256を昇順にソートする
27
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
256
255
254
253
252
1
193
194
195
62
63
64
193194195256…
129130192…
128…
64…
131
6667
23
65
1
l Merge Sorter Treeの根からソートされた
データ列が出力される
1 256を昇順にソートする
28
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
256
255
254
253
252
1
193
194
195
62
63
64
64…
1 2 3
…
4
51
52
225
53
193194195256…
129130192…
128…
131
6667 65
l Merge Sorter Treeから出力されたデータ列を
DRAMにライトする
1 256を昇順にソートする
29
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
1 2 3 4 5
6
7 8 9 10 11 12 ……
この領域にライト256
255
254
253
252
1
193
194
195
62
63
64
l データ列が完全にソートされた
Ø DRAM -> Sorting Network -> Merge Sorter Tree
-> DRAMのパスを通す事でデータ列をソートできる
﹣ パスを通す回数:logway数(要素数/16)
1 256を昇順にソートする
30
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
1
2
3
4
5
256
193
194
195
62
63
64
l 完全にソートされたデータ列をHost PCに送信
Ø ソフトウェアとソート結果を比較してアクセラレータ
が正しく動作しているかを検証
1 256を昇順にソートする
31
DRAM
Host PC
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
DRAMの中身
1
2
3
4
5
256
193
194
195
62
63
64
この領域からリード
1 2 3
4
56…
l 使用したプラットフォーム
Ø Xilinx FPGA VC707評価キット
ハードウェアの実装(1/2)
32
Power In
UART Port
JTAG Port
DDR3 SO-DIMM DRAM
(4GB*, 800MHz/1600Mbps)
* 評価ボード付属のメモリは1GB 800MHz/1600MbpsのDDR3 SO-DIMMメモリ
Virtex-7 VX485T FPGA
l Verilog HDLで回路を記述
l 論理合成ツールはVivado2014.4
Ø 合成オプションの設定はデフォルト
l DRAMコントローラの実装
Ø Xilinxが提供しているIPコアを利用
l Initial Data Generator
Ø 以下の数列の生成をサポート
﹣ 疑似乱数生成器Xorshift*によるランダムな数列
﹣ ソート済みの数列
﹣ 逆順にソートされた数列
ハードウェアの実装(2/2)
33
* George Marsaglia, Xorshift RNGs, Journal of Statistical Software 2003.
34
ソーティングハードウェアの評価
l  ソーティングの実行時間とハードウェアリソース
使用率を評価
Ø データセットは256M個 int型の要素(1要素:4Byte)
l  対戦相手:Intel Corei7-4770 @ 3.4GHz
Ø シングルスレッド
Ø gcc 4.8.2 (-O3オプション)
Ø ソーティングアルゴリズム
﹣ マージソート
﹣ クイックソート
l  実行時間の計測方法
Ø FPGA -> 実行サイクル数をカウンタで取得して算出
Ø CPU -> gettimeofday
評価
35
l Xorshiftの場合で比較
8-wayでの性能向上率
﹣ 3.05倍(マージソート比), 2.42倍(クイックソート比)
Ø 16-wayでの性能向上率
﹣ 4.07倍(マージソート比), 3.24倍(クイックソート比)
ソーティングの実行時間の比較
36
0
10
20
30
40
50
60
merge sort quick sort 8-way 16-way
SortingProcessTime[sec]
xorshift
sorted
reverse
ü  動作周波数
ロジック -> 200MHz
DRAM -> 800MHz
l 8-way, 16-wayの構成のハードウェアリソース
使用率
ハードウェアリソース使用率の評価
37
0
10
20
30
40
50
60
70
80
90
100
FF LUT LUT RAM BlockRAM
HardwareResourceUtilization[%]
8-way
16-way
l マージソートツリーを複製してスループット
を向上
マージソートツリーの複製による性能向上
38
DRAM
Host PC
512-bit
shift register
512-bit
shift register
512-bit
shift register
>
>
>
32
32
32
32
3232
32
32
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512-bit
shift register
32
512
512
512
512
Input Buffer
Merge Sorter Tree
512-bit
shift register
Initial Data
Generator
Sorting
Network
512
512
512
512
DRAM
Controller
UART
Controller
Output Buffer 32512512
512
512
512
512
1
64
FPGA
0
10
20
30
40
50
60
merge sort quick sort 8-way/8-parallel
SortingProcessTime[sec]
xorshift
sorted
reverse
l Xorshiftの場合で比較
Ø マージソートと比較して10.06倍高速化
Ø クイックソートと比較して8.01倍高速化
性能評価
(マージソートツリーを8個複製)
39
ü  動作周波数
ロジック -> 200MHz
DRAM -> 800MHz
10.06x
8.01x
l 8-way/8-parallelの構成のハードウェア
リソース使用率
ハードウェアリソース使用率の評価
40
0
10
20
30
40
50
60
70
80
90
100
FF LUT LUT RAM BlockRAM
HardwareResourceUtilization[%]
Input BufferとOutput Bufferの
エントリ数を適切に設定すれば
改善される可能性がある
l 8-way/8-parallelのソーティングハードウェア
Ø 一般的なデスクトップと比較して最大10倍高速に
動作
Ø しかし,関連研究[Casperら, FPGA 14]と比較して
約7倍低速...
l 関連研究が高速である理由
Ø way数が多い(8k-way 2)ため,FPGA内でソート
出来る要素が多い
Ø マージソートツリーが高スループット
関連研究との比較
41
l 例:1サイクルに4要素出力できるソートセル
Ø フィードバックパスを取り入れているのがポイント
関連研究[Casperら, FPGA 14]の手法
42
Hardware Acceleration of Database Operation の
154ページFigure 6から引用
l 関連研究より更に高速なソーティング
ハードウェアの実現
Ø ソーティングロジックのスループットの向上
﹣ マージソートツリーの改良
﹣ マージソートツリーの複製
Ø メモリバンド幅の使用効率の手法
﹣ ソーティングロジックのスループットが高くなる
→メモリバンド幅がシステム全体のボトルネック
﹣ メモリバンド幅の使用効率を向上させ,かつ動作周波数
を低下させない手法が必要
今後の方針
43
44
まとめと今後の課題
l  本研究の主張
Ø  2つの手法を組み合わせた高速なソーティングシステムを提案
﹣ ソーティングネットワーク,マージソートツリー
Ø  提案したシステムをHDLで記述し,正しく安定して動作している
ことを確認
l  性能(8-way/8-parallel)
Ø  周波数: 200MHz
Ø  Intel Corei7-4770 @ 3.4GHz(シングルスレッド)と比較して
﹣ 10.06倍高速(マージソート比),8.01倍高速(クイックソート比)
l  関連研究[Casperら, FPGA 14]との比較
Ø  我々のシステムは約7倍低速である
l  今後の課題
Ø  ソーティングアクセラレータを更に高速化
﹣ マージソートツリーの改良
﹣ メモリバンド幅の使用効率を向上させるための手法の検討
まとめと今後の課題
45

FPGAベースのソーティングアクセラレータの設計と実装