Skip to content

Ozaki Scheme I 与中国剩余定理:从位切分到 Residue Number System

这篇是 Ozaki Scheme II:用 CRT 把高精度 GEMM 映射成少量 INT8 GEMM 的前置数学笔记。

建议阅读顺序:Ozaki I → CRT → Ozaki II。

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. 从一个数开始:不是“降精度”,而是“把精度拆开保存””

假设一个十进制数

x=12.345678.x=12.345678.

如果低精度硬件一次只能保留约 3 位有效数字,最粗暴的方法是

x≈12.3,x\approx 12.3,

后面的信息直接丢掉。

Ozaki 的思想不是这样,而是写成

x=12.3+0.045+0.000678.x=12.3+0.045+0.000678.

也就是

x=x1+x2+x3.x=x_1+x_2+x_3.

每个 xix_i 只携带一段有效位,但是所有 slice 加起来仍然包含原数的高精度信息。

二进制中可以粗略想成:

FP64 significand
[ 最高 b bit ][ 接下来 b bit ][ 再接下来 b bit ] ...
A1 A2 A3

如果每片保留 bb bit,则概念上

A≈A1+A2+⋯+Ak.A\approx A_1+A_2+\cdots+A_k.

真正的 Ozaki splitting 比“直接切 raw mantissa”严谨:它会用 2 的幂做 shared-place scaling,把一组元素的有效位对齐到低精度表示可安全处理的位置。现代针对 Tensor Core / IMMU 的实现同样遵循“提取低精度矩阵、移动其位权、执行低精度 GEMM、再把位权移回来并高精度累加”的结构。


2. 为什么一定会出现 AiBjA_iB_j?

Section titled “2. 为什么一定会出现 AiBjA_iB_jAi​Bj​?”

假设

A=A1+A2+A3,A=A_1+A_2+A_3, B=B1+B2+B3.B=B_1+B_2+B_3.

那么

AB=(A1+A2+A3)(B1+B2+B3).AB=(A_1+A_2+A_3)(B_1+B_2+B_3).

展开:

AB=A1B1+(A1B2+A2B1)+(A1B3+A2B2+A3B1)+(A2B3+A3B2)+A3B3.\begin{aligned} AB={}&A_1B_1\\ &+(A_1B_2+A_2B_1)\\ &+(A_1B_3+A_2B_2+A_3B_1)\\ &+(A_2B_3+A_3B_2)\\ &+A_3B_3. \end{aligned}

这不是 Ozaki 特有的麻烦,而是 positional decomposition 的代数必然结果。

十进制也一样:

1234=1200+34,1234=1200+34, 5678=5600+78.5678=5600+78.

于是

1234×5678=(1200+34)(5600+78),1234\times5678 =(1200+34)(5600+78),

必须出现

1200×78,34×5600.1200\times78,\qquad 34\times5600.

所以只算

A1B1+A2B2+A3B3A_1B_1+A_2B_2+A_3B_3

是不可能恢复 ABAB 的。


3. 更数学一点:把 significand 看成 radix-2b2^b 展开

Section titled “3. 更数学一点:把 significand 看成 radix-2b2^b2b 展开”

为了看清“为什么是三角形”,把一个缩放后的高精度数写成

x≈∑r=0k−1dr2−br,x\approx\sum_{r=0}^{k-1} d_r 2^{-br},

其中每个 digit drd_r 只有约 bb bit。

对应到矩阵:

A≈∑r=0k−12−brAr,A\approx\sum_{r=0}^{k-1}2^{-br}A_r, B≈∑s=0k−12−bsBs.B\approx\sum_{s=0}^{k-1}2^{-bs}B_s.

于是

AB≈∑r=0k−1∑s=0k−12−b(r+s)ArBs.AB \approx \sum_{r=0}^{k-1}\sum_{s=0}^{k-1} 2^{-b(r+s)}A_rB_s.

注意权重只取决于

r+s.r+s.

因此:

  • A0B0A_0B_0:最高位;
  • A0B1,A1B0A_0B_1,A_1B_0:下一档;
  • A0B2,A1B1,A2B0A_0B_2,A_1B_1,A_2B_0:再下一档;
  • ……

矩阵乘积项自然排成反对角线:

B0 B1 B2 B3
A0 level 0 level 1 level 2 level 3
A1 level 1 level 2 level 3 level 4
A2 level 2 level 3 level 4 level 5
A3 level 3 level 4 level 5 level 6

所以如果只需要前 kk 档有效信息,就只算

r+s≤k−1.r+s\le k-1.

这就是常见的三角区域。

需要的低精度 GEMM 数:

1+2+⋯+k=k(k+1)2.1+2+\cdots+k =\frac{k(k+1)}2.

例如 k=8k=8:

8⋅92=36.\frac{8\cdot9}{2}=36.

这正是 Scheme II 想消灭的结构性开销。


4. Ozaki I 最重要的问题:低精度 GEMM 为什么能“精确”?

Section titled “4. Ozaki I 最重要的问题:低精度 GEMM 为什么能“精确”?”

这是 Ozaki 的核心,而不是“切片”本身。

设一个 slice 中的整数 significand 只有 bb bit,粗略有

∣a∣,∣b∣<2b.|a|,|b|<2^b.

单次乘积需要大约

2b2b

bit。

矩阵乘法一个输出元素是长度为 qq 的 dot product:

cij=∑ℓ=1qaiℓbℓj.c_{ij}=\sum_{\ell=1}^{q}a_{i\ell}b_{\ell j}.

最坏情况下,多加 qq 项还需要约

⌈log⁡2q⌉\lceil\log_2q\rceil

bit。

因此只要 accumulator 能精确容纳

2b+⌈log⁡2q⌉2b+\lceil\log_2q\rceil

bit,就可以让整个低精度 dot product 不发生舍入或整数溢出。

可以记成一个非常实用的心智公式:

2b+⌈log⁡2q⌉≲pacc\boxed{ 2b+\lceil\log_2q\rceil\lesssim p_{\mathrm{acc}} }

其中 paccp_{\mathrm{acc}} 是 accumulator 的有效整数位宽/精确位数。

若用 signed INT8:

∣a∣,∣b∣≤128≈27,|a|,|b|\le128\approx2^7,

所以

∣ab∣≲214.|ab|\lesssim2^{14}.

使用 INT32 accumulator,希望

q214<231.q2^{14}<2^{31}.

得到

q<217.q<2^{17}.

在这个数量级以内,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。

例如同一行可能同时出现

230,2−20.2^{30},\qquad 2^{-20}.

如果直接按相同 absolute bit position 切,两个数根本对不齐。

因此 Ozaki 会选择 2 的幂作为尺度,把一组元素移动到统一的 fixed-point 位置。概念上可以写成

Ar=DA−1 2−br A^r,A_r=D_A^{-1}\,2^{-br}\,\widehat A_r,

其中 DAD_A 是由 2 的幂组成的对角/共享尺度,A^r\widehat A_r 则是适合低精度 GEMM 的小整数/低精度 significand。

类似地:

Bs=2−bs B^s DB−1.B_s=2^{-bs}\,\widehat B_s\,D_B^{-1}.

于是

ArBs=DA−12−b(r+s)(A^rB^s)DB−1.A_rB_s = D_A^{-1} 2^{-b(r+s)} (\widehat A_r\widehat B_s) D_B^{-1}.

真正交给高速低精度单元的是

A^rB^s,\widehat A_r\widehat B_s,

算完后再把

DA−1,DB−1,2−b(r+s)D_A^{-1},\quad D_B^{-1},\quad 2^{-b(r+s)}

对应的位权恢复回来。

为什么特别爱用 2e2^e?因为二进制浮点乘 2e2^e 本质上是在调整 exponent;在不发生 overflow/underflow 的正常范围内,它不会像一般实数乘法那样额外破坏 significand。


6. 所以 Ozaki I 的完整流水线是什么?

Section titled “6. 所以 Ozaki I 的完整流水线是什么?”

现代 GEMM-oriented Ozaki 可以压缩成:

把高精度矩阵拆成

A≈A1+⋯+Ak,A\approx A_1+\cdots+A_k, B≈B1+⋯+Bk,B\approx B_1+\cdots+B_k,

并通过 shared-place scaling 保证每个 slice 能安全进入低精度算术。

计算重要的

AiBj,i+j≤k+1.A_iB_j,\qquad i+j\le k+1.

每个低精度 product 被设计成尽可能 exact。

把每个 AiBjA_iB_j 按对应的 power-of-two scale 移回原来的数值尺度。

D=∑i+j≤k+1AiBj.D=\sum_{i+j\le k+1}A_iB_j.

若需要模拟完整 GEMM 接口,再做

C←αD+βC.C\leftarrow\alpha D+\beta C.

Ozaki I 的关键优势是:绝大部分计算都变成高吞吐 GEMM;关键缺点是:slice 数增加时,AiBjA_iB_j 数量近似二次增长。


Part II:中国剩余定理到底说了什么?

Section titled “Part II:中国剩余定理到底说了什么?”

7. 先从“余数能不能表示一个整数”开始

Section titled “7. 先从“余数能不能表示一个整数”开始”

选择两两互素的整数

m1,m2,…,ms,m_1,m_2,\dots,m_s,

满足

gcd⁡(mi,mj)=1(i≠j).\gcd(m_i,m_j)=1\qquad(i\ne j).

定义

M=∏i=1smi.M=\prod_{i=1}^{s}m_i.

对于整数 xx,记录它在每个模数下的余数:

ri=x mod mi.r_i=x\bmod m_i.

也就是把一个整数表示成向量

x⟼(r1,r2,…,rs)\boxed{ x\longmapsto(r_1,r_2,\dots,r_s) }

这就是 Residue Number System 的核心表示。

中国剩余定理说:

当 mim_i 两两互素时,任意一组余数 (r1,…,rs)(r_1,\dots,r_s) 都对应唯一的 x(modM)x\pmod M。

注意关键词是:

唯一 modulo M\boxed{\text{唯一 modulo }M}

不是“在所有整数中唯一”。


假设两个整数 x,yx,y 在所有模数下余数都一样:

x≡y(modmi),∀i.x\equiv y\pmod{m_i},\qquad\forall i.

那么

mi∣(x−y),∀i.m_i\mid(x-y),\qquad\forall i.

因为所有 mim_i 两两互素,所以它们的乘积也整除 x−yx-y:

M=m1m2⋯ms∣(x−y).M=m_1m_2\cdots m_s\mid(x-y).

因此

x≡y(modM).x\equiv y\pmod M.

所以在区间

0≤x<M0\le x<M

里只有一个可能的整数。

如果处理有符号整数,更常用 symmetric representative:

−M2≤x<M2.-\frac M2\le x<\frac M2.

只要真实答案落在这个区间里,也只有一个可能值。


已知

x≡ri(modmi),i=1,…,s.x\equiv r_i\pmod{m_i},\qquad i=1,\dots,s.

定义

Mi=Mmi.M_i=\frac{M}{m_i}.

因为 mim_i 与其他模数都互素,所以

gcd⁡(Mi,mi)=1.\gcd(M_i,m_i)=1.

于是 MiM_i 在模 mim_i 下存在乘法逆元。记

yi=Mi−1(modmi),y_i=M_i^{-1}\pmod{m_i},

也就是说

Miyi≡1(modmi).M_i y_i\equiv1\pmod{m_i}.

构造

ei=Miyi.e_i=M_i y_i.

这个 eie_i 有一个非常漂亮的性质:

ei≡1(modmi).e_i\equiv1\pmod{m_i}.

对其他模数 mjm_j,j≠ij\ne i

Section titled “对其他模数 mjm_jmj​,j≠ij\ne ij=i”

因为 MiM_i 包含因子 mjm_j,所以

ei=Miyi≡0(modmj).e_i=M_i y_i\equiv0\pmod{m_j}.

因此 eie_i 就像一个“模数空间里的 one-hot basis”:

ei≡{1(modmi),0(modmj),j≠i.e_i\equiv \begin{cases} 1\pmod{m_i},\\ 0\pmod{m_j},\quad j\ne i. \end{cases}

所以直接令

x=∑i=1sriMiyi(modM)\boxed{ x=\sum_{i=1}^{s}r_iM_i y_i\pmod M }

就行。

因为模 mjm_j 看过去,除了第 jj 项,其他项全部变成 0:

x≡rjMjyj≡rj(modmj).x \equiv r_jM_jy_j \equiv r_j \pmod{m_j}.

这就是 CRT reconstruction 公式的来源。


取

m1=5,m2=7.m_1=5,\qquad m_2=7.

于是

M=35.M=35.

假设我们知道

x≡2(mod5),x\equiv2\pmod5, x≡5(mod7).x\equiv5\pmod7.

先算:

M1=35/5=7.M_1=35/5=7.

要找 77 在模 55 下的逆元:

7≡2(mod5).7\equiv2\pmod5.

而

2×3=6≡1(mod5),2\times3=6\equiv1\pmod5,

所以

y1=3.y_1=3.

再算

M2=35/7=5.M_2=35/7=5.

55 在模 77 下的逆元也是 33,因为

5×3=15≡1(mod7).5\times3=15\equiv1\pmod7.

所以

x≡r1M1y1+r2M2y2(mod35)=2×7×3+5×5×3=42+75=117≡12(mod35).\begin{aligned} x &\equiv r_1M_1y_1+r_2M_2y_2\pmod{35}\\ &=2\times7\times3+5\times5\times3\\ &=42+75\\ &=117\\ &\equiv12\pmod{35}. \end{aligned}

检查:

12 mod 5=2,12\bmod5=2, 12 mod 7=5.12\bmod7=5.

完全一致。


Part III:为什么 CRT 特别适合矩阵乘法?

Section titled “Part III:为什么 CRT 特别适合矩阵乘法?”

这是从 Ozaki I 跳到 Scheme II 的真正数学核心。

对任意整数 a,ba,b:

(a+b) mod m=((a mod m)+(b mod m)) mod m,(a+b)\bmod m = ((a\bmod m)+(b\bmod m))\bmod m,

以及

(ab) mod m=((a mod m)(b mod m)) mod m.(ab)\bmod m = ((a\bmod m)(b\bmod m))\bmod m.

也就是说,映射

ϕm:Z→Z/mZ\phi_m:\mathbb Z\to\mathbb Z/m\mathbb Z

同时保持加法和乘法结构。

抽象一点:

ϕm(a+b)=ϕm(a)+ϕm(b),\phi_m(a+b)=\phi_m(a)+\phi_m(b), ϕm(ab)=ϕm(a)ϕm(b).\phi_m(ab)=\phi_m(a)\phi_m(b).

这就是 ring homomorphism。

而矩阵乘法本质上只有“乘法 + 加法”:

(AB)ij=∑kaikbkj.(AB)_{ij}=\sum_{k}a_{ik}b_{kj}.

因此:

(AB)ij mod m=(∑kaikbkj) mod m=∑k((aik mod m)(bkj mod m)) mod m.\begin{aligned} (AB)_{ij}\bmod m &= \left(\sum_k a_{ik}b_{kj}\right)\bmod m\\ &= \sum_k \left((a_{ik}\bmod m)(b_{kj}\bmod m)\right) \bmod m. \end{aligned}

所以整个矩阵层面:

AB mod m=(A mod m)(B mod m) mod m\boxed{ AB\bmod m = (A\bmod m)(B\bmod m)\bmod m }

这就是 Ozaki II 可以直接“一模数一 GEMM”的数学原因。


12. 为什么 CRT 表示没有 AiBjA_iB_j cross terms?

Section titled “12. 为什么 CRT 表示没有 AiBjA_iB_jAi​Bj​ cross terms?”

现在把两种表示并排看。

A=∑i2eiAi,A=\sum_i2^{e_i}A_i, B=∑j2fjBj.B=\sum_j2^{f_j}B_j.

乘起来:

AB=∑i∑j2ei+fjAiBj.AB = \sum_i\sum_j 2^{e_i+f_j}A_iB_j.

必然产生笛卡尔积。

A⟼(A mod m1,…,A mod ms),A\longmapsto (A\bmod m_1,\dots,A\bmod m_s), B⟼(B mod m1,…,B mod ms).B\longmapsto (B\bmod m_1,\dots,B\bmod m_s).

第 ii 个 channel 里直接得到:

Ci=(A mod mi)(B mod mi) mod mi=(AB) mod mi.C_i =(A\bmod m_i)(B\bmod m_i)\bmod m_i =(AB)\bmod m_i.

每个 channel 已经包含完整乘积 ABAB 在该模数下的信息。

根本不存在

(A mod mi)(B mod mj),i≠j(A\bmod m_i)(B\bmod m_j),\qquad i\ne j

这种东西,因为不同 residue channel 属于不同的 ring;CRT reconstruction 只在最后把同一个整数的各个 residue 拼回来。

所以:

positional digits:乘法会产生 cross terms\boxed{ \text{positional digits:乘法会产生 cross terms} } residue channels:乘法逐 channel 封闭\boxed{ \text{residue channels:乘法逐 channel 封闭} }

这就是 Scheme II 把低精度 GEMM 数从近似 O(k2)O(k^2) 降成 O(s)O(s) 的本质,而不仅仅是“用了一个 CRT 技巧”。


13. 但 CRT 只恢复 modulo MM:怎么得到真实乘积?

Section titled “13. 但 CRT 只恢复 modulo MMM:怎么得到真实乘积?”

这是 Scheme II 最容易漏掉的条件。

CRT reconstruct 得到的是

X≡A′B′(modM).X\equiv A'B'\pmod M.

如果

X=42,X=42,

那么

42, 42+M, 42−M,…42,\ 42+M,\ 42-M,\dots

都有相同 residue。

所以必须提前知道真实结果范围。

若能保证每个整数矩阵乘积元素满足

∣(A′B′)ij∣≤cmax⁡,|(A'B')_{ij}|\le c_{\max},

并让

2cmax⁡<M,\boxed{2c_{\max}<M},

那么真实答案一定落在

(−M/2,M/2)(-M/2,M/2)

里,而这个区间中每个 residue class 只出现一次。

于是 symmetric CRT representative 就是真正的整数乘积,而不是仅仅一个 modulo-MM 的代表元。

若

∣Aik′∣<2kA,|A'_{ik}|<2^{k_A}, ∣Bkj′∣<2kB,|B'_{kj}|<2^{k_B},

内积长度为 qq,那么

∣(A′B′)ij∣≤∑k=1q∣Aik′∣∣Bkj′∣<q2kA+kB.|(A'B')_{ij}| \le \sum_{k=1}^{q}|A'_{ik}||B'_{kj}| <q2^{k_A+k_B}.

因此可以要求

q2kA+kB<M/2.q2^{k_A+k_B}<M/2.

也就是

kA+kB<log⁡2M−log⁡2q−1.\boxed{ k_A+k_B < \log_2M-\log_2q-1 }.

这条式子解释了 Scheme II 的精度控制:

M=∏imi.M=\prod_i m_i.

多加一个模数 ms+1m_{s+1},就让

M←Mms+1,M\leftarrow Mm_{s+1},

可表示整数的 dynamic range 变大,于是可以让 kA,kBk_A,k_B 更大,保留更多输入 significand bit。

而代价只增加一个 residue GEMM。


14. 从代数角度看 CRT,Scheme II 会更漂亮

Section titled “14. 从代数角度看 CRT,Scheme II 会更漂亮”

中国剩余定理其实给出了一个 ring isomorphism:

Z/MZ≅∏i=1sZ/miZ\boxed{ \mathbb Z/M\mathbb Z \cong \prod_{i=1}^{s}\mathbb Z/m_i\mathbb Z }

其中

M=m1m2⋯ms,M=m_1m_2\cdots m_s,

且 mim_i 两两互素。

左边是一个“大整数模 MM”的 ring。

右边是 ss 个“小整数 ring”的直积。

因此一个大整数运算:

A′B′(modM)A'B'\pmod M

可以完全等价地变成 ss 个互不依赖的小整数运算:

Ai′Bi′(modmi),i=1,…,s.A'_iB'_i\pmod{m_i},\qquad i=1,\dots,s.

这句话就是 Ozaki Scheme II 的数学抽象:

把一个宽整数 GEMM 同构成多个窄整数 GEMM。

GPU 上恰好有极快的 INT8 Tensor Core,所以把 mim_i 控制到 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。

把一个宽 significand 表成多个 positional slices:

x=∑idi2ei.x=\sum_i d_i2^{e_i}.

优点:直观,和浮点有效位天然对应。

缺点:

xy=∑i∑jdiej2ei+fj,xy = \sum_i\sum_jd_i e_j2^{e_i+f_j},

所以乘法产生 cross terms。

先整数化,再用 residue vector 表示宽整数:

x⟷(x mod m1,…,x mod ms).x\longleftrightarrow (x\bmod m_1,\dots,x\bmod m_s).

优点:模映射保持乘法结构,所以:

xy mod mi=(x mod mi)(y mod mi) mod mi.xy\bmod m_i =(x\bmod m_i)(y\bmod m_i)\bmod m_i.

每个 channel 独立,完全没有 cross terms。


“高精度数装不进最快的低精度 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 integer

如果对方问 Ozaki,可以压缩成下面这段:

Ozaki Scheme I 用 error-free/shared-place splitting 把高精度矩阵的 significand 拆成多个低位宽 slice,使每个 slice pair 的低精度 dot product 能在底层 accumulator 中精确执行,再以高精度恢复 scale 并累加。问题是 positional decomposition 的乘法天然产生 AiBjA_iB_j cross terms,所以为了逐步恢复更多有效位,需要计算三角形数量的 GEMM,复杂度约 k(k+1)/2k(k+1)/2。Scheme II 改用 CRT residue representation。因为 reduction modulo mim_i 是 ring homomorphism,(AB) mod mi=(A mod mi)(B mod mi) mod mi(AB)\bmod m_i=(A\bmod m_i)(B\bmod m_i)\bmod m_i,所以每个 modulus 只需要一个独立 GEMM,最后 CRT 重建宽整数;只要总模数 MM 大于真实结果动态范围的两倍,就能从 modulo-MM 结果唯一恢复有符号真实乘积。

如果这段能自己推出来,Ozaki I 和 II 的核心就基本掌握了。


  • 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.