数字操作 (DOp)

  • zama-ai
  • 发布于 2025-05-10 17:31
  • 阅读 15

本文档介绍了同态处理单元 (HPU) 的底层代码语法,称为数字操作 (DOp)。DOp 程序类似于传统 CPU 汇编代码,但它操作的是编码数字的初级密文。文章详细描述了 DOp 指令的语法、寻址方式、以及各种指令类型(ALU、MEM、PBS 和 Control),并提供了示例。

数字运算 (DOp)

当前版本是 HIS v2.0 (HPU 指令语法)。

同态处理单元 (HPU) 使用整数的基数表示对其进行任何运算。 为此,用户只需向 HPU 提供一个程序。

HPU 编程有两个级别。

  • 高级处理的是整数
  • 第二个是低级。 此代码相当于传统 CPU 的汇编代码,但处理的是编码数字的基本密文。

本文档描述了低级代码语法。 目标元素是数字。 这些指令被称为数字运算 (DOp)。

整数 / 数字

有关更多详细信息,请参见 IOp 文档

在此级别,整数已经分解为数字。 每个数字都是一个 b-bit 值。

DOp 代码中操作的基本元素是基本密文。 每个密文可以编码最多 p-bits 的有效负载,其中 p > b

在当前版本中,p = 4 bits,b = 2 bits。

TFHE

用户必须记住,他/她正在操作 TFHE 密文。 因此,必须遵循一些规则。

每个密文最多可以编码 p 位。 这对应于计算范围。 不能溢出此范围。 计算结果会被改变。

在 FHE 中,噪声用于隐藏消息。 噪声随着连续运算的数量而增长。 因此,在需要使用自举清除噪声之前,可以在密文上执行的操作数量是有限制的。 如果不执行此自举,则消息可能会因噪声而更改,并产生额外的操作。 在 TFHE 中,自举是可以承受的,并且可以定期完成。 有关更多信息,请参见 Zama 的博客文章

[!NOTE] 在 TFHE 中,使用可编程自举(或 PBS)。 这意味着在清除噪声的同时,可以将 2^p-输入 LUT 同时应用于消息。

语法

DOp 程序与传统的 CPU 汇编代码非常相似。

HPU 具有一个寄存器文件 (regfile),其中每个寄存器包含一个基本密文。

HPU 还可以访问内存,输入和输出密文都存储在该内存中。 该内存也用于堆。

通用语法

<DOp> <Dst> <Src> [<Src>] [<Cst>]

DOp 命令包含:

  • 1 个名称
  • 1 个目标密文
  • 1 个或 2 个源密文,具体取决于 DOp
  • 0 或 1 个常量,具体取决于 DOp

Dst / Src

根据 DOp 的不同,关联的源(或目标)可以是以下之一:

类型 语法 描述
寄存器 Rx 寄存器文件中的寄存器 #x
TH.x 中位置 x 处的密文。<br>'T' 前缀代表模板化。 这意味着物理内存地址将由 HPU 微处理器从 x 和当前 IOp 堆数据存储在内存中的起始地址检索。
IOp 目标 TD[i].x IOp 目标整数 #i 的块 #x。<br>'T' 前缀代表模板化。 这意味着物理内存地址将由 HPU 微处理器从 x 和 IOp 代码给出的第 i 个目标整数地址检索。
IOp 源 TS[i].x IOp 源整数 #i 的块 #x。<br>'T' 前缀代表模板化。 这意味着物理内存地址将由 HPU 微处理器从 x 和 IOp 代码给出的第 i 个源整数地址检索。
偏移量 @<ofs> 内存中以密文为单位的偏移量值。

Cst

常量的存在取决于 DOp。

类型 语法 描述
常量 v v 是常量的值。
立即数 TI[i].x IOp 立即数 #i 的数字 #x。<br>'T' 前缀代表模板化。 这意味着该值由 HPU 微处理器从 IOp 立即数 #i 值检索。
LUT alias 对应于用于标识 PBS 中使用的 LUT 的值的别名。

DOp

DOp 有 4 个类别:

  • ALU:处理存储在 regfile 寄存器中的密文的线性运算。
  • MEM:从/向 HPU 内存读取或写入密文。
  • PBS:对存储在 regfile 寄存器中的密文进行可编程自举。
  • 控制:用于控制 HPU 的 DOp。
ALU
DOp 语法 描述
ADD ADD <Dst> <Src1> <Src2> Dst = Src1 + Src2<br>Dst、Src1 和 Src2 是 regfile 的寄存器
SUB SUB <Dst> <Src1> <Src2> Dst = Src1 - Src2<br>Dst、Src1 和 Src2 是 regfile 的寄存器
MAC MAC <Dst> <Src1> <Src2> <Cst> Dst = Src1 * Cst + Src2<br>Dst、Src1 和 Src2 是 regfile 的寄存器。<br>Cst 是常量或立即数。
ADDS ADDS <Dst> <Src> <Cst> Dst = Src + Cst<br>Dst、Src 是 regfile 的寄存器。<br>Cst 是常量或立即数。
SUBS SUBS <Dst> <Src> <Cst> Dst = Src - Cst<br>Dst、Src 是 regfile 的 寄存器。 <br>Cst 是常量或立即数。
SSUB SSUB <Dst> <Src> <Cst> Dst = Cst - Src<br>Dst、Src 是 regfile 的寄存器。<br>Cst 是常量或立即数。
MULS MULS <Dst> <Src> <Cst> Dst = Src * Cst<br>Dst、Src 是 regfile 的寄存器。<br>Cst 是常量或立即数。
MEM
DOp 语法 描述
LD LD <Dst> <Src> 从 HPU 内存中读取密文,并存储在 regfile 的寄存器中。<br>Dst 是 regfile 的寄存器<br>Src 是堆、IOp 目标、IOp 源或偏移量。
ST ST <Dst> <Src> 从 regfile 的寄存器中读取密文,并存储在 HPU 内存中。<br>Dst 是堆、IOp 目标、IOp 源或偏移量。<br>Src 是 regfile 的寄存器
PBS
DOp 语法 描述
PBS PBS <Dst> <Src> <Cst> 对 regfile 的寄存器进行 PBS,并将结果存储在 regfile 的寄存器中。<br>应用由 Cst 标识的 LUT。<br>Dst 和 Src 是 regfile 的寄存器。<br>Cst 是标识 LUT 的别名。
PBS_ML2 PBS_ML2 <Dst> <Src> <Cst> Many-LUT 2 PBS<br>对 regfile 的寄存器进行 PBS,并将 2 个结果存储在2 个连续的 regfile 的寄存器中。 应用由 Cst 标识的 LUT。<br>Dst 和 Src 是 regfile 的寄存器。<br>Dst 寄存器 ID 应该是一个 2 的倍数。<br>Cst 是标识 LUT 的别名。<br>请注意,此 LUT 的类型为 Many-LUT
PBS_ML4 PBS_ML4 <Dst> <Src> <Cst> Many-LUT 4 PBS<br>对 regfile 的寄存器进行 PBS,并将 4 个结果存储在4 个连续的 regfile 的寄存器中。 应用由 Cst 标识的 LUT。<br>Dst 和 Src 是 regfile 的寄存器。<br>Dst 寄存器 ID 应该是一个 4 的倍数。<br>Cst 是标识 LUT 的别名。<br>请注意,此 LUT 的类型为 Many-LUT
PBS_ML8 PBS_ML8 <Dst> <Src> <Cst> Many-LUT 8 PBS<br>对 regfile 的寄存器进行 PBS,并将 8 个结果存储在8 个连续的 regfile 的寄存器中。 应用由 Cst 标识的 LUT。<br>Dst 和 Src 是 regfile 的寄存器。<br>Dst 寄存器 ID 应该是一个 8 的倍数。<br>Cst 是标识 LUT 的别名。<br>请注意,此 LUT 的类型为 Many-LUT
PBS_F PBS_F <Dst> <Src> <Cst> 与 PBS 的定义相同<br>此 PBS 附带 HPU 的刷新触发器。<br>此控制强制 HPU 启动 PBS 批处理,即使后者未满。<br>用于提高性能。
PBS_ML2_F PBS_ML2_F <Dst> <Src> <Cst> 与 PBS_ML2 的定义相同<br>此 PBS 附带 HPU 的刷新触发器。<br>此控制强制 HPU 启动 PBS 批处理,即使后者未满。<br>用于提高性能。
PBS_ML4_F PBS_ML4_F <Dst> <Src> <Cst> 与 PBS_ML4 的定义相同<br>此 PBS 附带 HPU 的刷新触发器。<br>此控制强制 HPU 启动 PBS 批处理,即使后者未满。<br>用于提高性能。
PBS_ML8_F PBS_ML8_F <Dst> <Src> <Cst> 与 PBS_ML8 的定义相同<br>此 PBS 附带 HPU 的刷新触发器。<br>此控制强制 HPU 启动 PBS 批处理,即使后者未满。<br>用于提高性能。

Many LUT

LUT 使用 p-bit 输入和 p-bit 输出对任何函数进行编码。

如果输入范围没有占用所有 2^p 可能的值,而只占用 2^k,其中 k < p,则 LUT 有足够的空间来实际编码此输入的多个函数。 更准确地说,它可以编码 2^(p-k) 个不同的函数。 运行 Many-LUT PBS 会生成多个基本密文。

例如,对于 p=4。 如果我们知道输入在 [0..1] 范围内,则它使用 4 个可用位中的 1 位。 我们可以定义一个 LUT,它能够为此相同输入计算 8 (2^3) 个函数。

这很有用,因为只为此 Many-LUT 运行单个 PBS,而不是我们示例中的 8 个。 请记住,到目前为止,PBS 是最耗时的操作。

填充位

实际上,HPU 中使用的密文编码 p+1 位。 附加位称为填充位。 它位于有效负载的 MSB 位置。 大多数时候,我们保持此位常量等于 0。 计算范围保持在 p 位。

等于 0 的常量填充位对于 LUT 正常运行是必要的,即表示任何具有 p-bit 输入和 p-bit 输出的函数 f

如果使用填充位,因此可以是 0 或 1,则 LUT 行为如下:

  • 如果填充位 = 0,v[p-1:0] -> f({1'b0,v[p-1:0]}) = r[p:0]
  • 如果填充位 = 1,v[p-1:0] -> f({1'b1,v[p-1:0]}) = -r[p:0] = not(r[p:0]) + 1

可能会出现计算范围需要在 p+1 位中溢出的情况,因此需要使用填充位。 因此,应仔细选择关联的 LUT,并牢记上述行为。

此处未描述此类用法的详细信息。 请参阅 TFHE-rs 手册

以下是非详尽的 LUT 别名列表。

让我们命名密文中的有效负载的 2 个部分:

v[*p*-1:0] = {v[*p-b*-1:*b*],v[*b*-1:0]}
           = {vc, vm}

这些名称来自单词 message (vm) 和 carry (vc)。

LUT 描述
None Identity LUT。
MsgOnly 提取密文中的有效负载的 LSB b-bits。 将 MSB 位设置为 0。<br>{0,vm}
CarryOnly 提取密文中有效负载的 MSB p-b-bits。 将 LSB 位设置为 0。<br>{vc,0}
CarryInMsg 提取密文中有效负载的 MSB p-b-bits。 将它们移动到 LSB 位置。<br>{0,vc}
MultCarryMsg 将 vm 和 vc 相乘
MultCarryMsgLsb 将 vm 和 vc 相乘,并保留 LSB b 位。
MultCarryMsgMsb 将 vm 和 vc 相乘,并保留 MSB p-b 位,并将它们移动到 LSB 位置。
BwAnd 按位运算:vm & vc
BwOr 按位运算:vm | vc
BwXor 按位运算:vm ^ vc
CmpSign 使用填充位。<br>如果 v[p-1:0] == 0 -> 0<br>else -> 1(如果填充位等于 0)或 -1(如果填充位等于 1)<br>此 LUT 通常后跟 +1 以获得正值,之后可以使用它们,如你在 Debugging IOps 中看到的。
ManyCarryMsg ManuLUT2<br>func1:在 LSB 中提取 vm。<br>func2:在 LSB 中提取 vc[0]。
控制
Dop 语法 描述
SYNC SYNC 当所有 DOp 在它之前完成时,执行此 DOp。 向 CPU 主机发送同步信号。

示例

从内存加载

LD R1 @0x400      # 以十六进制给出的偏移量
LD R2 @386        # 以十进制给出的偏移量
LD R3 TS[8].4     # 来自模板化 IOp 源 8 数字 4
LD R3 TD[6].2     # 来自模板化 IOp 目标 6 数字 2
LD R4 TH.60       # 来自模板化堆槽 60

从内存存储

ST @0x400   R1   # 以十六进制给出的偏移量
ST @386     R2   # 以十进制给出的偏移量
ST TS[8].4  R3   # 到模板化 IOp 源 8 数字 4
ST TD[4].0  R4   # 到模板化 IOp 目标 4 数字 0
ST TH.60    R4   # 到模板化堆槽 60

算术运算

ADD  R2 R1 R3
SUB  R2 R1 R3
MUL  R2 R1 R3
MAC  R2 R1 R3 4
ADDS R2 R1 10
SUBS R2 R1 TI[4].0 # 使用第四个 IOp 立即数的数字 0

PBS

PBS     R2 R1 PbsNone
PBS_F   R2 R1 PbsCarryInMsg
PBS_ML2 R4 R6 ManyCarryMsg    # 结果在 R4 和 R5 中
  • 原文链接: github.com/zama-ai/hpu_f...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
zama-ai
zama-ai
江湖只有他的大名,没有他的介绍。