many things
This commit is contained in:
@@ -55,7 +55,8 @@ For **x86-64**:
|
||||
| 1 | Intel |
|
||||
| 2 | AMD |
|
||||
| 3 | VIA/Zhaoxin |
|
||||
| 4..15 | Reserved |
|
||||
| 4 | Hygon (海光) |
|
||||
| 5..15 | Reserved |
|
||||
|
||||
For **AArch64**:
|
||||
|
||||
@@ -111,15 +112,17 @@ AVX512 Feature (bits 31..16)
|
||||
Notes:
|
||||
|
||||
- **BASE (bit 20)**: Base AVX512 bundle, indicating `F + CD + VL + DQ + BW` are all present. If set to 1, the detecting side must guarantee these subsets are all available.
|
||||
- **AVX512_IMPL ([23..22], 2-bit)**: Implementation form (width policy).
|
||||
- **AVX512_IMPL ([23..22], 2-bit)**: 512-bit execution width policy — not port count, not frequency behaviour.
|
||||
|
||||
| Value | Meaning |
|
||||
|---:|------|
|
||||
| 0 | Unknown (strategy decided by Manufacture/uArch) |
|
||||
| 1 | AVX512-DUAL (glue/downclock risk; prefer 256-bit path) |
|
||||
| 2 | AVX512-NATIVE (full 512-bit ALU; 512-bit path is usable) |
|
||||
| 0 | Unknown — cannot determine; use conservative 256-bit kernels |
|
||||
| 1 | DUAL-PUMP — single 256-bit ALU executes 512-bit ops as two consecutive 256-bit micro-ops; ZMM throughput halved (example: AMD Zen4, Family 0x19) |
|
||||
| 2 | NATIVE — genuine 512-bit execution unit(s); full ZMM throughput (Intel all models including SKX; AMD Zen5 Family 0x1A and later) |
|
||||
| 3 | Reserved |
|
||||
|
||||
> **Note**: Intel SKX/CLX/CPX have two 512-bit FMA ports (port-0 + port-5) and are **NATIVE** — genuine 512-bit throughput. Intel downclocking on heavy ZMM workloads is a separate concern not encoded here. DUAL-PUMP applies only where a single 256-bit unit fires twice per 512-bit op (AMD Zen4-style).
|
||||
|
||||
- **VBMI/VBMI2/VNNI/BF16/FP16 ([29..25])**: Commonly needed niche or AI-related small-type extensions; set as needed.
|
||||
- **R/AI (bit 24)**: Reserved for future AI or other non-crypto extensions.
|
||||
- **[31..30], [21], [19..16]**: Reserved for future allocation.
|
||||
@@ -243,13 +246,17 @@ Detection:
|
||||
|
||||
## 12) Minimal Detection-Side Fill Rules (x86-64)
|
||||
|
||||
1) Set `RootISA = x86-64`, `Manufacture = Intel/AMD`.
|
||||
1) Set `RootISA = x86-64`, `Manufacture = Intel / AMD / Hygon / VIA`.
|
||||
2) Compute `MainLevel` (per ascending rule).
|
||||
3) If `MainLevel >= AVX512`:
|
||||
- If `F+CD+VL+DQ+BW` are all present, set `BASE = 1`; otherwise `BASE = 0`.
|
||||
- Set `AVX512_IMPL`:
|
||||
- AMD: DUAL (per definition)
|
||||
- Intel: Decide DUAL/NATIVE based on family/model or policy table; if uncertain, use Unknown
|
||||
- **Intel (all)**: NATIVE — all Intel AVX-512 CPUs have genuine 512-bit execution units
|
||||
- **AMD Zen4 (Family 0x19)**: DUAL — single 256-bit ALU, dual-pump
|
||||
- **AMD Zen5+ (Family 0x1A+)**: NATIVE — native full-width 512-bit units
|
||||
- **AMD other/future**: UNKNOWN (conservative)
|
||||
- **Hygon**: UNKNOWN (AVX-512 characteristics unclear)
|
||||
- **VIA/other**: UNKNOWN
|
||||
- When VNNI/BF16/FP16/VBMI/VBMI2 are detected, set the corresponding bits.
|
||||
4) If `MainLevel >= AMX`: fill the AMX byte.
|
||||
5) When AVX/AVX2 are present, populate the AVX Feature byte: set `AVX` and `AVX2`; set `FMA` and `F16C` when detected; set `DUAL` when the YMM execution path is split/glued (AMD Zen1/Zen+ Family 0x17 model < 0x30, Hygon all models, VIA/Zhaoxin all models).
|
||||
|
||||
Reference in New Issue
Block a user