找回密码
 欢迎注册
楼主: 无心人

[讨论] 64位平台的256位乘法测试

[复制链接]
发表于 2025-10-14 08:54:55 | 显示全部楼层
用mulx 指令.
4路展开同时算的话,
速度大约差不多能提升30%  
(这边测试 10x ms 提升到 7x ms)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-10-17 09:04:22 | 显示全部楼层
函数参数跟题主的顺序有点不一样.
extern "C" uint64_t asm_avx2_x256_mulx_4_4(const uint64_t a[], const uint64_t b[], uint64_t result[]);
  1. asm_avx2_x256_mulx_4_4 proc frame
  2.     .endprolog
  3.         ;原来 result temp1,temp2  rcx r9,r8
  4.         ;现在  temp1,temp2,result  rcx,r9.r8 即 把rcx,r8对调
  5.         ;mov r10, [r8 + 0 * 8]
  6.         push rbx
  7.         push r12
  8.         push r13
  9.         push r14
  10.         push r15
  11.         push rdi
  12.         push rsi
  13.         push rbp
  14.         push rsp

  15.         mov r11, [rdx + 0 * 8]
  16.         mov r12, [rdx + 1 * 8]
  17.         mov r13, [rdx + 2 * 8]
  18.         mov r14, [rdx + 3 * 8]
  19.         ;rcx:r11--r14  dest:r8
  20.         ;rdx(mulx 固定为被乘数)
  21.         ; 剩余可用 rax rbx, rsi,rdi,r9,r10,r15,rbp
  22.         ;mov r9, rdx
  23.         mov rdx,[rcx + 0 * 8]
  24.         mulx rax,rbx,r11
  25.         mulx rsi,rdi,r12
  26.         mulx r9,r10,r13
  27.         mulx r15,rbp,r14

  28.         add rax,rdi
  29.         adc rsi,r10
  30.         adc r9,rbp
  31.         adc r15,0

  32.         mov [r8 + 0 * 8],rbx
  33.         movd xmm1,rax
  34.         movd xmm2,rsi
  35.         movd xmm3,r9
  36.         movd xmm4,r15
  37.         ;第一轮结束
  38.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  39.         mov rdx,[rcx + 1 * 8]
  40.         mulx rax,rbx,r11
  41.         mulx rsi,rdi,r12
  42.         mulx r9,r10,r13
  43.         mulx r15,rbp,r14

  44.         add rax,rdi
  45.         adc rsi,r10
  46.         adc r9,rbp
  47.         adc r15,0

  48.         movd rdx,xmm1
  49.         movd rdi,xmm2
  50.         movd r10,xmm3
  51.         movd rbp,xmm4       

  52.         add rbx,rdx
  53.         adc rax,rdi
  54.         adc rsi,r10
  55.         adc r9,rbp
  56.         adc r15,0

  57.         mov [r8 + 1 * 8],rbx
  58.         movd xmm1,rax
  59.         movd xmm2,rsi
  60.         movd xmm3,r9
  61.         movd xmm4,r15
  62.         ;第二轮结束
  63.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  64.         mov rdx,[rcx + 2 * 8]
  65.         mulx rax,rbx,r11
  66.         mulx rsi,rdi,r12
  67.         mulx r9,r10,r13
  68.         mulx r15,rbp,r14

  69.         add rax,rdi
  70.         adc rsi,r10
  71.         adc r9,rbp
  72.         adc r15,0

  73.         movd rdx,xmm1
  74.         movd rdi,xmm2
  75.         movd r10,xmm3
  76.         movd rbp,xmm4       

  77.         add rbx,rdx
  78.         adc rax,rdi
  79.         adc rsi,r10
  80.         adc r9,rbp
  81.         adc r15,0

  82.         mov [r8 + 2 * 8],rbx
  83.         movd xmm1,rax
  84.         movd xmm2,rsi
  85.         movd xmm3,r9
  86.         movd xmm4,r15

  87.         ;第三轮结束
  88.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  89.         mov rdx,[rcx + 3 * 8]
  90.         mulx rax,rbx,r11
  91.         mulx rsi,rdi,r12
  92.         mulx r9,r10,r13
  93.         mulx r15,rbp,r14

  94.         add rax,rdi
  95.         adc rsi,r10
  96.         adc r9,rbp
  97.         adc r15,0

  98.         movd rdx,xmm1
  99.         movd rdi,xmm2
  100.         movd r10,xmm3
  101.         movd rbp,xmm4       

  102.         add rbx,rdx
  103.         adc rax,rdi
  104.         adc rsi,r10
  105.         adc r9,rbp
  106.         adc r15,0

  107.         mov [r8 + 3 * 8],rbx
  108.         mov [r8 + 4 * 8],rax
  109.         mov [r8 + 5 * 8],rsi
  110.         mov [r8 + 6 * 8],r9
  111.         mov [r8 + 7 * 8],r15




  112.         pop rsp
  113.         pop rbp
  114.         pop rsi
  115.         pop rdi
  116.         pop r15
  117.         pop r14
  118.         pop r13
  119.         pop r12
  120.         pop rbx
  121.         ret
  122. asm_avx2_x256_mulx_4_4 endp
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2025-11-7 16:49 , Processed in 0.043792 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表