add simd id
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
# SIMDID(x86-64)64-bit 规范(按你给定的固定布局补全)
|
||||
|
||||
本文按你指定的 **64-bit SIMDID** 位布局进行补全,重点给出 **AVX512 Feature 区段([31..16])** 的设计,使其既能覆盖 AVX-512 混乱的子集,又能保持分支逻辑尽量精简。
|
||||
|
||||
> 约定:bit0 为最低位(LSB)。本文只定义 x86-64 解释器下的语义;Header 的 Root ISA 允许扩展到其他架构。
|
||||
|
||||
---
|
||||
|
||||
## 1) ASCII 位布局(最终)
|
||||
|
||||
```
|
||||
SIMDID (64 bits) [63 ........................................................ 0]
|
||||
+--------------------------+-----------+----------------+----------------+----------------+----------------+
|
||||
| [63..40] uArch/Policy | [39..32] | [31..16] | [15..8] | [7..4] | [3..0] |
|
||||
| (24 bits, optional) | AMX Future| AVX512 Feature | MainLevel | Manufacture | Root ISA |
|
||||
+--------------------------+-----------+----------------+----------------+----------------+----------------+
|
||||
```
|
||||
|
||||
- **[3..0] Root ISA**:根指令集类型(用于选择解释器)
|
||||
- **[7..4] Manufacture**:制造商信息(对 x86 来说 Intel/AMD 等)
|
||||
- **[15..8] MainLevel**:主 ISA 等级(递增、共享比特语义)
|
||||
- **[31..16] AVX512 Feature**:AVX-512 特征/子集/实现形态(重点)
|
||||
- **[39..32] AMX Future**:AMX 特征(目前可只放少量位)
|
||||
- **[63..40] uArch/Policy**:可选策略/微架构提示(默认 0,不影响功能)
|
||||
|
||||
---
|
||||
|
||||
## 2) Root ISA([3..0])
|
||||
|
||||
建议编码(你列出的架构较多,这里给一个可用的最小集合;不够可继续扩):
|
||||
|
||||
| 值 | Root ISA |
|
||||
|---:|----------|
|
||||
| 0 | Unknown |
|
||||
| 1 | x86-64 |
|
||||
| 2 | AArch64 |
|
||||
| 3 | PPC64LE |
|
||||
| 4 | Apple Silicon(如果你想把它当“制造商+ARM”以外的 note,也可放在 Manufacture;但你要求 Root ISA 里有它,那就给它一个值) |
|
||||
| 5 | RISC-V |
|
||||
| 6 | LoongArch |
|
||||
| 7..15 | Reserved |
|
||||
|
||||
> 注:从体系结构角度 Apple Silicon 属于 AArch64;但你既然希望在 Root ISA 层面区分,那就这样定义即可(解释器由你决定)。
|
||||
|
||||
---
|
||||
|
||||
## 3) Manufacture([7..4])
|
||||
|
||||
在 **x86-64** 下建议:
|
||||
|
||||
| 值 | Manufacture |
|
||||
|---:|-------------|
|
||||
| 0 | Unknown/Other |
|
||||
| 1 | Intel |
|
||||
| 2 | AMD |
|
||||
| 3 | VIA/Zhaoxin |
|
||||
| 4..15 | Reserved |
|
||||
|
||||
在其它 Root ISA 下,该 nibble 由各自解释器自行定义(例如 ARM 下可放 Apple/Qualcomm/MediaTek 等)。
|
||||
|
||||
---
|
||||
|
||||
## 4) MainLevel([15..8],递增)
|
||||
|
||||
你要求“共用比特且递增”,也就是说数值越大能力越强(或至少在你的库调度中越靠后)。建议定为:
|
||||
|
||||
| 值 | MainLevel |
|
||||
|---:|-----------|
|
||||
| 0 | NONE |
|
||||
| 1 | SSE(完整 SSE 家族:SSE1..SSE4.2) |
|
||||
| 2 | AVX2 |
|
||||
| 3 | AVX2_FMA |
|
||||
| 4 | AVX2_FMA_F16C(从该级开始可处理 16-bit 类型) |
|
||||
| 5 | AVX512(需要查询 [31..16]) |
|
||||
| 6 | AMX |
|
||||
| 7 | AVX10 |
|
||||
| 8..255 | Reserved |
|
||||
|
||||
> 建议调度:`MainLevel` 是主 switch;只有当 `MainLevel>=AVX512` 才解析 `AVX512 Feature`;当 `MainLevel>=AMX` 才解析 `AMX Future`。
|
||||
|
||||
---
|
||||
|
||||
## 5) AVX512 Feature([31..16])设计目标(精简版)
|
||||
|
||||
目标改为:
|
||||
|
||||
1) **基础 AVX512 一次性判定**:用 1 bit 表示“F+CD+VL+DQ+BW”这一捆绑基础包,避免多次子集判断。
|
||||
2) **胶水 vs 原生**:用实现字段直接区分 `AVX512-DUAL`(胶水/降频风险)与 `AVX512-NATIVE`(完整 512 位 ALU)。
|
||||
3) **小众/AI 扩展单独留位**:VNNI、BF16/FP16 等稀疏出现的扩展单独占位,基础路径不受干扰。
|
||||
|
||||
---
|
||||
|
||||
## 6) AVX512 Feature 位布局([31..16] = 16 bits,精简)
|
||||
|
||||
|
||||
AVX512 Feature (bits 31..16)
|
||||
|
||||
| **bit** | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
|
||||
|-----------|-----|-----|------|------|------|-------|------|------|-------|-------|----|------|----|----|----|----|
|
||||
| **Usage** | R | R | FP16 | BF16 | VNNI | VBMI2 | VBMI | R/AI | Impl1 | Impl0 | R | BASE | R | R | R | R |
|
||||
|
||||
|
||||
说明:
|
||||
|
||||
- **BASE(bit 20)**:基础 AVX512 一揽子,表示同时具备 `F + CD + VL + DQ + BW`。这是 AVX512 最低可用门槛,探测端若设为 1,应保证上述子集都成立。
|
||||
- **AVX512_IMPL([23..22],2-bit)**:实现形态(宽度策略)。
|
||||
|
||||
| 值 | 含义 |
|
||||
|---:|------|
|
||||
| 0 | Unknown(需结合 Manufacture/uArch 决定策略) |
|
||||
| 1 | AVX512-DUAL(胶水/降频风险,建议默认 256 宽路径) |
|
||||
| 2 | AVX512-NATIVE(完整 512 位 ALU,可走 512 宽路径) |
|
||||
| 3 | Reserved |
|
||||
|
||||
- **VBMI/VBMI2/VNNI/BF16/FP16([29..26])**:稀疏但常用的小类型/AI 扩展,按需设置。
|
||||
- **R/AI(bit 24)**:预留给未来 AI 或其他非密码学的自选扩展。
|
||||
- **[31..30]、[21]、[19..16]**:Reserved,按需再分配。
|
||||
|
||||
---
|
||||
|
||||
## 7) “AVX512BASE” 判定(一次性检查)
|
||||
|
||||
- **规则**:`BASE=1` 即视为具备 `F+CD+VL+DQ+BW`,无需逐项再查。探测端必须保持一致性,若无法保证全部子集齐备则应置 0。
|
||||
- **运行时分支**:
|
||||
- 若 `MainLevel < AVX512`:直接降级到 AVX2/FMA 路径。
|
||||
- 否则:
|
||||
- 检查 `BASE`;若为 0 则降级到 AVX2/FMA(或视为探测错误)。
|
||||
- 查看 `AVX512_IMPL`:`DUAL` 走 256 宽/降频安全路径,`NATIVE` 走 512 宽路径。
|
||||
- 需要小类型/AI 能力时,按位查看 `VNNI/BF16/FP16/VBMI/VBMI2`。
|
||||
|
||||
---
|
||||
|
||||
## 8) AMX Future([39..32],8 bits)
|
||||
|
||||
你已经留了 1 个字节,建议先只定义 3 个最常见位,其余保留:
|
||||
|
||||
| bit(相对 [39..32]) | 名称 | 说明 |
|
||||
|---:|------|------|
|
||||
| 0 | AMX_TILE | tile 基础 |
|
||||
| 1 | AMX_INT8 | INT8 tile |
|
||||
| 2 | AMX_BF16 | BF16 tile |
|
||||
| 3..7 | Reserved | |
|
||||
|
||||
当 `MainLevel < AMX` 时,这个字节可全为 0。
|
||||
|
||||
---
|
||||
|
||||
## 9) uArch/Policy([63..40],24 bits)
|
||||
|
||||
用途:**你不想浪费比特,但又需要解决“Intel 早期/AMD 胶水”这类非 CPUID 纯子集能解决的问题**。
|
||||
把它留作可选策略字段,默认 0;你需要时再启用。
|
||||
|
||||
建议最小化用法:
|
||||
- `0`:未使用
|
||||
- `1`:ForceDual(即使 impl unknown 也当 AVX512-DUAL)
|
||||
- `2`:ForceNative(即使 impl unknown 也当 AVX512-NATIVE)
|
||||
- `3..`:你自己维护的 uArch 枚举(例如 SKX/ICL/SPR/ZEN4/ZEN5…)
|
||||
|
||||
> 由于你是单人维护,最现实的策略是:
|
||||
> - AMD:探测端直接把 `AVX512_IMPL=DUAL`(无需 uArch)
|
||||
> - Intel:仅对你关心的少数型号做 uArch 枚举,否则 unknown 走默认策略
|
||||
|
||||
---
|
||||
|
||||
## 10) 建议的最简探测端填充规则(x86-64)
|
||||
|
||||
1) 先填 `RootISA=x86-64`、`Manufacture=Intel/AMD`
|
||||
2) 计算 `MainLevel`(按你递增规则)
|
||||
3) 若 `MainLevel >= AVX512`:
|
||||
- 若探测到 `F+CD+VL+DQ+BW` 全部成立,则置 `BASE=1`,否则 `BASE=0`
|
||||
- 填 `AVX512_IMPL`:
|
||||
- AMD:DUAL(按你的定义)
|
||||
- Intel:可按 family/model 或 policy 表决定 DUAL/NATIVE;不确定就 Unknown
|
||||
- 需要 VNNI/BF16/FP16/VBMI/VBMI2 时,按位填写对应扩展
|
||||
4) 若 `MainLevel >= AMX`:填 AMX byte
|
||||
|
||||
---
|
||||
|
||||
## 11) 你需要做的一个选择(高位保留位如何分配)
|
||||
|
||||
目前 `[31..24]` 留作扩展/AI:示例定义为 FP16/BF16/VNNI/VBMI2/VBMI + 1 个预留位。
|
||||
如果你更需要 IFMA 或其他非密码学扩展,请替换 bit26~29 的定义;`BASE` 与 `Impl` 保持不变即可。
|
||||
Reference in New Issue
Block a user