Ozaki Scheme I 与中国剩余定理:从位切分到 Residue Number System
这篇是 Ozaki Scheme II:用 CRT 把高精度 GEMM 映射成少量 INT8 GEMM 的前置数学笔记。
建议阅读顺序:Ozaki I → CRT → Ozaki II。
0. 一句话先建立心智模型
Section titled “0. 一句话先建立心智模型”Ozaki Scheme I 和 II 都在做同一件事:
不用慢的高精度乘法器直接做 GEMM,而是把高精度数换一种表示,再调用很多次极快、但可以保证“精确”的低精度 GEMM。
区别只在“表示方式”:
- Ozaki I:positional / 位段表示,把 significand 一段一段切开;
- Ozaki II:residue / 模数表示,把整数投影到多个互素模数下。
Scheme I 的表示天然产生 cross terms,所以 GEMM 数量近似二次增长;Scheme II 用中国剩余定理把表示改成多个独立的 residue channels,从数学结构上消掉 cross terms。
Part I:Ozaki Scheme I 到底是什么?
Section titled “Part I:Ozaki Scheme I 到底是什么?”1. 从一个数开始:不是“降精度”,而是“把精度拆开保存”
Section titled “1. 从一个数开始:不是“降精度”,而是“把精度拆开保存””假设一个十进制数
如果低精度硬件一次只能保留约 3 位有效数字,最粗暴的方法是
后面的信息直接丢掉。
Ozaki 的思想不是这样,而是写成
也就是
每个 只携带一段有效位,但是所有 slice 加起来仍然包含原数的高精度信息。
二进制中可以粗略想成:
FP64 significand
[ 最高 b bit ][ 接下来 b bit ][ 再接下来 b bit ] ... A1 A2 A3如果每片保留 bit,则概念上
真正的 Ozaki splitting 比“直接切 raw mantissa”严谨:它会用 2 的幂做 shared-place scaling,把一组元素的有效位对齐到低精度表示可安全处理的位置。现代针对 Tensor Core / IMMU 的实现同样遵循“提取低精度矩阵、移动其位权、执行低精度 GEMM、再把位权移回来并高精度累加”的结构。
2. 为什么一定会出现 ?
Section titled “2. 为什么一定会出现 AiBjA_iB_jAiBj?”假设
那么
展开:
这不是 Ozaki 特有的麻烦,而是 positional decomposition 的代数必然结果。
十进制也一样:
于是
必须出现
所以只算
是不可能恢复 的。
3. 更数学一点:把 significand 看成 radix- 展开
Section titled “3. 更数学一点:把 significand 看成 radix-2b2^b2b 展开”为了看清“为什么是三角形”,把一个缩放后的高精度数写成
其中每个 digit 只有约 bit。
对应到矩阵:
于是
注意权重只取决于
因此:
- :最高位;
- :下一档;
- :再下一档;
- ……
矩阵乘积项自然排成反对角线:
B0 B1 B2 B3
A0 level 0 level 1 level 2 level 3A1 level 1 level 2 level 3 level 4A2 level 2 level 3 level 4 level 5A3 level 3 level 4 level 5 level 6所以如果只需要前 档有效信息,就只算
这就是常见的三角区域。
需要的低精度 GEMM 数:
例如 :
这正是 Scheme II 想消灭的结构性开销。
4. Ozaki I 最重要的问题:低精度 GEMM 为什么能“精确”?
Section titled “4. Ozaki I 最重要的问题:低精度 GEMM 为什么能“精确”?”这是 Ozaki 的核心,而不是“切片”本身。
设一个 slice 中的整数 significand 只有 bit,粗略有
单次乘积需要大约
bit。
矩阵乘法一个输出元素是长度为 的 dot product:
最坏情况下,多加 项还需要约
bit。
因此只要 accumulator 能精确容纳
bit,就可以让整个低精度 dot product 不发生舍入或整数溢出。
可以记成一个非常实用的心智公式:
其中 是 accumulator 的有效整数位宽/精确位数。
INT8 Tensor Core 的例子
Section titled “INT8 Tensor Core 的例子”若用 signed INT8:
所以
使用 INT32 accumulator,希望
得到
在这个数量级以内,INT8 × INT8 → INT32 的 dot product 可以被当成一个 exact integer arithmetic primitive。
这说明:
Tensor Core 的输入位宽低,不等于最终算法一定“低数值精度”。Ozaki 是主动把每一片限制到硬件可以精确计算的范围,再通过多片重建高精度结果。
5. shared-place / scaling 到底在干什么?
Section titled “5. shared-place / scaling 到底在干什么?”真实 FP64 元素不只有 significand,还有 exponent。
例如同一行可能同时出现
如果直接按相同 absolute bit position 切,两个数根本对不齐。
因此 Ozaki 会选择 2 的幂作为尺度,把一组元素移动到统一的 fixed-point 位置。概念上可以写成
其中 是由 2 的幂组成的对角/共享尺度, 则是适合低精度 GEMM 的小整数/低精度 significand。
类似地:
于是
真正交给高速低精度单元的是
算完后再把
对应的位权恢复回来。
为什么特别爱用 ?因为二进制浮点乘 本质上是在调整 exponent;在不发生 overflow/underflow 的正常范围内,它不会像一般实数乘法那样额外破坏 significand。
6. 所以 Ozaki I 的完整流水线是什么?
Section titled “6. 所以 Ozaki I 的完整流水线是什么?”现代 GEMM-oriented Ozaki 可以压缩成:
Step 1:splitting
Section titled “Step 1:splitting”把高精度矩阵拆成
并通过 shared-place scaling 保证每个 slice 能安全进入低精度算术。
Step 2:低精度 GEMM
Section titled “Step 2:低精度 GEMM”计算重要的
每个低精度 product 被设计成尽可能 exact。
Step 3:恢复位权
Section titled “Step 3:恢复位权”把每个 按对应的 power-of-two scale 移回原来的数值尺度。
Step 4:高精度累加
Section titled “Step 4:高精度累加”若需要模拟完整 GEMM 接口,再做
Ozaki I 的关键优势是:绝大部分计算都变成高吞吐 GEMM;关键缺点是:slice 数增加时, 数量近似二次增长。
Part II:中国剩余定理到底说了什么?
Section titled “Part II:中国剩余定理到底说了什么?”7. 先从“余数能不能表示一个整数”开始
Section titled “7. 先从“余数能不能表示一个整数”开始”选择两两互素的整数
满足
定义
对于整数 ,记录它在每个模数下的余数:
也就是把一个整数表示成向量
这就是 Residue Number System 的核心表示。
中国剩余定理说:
当 两两互素时,任意一组余数 都对应唯一的 。
注意关键词是:
不是“在所有整数中唯一”。
8. 为什么是唯一的?
Section titled “8. 为什么是唯一的?”假设两个整数 在所有模数下余数都一样:
那么
因为所有 两两互素,所以它们的乘积也整除 :
因此
所以在区间
里只有一个可能的整数。
如果处理有符号整数,更常用 symmetric representative:
只要真实答案落在这个区间里,也只有一个可能值。
9. CRT 的构造公式是怎么来的?
Section titled “9. CRT 的构造公式是怎么来的?”已知
定义
因为 与其他模数都互素,所以
于是 在模 下存在乘法逆元。记
也就是说
构造
这个 有一个非常漂亮的性质:
对自己的模数
Section titled “对自己的模数”因为 包含因子 ,所以
因此 就像一个“模数空间里的 one-hot basis”:
所以直接令
就行。
因为模 看过去,除了第 项,其他项全部变成 0:
这就是 CRT reconstruction 公式的来源。
10. 一个真正算一遍的 CRT 例子
Section titled “10. 一个真正算一遍的 CRT 例子”取
于是
假设我们知道
先算:
要找 在模 下的逆元:
而
所以
再算
在模 下的逆元也是 ,因为
所以
检查:
完全一致。
Part III:为什么 CRT 特别适合矩阵乘法?
Section titled “Part III:为什么 CRT 特别适合矩阵乘法?”11. 模运算是一个 ring homomorphism
Section titled “11. 模运算是一个 ring homomorphism”这是从 Ozaki I 跳到 Scheme II 的真正数学核心。
对任意整数 :
以及
也就是说,映射
同时保持加法和乘法结构。
抽象一点:
这就是 ring homomorphism。
而矩阵乘法本质上只有“乘法 + 加法”:
因此:
所以整个矩阵层面:
这就是 Ozaki II 可以直接“一模数一 GEMM”的数学原因。
12. 为什么 CRT 表示没有 cross terms?
Section titled “12. 为什么 CRT 表示没有 AiBjA_iB_jAiBj cross terms?”现在把两种表示并排看。
Ozaki I:positional representation
Section titled “Ozaki I:positional representation”乘起来:
必然产生笛卡尔积。
Ozaki II:residue representation
Section titled “Ozaki II:residue representation”第 个 channel 里直接得到:
每个 channel 已经包含完整乘积 在该模数下的信息。
根本不存在
这种东西,因为不同 residue channel 属于不同的 ring;CRT reconstruction 只在最后把同一个整数的各个 residue 拼回来。
所以:
这就是 Scheme II 把低精度 GEMM 数从近似 降成 的本质,而不仅仅是“用了一个 CRT 技巧”。
13. 但 CRT 只恢复 modulo :怎么得到真实乘积?
Section titled “13. 但 CRT 只恢复 modulo MMM:怎么得到真实乘积?”这是 Scheme II 最容易漏掉的条件。
CRT reconstruct 得到的是
如果
那么
都有相同 residue。
所以必须提前知道真实结果范围。
若能保证每个整数矩阵乘积元素满足
并让
那么真实答案一定落在
里,而这个区间中每个 residue class 只出现一次。
于是 symmetric CRT representative 就是真正的整数乘积,而不是仅仅一个 modulo- 的代表元。
一个保守的范围估计
Section titled “一个保守的范围估计”若
内积长度为 ,那么
因此可以要求
也就是
这条式子解释了 Scheme II 的精度控制:
多加一个模数 ,就让
可表示整数的 dynamic range 变大,于是可以让 更大,保留更多输入 significand bit。
而代价只增加一个 residue GEMM。
14. 从代数角度看 CRT,Scheme II 会更漂亮
Section titled “14. 从代数角度看 CRT,Scheme II 会更漂亮”中国剩余定理其实给出了一个 ring isomorphism:
其中
且 两两互素。
左边是一个“大整数模 ”的 ring。
右边是 个“小整数 ring”的直积。
因此一个大整数运算:
可以完全等价地变成 个互不依赖的小整数运算:
这句话就是 Ozaki Scheme II 的数学抽象:
把一个宽整数 GEMM 同构成多个窄整数 GEMM。
GPU 上恰好有极快的 INT8 Tensor Core,所以把 控制到 INT8 能装下的范围,就可以把每个小 ring 的矩阵乘法交给 Tensor Core。
Part IV:Scheme I → II 应该怎么记?
Section titled “Part IV:Scheme I → II 应该怎么记?”15. 两个算法其实是在解决同一个“位宽不匹配”问题
Section titled “15. 两个算法其实是在解决同一个“位宽不匹配”问题”我们想计算 FP64 GEMM,但硬件最强的是 INT8/FP16 Tensor Core。
Scheme I 的办法
Section titled “Scheme I 的办法”把一个宽 significand 表成多个 positional slices:
优点:直观,和浮点有效位天然对应。
缺点:
所以乘法产生 cross terms。
Scheme II 的办法
Section titled “Scheme II 的办法”先整数化,再用 residue vector 表示宽整数:
优点:模映射保持乘法结构,所以:
每个 channel 独立,完全没有 cross terms。
16. 最终心智图
Section titled “16. 最终心智图” “高精度数装不进最快的低精度 GEMM” │ ┌───────────────┴───────────────┐ │ │ Ozaki Scheme I Ozaki Scheme II │ │ positional splitting residue splitting │ │ A = Σ 2^ei Ai A -> (A mod m1, ...) B = Σ 2^fj Bj B -> (B mod m1, ...) │ │ AB = Σi Σj 2^(ei+fj) AiBj AB mod mi = Ai Bi mod mi │ │ cross terms channels independent │ │ O(k²) GEMM O(k) GEMM │ ↓ CRT │ ↓ wide integer17. 面试时可以怎么讲
Section titled “17. 面试时可以怎么讲”如果对方问 Ozaki,可以压缩成下面这段:
Ozaki Scheme I 用 error-free/shared-place splitting 把高精度矩阵的 significand 拆成多个低位宽 slice,使每个 slice pair 的低精度 dot product 能在底层 accumulator 中精确执行,再以高精度恢复 scale 并累加。问题是 positional decomposition 的乘法天然产生 cross terms,所以为了逐步恢复更多有效位,需要计算三角形数量的 GEMM,复杂度约 。Scheme II 改用 CRT residue representation。因为 reduction modulo 是 ring homomorphism,,所以每个 modulus 只需要一个独立 GEMM,最后 CRT 重建宽整数;只要总模数 大于真实结果动态范围的两倍,就能从 modulo- 结果唯一恢复有符号真实乘积。
如果这段能自己推出来,Ozaki I 和 II 的核心就基本掌握了。
References
Section titled “References”- K. Ozaki, T. Ogita, S. Oishi, S. M. Rump. Error-free transformations of matrix multiplication by using fast routines of matrix multiplication and its applications. Numerical Algorithms 59(1), 95–118, 2012. DOI: 10.1007/s11075-011-9478-1.
- K. Ozaki, T. Ogita, S. Oishi, S. M. Rump. Generalization of error-free transformation for matrix multiplication and its application. NOLTA, IEICE 4(1), 2–11, 2013. DOI: 10.1587/nolta.4.2.
- H. Ootomo, K. Ozaki, R. Yokota. DGEMM on integer matrix multiplication unit. International Journal of High Performance Computing Applications 38(4), 297–313, 2024. DOI: 10.1177/10943420241239588.
- Y. Uchino, K. Ozaki, T. Imamura. Performance enhancement of the Ozaki Scheme on integer matrix multiplication unit. International Journal of High Performance Computing Applications 39(3), 2025. DOI: 10.1177/10943420241313064.
- K. Ozaki, Y. Uchino, T. Imamura. Ozaki Scheme II: A GEMM-oriented emulation of floating-point matrix multiplication using an integer modular technique. arXiv:2504.08009; journal version first published online July 28, 2026.