• S式 (op args...) により計算を記述
  • 暗号文: (+ a b), (* a b), (L a 3), (get_index a 3), (set_index a 2 4)
  • 集合: (set 1 2 3), 合併 (union (set 1) (set 2))
  • 定数ベクトル: (all 3), (mask (set 1)), (vec 1 2 3 4)
  • 定数演算: (+. 1 2), (-. 3 4), (*. 1 2)
  • 変数宣言, 使用: (let b 3 (+ (var b) 1))
  • 集約演算: (rep + 4 i (var i))
(# (>> a i) i) -> (# a 0)
[(# ?a ?i) -> (<< (* ?a m_i) ?i)]
= (<< (* (>> a i) m_i) i)
[(<< (* ?a ?b) ?k) => (* (<< ?a ?k) (<< ?b ?k))]
= (* (<< (>> a i) i) (<< m_i i))
[(<< (>> ?a ?i) ?i) => a]
= (* a m_0)
= (# a 0)

例: 内積

(let a (vec 1 2 3 4))
(let b (vec 5 6 7 8))
(rep + i 4
	(* (get_index a (var i)) (get_index b (var i)))
)

2022-10-20

  • 型チェックの導入
  • Vector 型に対する演算 +!, -!, *! の追加

2023-01-23
(#= a i v)
=>

(let a (+
  (*        a (ecd (mask (setinv (set i)))))
  (* (L v -i) (ecd (mask         (set i))))) 
  a
)

だと,

(#= a i v)
(#= a j w)

の時にline1の let の中に入れられないので, #=/4 にする

(#= a i v
  (#= a j w)
))

=>

(let a (+
  (*        a (ecd (mask (setinv (set i)))))
  (* (L v -i) (ecd (mask         (set i))))) 
  (let a (+
  (*        a (ecd (mask (setinv (set j)))))
  (* (L w -j) (ecd (mask         (set j))))) 
  a
))
(let a (enc (ecd (vec 1 2 3 4)))
(let b (enc (ecd (vec 5 6 7 8)))
(#= a 0 (# b 1)
(#= a 1 (# b 0)
a

=> #=, #LinTrans で表される

(let a 
  (+
    (* a ![0])
    (* (app lintrans b one_01) [0]))
  )
  (+
    (* a ![1])
    (* (>> (app lintrans b one_00) 1) [1])
  )

=> let が展開される

(+
  (* 
    (+
      (* a ![0])
      (* (lt b one_01) [0])
    )
    ![1]
  )
  (* (>> (lt b one_00) 1) [1])
)

batching a[0] = b[1], b[1] = a[0]

  • onehot(i,j) == mask(set(i*d+j))

  • (# a i) -> (lintrans a onehot(0,i))

  • (# a i v) ->

(+
    (* (ecd (mask (set 0))) (<< b 1))
    (+
      (* (ecd (mask (set 1))) (>> (* b (ecd (mask (set 0)))) 1))
      (* a (ecd
          (*! (mask (set 2 3 1)) (mask (set 0 2 3)))
        ))
    )
  ))))
  • 2023-01-24 線形変換 に関する規則
    • (v @ a) + (w @ a) == (v + w) @ a
    • v @ (w @ a)) == matmul(v, w) @ a
    • (v @ a) * (w @ a) == (v * w) @ a
  • これが出来て, batching出来た所で matmul の batch化は, でもとても重そう. 絶望的.
  • 他のHEカーネル作成して, profileとる方が先?
    • 全力で体裁整えるムーブした方がいい気がする