世界最速のFPGA
ソーティングアクセラレータの初期検討
2016/03/17 情報処理学会 第78回全国大会 @慶應義塾大学日吉キャンパス
アクセラレータ(1)[1H会場] 発表12分 + 質疑応答3分
☆臼井 琢真†1 眞下 達†1 松田 裕貴†1 小林 諒平†1 吉瀬 謙二†1
†1 東京工業大学 大学院情報理工学研究科
A Study of the World’s Fastest FPGA Sorting Accelerator
発表の流れ
Motivation
►ソーティング – 主要な計算カーネル
►FPGAアクセラレータ
基本的なFPGA向けソーティングアーキテクチャ
過去の研究: FACE
高速化手法の検討
►マージソートツリーの改良
►複数要素を扱うマージネットワーク
見積もり
今後の課題
1
FPGAによる高速化が注目されています
ソーティング – 主要な計算カーネル
2
[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
データベース処理[1] 画像処理[2] データ圧縮[3]
DATA
FPGAアクセラレータ
FPGAアクセラレータ
►特定の処理を低消費電力かつ高速に実行可能
►科学技術計算やデータベース処理など
近年は次世代メモリの開発が盛ん
►Hyper memory cube, HBM2
►メモリ帯域によるボトルネックについては
今回は考えない
3
HMCイメージ図
過去の研究: ステンシル計算[4]
Microsoft Bing[5]
[4]小林諒平,吉瀬謙二, 多数の小容量FPGAを用いたスケーラブルなステンシル計算機, IPSJ ACS Transaction 44
[5] Andrew Putnam et al, A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services, ISCA’14
スタンフォード大学のCasperらのシステムが現在最も高性能
►FPGA’14で発表している
◇タイトル: “Hardware Acceleration of Database Operation”
◇著者: Jared Casper, Kunle Olukotun
►提案したシステムをXilinx Virtex-6 FPGA (XC6VSX475T)に実装し評価
このシステムよりも高性能なハードウェアを実現するための
アプローチを紹介する
現在世界最速のFPGAソーティングアクセラレータ
4
基本的な
ソーティングデータパス
5
基本的なソーティングデータパス
Sorting network [1]
►一定数のデータをソート
►様々なアルゴリズムで
構成可能
►Batcherの奇遇転置マージ
ソートが最適
►メモリバンド幅を活かせる
Merge sorter tree [4]
►多数のデータを
再帰的にソート
(マージソート)
6
Merge sorter tree
>
>
>
Sorting network
7
4
3
1
1
3
4
7
[1] Rene Mueller et al, Sorting Networks on FPGAs, The VLDB Journal 2012
[4] A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
複数のソート済みデータ列を1つにマージするデータパス
図は 4-way Merge Sorter Tree
ソート対象のデータ列が入力数より多い場合は複数回通す必要
基本的なアーキテクチャ – Merge Sorter Tree
7
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
> > ソートセル
FIFO
入力レーン
=
way
Merge Sorter Tree
Memory1に格納された値をソート
8
2
… 動作していないソートセル
>
>
>
4
6
5
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
16個
>
… 動作しているソートセル>
Memory1
Cycle N
Memory1から値を読み込む
9
2
Memory1
>
>
>
4
6
5
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
16個
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+1
10
Memory1
>
>
>
2
4
6
5
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
16個
… 動作していないソートセル>
… 動作しているソートセル>
2
5
Cycle N+2
Memory2に先頭から書き込み
11
Memory1
>
>
>
4
6
2
5
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
16個
… 動作していないソートセル>
… 動作しているソートセル>
4
2
6
Cycle N+3
12
Memory1
>
>
>
6
4
5
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
16個
… 動作していないソートセル>
… 動作しているソートセル>
2
4
6
Cycle N+4
13
Memory1
>
>
>
6
5
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
2
16個
… 動作していないソートセル>
… 動作しているソートセル>
4
5
6
Cycle N+5
14
Memory1
>
>
> 6
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
2
4
16個
… 動作していないソートセル>
… 動作しているソートセル>
5
6
Cycle N+6
最初の4要素がソートされる
15
Memory1
>
>
>
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
2
4
5
16個
… 動作していないソートセル>
… 動作しているソートセル>
6
Cycle N+7
残りに対してもこれを繰り返す
16
Memory1
>
>
>
3
1
7
8
1
4
7
4
3
6
9
1
Memory2
2
4
5
6
16個
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+14
17
Memory1
>
>
>
1
4
7
4
3
6
9
1
Memory2
2
4
5
6
1
3
7
8
16個
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+21
18
Memory1
>
>
>
3
6
9
1
Memory2
1
4
4
7
2
4
5
6
1
3
7
8
16個
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+28
Merge sorter treeが読むメモリを入れ替える
19
Memory1
>
>
>
Memory2
1
4
4
7
1
3
6
9
2
4
5
6
1
3
7
8
16個
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+28
4つの系列をマージ.各領域から読み込む
20
Memory1
>
>
>
Memory2
1
4
4
7
1
3
6
9
2
4
5
6
1
3
7
8
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+47
Memory1に完全にソートされた系列が格納される
21
1
Memory1
>
>
>
1
1
2
3
3
4
4
4
5
6
6
7
7
8
9
Memory2
1
4
4
7
1
3
6
9
2
4
5
6
1
3
7
8
… 動作していないソートセル>
… 動作しているソートセル>
ベーシックなソーティングアーキテクチャ
Initial Data Generatorでデータを生成
まずSorting networkでソートをし,Merge sorter treeで
繰り返しソーティング
22
DRAM
Host PC
>
>
>
3 2
3 2
32
3 2
323 2
3 2
32
32
51 2-bit
shift reg ister
3 2
5 12 -bit
shift reg ister
32
51 2-bit
shift reg ister
3 2
5 12 -bit
shift reg ister
3 2
5 1 2
5 1 2
51 2
51 2
Input Buffe
r
M erg e Sorter Tree
5 1 2-bit
shift reg ister
Initial Data
Generator
Sorting
Netw ork
5 12
5 12
5 12
5 12
DRAM
Controller
UART
Controller
Output Buffe
r
3 25 1251 2
5 1 2
5 1 2
5 12
51 2
1
64
FPGA
現状の
FPGAソーティングアクセラレータ
23
過去の研究: FACE (小林,MCSoC’15)
出力が1要素分のみではメモリのバンド幅を最大限活用できない
Merge sorter treeを複製,データ列を分割してソーティング
24
DRAM
Host PC
5 1 2-bit
shift reg ister
5 1 2-bit
shift reg ister
5 1 2-bit
shift reg ister
>
>
>
3 2
3 2
32
3 2
323 2
3 2
32
32
51 2-bit
shift reg ister
3 2
5 12 -bit
shift reg ister
32
51 2-bit
shift reg ister
3 2
5 12 -bit
shift reg ister
3 2
5 1 2
5 1 2
51 2
51 2
Input Buffe
r
M erg e Sorter Tree
Initial Data
Generator
Sorting
Netw ork
5 12
5 12
5 12
5 12
DRAM
Controller
UART
Controller
Output Buffe
r
3 25 1251 2
5 1 2
5 1 2
5 12
51 2
1
64
FPGA
Duplicated Log ics
5 1 2-bit
shift reg ister
複製の効果
4-way merge sorter treeを4つ複製した場合
256個の値のソート
…
逆順ソートされたデータ列
256 194 193 192 … 130 129 128 … 66 65 64 … 2 1
194193 … 256 129 130 … 192 65 66 … 128 1 2 … 64
21 … 64 65 66 … 128 129 130 … 192 193 194 … 256
最後のソーティングは
1つだけで行なう
現状のソーティングアクセラレータの性能(1)
データ列: 32bit, 合計1G要素
PCはIntel Core i7-4770K CPU 3.4GHz, 16GB DDR3搭載
8-way/8-parallelが, クイックソート比8.8倍, マージソート比10.6倍
26
0
10
20
30
40
50
60
SortingProcessTime[sec]
xorshift
sorted
reverse
Estimated
8.8x10.6x
ハードウェア使用量
8-way merge sorter tree/4-parallelから
16-way merge sorter tree/4-parallelにすると
ロジック使用量10%増
28
0
10
20
30
40
50
60
70
80
90
100
HardwareResourceUtilization[%]
FF
LUT Logic
LUT RAM
Block RAM
10%↑
世界最速に向けた検討
29
現状の問題点と解決策
問題1: ロジック使用量がway数の割に多い
►Casper+は8192-way
拡張1: ソートセルを各段1つにする
►各マージソートツリーにおいて各段高々平均1つしか動かない
問題2: 各ツリーは右端から毎サイクル一つずつしか出力できない
►高速なメモリのバンド幅を最大限活用できない
►ツリーを複製し並列動作させても最後は1つしか動作できない
拡張2: 複数要素を扱うマージネットワーク
詳細は,眞下 達 による発表
「Fast Merge Network for Sorting on FPGA」にて
30
Cycle N+24
Cycle N+24 – N+47の様子を見ていきます
31
Memory1
>
>
>
Memory2
1
4
4
7
1
3
6
9
2
4
5
6
1
3
7
8
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+25
32
Memory1
>
>
>
2
1
1
1
Memory2
4
4
7
1
3
6
9
4
5
6
3
7
8
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+26
33
Memory1
>
>
>
4 2
3
4
3 1
1
1
Memory2
4
7
6
9
5
6
7
8
… 動作していないソートセル>
… 動作しているソートセル>
Cycle N+27
34
Memory1
>
>
>
4
7 3
4 4
3
2
11
Memory2
7
6
9
5
6
8
… 動作していないソートセル>
… 動作しているソートセル>
1
Cycle N+28
35
1
Memory1
>
>
>
5 4
7
4 4
6 3
2
1
3
Memory2
7
9
6
8
… 動作していないソートセル>
… 動作しているソートセル>
1
Cycle N+29
定常状態: 毎サイクル1要素ずつデータを出力
►実際にソーティング対象となるデータ列は大きい
ソートセルは各段高々平均一つしか動かない
36
1
Memory1
>
>
>
5 4
8 7
4 4
6
2
3
3
1
Memory2
7
9
6
… 動作していないソートセル>
… 動作しているソートセル>
1
ロジック節約の手法
ソートセルを各層で一つにする
まとめられた各セルを「論理ソートセル」と呼ぶ
各段にあるFIFOもBlock RAMでまとめられる
37
> 論理ソートセル
Block RAM
> 物理ソートセル
>
>
>
>
>
>
>
>>
お詫びと理想性能の定式化
入出力が一つ分のみ
定常状態になるまでにかかるサイクル数が従来と異なる
次から理想性能を導出
38
> 論理ソートセル
>
>
>
>
>
>
>
Block RAM
> 物理ソートセル
>>
1サイクルに4要素出力できるソートセル[Casper+, FPGA’14]
複数の要素を扱えるソートセル
52
FIFOからデキューされた最初の要素は必ずソートセル内の
レジスタに格納される
ソートの様子 (Cycle 0)
53
2
4
6
8
3
3
5
7
2
4
6
8
10
12
14
16
11
13
17
19
FIFOからデキューされた要素とフィードバックされた要素を比較して
並び替える
ソートの様子 (Cycle 1)
54
3
3
5
7
2
4
6
8
11
13
17
19
10
12
14
16
18
20
22
24
FIFOからデキューされた要素とフィードバックされた要素を比較して
並び替える
ソートの様子 (Cycle 1)
55
3
3
5
7
2
11
13
17
19
10
12
14
16
18
20
22
24
3
3
4
6
5
8
7 2
4
6
8
FIFOからデキューされた要素とフィードバックされた要素を比較して
並び替える
ソートの様子 (Cycle 1)
56
3
3
5
7
2
11
13
17
19
10
12
14
16
18
20
22
24
3
3
4
6
5
8
7 2
4
6
8
最初の段で8つの要素における最小値と最大値が決定する
FIFOからデキューされた要素とフィードバックされた要素を比較して
並び替える
ソートの様子 (Cycle 1)
57
3
3
5
7
2
11
13
17
19
10
12
14
16
18
20
22
24
3
3
4
6
5
8
7 2
4
6
8
残りの段を通過することで出力すべき要素と,
フィードバックされる要素が決定する
FIFOからデキューされた要素とフィードバックされた要素を比較して
並び替える
ソートの様子 (Cycle 1)
58
3
3
5
7
2
11
13
17
19
10
12
14
16
18
20
22
24
3
3
4
6
5
8
7 2
4
6
8
残りの段を通過することで出力すべき要素と,
フィードバックされる要素が決定する
FIFOからデキューされた要素とフィードバックされた要素を比較して
並び替える
ソートの様子 (Cycle 1)
59
3
3
5
7
2
11
13
17
19
10
12
14
16
18
20
22
24
3
3
4
6
5
8
7 2
4
6
8
残りの段を通過することで出力すべき要素と,
フィードバックされる要素が決定する
小さい要素群が出力され,残りはレジスタに格納される
ソートの様子 (Cycle 1)
60
3
3
5
7
5
6
7
8
11
13
17
19
10
12
14
16
18
20
22
24
2
3
3
4
FIFOからデキューされた要素とフィードバックされた要素を比較して
並び替える
ソートの様子 (Cycle 2)
61
5
6
7
8
11
13
17
19
10
12
14
16
18
20
22
24
23
29
31
37
10
12
14
16
小さい要素群が出力され,残りはレジスタに格納される
Merge sorter treeのスループットが向上
Merge sorter treeの複製とセットで使える
ソートの様子 (Cycle 2)
62
5
6
7
8
11
13
17
19
10
12
14
16
18
20
22
24
23
29
31
37
10
12
14
16
提案するソーティングアーキテクチャ
ソートセルを複数要素扱うものに交換
►8要素を扱うソートセル(眞下による発表にて考慮されている)を考える
フィードバックを格納する分のBlock RAMも用意する
63
> 複数要素を扱う論理ソートセル
Block RAM
> 複数要素を扱う物理ソートセル
>
>
>
>
予備評価
65
性能見積もり
例として64-bit 512M要素 (4GB) のソーティングを想定
Casper+は8k-wayで200MHz
見積もりの式は予稿に記載のものを用いた
67
6.083 4.8
0
1
2
3
4
5
6
7
Proposed Casper+
Throughput[GB/s]
Sorting architecture
1.27x
ハードウェア使用量見積
 𝑙: データ幅 (bit)
Merge sorter tree 𝑖 層目で必要なBRAM容量
𝑙𝑀 × 2 × 2𝑖 + 2𝑖−1 = 5𝑙𝑀 × 2𝑖−1
よって,必要なBRAM容量𝑆は
𝑆 =
𝑖=0
log2 𝑘
(5𝑙𝑀 × 2𝑖−1
) = 5𝑙𝑀(𝑘 − 1)
性能見積もりの例(𝑘 = 8192, 𝑀 = 8, 𝑙 = 64)では
Block RAMは20.0Mbit必要
例: Xilinx Virtex-7 XC7VX485T
►37.1Mbit Block RAM
BRAM容量に余裕がある -> 実装の可能性!
68
まとめと今後の課題
69
FPGAを用いた世界最速のソーティングハードウェアの実現に向け
たアプローチを紹介
►2つの手法を組み合わせたベーシックなアーキテクチャ
►マージソートツリーの改良
►ソートセルの改良 – マージネットワーク
性能モデルによる見積もり
►関連研究比1.27倍の性能予測
◇関連研究は8k-way @ 200MHzの構成
►ハードウェア使用量的にも実装可能性有
今後の課題
►複数要素を扱うソートセルの最適化,Merge sorter tree回路の実装お
よび検証
まとめと今後の課題
70
発表履歴
電子情報通信学会研究会(RECONF) 発表 (2015/01/30)
►「USB3.0接続の手軽で高速なFPGAアクセラレータ」
►臼井 琢真,小林 諒平,吉瀬 謙二
第77回 情報処理学会(IPSJ) 全国大会 発表 (2015/03/17)
►「手軽な外付けFPGAアクセラレータによるソーティングの高速化」
►臼井 琢真,吉瀬 謙二
ARC 2015 POSTER SESSION (2015/04/17)
►“A Challenge of Portable and High-speed FPGA Accelerator”
►Takuma USUI, Ryohei KOBAYASHI, Kenji KISE
71
Block RAM レイテンシの対処
Block RAMのみ倍の周波数で動かし,前半のサイクルで読込み
後半のサイクルで書込むことで対処
Xilinx UltraRAMの使用
►Xilinx UltraScale+シリーズに搭載
►一般的なBlock RAMとは異なり1サイクルアクセス可能
◇一般的なBlock RAMは2サイクルアクセス
►容量はVU3P(Virtex UltraScale+シリーズ最小)でも90.0Mbit
◇Block RAMの容量25.3Mbitよりも3.56倍多い
►今回のFPGAアクセラレータに対する恩恵は大きい
72
Merge Sorter Tree
例: data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {}
81
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5 3
3 1
2 2
Unit: ソート済みデータ列
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {}
82
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5 3
3 1
2 2
3
1
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {}
83
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5
3
2 2
3
1
5
2
1
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {1}
84
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5
3
2
3
2
5
2
2
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {1,2}
85
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5
3
3
2
5
3
2
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {1,2,2}
86
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5
3
3
5
3
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {1,2,2,3}
87
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5
3
8
3
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {1,2,2,3,3}
88
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>
9 8
5
8
5
Merge Sorter Tree
data = {8, 9, 3, 5, 1, 3, 2, 2}
out = {1,2,2,3,3,5,8,9}
89
参考: A high performance sorting architecture exploiting run-time reconfiguration on fpgas for large problem sorting.
(Dirk Koch and Jim Torresen, FPGA ’11,)
>
>
>

Zenkoku78