nx_simd_probe.nx source
↩ module page · 30 lines · 1127 B
1// nx_simd_probe.nx -- confirm the __simd i16x16 vdot intrinsics compile + work in a nx_syscalls organ.
2//
3// After threading hit an nx_thread/nx_kernel_v2-vs-nx_syscalls base-import wall, this checks the SIMD path
4// is viable in the gguf/q4k import context (nx_syscalls-based): the __simd_* are COMPILER INTRINSICS (no
5// library import), so they should compose. Known-answer: dot([1..16],[1..16]) = sum(i^2)=1496.
6// license_tier: ORIGINAL
7import "nx_syscalls.nx"
8import "nx_tier.nx"
9
10func sp_pack4(a: i64, b: i64, c: i64, d: i64) -> i64 {
11 return (a & 0xFFFF) | ((b & 0xFFFF) << 16) | ((c & 0xFFFF) << 32) | ((d & 0xFFFF) << 48)
12}
13
14func main() -> i64 {
15 let a: *i64 = sys_mmap(64) as *i64
16 let b: *i64 = sys_mmap(64) as *i64
17 a[0] = sp_pack4(1, 2, 3, 4)
18 a[1] = sp_pack4(5, 6, 7, 8)
19 a[2] = sp_pack4(9, 10, 11, 12)
20 a[3] = sp_pack4(13, 14, 15, 16)
21 b[0] = a[0]
22 b[1] = a[1]
23 b[2] = a[2]
24 b[3] = a[3]
25 let va: i64 = __simd_vload_i16_x16(a as *i64)
26 let vb: i64 = __simd_vload_i16_x16(b as *i64)
27 let s: i64 = __simd_vdot_i16_x16(va, vb)
28 if s != 1496 { return 1 }
29 return 0
30}