修正了部分代码的表达方式,最后可用版本,mlirlite 已基本完善
This commit is contained in:
1 parent
0d77b68cc4
commit
0f556463e7
116 files changed
+13896
-4938
No files matched your search
+13
-13
@@ -183,7 +183,7 @@ movups [{c.AsmInp(out, t.ASM_DESCR.REG_ANY)}], xmm0""",
|
||||
# Batch array operations (AVX2 loop, process N double values)
|
||||
# ============================================================
|
||||
|
||||
def simd_add_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_add_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch: out[i:i+4] = a[i:i+4] + b[i:i+4], i=0,4,8,...
|
||||
×8 双缓冲(32 doubles/大迭代):a(ymm0-7)+b(ymm8-15) 16 路 load 全部在飞后
|
||||
做 8 条独立 add→store 链,最大化内存级并行、压榨访存口。
|
||||
@@ -256,7 +256,7 @@ vzeroupper""",
|
||||
'ymm12', 'ymm13', 'ymm14', 'ymm15', 'rcx', 'r8', 'r9', 'r10', 'r11'])
|
||||
|
||||
|
||||
def simd_sub_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_sub_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch: out[i:i+4] = a[i:i+4] - b[i:i+4]"""
|
||||
c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)}
|
||||
shr rcx, 2
|
||||
@@ -280,7 +280,7 @@ vzeroupper""",
|
||||
op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'rcx', 'r8', 'r9', 'r10'])
|
||||
|
||||
|
||||
def simd_mul_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_mul_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch: out[i:i+4] = a[i:i+4] * b[i:i+4]
|
||||
×8 双缓冲(同 simd_add_array)。"""
|
||||
c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)}
|
||||
@@ -350,7 +350,7 @@ vzeroupper""",
|
||||
'ymm12', 'ymm13', 'ymm14', 'ymm15', 'rcx', 'r8', 'r9', 'r10', 'r11'])
|
||||
|
||||
|
||||
def simd_fma_array(a: t.CPtr, b: t.CPtr, c_val: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_fma_array(a: t.CPtr, b: t.CPtr, c_val: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch (单趟融合乘加): out[i:i+4] = a[i:i+4]*b[i:i+4] + c_val[i:i+4]
|
||||
×8 双缓冲(同 simd_mul_array):a(ymm0-7)+b(ymm8-15) 16 路 load 在飞后,
|
||||
用 8 条 vfmadd213pd 以 c_val 内存操作数为加数一次完成 FMA 并落 out,
|
||||
@@ -428,7 +428,7 @@ vzeroupper""",
|
||||
'ymm12', 'ymm13', 'ymm14', 'ymm15', 'rcx', 'rdx', 'r8', 'r9', 'r10', 'r11'])
|
||||
|
||||
|
||||
def scalar_fma_array(a: t.CPtr, b: t.CPtr, c_val: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def scalar_fma_array(a: t.CPtr, b: t.CPtr, c_val: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""标量(逐元素)融合乘加: out[i] = a[i]*b[i] + c_val[i], 一次只算 1 个 double。
|
||||
|
||||
与 simd_fma_array 是同一数学内核的"未向量化"对照实现:
|
||||
@@ -461,7 +461,7 @@ jnz .Lsca_loop
|
||||
'rcx', 'rdx', 'r8', 'r9', 'r10'])
|
||||
|
||||
|
||||
def scalar_add_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def scalar_add_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""标量(逐元素)加法: out[i] = a[i] + b[i], 一次 1 个 double。
|
||||
|
||||
`simd_add_array` 的未向量化对照: 标量 `vaddsd` vs SIMD `vaddpd`,
|
||||
@@ -485,7 +485,7 @@ jnz .Lsca_add_loop
|
||||
op=[t.ASM_DESCR.CLOBBER_MEMORY, 'xmm0', 'rcx', 'r8', 'r9', 'r10'])
|
||||
|
||||
|
||||
def scalar_mul_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def scalar_mul_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""标量(逐元素)乘法: out[i] = a[i] * b[i], 一次 1 个 double。
|
||||
|
||||
`simd_mul_array` 的未向量化对照: 标量 `vmulsd` vs SIMD `vmulpd`,
|
||||
@@ -509,7 +509,7 @@ jnz .Lsca_mul_loop
|
||||
op=[t.ASM_DESCR.CLOBBER_MEMORY, 'xmm0', 'rcx', 'r8', 'r9', 'r10'])
|
||||
|
||||
|
||||
def scalar_sqrt_array(a: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def scalar_sqrt_array(a: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""标量(逐元素)平方根: out[i] = sqrt(a[i]), 一次 1 个 double。
|
||||
|
||||
`simd_sqrt_array` 的未向量化对照: 标量 `vsqrtsd` vs SIMD `vsqrtpd`,
|
||||
@@ -531,7 +531,7 @@ jnz .Lsca_sqrt_loop
|
||||
op=[t.ASM_DESCR.CLOBBER_MEMORY, 'xmm0', 'rcx', 'r8', 'r10'])
|
||||
|
||||
|
||||
def simd_div_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_div_array(a: t.CPtr, b: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch: out[i:i+4] = a[i:i+4] / b[i:i+4]"""
|
||||
c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)}
|
||||
shr rcx, 2
|
||||
@@ -555,7 +555,7 @@ vzeroupper""",
|
||||
op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm1', 'rcx', 'r8', 'r9', 'r10'])
|
||||
|
||||
|
||||
def simd_sqrt_array(a: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_sqrt_array(a: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch: out[i:i+4] = sqrt(a[i:i+4])
|
||||
×4 展开:4 路独立 vsqrtpd 链隐藏平方根长延迟(吞吐受限场景显著提速)。"""
|
||||
c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)}
|
||||
@@ -600,7 +600,7 @@ vzeroupper""",
|
||||
'rcx', 'r8', 'r10', 'r11'])
|
||||
|
||||
|
||||
def simd_abs_array(a: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_abs_array(a: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch: out[i:i+4] = |a[i:i+4]|"""
|
||||
c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)}
|
||||
shr rcx, 2
|
||||
@@ -623,7 +623,7 @@ vzeroupper""",
|
||||
op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm2', 'rcx', 'r8', 'r10'])
|
||||
|
||||
|
||||
def simd_neg_array(a: t.CPtr, out: t.CPtr, n: t.CSizeT):
|
||||
def simd_neg_array(a: t.CPtr, out: t.CPtr, n: sizet):
|
||||
"""AVX2 batch: out[i:i+4] = -a[i:i+4] (flip sign bit via XOR)"""
|
||||
c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)}
|
||||
shr rcx, 2
|
||||
@@ -646,7 +646,7 @@ vzeroupper""",
|
||||
op=[t.ASM_DESCR.CLOBBER_MEMORY, 'ymm0', 'ymm2', 'rcx', 'r8', 'r10'])
|
||||
|
||||
|
||||
def simd_dot_array(a: t.CPtr, b: t.CPtr, n: t.CSizeT, out: t.CPtr):
|
||||
def simd_dot_array(a: t.CPtr, b: t.CPtr, n: sizet, out: t.CPtr):
|
||||
"""AVX2 batch: out[0] = dot(a[0:n], b[0:n]) using FMA accumulation"""
|
||||
c.Asm(f"""mov rcx, {c.AsmInp(n, t.ASM_DESCR.REG_ANY)}
|
||||
shr rcx, 2
|
||||
|
||||
Reference in new issue
Block a user