The document discusses the SATYSFI Conf 2021 conference which will take place on June 26, 2021. It provides details on recent updates to the SATYSFI typesetting system including the addition of linear-transform-graphics, improvements to page breaking for multicolumn content, and adding debugging information for overfull/underfull boxes. Version 0.0.6, 0.0.7, and planned future updates are summarized. The document also discusses using domain specific languages for describing typesetting definitions and structures and provides examples using amidakuji diagrams.
ATF(ARM Trusted Firmware)は、ARMv8では重要なソフトウェア。
全体を利用するのではなく、その一部を利用可能。
この資料では、BL31(EL3 Runtime Firmware)を単体で使う場合、どうすればいいのかを、Xilinx社のZynq UltraScale+ MPSoCを例に説明しています。
ATF (ARM Trusted Firmware) is an important software in ARMv8.
Instead of using the whole, part of it is available.
This document explains how to do when using BL31 (EL3 Runtime Firmware) alone, for example, with Xilinx's Zynq UltraScale + MPSoC.
2019/10/16
初心者向け颁罢贵の奥别产分野の强化法
CTFのweb分野を勉強しているものの本番でなかなか解けないと悩んでいないでしょうか?そんな悩みを持った方を対象に、私の経験からweb分野の強化法を解説します。
How to strengthen the CTF Web field for beginners !!
Although you are studying the CTF web field, are you worried that you can't solve it in production?
For those who have such problems, I will explain how to strengthen the web field based on my experience.
(study group) https://yahoo-osaka.connpass.com/event/149524/
The document discusses the SATYSFI Conf 2021 conference which will take place on June 26, 2021. It provides details on recent updates to the SATYSFI typesetting system including the addition of linear-transform-graphics, improvements to page breaking for multicolumn content, and adding debugging information for overfull/underfull boxes. Version 0.0.6, 0.0.7, and planned future updates are summarized. The document also discusses using domain specific languages for describing typesetting definitions and structures and provides examples using amidakuji diagrams.
ATF(ARM Trusted Firmware)は、ARMv8では重要なソフトウェア。
全体を利用するのではなく、その一部を利用可能。
この資料では、BL31(EL3 Runtime Firmware)を単体で使う場合、どうすればいいのかを、Xilinx社のZynq UltraScale+ MPSoCを例に説明しています。
ATF (ARM Trusted Firmware) is an important software in ARMv8.
Instead of using the whole, part of it is available.
This document explains how to do when using BL31 (EL3 Runtime Firmware) alone, for example, with Xilinx's Zynq UltraScale + MPSoC.
2019/10/16
初心者向け颁罢贵の奥别产分野の强化法
CTFのweb分野を勉強しているものの本番でなかなか解けないと悩んでいないでしょうか?そんな悩みを持った方を対象に、私の経験からweb分野の強化法を解説します。
How to strengthen the CTF Web field for beginners !!
Although you are studying the CTF web field, are you worried that you can't solve it in production?
For those who have such problems, I will explain how to strengthen the web field based on my experience.
(study group) https://yahoo-osaka.connpass.com/event/149524/
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
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