現状の構成
-
homc: CLI
- args
- codegen: IR -> Go
- homml
- interpret: IRを実行する
- logger
- lower: AST -> IR
- optimize: 複数回最適化, Sexpを受けとり最適化したSexpを返す
- preprocess
- report: executorの実行ログから統計情報に
-
homir: IR
- ir
IrConfigslot_sizeinitial_level
IrMetaat_local
OperandLabel,Value
Iradd $2 $1 1
- irs
- IRの回路の入出力, 深さ, 演算数等の統計
- op: 演算子, 型
- typ: 型
- value: 値
- スカラ, ベクトル, 集合
- value_ops: 値の演算
- ir
-
homir-interpreter: スタックマシン
- ctx
- interpreter
- lib
-
homir-profile: 回路のログ情報の定義
- exec_log: 実行ログ
LogParameters: 回路パラメータLogTiming: 評価時間- `LogCiphertexts: レベル, 暗号数, スロット数
LogCiphertext: レベル, 演算, ラベル, 実行時間, modulus_level, scale, 値LogPlaintext: 同上LogVectorLogSetLogScalar
- profiles
ExecReport: 回路の評価に関するレポート- パス, パラメータ, 鍵と暗号文のサイズ, 実行時間, 演算数, 回路, 途中の値
- exec_log: 実行ログ
-
homml: DSL定義
- de
- label: グローバル変数に値と型の対応を保持
- parser: Sexp -> AST
- ser
- into_sexp: AST -> Sexp
- const_eval: 定数評価,
Sexp -> Result<Value>- NOTE:
Sexp入力なのはeggでも使うため
- NOTE:
- node: AST定義
- sexp: Sexpのpretty print
- type_check: ASTの型チェック
- de
-
homml-codegen: DSL -> IRへの変換
- config
- `LoweringConfig: slot_size
- ctx
LoweringCtx
- lowering
Op::Encrypt,Op::Decryptより内側の処理はat_local = trueを設定する
- config
-
homml-codegen-lattigo: 回路 -> lattigoのgoのシングルファイルに変換
- ckks_params
- 回路の深さからパラメータ選定
- 各種ログするコードも生成
- ir_map: IR -> Go
- ckks_params
-
executor: Lattigoでの実行部分(go project)
-
homml-optimizer: DSLのコンパイル最適化
- cost: 演算子に基づくコスト
- rewrites
- let_rules
- zeta-reduction
let-cancel:(let ?a ?v ?a) => ?v
- lintrans
lintrans-cipher-add-dist:Av .+ Bv <=> (A .+ B)vlintrans-cipher-mul-dist:Av .* Bv <=> A .* B .* v- 間違ってない?
replace-#-lintrans:a[i] <=> a .* 1_ireplace-#=-lintrans:a[i] = v <=> a = A .* 0_i + v .* 1_ilintrans-ones-folding-var:
- mod
- 代数的な書き換え
- let_rules
- transform: Sexpを対象とした書き換えパス
- cse: CSE
- flatten_then: (then (then a)) => a
- fold_rep: sumをrot log N回でやる
- loop_unroll: repをunrollする
- replace_var:
sexp[var => val]をする
- analysis: 定数畳み込み
- enc越しの畳み込み
(op (enc v1) (enc v2) => (enc (op v1 v2)) = (enc v3) - 通常の畳み込み: `(op v1 v2) => v3
- enc越しの畳み込み
- config
OptimizerConfig: 最適化設定Rulesどの規則を使うか
- language:
egg::Languagesexp()でSexpに変換
- optimizer: エントリポイント
- report: 最適化に関する統計情報
EGraphStat: E-node数, E-class数, 等式数, 回路コストOptimizeReport: 何回目か, it目, 飽和?, 初期/最終回路, 初期/最終コスト
-
回路をモデル化する