SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
1
© Hitachi, Ltd. 2022. All rights reserved.
株式会社 日立製作所 研究開発グループ
デジタルプラットフォームイノベーションセンタ データストレージ研究部
2022/7/26
島田 健太郎
複雑なアルゴリズムのハード化における高位合成の活用事例
第9回ACRiウェビナー
© Hitachi, Ltd. 2022. All rights reserved.
1. 自己紹介
2. 背景:複雑なアルゴリズムのハード化における課題・高位合成の利点
3. 題材:圧縮アルゴリズムLZMA
4. 課題:高位合成の初期試行状況
5. 施策①:メモリアクセス幅拡大
6. 施策②:データフロー化
7. 施策③:文字列比較ループアンローリング
8. 評価:本事例における改善施策の効果
9. 高位合成の活用まとめ
Contents
1
0
1
2
2
© Hitachi, Ltd. 2022. All rights reserved.
1.自己紹介
島田 健太郎 研究開発グループ デジタルプラットフォームイノベーションセンタ データストレージ研究部 所属
• 1993年入社
• 入社当初は、スーパーコンピュータのプロセッサの設計開発に従事
• その後、ハードウェア・アーキテクチャの研究開発に従事
• 論理設計は、ASICで、RTLやゲートレベル設計/スケマティックな設計を経験
• 今回、FPGAを用いて複雑なアルゴリズムをハード化するに当たり、高位合成の活用を行った
ゲートレベル設計/スケマティック設計
Adder(int a, int b, int c) {
c = a + b;
}
高位合成(高位言語記述)
a
b c
3
© Hitachi, Ltd. 2022. All rights reserved.
2.1 背景(1):複雑なアルゴリズムのハード化における課題
1. 複雑なアルゴリズムをハード化する場合、通常のRTL設計であると、詳細設計・実装設計を含め、
多大な開発工数を要し、ハード化の見通しを得るのに⾧期間かかる
2. 設計当初の段階(仕様設計/機能設計段階)では、性能や物量の見通しが困難
3. 設計した結果を性能等評価できるのが、後工程となり、フィードバックを行う工数大
4. 更に元のアルゴリズムレベルでの最適化を行うと、多大な再設計の工数が発生
詳細設計
(RTL設計)
実装設計
FPGA
論理合成
仕様設計/機能設計
RTL
記述
実装結果
•性能(詳細)
•物量(詳細)
機能仕様/アルゴリズム
改善/最適化(フィードバック)
(実装改善) 実装情報
(部分的RTL改善)
アルゴリズムレベル改善⇒大工数発生
RTL設計過程(イメージ)
2
3
3
4
© Hitachi, Ltd. 2022. All rights reserved.
2.2 背景(2):複雑なアルゴリズムのハード化における高位合成の利点
1. 高位言語で記述された複雑なアルゴリズムでも、短期間でハードウェア化の見通しが得られる
2. 最低限達成可能な、性能や物量が早期にわかる
3. 性能や物量を、早期にプロファイルデータから見ることにより、フィードバックの工数低減可能
4. アルゴリズムレベルでの最適化が容易
Adder(int a, int b, int c) {
c = a + b;
}
高位合成
合成結果
高位言語ソース
(アルゴリズム記述)
FPGA
プロファイル
データ
•性能(全体、関数単位)
•物量(同上)
•詳細データ(依存関係等)
改善/最適化(フィードバック)
仕様設計/機能設計
高位合成設計過程
(イメージ)
5
© Hitachi, Ltd. 2022. All rights reserved.
3. 題材:圧縮アルゴリズム LZMA
• 複雑なアルゴリズムへの適用事例として、圧縮アルゴリズム
LZMA(Lempel-Ziv-Markov chain-Algorithm)を取
り上げる。
• LZMAは、圧縮率の高い可逆圧縮アルゴリズム。
辞書圧縮部と、レンジコーダによる符号化部からなる。
 辞書圧縮部:
①入力データをバイト列として“辞書”に登録
②”辞書”の内容を探索し、入力データ内の重複を抽出
 レンジコーダ:
①データ重複パターンに基づき、0/1の出現確率を予測
②予測との差分を符号に生成
• ハード化は、辞書探索の制御が複雑になる辞書圧縮部の
方が、確率計算の反復で処理できるレンジコーダより難
A B C D A B C E
入力
データ
A B C D E
圧縮
データ
辞書に登録
4文字前と3字一致
図A. 辞書圧縮部の動作例
先 後
A B C D E
圧縮
データ
4文字前と3字一致
0 0 1 0 1 1 1 0
重複パターンを示す
0/1の記号列(中間コード)
図B. レンジコーダの動作例
先行するビットパターンで次の1bitの0/1の
出現確率を予測
予測との差分を
符号に生成
4
5
4
6
© Hitachi, Ltd. 2022. All rights reserved.
4. 課題:高位合成の初期試行状況
• LZMAのオープンソース(C言語)をベースに、高位合成を試行
 合成することはできた。
 性能は、見積りの約1/40(圧縮処理時間40倍)。
• プロファイルデータより要因分析
 最大の要因は、辞書圧縮部で、文字列検索のためのハッシュテーブルを更新する箇所
⇒1バイトずつアクセスし、更新していた。
 その他は、辞書圧縮部とレンジコーダ部が逐次に実行される構造。
⇒辞書圧縮部がレンジコーダ部の処理完了を待つ。
 また、辞書圧縮部の文字列検索自体も1文字ずつ比較。
Adder(int a, int b, int c) {
c = a + b;
}
高位合成
合成結果
高位言語ソース
プロファイル
データ
改善/最適化(フィードバック)
7
© Hitachi, Ltd. 2022. All rights reserved.
4. 課題:高位合成の初期試行状況
Adder(int a, int b, int c) {
c = a + b;
}
高位合成
合成結果
高位言語ソース
プロファイル
データ
改善/最適化(フィードバック)
• LZMAのオープンソース(C言語)をベースに、高位合成を試行
 合成することはできた。
 性能は、見積りの約1/40(圧縮処理時間40倍)。
• プロファイルデータより要因分析
 最大の要因は、辞書圧縮部で、文字列検索のためのハッシュテーブルを更新する箇所
⇒1バイトずつアクセスし、更新していた。
①メモリのアクセス幅拡大
 その他は、辞書圧縮部とレンジコーダ部が逐次に実行される構造。
⇒辞書圧縮部がレンジコーダ部の処理完了を待つ。
②データフロー化
 また、辞書圧縮部の文字列検索自体も1文字ずつ比較。
③文字列比較ループアンローリング
6
7
5
8
© Hitachi, Ltd. 2022. All rights reserved.
5.1 施策①:メモリのアクセス幅拡大(1):概要
コピー元配列
コピー先配列
コピー元配列
コピー先配列
Start
i = 0
d[i] = s[i]
i < N?
End
s[]
d[]
s[]
d[]
t[]
i = i + 1
Start
i = 0
t[0] = s[i]
t[1] = s[i + 1]
...
t[7] = s[i + 7]
i < N?
End
i = i + 8
d[i] = t[0]
d[i + 1] = t[1]
...
d[i + 7] = t[7]
No
Yes
No
Yes
• 配列から配列にデータをコピーするケース
 配列は、コピー元・コピー先とも、FPGAの内部メモリにマップするケース
• 配列から配列へ直接コピーする記述や、ループ・アンローリングがされない
場合に、1要素ずつの逐次コピーになり易い
• 途中にレジスタ配列を置き、ループ展開することで複数要素同時にコピー
• 配列から配列にデータをコピーするケース
 配列は、コピー元・コピー先とも、FPGAの内部メモリにマップするケース
• 配列から配列へ直接コピーする記述や、ループ・アンローリングがされない
場合に、1要素ずつの逐次コピーになり易い
• 途中にレジスタ配列を置き、ループ展開することで複数要素同時にコピー
レジスタ配列
• レジスタ配列を
経由
• ループ・
アンローリング
• レジスタ配列を
経由
• ループ・
アンローリング
1要素ずつコピー 複数要素
同時コピー
(コピー元/コピー先配列ともFPGA内部
メモリにマップ)
9
© Hitachi, Ltd. 2022. All rights reserved.
5.2 施策①:メモリアクセス幅拡大(2): ハッシュテーブル更新 元の構造
文字列(9文字) 位置 文字列(9文字)
①先頭4文字で
ハッシュ値計算
位置
②一組ずつシフト
③先頭に記録
先 後
ハッシュテーブル
入力データ
(辞書)
16bit 8bit×9文字 = 72bit
Start
①先頭4文字でハッシュ値を計算
i = 7
i ≧1?
ハッシュテーブル[ハッシュ値][i].位置
=ハッシュテーブル[ハッシュ値][i-1].位置
現在位置
j = 0
コピー先文字列[j] = コピー元文字列[j]
j = j +1
i = i - 1
j < 9?
ハッシュテーブル[ハッシュ値][0].位置
=現在位置
9文字コピー:
ハッシュテーブル[ハッシュ値][0].文字列
= 現在位置の文字列
9文字コピー:
ハッシュテーブル[ハッシュ値][i].文字列 =
ハッシュテーブル[ハッシュ値][i-1].文字列
End
9文字コピー
End
②一組ずつシフト ③先頭に記録
• ハッシュテーブルに辞書内の位置と先頭の
9文字ずつが登録されている
• 既存内容を移動(シフト)した上で、入力デー
タの現在位置からの9文字を新規登録
• ハッシュテーブルに辞書内の位置と先頭の
9文字ずつが登録されている
• 既存内容を移動(シフト)した上で、入力デー
タの現在位置からの9文字を新規登録
先頭から検査
ハッシュテーブル更新
のフローチャート(元)
(サブルーチンで記載)
No
Yes
No
Yes
(16bit+72bit)×8(シノニム) = 704bit(88byte)
大きなエントリを
1文字(バイト)ずつ
逐次アクセス
8
9
6
10
© Hitachi, Ltd. 2022. All rights reserved.
5.3 施策①:メモリアクセス幅拡大(3):ハッシュテーブル更新 改善策
• ハッシュテーブルを、位置の情報のテーブルと
文字列のテーブルに分割
• エントリ(位置+文字列8組分)をレジスタに
ずらして読上げ、書き戻す
• ハッシュテーブルを、位置の情報のテーブルと
文字列のテーブルに分割
• エントリ(位置+文字列8組分)をレジスタに
ずらして読上げ、書き戻す
位置
16bit
位置
16bit×8 = 128bit
位置
72bit×8 = 576bit
①先頭4文字で
ハッシュ値計算
②ずらして読み上げ
③先頭に格納
先 後
ハッシュテーブル
(分割後)
入力データ
(辞書)
16bit 8bit×9文字 = 72bit
現在位置 先頭から検査
文字列(9文字)
レジスタ
④書き戻し
Start
①先頭4文字でハッシュ値を計算
i = 7
i ≧1?
レジスタ(位置)[i]
=ハッシュテーブル(位置)[ハッシュ値][i-1]
i = i - 1
レジスタ(位置)[0] = 現在位置
9文字コピー(プラグマでアンローリング)
レジスタ(文字列)[0]=現在位置の文字列
9文字コピー(プラグマでアンローリング)
レジスタ(文字列)[i] =
ハッシュテーブル(文字列)[ハッシュ値][i-1]
End
②ずらして読み上げ ③先頭に格納
ハッシュテーブル更新の
フローチャート(改善版)
位置、文字列をそれぞれ
並列にアクセス
No
Yes
ハッシュテーブル(位置)[ハッシュ値][0~7]
= レジスタ(位置)[0~7]
9文字コピー(プラグマでアンローリング)×8:
ハッシュテーブル(文字列)[ハッシュ値][0~7]
= レジスタ(文字列)[0~7]
④書き戻し
②
④
③
11
© Hitachi, Ltd. 2022. All rights reserved.
6.1 施策②:データフロー化(1) データーフロー化適用前
• 二つの処理を含むループ
• それぞれの処理の間で、変数を用いて、一方から他方へデータを受け渡し
⇒それぞれの回路が逐次動作となる
• 二つの処理を含むループ
• それぞれの処理の間で、変数を用いて、一方から他方へデータを受け渡し
⇒それぞれの回路が逐次動作となる
Start
初期化処理
処理a
終了判定
処理b
End
終了処理
変数
変数
変数
初期化処理
回路
処理a 回路
処理b 回路
判定回路
終了処理
回路
初期データ
中間データ
出力データ
繰返し
信号
終了データ
時間軸 T1 T2 T3 T4 T5 T6 T7 T8
初期化回路 動作
処理a 回路 動作 動作 動作
処理b 回路 動作 動作
判定回路 動作 動作
終了処理回路
逐次動作:3サイクルピッチ
処理フローチャート 回路構成
10
11
7
12
© Hitachi, Ltd. 2022. All rights reserved.
6.2 施策②:データフロー化(2) データフロー化適用後
• 二つの処理のループを分割
• 分割したループの処理の間で、FIFO(ストリーム変数)を用いてデータを受け渡し
⇒それぞれの回路の並列動作が可能となる
• 二つの処理のループを分割
• 分割したループの処理の間で、FIFO(ストリーム変数)を用いてデータを受け渡し
⇒それぞれの回路の並列動作が可能となる
Start
初期化処理
処理a
終了判定b
処理b
End
終了処理
変数
変数
初期化処理
回路
処理a 回路
処理b 回路
判定b回路
終了処理
回路
初期データ
中間データ
出力データ
繰返し
信号
終了データ
時間軸 T1 T2 T3 T4 T5 T6 T7 T8
初期化回路 動作
処理a 回路 動作 動作 動作 動作
判定a回路 動作 動作 動作
処理b 回路 動作 動作 動作
判定b回路 動作 動作
終了処理回路
終了判定a
判定a回路
中間データ
中間データ
FIFO
繰返し
信号
FIFO
並列(オーバーラップ)動作: 2サイクルピッチ
13
© Hitachi, Ltd. 2022. All rights reserved.
6.3 施策②:データフロー化(3) LZMAにおける適用
• 辞書圧縮部と、レンジコーダの呼び出しに適用
⇒辞書圧縮部と、レンジコーダを並列動作させ、動作時間をほぼ半減
• 辞書圧縮部と、レンジコーダの呼び出しに適用
⇒辞書圧縮部と、レンジコーダを並列動作させ、動作時間をほぼ半減
Start
辞書圧縮部
終了?
レンジコーダ
End
Start
辞書圧縮部
終了?
レンジコーダ
End
終了?
No
Yes
No
Yes
時間軸 T1 T2 T3 T4 T5 T6
辞書圧縮部 動作 動作 動作
レンジコーダ 動作 動作 動作
辞書圧縮回路
レンジコーダ回路
中間データ
圧縮データ
平文データ
繰返し
信号
No
Yes
時間軸 T1 T2 T3 T4 T5 T6
辞書圧縮部 動作 動作 動作 動作 動作 動作
レンジコーダ 動作 動作 動作 動作 動作
FIFO
辞書圧縮回路
レンジコーダ回路
中間データ
圧縮データ
平文データ
FIFO
中間データ
12
13
8
14
© Hitachi, Ltd. 2022. All rights reserved.
7.1 施策③:文字列比較ループアンローリング(1):アンローリング適用前
• 配列中の二つの文字列を比較し、連続し
て一致する文字数を数える
 配列はFPGA内メモリへマップされている
 二つの文字列とも、配列中の任意の位
置から、始まる
 最大の比較文字数が指定される
• 単純にプログラム記述すると、1文字
(1byte)ずつの比較となる。
 ループ中に(ループ変数を使った)文字
数判定の条件文があるので、アンローリ
ングされても1文字ずつの逐次処理と
なる(並列処理されない)
 配列のアクセスも、それぞれの文字列を
1文字ずつのアクセスとなる
• 配列中の二つの文字列を比較し、連続し
て一致する文字数を数える
 配列はFPGA内メモリへマップされている
 二つの文字列とも、配列中の任意の位
置から、始まる
 最大の比較文字数が指定される
• 単純にプログラム記述すると、1文字
(1byte)ずつの比較となる。
 ループ中に(ループ変数を使った)文字
数判定の条件文があるので、アンローリ
ングされても1文字ずつの逐次処理と
なる(並列処理されない)
 配列のアクセスも、それぞれの文字列を
1文字ずつのアクセスとなる
N bytes
文字列a
(先頭位置a)
文字列b
(先頭位置b)
N bytes
文字列が格納されている配列:
(FPGA内部メモリへマップ)
Start
i = 0
i < N?
End
i = i + 1
i文字目は
一致したか
No
Yes
No
Yes
N:最大比較文字数
連続して一致する文字数を数える
最大比較
文字数N
未満か
文字列検索(比較)の
フローチャート(元)
15
© Hitachi, Ltd. 2022. All rights reserved.
7.2 施策③:文字列比較ループアンローリング(2):条件分岐への対応
•1文字ずつの比較を行う条
件文と、ループの繰返しを分
ける
I. アンロールする数を決め
る(右例では、8)
II. 最大比較文字数に至る
まで、アンロールした数分
の比較を行い、一致数
を数える
III. ループの繰返しは、数え
た一致数が、アンロール
した数まで達したかどうか
で判定する
•1文字ずつの比較を行う条
件文と、ループの繰返しを分
ける
I. アンロールする数を決め
る(右例では、8)
II. 最大比較文字数に至る
まで、アンロールした数分
の比較を行い、一致数
を数える
III. ループの繰返しは、数え
た一致数が、アンロール
した数まで達したかどうか
で判定する
Start
i = 0
i < N?
End
1文字目は
一致したか
?
No
Yes
No
Yes
次の1文字目は、
N文字未満か
C = 0
i + 1 < N?
2文字目は
一致したか
?
No
Yes
No
Yes
C = 1
0文字一致
2文字目は、
N文字未満か
1文字一致
Yes
i + 7 < N?
8文字目は
一致したか
?
No
Yes
No
Yes
C = 7
8文字目は、
N文字未満か
7文字一致
C = 8
i = i + C
C < 8?
No
Yes
8文字一致
一致した文字
数を合計
Ⅱ.一致文字数
を数える
③
③
① ②
① ②
繰返し
Ⅲ. 一致数は
アンロールした
数か?
C:一致文字数
N:最大比較文字数
Ⅰ.アンロール数を決める(8)
14
15
9
16
© Hitachi, Ltd. 2022. All rights reserved.
7.3 施策③:文字列比較ループアンローリング(3):配列アクセスへの対応
•レジスタ配列を二つ使用、それぞれの文字列を
レジスタ配列に一旦格納して比較
 文字列を格納する配列を、アクセス幅(右
例ではアンロール数に合わせた8Byte)を単
位とする二次元配列とする
 レジスタ配列は、一回の配列アクセス幅
(8)の2倍(16)の要素数とする
 比較はレジスタ配列上で、それぞれの文字
列位置から、一回に最大アンロール数分
=アクセス幅分の文字数(8)を比較
 比較後、レジスタ配列の内容をシフト
1. レジスタ配列の後半内容を前半にコピー
2. 文字列を格納する配列からアクセス幅
(8Byte)分読出し、レジスタ配列の後
半に格納
•レジスタ配列を二つ使用、それぞれの文字列を
レジスタ配列に一旦格納して比較
 文字列を格納する配列を、アクセス幅(右
例ではアンロール数に合わせた8Byte)を単
位とする二次元配列とする
 レジスタ配列は、一回の配列アクセス幅
(8)の2倍(16)の要素数とする
 比較はレジスタ配列上で、それぞれの文字
列位置から、一回に最大アンロール数分
=アクセス幅分の文字数(8)を比較
 比較後、レジスタ配列の内容をシフト
1. レジスタ配列の後半内容を前半にコピー
2. 文字列を格納する配列からアクセス幅
(8Byte)分読出し、レジスタ配列の後
半に格納
8bytes
前半
後半
アクセル幅(8byte)単位に読出し、
レジスタ配列の後半に格納
レジスタ配列a
一回の比較対象
(最大8文字)
文字列b
(先頭位置b)
文字列a
(先頭位置a)
文字列が格納されている配列:
(2次元配列として、FPGA内部
メモリへマップ)
前半
後半
レジスタ配列b
後半から
前半へ
コピー
後半から
前半へ
コピー
N bytes
N bytes
一回当たりの
読出し単位
一回当たりの
読出し単位
17
© Hitachi, Ltd. 2022. All rights reserved.
7.4 施策③:文字列比較ループアンローリング(4):改善後
8bytes
N bytes
N bytes
前半
後半
レジスタ配列a
一回の比較対象
(最大8文字)
文字列b
(先頭位置b)
文字列a
(先頭位置a)
文字列が格納されている配列:
前半
後半
レジスタ配列b
• ループ開始前の初期化でレジスタ配列の最
初の内容、文字列比較位置を準備
• 繰返し時にレジスタ配列内容を順にシフト
• ループ開始前の初期化でレジスタ配列の最
初の内容、文字列比較位置を準備
• 繰返し時にレジスタ配列内容を順にシフト
Start
i < N?
レジスタ配列a[x]=
レジスタ配列b[y]?
No
Yes
No
Yes
C = 0
③
① ②
レジスタ配列a[]
← 文字列aの先頭含む8byte
+ 次の8byte
レジスタ配列b[]
← 文字列bの先頭含む8byte
+ 次の8byte
x = 文字列aの開始位置(8の剰余)
y = 文字列bの開始位置(8の剰余)
i = 0
End
Yes
i + 7 < N?
No
Yes
No
Yes
C = 7
C = 8
i = i + C
C < 8?
No
Yes
③
① ②
繰返し
レジスタ配列a[x+7]=
レジスタ配列b[y+7]?
レジスタ配列aの内容シフト
(配列前半←配列後半、
配列後半←文字列aの
次の8byte)
レジスタ配列bの内容シフト
(配列前半←配列後半、
配列後半←文字列bの
次の8byte)
y
x (文字列aの開始
位置の8の剰余)
(文字列bの開始
位置の8の剰余)
16
17
10
18
© Hitachi, Ltd. 2022. All rights reserved.
8. 評価:本事例における改善施策の効果
• LZMAの高位合成を、以下の三種の改善策により、改善した
① メモリのアクセス幅拡大: ハッシュテーブル更新に適用
② データフロー化:辞書圧縮部とレンジコーダ、及びレンジコーダ内部へ適用
③ 文字列比較ループアンローリング:文字列検索に適用
• 改善の結果、ほぼ見積り通りになった(下表)。
見積り 改善前 改善後 主な改善策
全体処理時間 500μS (1.0) 21,540μS (43.1) 516μS (1.0) ②
辞書圧縮部 - 17,461μS 476μS
ハッシュテーブル更新 - 12,007μS 246μS ①
文字列検索 - 4,584μS 176μS ③
レンジコーダ - 3,339μS 250μS ②
■32KBのデータの圧縮処理における処理時間の改善結果
19
© Hitachi, Ltd. 2022. All rights reserved.
9. 高位合成の活用まとめ
• LZMAを題材とした本事例では、高位合成のプロファイルデータを分析し、元の高位言語ソースの記述へ
フィードバックすることで、複雑なアルゴリズムの最適化を行うことができた。
• このような高位合成におけるアルゴリズムレベルの最適化は、複雑なアルゴリズムをハード化する場合の、上流
工程としても活用することが可能。
 全体をRTL設計で行うのに比べて、開発工数を大きく短縮することが可能
Adder(int a, int b, int c) {
c = a + b;
}
高位合成 プロファイル
データ
改善/最適化(フィードバック)
上流工程(高位合成)
(アルゴルズムレベル最適化)
下流工程(RTL設計)
仕様設計/機能設計
高位言語ソース
(アルゴリズム記述) 詳細設計
(RTL設計)
RTL
記述
アルゴリズム
(最適化済み)
改善のための
手戻り不要
開発工数短縮
=
18
19
11
© Hitachi, Ltd. 2022. All rights reserved. 20
END
複雑なアルゴリズムのハード化における高位合成の活用事例
第9回ACRiウェビナー
2022/7/26
株式会社 日立製作所 研究開発グループ
デジタルプラットフォームイノベーションセンタ データストレージ研究部
島田 健太郎
20
21

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

NEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdfNEDIA_SNIA_CXL_講演資料.pdf
NEDIA_SNIA_CXL_講演資料.pdf
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化Ultra96ボードでYOLOを高速化
Ultra96ボードでYOLOを高速化
 
深層学習向け計算機クラスター MN-3
深層学習向け計算機クラスター MN-3深層学習向け計算機クラスター MN-3
深層学習向け計算機クラスター MN-3
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
データ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラデータ爆発時代のネットワークインフラ
データ爆発時代のネットワークインフラ
 
開発者が語る NVIDIA cuQuantum SDK
開発者が語る NVIDIA cuQuantum SDK開発者が語る NVIDIA cuQuantum SDK
開発者が語る NVIDIA cuQuantum SDK
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
 
Rootlessコンテナ
RootlessコンテナRootlessコンテナ
Rootlessコンテナ
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング
 
Hopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないことHopper アーキテクチャで、変わること、変わらないこと
Hopper アーキテクチャで、変わること、変わらないこと
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 

Ähnlich wie 第9回ACRiウェビナー_日立/島田様ご講演資料

今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
YusukeKuramata
 
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
Insight Technology, Inc.
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
Recruit Technologies
 
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
Takanori Suzuki
 

Ähnlich wie 第9回ACRiウェビナー_日立/島田様ご講演資料 (20)

アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
 
Example of exiting legacy system
Example of exiting legacy systemExample of exiting legacy system
Example of exiting legacy system
 
CRF を使った Web 本文抽出
CRF を使った Web 本文抽出CRF を使った Web 本文抽出
CRF を使った Web 本文抽出
 
プログラマ人生論
プログラマ人生論プログラマ人生論
プログラマ人生論
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814
 
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
今注目のSpark SQL、知っておきたいその性能とは 20151209 OSC Enterprise
 
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
Graviton2プロセッサの性能特性と適用箇所/Supership株式会社 中野 豊
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側Apache Kuduを使った分析システムの裏側
Apache Kuduを使った分析システムの裏側
 
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
[C23] 「今」を分析するストリームデータ処理技術とその可能性 by Takahiro Yokoyama
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
Tokyo r39 beginner
Tokyo r39 beginnerTokyo r39 beginner
Tokyo r39 beginner
 
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
2018年01月27日 Keras/TesorFlowによるディープラーニング事始め
 
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
デブサミ2014-Stormで実現するビッグデータのリアルタイム処理プラットフォーム ~ストリームデータ処理から機械学習まで~
 
Tokyo r47 beginner_2
Tokyo r47 beginner_2Tokyo r47 beginner_2
Tokyo r47 beginner_2
 
Tokyo r50 beginner_2
Tokyo r50 beginner_2Tokyo r50 beginner_2
Tokyo r50 beginner_2
 

Mehr von 直久 住川

Mehr von 直久 住川 (20)

公開用_講演資料_SCSK.pdf
公開用_講演資料_SCSK.pdf公開用_講演資料_SCSK.pdf
公開用_講演資料_SCSK.pdf
 
ACRi-Webinar_Feb2023_agenda_20230225.pdf
ACRi-Webinar_Feb2023_agenda_20230225.pdfACRi-Webinar_Feb2023_agenda_20230225.pdf
ACRi-Webinar_Feb2023_agenda_20230225.pdf
 
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料第11回ACRiウェビナー_東工大/坂本先生ご講演資料
第11回ACRiウェビナー_東工大/坂本先生ご講演資料
 
第11回ACRiウェビナー_インテル/竹村様ご講演資料
第11回ACRiウェビナー_インテル/竹村様ご講演資料第11回ACRiウェビナー_インテル/竹村様ご講演資料
第11回ACRiウェビナー_インテル/竹村様ご講演資料
 
2022-12-17-room.pdf
2022-12-17-room.pdf2022-12-17-room.pdf
2022-12-17-room.pdf
 
ACRiルーム副室長_安藤様_講演資料
ACRiルーム副室長_安藤様_講演資料ACRiルーム副室長_安藤様_講演資料
ACRiルーム副室長_安藤様_講演資料
 
DSF実行委員長_酒井様_講演資料
DSF実行委員長_酒井様_講演資料DSF実行委員長_酒井様_講演資料
DSF実行委員長_酒井様_講演資料
 
ACRi事務局_住川_講演資料
ACRi事務局_住川_講演資料ACRi事務局_住川_講演資料
ACRi事務局_住川_講演資料
 
VCK5000_Webiner_GIGABYTE様ご講演資料
VCK5000_Webiner_GIGABYTE様ご講演資料VCK5000_Webiner_GIGABYTE様ご講演資料
VCK5000_Webiner_GIGABYTE様ご講演資料
 
AMD_Xilinx_AI_VCK5000_20220602R1.pdf
AMD_Xilinx_AI_VCK5000_20220602R1.pdfAMD_Xilinx_AI_VCK5000_20220602R1.pdf
AMD_Xilinx_AI_VCK5000_20220602R1.pdf
 
VCK5000_Webiner_Fixstars様ご講演資料
VCK5000_Webiner_Fixstars様ご講演資料VCK5000_Webiner_Fixstars様ご講演資料
VCK5000_Webiner_Fixstars様ご講演資料
 
20220525_kobayashi.pdf
20220525_kobayashi.pdf20220525_kobayashi.pdf
20220525_kobayashi.pdf
 
220526_ACRi_Ando01r.pdf
220526_ACRi_Ando01r.pdf220526_ACRi_Ando01r.pdf
220526_ACRi_Ando01r.pdf
 
2205ACRi_jinguji.pdf
2205ACRi_jinguji.pdf2205ACRi_jinguji.pdf
2205ACRi_jinguji.pdf
 
ACRiポジショントーク_山科.pdf
ACRiポジショントーク_山科.pdfACRiポジショントーク_山科.pdf
ACRiポジショントーク_山科.pdf
 
ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料ACRiウェビナー:小野様ご講演資料
ACRiウェビナー:小野様ご講演資料
 
ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料
 
ACRiウェビナー:アジェンダ
ACRiウェビナー:アジェンダACRiウェビナー:アジェンダ
ACRiウェビナー:アジェンダ
 
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
Noriyuki Aibe, "High Efficiency Connection Method on Electric Signal Lines be...
 
ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料ACRiウェビナー_GIGABYTE様ご講演資料
ACRiウェビナー_GIGABYTE様ご講演資料
 

第9回ACRiウェビナー_日立/島田様ご講演資料

  • 1. 1 © Hitachi, Ltd. 2022. All rights reserved. 株式会社 日立製作所 研究開発グループ デジタルプラットフォームイノベーションセンタ データストレージ研究部 2022/7/26 島田 健太郎 複雑なアルゴリズムのハード化における高位合成の活用事例 第9回ACRiウェビナー © Hitachi, Ltd. 2022. All rights reserved. 1. 自己紹介 2. 背景:複雑なアルゴリズムのハード化における課題・高位合成の利点 3. 題材:圧縮アルゴリズムLZMA 4. 課題:高位合成の初期試行状況 5. 施策①:メモリアクセス幅拡大 6. 施策②:データフロー化 7. 施策③:文字列比較ループアンローリング 8. 評価:本事例における改善施策の効果 9. 高位合成の活用まとめ Contents 1 0 1
  • 2. 2 2 © Hitachi, Ltd. 2022. All rights reserved. 1.自己紹介 島田 健太郎 研究開発グループ デジタルプラットフォームイノベーションセンタ データストレージ研究部 所属 • 1993年入社 • 入社当初は、スーパーコンピュータのプロセッサの設計開発に従事 • その後、ハードウェア・アーキテクチャの研究開発に従事 • 論理設計は、ASICで、RTLやゲートレベル設計/スケマティックな設計を経験 • 今回、FPGAを用いて複雑なアルゴリズムをハード化するに当たり、高位合成の活用を行った ゲートレベル設計/スケマティック設計 Adder(int a, int b, int c) { c = a + b; } 高位合成(高位言語記述) a b c 3 © Hitachi, Ltd. 2022. All rights reserved. 2.1 背景(1):複雑なアルゴリズムのハード化における課題 1. 複雑なアルゴリズムをハード化する場合、通常のRTL設計であると、詳細設計・実装設計を含め、 多大な開発工数を要し、ハード化の見通しを得るのに⾧期間かかる 2. 設計当初の段階(仕様設計/機能設計段階)では、性能や物量の見通しが困難 3. 設計した結果を性能等評価できるのが、後工程となり、フィードバックを行う工数大 4. 更に元のアルゴリズムレベルでの最適化を行うと、多大な再設計の工数が発生 詳細設計 (RTL設計) 実装設計 FPGA 論理合成 仕様設計/機能設計 RTL 記述 実装結果 •性能(詳細) •物量(詳細) 機能仕様/アルゴリズム 改善/最適化(フィードバック) (実装改善) 実装情報 (部分的RTL改善) アルゴリズムレベル改善⇒大工数発生 RTL設計過程(イメージ) 2 3
  • 3. 3 4 © Hitachi, Ltd. 2022. All rights reserved. 2.2 背景(2):複雑なアルゴリズムのハード化における高位合成の利点 1. 高位言語で記述された複雑なアルゴリズムでも、短期間でハードウェア化の見通しが得られる 2. 最低限達成可能な、性能や物量が早期にわかる 3. 性能や物量を、早期にプロファイルデータから見ることにより、フィードバックの工数低減可能 4. アルゴリズムレベルでの最適化が容易 Adder(int a, int b, int c) { c = a + b; } 高位合成 合成結果 高位言語ソース (アルゴリズム記述) FPGA プロファイル データ •性能(全体、関数単位) •物量(同上) •詳細データ(依存関係等) 改善/最適化(フィードバック) 仕様設計/機能設計 高位合成設計過程 (イメージ) 5 © Hitachi, Ltd. 2022. All rights reserved. 3. 題材:圧縮アルゴリズム LZMA • 複雑なアルゴリズムへの適用事例として、圧縮アルゴリズム LZMA(Lempel-Ziv-Markov chain-Algorithm)を取 り上げる。 • LZMAは、圧縮率の高い可逆圧縮アルゴリズム。 辞書圧縮部と、レンジコーダによる符号化部からなる。  辞書圧縮部: ①入力データをバイト列として“辞書”に登録 ②”辞書”の内容を探索し、入力データ内の重複を抽出  レンジコーダ: ①データ重複パターンに基づき、0/1の出現確率を予測 ②予測との差分を符号に生成 • ハード化は、辞書探索の制御が複雑になる辞書圧縮部の 方が、確率計算の反復で処理できるレンジコーダより難 A B C D A B C E 入力 データ A B C D E 圧縮 データ 辞書に登録 4文字前と3字一致 図A. 辞書圧縮部の動作例 先 後 A B C D E 圧縮 データ 4文字前と3字一致 0 0 1 0 1 1 1 0 重複パターンを示す 0/1の記号列(中間コード) 図B. レンジコーダの動作例 先行するビットパターンで次の1bitの0/1の 出現確率を予測 予測との差分を 符号に生成 4 5
  • 4. 4 6 © Hitachi, Ltd. 2022. All rights reserved. 4. 課題:高位合成の初期試行状況 • LZMAのオープンソース(C言語)をベースに、高位合成を試行  合成することはできた。  性能は、見積りの約1/40(圧縮処理時間40倍)。 • プロファイルデータより要因分析  最大の要因は、辞書圧縮部で、文字列検索のためのハッシュテーブルを更新する箇所 ⇒1バイトずつアクセスし、更新していた。  その他は、辞書圧縮部とレンジコーダ部が逐次に実行される構造。 ⇒辞書圧縮部がレンジコーダ部の処理完了を待つ。  また、辞書圧縮部の文字列検索自体も1文字ずつ比較。 Adder(int a, int b, int c) { c = a + b; } 高位合成 合成結果 高位言語ソース プロファイル データ 改善/最適化(フィードバック) 7 © Hitachi, Ltd. 2022. All rights reserved. 4. 課題:高位合成の初期試行状況 Adder(int a, int b, int c) { c = a + b; } 高位合成 合成結果 高位言語ソース プロファイル データ 改善/最適化(フィードバック) • LZMAのオープンソース(C言語)をベースに、高位合成を試行  合成することはできた。  性能は、見積りの約1/40(圧縮処理時間40倍)。 • プロファイルデータより要因分析  最大の要因は、辞書圧縮部で、文字列検索のためのハッシュテーブルを更新する箇所 ⇒1バイトずつアクセスし、更新していた。 ①メモリのアクセス幅拡大  その他は、辞書圧縮部とレンジコーダ部が逐次に実行される構造。 ⇒辞書圧縮部がレンジコーダ部の処理完了を待つ。 ②データフロー化  また、辞書圧縮部の文字列検索自体も1文字ずつ比較。 ③文字列比較ループアンローリング 6 7
  • 5. 5 8 © Hitachi, Ltd. 2022. All rights reserved. 5.1 施策①:メモリのアクセス幅拡大(1):概要 コピー元配列 コピー先配列 コピー元配列 コピー先配列 Start i = 0 d[i] = s[i] i < N? End s[] d[] s[] d[] t[] i = i + 1 Start i = 0 t[0] = s[i] t[1] = s[i + 1] ... t[7] = s[i + 7] i < N? End i = i + 8 d[i] = t[0] d[i + 1] = t[1] ... d[i + 7] = t[7] No Yes No Yes • 配列から配列にデータをコピーするケース  配列は、コピー元・コピー先とも、FPGAの内部メモリにマップするケース • 配列から配列へ直接コピーする記述や、ループ・アンローリングがされない 場合に、1要素ずつの逐次コピーになり易い • 途中にレジスタ配列を置き、ループ展開することで複数要素同時にコピー • 配列から配列にデータをコピーするケース  配列は、コピー元・コピー先とも、FPGAの内部メモリにマップするケース • 配列から配列へ直接コピーする記述や、ループ・アンローリングがされない 場合に、1要素ずつの逐次コピーになり易い • 途中にレジスタ配列を置き、ループ展開することで複数要素同時にコピー レジスタ配列 • レジスタ配列を 経由 • ループ・ アンローリング • レジスタ配列を 経由 • ループ・ アンローリング 1要素ずつコピー 複数要素 同時コピー (コピー元/コピー先配列ともFPGA内部 メモリにマップ) 9 © Hitachi, Ltd. 2022. All rights reserved. 5.2 施策①:メモリアクセス幅拡大(2): ハッシュテーブル更新 元の構造 文字列(9文字) 位置 文字列(9文字) ①先頭4文字で ハッシュ値計算 位置 ②一組ずつシフト ③先頭に記録 先 後 ハッシュテーブル 入力データ (辞書) 16bit 8bit×9文字 = 72bit Start ①先頭4文字でハッシュ値を計算 i = 7 i ≧1? ハッシュテーブル[ハッシュ値][i].位置 =ハッシュテーブル[ハッシュ値][i-1].位置 現在位置 j = 0 コピー先文字列[j] = コピー元文字列[j] j = j +1 i = i - 1 j < 9? ハッシュテーブル[ハッシュ値][0].位置 =現在位置 9文字コピー: ハッシュテーブル[ハッシュ値][0].文字列 = 現在位置の文字列 9文字コピー: ハッシュテーブル[ハッシュ値][i].文字列 = ハッシュテーブル[ハッシュ値][i-1].文字列 End 9文字コピー End ②一組ずつシフト ③先頭に記録 • ハッシュテーブルに辞書内の位置と先頭の 9文字ずつが登録されている • 既存内容を移動(シフト)した上で、入力デー タの現在位置からの9文字を新規登録 • ハッシュテーブルに辞書内の位置と先頭の 9文字ずつが登録されている • 既存内容を移動(シフト)した上で、入力デー タの現在位置からの9文字を新規登録 先頭から検査 ハッシュテーブル更新 のフローチャート(元) (サブルーチンで記載) No Yes No Yes (16bit+72bit)×8(シノニム) = 704bit(88byte) 大きなエントリを 1文字(バイト)ずつ 逐次アクセス 8 9
  • 6. 6 10 © Hitachi, Ltd. 2022. All rights reserved. 5.3 施策①:メモリアクセス幅拡大(3):ハッシュテーブル更新 改善策 • ハッシュテーブルを、位置の情報のテーブルと 文字列のテーブルに分割 • エントリ(位置+文字列8組分)をレジスタに ずらして読上げ、書き戻す • ハッシュテーブルを、位置の情報のテーブルと 文字列のテーブルに分割 • エントリ(位置+文字列8組分)をレジスタに ずらして読上げ、書き戻す 位置 16bit 位置 16bit×8 = 128bit 位置 72bit×8 = 576bit ①先頭4文字で ハッシュ値計算 ②ずらして読み上げ ③先頭に格納 先 後 ハッシュテーブル (分割後) 入力データ (辞書) 16bit 8bit×9文字 = 72bit 現在位置 先頭から検査 文字列(9文字) レジスタ ④書き戻し Start ①先頭4文字でハッシュ値を計算 i = 7 i ≧1? レジスタ(位置)[i] =ハッシュテーブル(位置)[ハッシュ値][i-1] i = i - 1 レジスタ(位置)[0] = 現在位置 9文字コピー(プラグマでアンローリング) レジスタ(文字列)[0]=現在位置の文字列 9文字コピー(プラグマでアンローリング) レジスタ(文字列)[i] = ハッシュテーブル(文字列)[ハッシュ値][i-1] End ②ずらして読み上げ ③先頭に格納 ハッシュテーブル更新の フローチャート(改善版) 位置、文字列をそれぞれ 並列にアクセス No Yes ハッシュテーブル(位置)[ハッシュ値][0~7] = レジスタ(位置)[0~7] 9文字コピー(プラグマでアンローリング)×8: ハッシュテーブル(文字列)[ハッシュ値][0~7] = レジスタ(文字列)[0~7] ④書き戻し ② ④ ③ 11 © Hitachi, Ltd. 2022. All rights reserved. 6.1 施策②:データフロー化(1) データーフロー化適用前 • 二つの処理を含むループ • それぞれの処理の間で、変数を用いて、一方から他方へデータを受け渡し ⇒それぞれの回路が逐次動作となる • 二つの処理を含むループ • それぞれの処理の間で、変数を用いて、一方から他方へデータを受け渡し ⇒それぞれの回路が逐次動作となる Start 初期化処理 処理a 終了判定 処理b End 終了処理 変数 変数 変数 初期化処理 回路 処理a 回路 処理b 回路 判定回路 終了処理 回路 初期データ 中間データ 出力データ 繰返し 信号 終了データ 時間軸 T1 T2 T3 T4 T5 T6 T7 T8 初期化回路 動作 処理a 回路 動作 動作 動作 処理b 回路 動作 動作 判定回路 動作 動作 終了処理回路 逐次動作:3サイクルピッチ 処理フローチャート 回路構成 10 11
  • 7. 7 12 © Hitachi, Ltd. 2022. All rights reserved. 6.2 施策②:データフロー化(2) データフロー化適用後 • 二つの処理のループを分割 • 分割したループの処理の間で、FIFO(ストリーム変数)を用いてデータを受け渡し ⇒それぞれの回路の並列動作が可能となる • 二つの処理のループを分割 • 分割したループの処理の間で、FIFO(ストリーム変数)を用いてデータを受け渡し ⇒それぞれの回路の並列動作が可能となる Start 初期化処理 処理a 終了判定b 処理b End 終了処理 変数 変数 初期化処理 回路 処理a 回路 処理b 回路 判定b回路 終了処理 回路 初期データ 中間データ 出力データ 繰返し 信号 終了データ 時間軸 T1 T2 T3 T4 T5 T6 T7 T8 初期化回路 動作 処理a 回路 動作 動作 動作 動作 判定a回路 動作 動作 動作 処理b 回路 動作 動作 動作 判定b回路 動作 動作 終了処理回路 終了判定a 判定a回路 中間データ 中間データ FIFO 繰返し 信号 FIFO 並列(オーバーラップ)動作: 2サイクルピッチ 13 © Hitachi, Ltd. 2022. All rights reserved. 6.3 施策②:データフロー化(3) LZMAにおける適用 • 辞書圧縮部と、レンジコーダの呼び出しに適用 ⇒辞書圧縮部と、レンジコーダを並列動作させ、動作時間をほぼ半減 • 辞書圧縮部と、レンジコーダの呼び出しに適用 ⇒辞書圧縮部と、レンジコーダを並列動作させ、動作時間をほぼ半減 Start 辞書圧縮部 終了? レンジコーダ End Start 辞書圧縮部 終了? レンジコーダ End 終了? No Yes No Yes 時間軸 T1 T2 T3 T4 T5 T6 辞書圧縮部 動作 動作 動作 レンジコーダ 動作 動作 動作 辞書圧縮回路 レンジコーダ回路 中間データ 圧縮データ 平文データ 繰返し 信号 No Yes 時間軸 T1 T2 T3 T4 T5 T6 辞書圧縮部 動作 動作 動作 動作 動作 動作 レンジコーダ 動作 動作 動作 動作 動作 FIFO 辞書圧縮回路 レンジコーダ回路 中間データ 圧縮データ 平文データ FIFO 中間データ 12 13
  • 8. 8 14 © Hitachi, Ltd. 2022. All rights reserved. 7.1 施策③:文字列比較ループアンローリング(1):アンローリング適用前 • 配列中の二つの文字列を比較し、連続し て一致する文字数を数える  配列はFPGA内メモリへマップされている  二つの文字列とも、配列中の任意の位 置から、始まる  最大の比較文字数が指定される • 単純にプログラム記述すると、1文字 (1byte)ずつの比較となる。  ループ中に(ループ変数を使った)文字 数判定の条件文があるので、アンローリ ングされても1文字ずつの逐次処理と なる(並列処理されない)  配列のアクセスも、それぞれの文字列を 1文字ずつのアクセスとなる • 配列中の二つの文字列を比較し、連続し て一致する文字数を数える  配列はFPGA内メモリへマップされている  二つの文字列とも、配列中の任意の位 置から、始まる  最大の比較文字数が指定される • 単純にプログラム記述すると、1文字 (1byte)ずつの比較となる。  ループ中に(ループ変数を使った)文字 数判定の条件文があるので、アンローリ ングされても1文字ずつの逐次処理と なる(並列処理されない)  配列のアクセスも、それぞれの文字列を 1文字ずつのアクセスとなる N bytes 文字列a (先頭位置a) 文字列b (先頭位置b) N bytes 文字列が格納されている配列: (FPGA内部メモリへマップ) Start i = 0 i < N? End i = i + 1 i文字目は 一致したか No Yes No Yes N:最大比較文字数 連続して一致する文字数を数える 最大比較 文字数N 未満か 文字列検索(比較)の フローチャート(元) 15 © Hitachi, Ltd. 2022. All rights reserved. 7.2 施策③:文字列比較ループアンローリング(2):条件分岐への対応 •1文字ずつの比較を行う条 件文と、ループの繰返しを分 ける I. アンロールする数を決め る(右例では、8) II. 最大比較文字数に至る まで、アンロールした数分 の比較を行い、一致数 を数える III. ループの繰返しは、数え た一致数が、アンロール した数まで達したかどうか で判定する •1文字ずつの比較を行う条 件文と、ループの繰返しを分 ける I. アンロールする数を決め る(右例では、8) II. 最大比較文字数に至る まで、アンロールした数分 の比較を行い、一致数 を数える III. ループの繰返しは、数え た一致数が、アンロール した数まで達したかどうか で判定する Start i = 0 i < N? End 1文字目は 一致したか ? No Yes No Yes 次の1文字目は、 N文字未満か C = 0 i + 1 < N? 2文字目は 一致したか ? No Yes No Yes C = 1 0文字一致 2文字目は、 N文字未満か 1文字一致 Yes i + 7 < N? 8文字目は 一致したか ? No Yes No Yes C = 7 8文字目は、 N文字未満か 7文字一致 C = 8 i = i + C C < 8? No Yes 8文字一致 一致した文字 数を合計 Ⅱ.一致文字数 を数える ③ ③ ① ② ① ② 繰返し Ⅲ. 一致数は アンロールした 数か? C:一致文字数 N:最大比較文字数 Ⅰ.アンロール数を決める(8) 14 15
  • 9. 9 16 © Hitachi, Ltd. 2022. All rights reserved. 7.3 施策③:文字列比較ループアンローリング(3):配列アクセスへの対応 •レジスタ配列を二つ使用、それぞれの文字列を レジスタ配列に一旦格納して比較  文字列を格納する配列を、アクセス幅(右 例ではアンロール数に合わせた8Byte)を単 位とする二次元配列とする  レジスタ配列は、一回の配列アクセス幅 (8)の2倍(16)の要素数とする  比較はレジスタ配列上で、それぞれの文字 列位置から、一回に最大アンロール数分 =アクセス幅分の文字数(8)を比較  比較後、レジスタ配列の内容をシフト 1. レジスタ配列の後半内容を前半にコピー 2. 文字列を格納する配列からアクセス幅 (8Byte)分読出し、レジスタ配列の後 半に格納 •レジスタ配列を二つ使用、それぞれの文字列を レジスタ配列に一旦格納して比較  文字列を格納する配列を、アクセス幅(右 例ではアンロール数に合わせた8Byte)を単 位とする二次元配列とする  レジスタ配列は、一回の配列アクセス幅 (8)の2倍(16)の要素数とする  比較はレジスタ配列上で、それぞれの文字 列位置から、一回に最大アンロール数分 =アクセス幅分の文字数(8)を比較  比較後、レジスタ配列の内容をシフト 1. レジスタ配列の後半内容を前半にコピー 2. 文字列を格納する配列からアクセス幅 (8Byte)分読出し、レジスタ配列の後 半に格納 8bytes 前半 後半 アクセル幅(8byte)単位に読出し、 レジスタ配列の後半に格納 レジスタ配列a 一回の比較対象 (最大8文字) 文字列b (先頭位置b) 文字列a (先頭位置a) 文字列が格納されている配列: (2次元配列として、FPGA内部 メモリへマップ) 前半 後半 レジスタ配列b 後半から 前半へ コピー 後半から 前半へ コピー N bytes N bytes 一回当たりの 読出し単位 一回当たりの 読出し単位 17 © Hitachi, Ltd. 2022. All rights reserved. 7.4 施策③:文字列比較ループアンローリング(4):改善後 8bytes N bytes N bytes 前半 後半 レジスタ配列a 一回の比較対象 (最大8文字) 文字列b (先頭位置b) 文字列a (先頭位置a) 文字列が格納されている配列: 前半 後半 レジスタ配列b • ループ開始前の初期化でレジスタ配列の最 初の内容、文字列比較位置を準備 • 繰返し時にレジスタ配列内容を順にシフト • ループ開始前の初期化でレジスタ配列の最 初の内容、文字列比較位置を準備 • 繰返し時にレジスタ配列内容を順にシフト Start i < N? レジスタ配列a[x]= レジスタ配列b[y]? No Yes No Yes C = 0 ③ ① ② レジスタ配列a[] ← 文字列aの先頭含む8byte + 次の8byte レジスタ配列b[] ← 文字列bの先頭含む8byte + 次の8byte x = 文字列aの開始位置(8の剰余) y = 文字列bの開始位置(8の剰余) i = 0 End Yes i + 7 < N? No Yes No Yes C = 7 C = 8 i = i + C C < 8? No Yes ③ ① ② 繰返し レジスタ配列a[x+7]= レジスタ配列b[y+7]? レジスタ配列aの内容シフト (配列前半←配列後半、 配列後半←文字列aの 次の8byte) レジスタ配列bの内容シフト (配列前半←配列後半、 配列後半←文字列bの 次の8byte) y x (文字列aの開始 位置の8の剰余) (文字列bの開始 位置の8の剰余) 16 17
  • 10. 10 18 © Hitachi, Ltd. 2022. All rights reserved. 8. 評価:本事例における改善施策の効果 • LZMAの高位合成を、以下の三種の改善策により、改善した ① メモリのアクセス幅拡大: ハッシュテーブル更新に適用 ② データフロー化:辞書圧縮部とレンジコーダ、及びレンジコーダ内部へ適用 ③ 文字列比較ループアンローリング:文字列検索に適用 • 改善の結果、ほぼ見積り通りになった(下表)。 見積り 改善前 改善後 主な改善策 全体処理時間 500μS (1.0) 21,540μS (43.1) 516μS (1.0) ② 辞書圧縮部 - 17,461μS 476μS ハッシュテーブル更新 - 12,007μS 246μS ① 文字列検索 - 4,584μS 176μS ③ レンジコーダ - 3,339μS 250μS ② ■32KBのデータの圧縮処理における処理時間の改善結果 19 © Hitachi, Ltd. 2022. All rights reserved. 9. 高位合成の活用まとめ • LZMAを題材とした本事例では、高位合成のプロファイルデータを分析し、元の高位言語ソースの記述へ フィードバックすることで、複雑なアルゴリズムの最適化を行うことができた。 • このような高位合成におけるアルゴリズムレベルの最適化は、複雑なアルゴリズムをハード化する場合の、上流 工程としても活用することが可能。  全体をRTL設計で行うのに比べて、開発工数を大きく短縮することが可能 Adder(int a, int b, int c) { c = a + b; } 高位合成 プロファイル データ 改善/最適化(フィードバック) 上流工程(高位合成) (アルゴルズムレベル最適化) 下流工程(RTL設計) 仕様設計/機能設計 高位言語ソース (アルゴリズム記述) 詳細設計 (RTL設計) RTL 記述 アルゴリズム (最適化済み) 改善のための 手戻り不要 開発工数短縮 = 18 19
  • 11. 11 © Hitachi, Ltd. 2022. All rights reserved. 20 END 複雑なアルゴリズムのハード化における高位合成の活用事例 第9回ACRiウェビナー 2022/7/26 株式会社 日立製作所 研究開発グループ デジタルプラットフォームイノベーションセンタ データストレージ研究部 島田 健太郎 20 21