hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 994|回复: 9

64位平台的256位乘法测试

[复制链接]

535

主题

535

帖子

1629

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1629
发表于 2023-10-5 17:22:14 | 显示全部楼层 |阅读模式
先贴上我测试通过的代码
  1. __declspec(naked)void UInt256x256To512(uint64_t* result, const uint64_t* left, const uint64_t* right){        __asm        {                push rbx                                mov r9, rdx                mov r10, [r8+0*8]                mov r11, [r9+0*8]                mov r12, [r9+1*8]                mov r13, [r9+2*8]                mov r14, [r9+3*8]                mov rax, r10                mul r11                mov [rcx+0*8], rax                mov r15, rdx                mov rax, r10                mul r12                add rax, r15                adc rdx, 0                mov r15, rdx                movq xmm1, rax                mov rax, r10                mul r13                add rax, r15                adc rdx, 0                mov r15, rdx                movq xmm2, rax                mov rax, r10                mul r14                add rax, r15                adc rdx, 0                mov r15, rdx                movq xmm3, rax                movq xmm4, rdx                mov r10, [r8+1*8]                                movq r15, xmm1                mov rax, r10                mul r11                add rax, r15                adc rdx, 0                mov [rcx+1*8], rax                mov rbx, rdx                movq r15, xmm2                mov rax, r10                mul r12                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                movq xmm2, rax                mov rbx, rdx                movq r15, xmm3                mov rax, r10                mul r13                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                movq xmm3, rax                mov rbx, rdx                movq r15, xmm4                mov rax, r10                mul r14                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                movq xmm4, rax                movq xmm5, rdx                mov r10, [r8+2*8]                movq r15, xmm2                mov rax, r10                mul r11                add rax, r15                adc rdx, 0                mov [rcx+2*8], rax                mov rbx, rdx                movq r15, xmm3                mov rax, r10                mul r12                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                movq xmm3, rax                mov rbx, rdx                movq r15, xmm4                mov rax, r10                mul r13                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                movq xmm4, rax                mov rbx, rdx                movq r15, xmm5                mov rax, r10                mul r14                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                movq xmm5, rax                movq xmm6, rdx                mov r10, [r8+3*8]                movq r15, xmm3                mov rax, r10                mul r11                add rax, r15                adc rdx, 0                mov [rcx+3*8], rax                mov rbx, rdx                movq r15, xmm4                mov rax, r10                mul r12                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                mov [rcx+4*8], rax                mov rbx, rdx                movq r15, xmm5                mov rax, r10                mul r13                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                mov [rcx+5*8], rax                mov rbx, rdx                movq r15, xmm6                mov rax, r10                mul r14                add rax, r15                adc rdx, 0                add rax, rbx                adc rdx, 0                mov [rcx+6*8], rax                mov [rcx+7*8], rdx                pop rbx                ret        }}
复制代码
回复

使用道具 举报

0

主题

192

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-5 17:22:40 | 显示全部楼层
晕,发这些汇编代码上来干什么?一点注释都没有,谁有兴趣去看呀?
回复

使用道具 举报

0

主题

191

帖子

47

积分

新手上路

Rank: 1

积分
47
发表于 2023-10-5 17:22:48 | 显示全部楼层
为什么用xmmi?是寄存器不够用吗?这些寄存器不需要保存原先的初值吗?
回复

使用道具 举报

0

主题

192

帖子

163

积分

关内侯

Rank: 2

积分
163
发表于 2023-10-5 17:23:22 | 显示全部楼层
为什么不用 YMM 寄存器?
回复

使用道具 举报

0

主题

201

帖子

71

积分

关内侯

Rank: 2

积分
71
发表于 2023-10-5 17:23:39 | 显示全部楼层
63行汇编,含IO占10个寄存器,读写内存。
llvm-mca表示运行时间43cycle,但mca可能有bug,实际时间没那么长
  1. Timeline view:                    0123456789          0123456789   Index     0123456789          0123456789          012[0,0]     DeeeeeER  .    .    .    .    .    .    . .   movq        (%rsi), %rdx[0,1]     DeeeeeeeeeER   .    .    .    .    .    . .   mulxq        (%rbx), %rax, %r8[0,2]     D========eER   .    .    .    .    .    . .   movq        %rax, (%rdi)[0,3]     .DeeeeeeeeeER  .    .    .    .    .    . .   mulxq        8(%rbx), %rax, %r9[0,4]     .D========eER  .    .    .    .    .    . .   addq        %rax, %r8[0,5]     . DeeeeeeeeeER .    .    .    .    .    . .   mulxq        16(%rbx), %rax, %r10[0,6]     . D========eER .    .    .    .    .    . .   adcq        %rax, %r9[0,7]     .  DeeeeeeeeeER.    .    .    .    .    . .   mulxq        24(%rbx), %rax, %r11[0,8]     .  D========eER.    .    .    .    .    . .   adcq        %rax, %r10[0,9]     .  D=========eER    .    .    .    .    . .   adcq        $0, %r11[0,10]    .   D----------R    .    .    .    .    . .   xorl        %ecx, %ecx[0,11]    .   DeeeeeE----R    .    .    .    .    . .   movq        8(%rsi), %rdx[0,12]    .   DeeeeeeeeeER    .    .    .    .    . .   mulxq        (%rbx), %rax, %rcx[0,13]    .    D=======eER    .    .    .    .    . .   adoxq        %rax, %r8[0,14]    .    D========eER   .    .    .    .    . .   adcxq        %rcx, %r9[0,15]    .    D========eER   .    .    .    .    . .   movq        %r8, 8(%rdi)[0,16]    .    .DeeeeeeeeeER  .    .    .    .    . .   mulxq        8(%rbx), %rax, %rcx[0,17]    .    .D========eER  .    .    .    .    . .   adoxq        %rax, %r9[0,18]    .    .D=========eER .    .    .    .    . .   adcxq        %rcx, %r10[0,19]    .    . DeeeeeeeeeER .    .    .    .    . .   mulxq        16(%rbx), %rax, %rcx[0,20]    .    . D=========eER.    .    .    .    . .   adoxq        %rax, %r10[0,21]    .    . D==========eER    .    .    .    . .   adcxq        %rcx, %r11[0,22]    .    .  DeeeeeeeeeE-R    .    .    .    . .   mulxq        24(%rbx), %rax, %rcx[0,23]    .    .  D==========eER   .    .    .    . .   adoxq        %rax, %r11[0,24]    .    .  DeE----------R   .    .    .    . .   movl        $0, %r8d[0,25]    .    .   D==========eER  .    .    .    . .   adoxq        %r8, %r8[0,26]    .    .   D===========eER .    .    .    . .   adcxq        %rcx, %r8[0,27]    .    .   DeeeeeE-------R .    .    .    . .   movq        16(%rsi), %rdx[0,28]    .    .    DeeeeeeeeeE--R .    .    .    . .   mulxq        (%rbx), %rax, %rcx[0,29]    .    .    D===========eER.    .    .    . .   adoxq        %rax, %r9[0,30]    .    .    D============eER    .    .    . .   adcxq        %rcx, %r10[0,31]    .    .    .D===========eER    .    .    . .   movq        %r9, 16(%rdi)[0,32]    .    .    .DeeeeeeeeeE---R    .    .    . .   mulxq        8(%rbx), %rax, %rcx[0,33]    .    .    .D============eER   .    .    . .   adoxq        %rax, %r10[0,34]    .    .    . D============eER  .    .    . .   adcxq        %rcx, %r11[0,35]    .    .    . DeeeeeeeeeE----R  .    .    . .   mulxq        16(%rbx), %rax, %rcx[0,36]    .    .    . D=============eER .    .    . .   adoxq        %rax, %r11[0,37]    .    .    .  D=============eER.    .    . .   adcxq        %rcx, %r8[0,38]    .    .    .  DeeeeeeeeeE-----R.    .    . .   mulxq        24(%rbx), %rax, %rcx[0,39]    .    .    .  D==============eER    .    . .   adoxq        %rax, %r8[0,40]    .    .    .   DeE-------------R    .    . .   movl        $0, %r9d[0,41]    .    .    .   D==============eER   .    . .   adoxq        %r9, %r9[0,42]    .    .    .   D===============eER  .    . .   adcxq        %rcx, %r9[0,43]    .    .    .   DeeeeeE-----------R  .    . .   movq        24(%rsi), %rdx[0,44]    .    .    .    DeeeeeeeeeE------R  .    . .   mulxq        (%rbx), %rax, %rcx[0,45]    .    .    .    D===============eER .    . .   adoxq        %rax, %r10[0,46]    .    .    .    D================eER.    . .   adcxq        %rcx, %r11[0,47]    .    .    .    .D===============eER.    . .   movq        %r10, 24(%rdi)[0,48]    .    .    .    .DeeeeeeeeeE-------R.    . .   mulxq        8(%rbx), %rax, %rcx[0,49]    .    .    .    .D================eER    . .   adoxq        %rax, %r11[0,50]    .    .    .    . D================eER   . .   adcxq        %rcx, %r8[0,51]    .    .    .    . D================eER   . .   movq        %r11, 32(%rdi)[0,52]    .    .    .    . DeeeeeeeeeE--------R   . .   mulxq        16(%rbx), %rax, %rcx[0,53]    .    .    .    .  D================eER  . .   adoxq        %rax, %r8[0,54]    .    .    .    .  D=================eER . .   adcxq        %rcx, %r9[0,55]    .    .    .    .  D=================eER . .   movq        %r8, 40(%rdi)[0,56]    .    .    .    .   DeeeeeeeeeE--------R . .   mulxq        24(%rbx), %rax, %rcx[0,57]    .    .    .    .   D=================eER. .   adoxq        %rax, %r9[0,58]    .    .    .    .   DeE-----------------R. .   movl        $0, %r10d[0,59]    .    .    .    .    D=================eER .   movq        %r9, 48(%rdi)[0,60]    .    .    .    .    D=================eER .   adoxq        %r10, %r10[0,61]    .    .    .    .    D==================eER.   adcxq        %rcx, %r10[0,62]    .    .    .    .    D===================eER   movq        %r10, 56(%rdi)
复制代码
回复

使用道具 举报

0

主题

162

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-5 17:24:17 | 显示全部楼层
運行崩潰:r8未初始化,在
  1. mov r10, [r8+0*8]
复制代码
回复

使用道具 举报

0

主题

192

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2023-10-5 17:24:39 | 显示全部楼层
(把之前的错误代码删除了)
(进位的时候应该按BASE进位,我进成了DOUBLE,不出错就见鬼了)
  1. use std::ops::Mul;type BASE=u64;type DOUBLE=u128;const _:()=assert!(std::mem::size_of::<BASE>() * 2==std::mem::size_of::<DOUBLE>());const BASE:u32=8*std::mem::size_of::<BASE>() as u32;const BASE_LEN:usize=256/BASE as usize;#[derive(Clone, Copy)]struct U256([BASE;BASE_LEN]);// impl Mul for U256 {//     type Output = [BASE;BASE_LEN*2];//     fn mul(self, rhs: Self) -> Self::Output {//         let mut out0=[0 as DOUBLE;BASE_LEN*2];//         for i in 0..BASE_LEN {//             let mut carry=false;//             for j in 0..BASE_LEN {//                 (out0[i+j],carry)=out0[i+j].overflowing_add(self.0[i] as DOUBLE*rhs.0[j] as DOUBLE+carry as DOUBLE)//             }//             let mut j=BASE_LEN;//             while carry {//                 (out0[i+j],carry)=out0[i+j].overflowing_add(carry as DOUBLE);//                 j+=1;//             }//         }//         let mut out=[0 as BASE;BASE_LEN*2];//         let mut carry=0 as DOUBLE;//         for i in 0..BASE_LEN*2 {//             out[i]=(out0[i]+carry) as BASE;//             carry=(carry>>BASE)+(out0[i]>>BASE);//         }//         out//     }// }impl Mul for U256 {    type Output = [BASE;BASE_LEN*2];    fn mul(self, rhs: Self) -> Self::Output {        let mut out0=[0 as DOUBLE;BASE_LEN*2];        for i in 0..BASE_LEN {            let mut carry=false;            for j in 0..BASE_LEN {                (out0[i+j],carry)=out0[i+j].overflowing_add(self.0[i] as DOUBLE*rhs.0[j] as DOUBLE+((carry as DOUBLE)<<BASE))            }            let mut j=BASE_LEN;            while carry {                (out0[i+j],carry)=out0[i+j].overflowing_add((carry as DOUBLE)<<BASE);                j+=1;            }        }        let mut out=[0 as BASE;BASE_LEN*2];        let mut carry=0 as DOUBLE;        for i in 0..BASE_LEN*2 {            let (res,of)=out0[i].overflowing_add(carry);            out[i]=res as BASE;            carry=(res>>BASE)+((of as DOUBLE)<<BASE);        }        out    }}
复制代码
对应汇编
  1.         .text        .file        "lib.9a6cb7ee-cgu.0"        .section        ".text._ZN51_$LT$lib..U256$u20$as$u20$core..ops..arith..Mul$GT$3mul17h5eee3b70e1af20c7E","ax",@progbits        .globl        _ZN51_$LT$lib..U256$u20$as$u20$core..ops..arith..Mul$GT$3mul17h5eee3b70e1af20c7E        .p2align        4, 0x90        .type        _ZN51_$LT$lib..U256$u20$as$u20$core..ops..arith..Mul$GT$3mul17h5eee3b70e1af20c7E,@function_ZN51_$LT$lib..U256$u20$as$u20$core..ops..arith..Mul$GT$3mul17h5eee3b70e1af20c7E:        .cfi_startproc        pushq        %rbp        .cfi_def_cfa_offset 16        pushq        %r15        .cfi_def_cfa_offset 24        pushq        %r14        .cfi_def_cfa_offset 32        pushq        %r13        .cfi_def_cfa_offset 40        pushq        %r12        .cfi_def_cfa_offset 48        pushq        %rbx        .cfi_def_cfa_offset 56        subq        $80, %rsp        .cfi_def_cfa_offset 136        .cfi_offset %rbx, -56        .cfi_offset %r12, -48        .cfi_offset %r13, -40        .cfi_offset %r14, -32        .cfi_offset %r15, -24        .cfi_offset %rbp, -16        movq        %rdx, %rcx        movq        8(%rdx), %r10        movq        (%rsi), %rbx        movq        %rbx, 72(%rsp)        movq        %r10, %rdx        mulxq        %rbx, %r11, %r13        movq        16(%rcx), %r9        movq        %r9, %rdx        mulxq        %rbx, %r15, %r14        movq        %rdi, %rax        movq        (%rcx), %r12        movq        24(%rcx), %r8        movq        %r8, %rdx        mulxq        %rbx, %rdx, %rcx        movq        %rdx, 16(%rsp)        movq        %rcx, (%rsp)        movq        8(%rsi), %rdi        movq        %rsi, 32(%rsp)        movq        %r12, %rdx        mulxq        %rdi, %rdx, %rcx        addq        %r11, %rdx        movq        %rdx, 56(%rsp)        adcq        %r13, %rcx        movq        %rcx, 64(%rsp)        movq        %r10, %rdx        mulxq        %rdi, %rbp, %r13        adcq        $0, %r13        addq        %r15, %rbp        adcq        %r14, %r13        movq        %r9, %rdx        movq        %r9, 40(%rsp)        mulxq        %rdi, %rbx, %rcx        movq        %r8, %r15        movq        %r8, 48(%rsp)        movq        %r8, %rdx        mulxq        %rdi, %rdx, %r14        movq        %rdx, 8(%rsp)        adcq        $0, %rcx        addq        16(%rsp), %rbx        movq        16(%rsi), %rdi        movq        %r12, %rdx        movq        %r12, %rsi        movq        %r12, 24(%rsp)        mulxq        %rdi, %r11, %r8        adcq        (%rsp), %rcx        adcq        $0, %r14        addq        %rbp, %r11        movq        %r10, %rdx        mulxq        %rdi, %rbp, %r12        adcq        %r13, %r8        adcq        $0, %r12        addq        %rbx, %rbp        movq        %r9, %rdx        mulxq        %rdi, %rbx, %r9        adcq        %rcx, %r12        adcq        $0, %r9        addq        8(%rsp), %rbx        movq        %r15, %rdx        mulxq        %rdi, %rcx, %r15        movq        %rcx, (%rsp)        adcq        %r14, %r9        adcq        $0, %r15        movq        32(%rsp), %rcx        movq        24(%rcx), %rcx        movq        %rsi, %rdx        mulxq        %rcx, %r14, %r13        addq        %rbp, %r14        adcq        %r12, %r13        movq        %r10, %rdx        mulxq        %rcx, %r10, %rsi        adcq        $0, %rsi        addq        %rbx, %r10        adcq        %r9, %rsi        movq        40(%rsp), %rdx        mulxq        %rcx, %rbp, %rdi        adcq        $0, %rdi        movq        48(%rsp), %rdx        mulxq        %rcx, %r12, %r9        movq        24(%rsp), %rdx        mulxq        72(%rsp), %rcx, %rdx        addq        (%rsp), %rbp        adcq        %r15, %rdi        movq        %rcx, (%rax)        adcq        $0, %r9        addq        56(%rsp), %rdx        movq        %rdx, 8(%rax)        adcq        64(%rsp), %r11        movq        %r11, 16(%rax)        adcq        $0, %r8        setb        %cl        addq        %r14, %r8        movzbl        %cl, %ecx        adcq        %r13, %rcx        movq        %r8, 24(%rax)        setb        %dl        addq        %r10, %rcx        movzbl        %dl, %edx        adcq        %rsi, %rdx        movq        %rcx, 32(%rax)        setb        %cl        addq        %rbp, %rdx        movzbl        %cl, %ecx        adcq        %rdi, %rcx        movq        %rdx, 40(%rax)        setb        %dl        addq        %r12, %rcx        movzbl        %dl, %edx        adcq        %r9, %rdx        movq        %rcx, 48(%rax)        movq        %rdx, 56(%rax)        addq        $80, %rsp        .cfi_def_cfa_offset 56        popq        %rbx        .cfi_def_cfa_offset 48        popq        %r12        .cfi_def_cfa_offset 40        popq        %r13        .cfi_def_cfa_offset 32        popq        %r14        .cfi_def_cfa_offset 24        popq        %r15        .cfi_def_cfa_offset 16        popq        %rbp        .cfi_def_cfa_offset 8        retq.Lfunc_end0:        .size        _ZN51_$LT$lib..U256$u20$as$u20$core..ops..arith..Mul$GT$3mul17h5eee3b70e1af20c7E, .Lfunc_end0-_ZN51_$LT$lib..U256$u20$as$u20$core..ops..arith..Mul$GT$3mul17h5eee3b70e1af20c7E        .cfi_endproc        .section        ".note.GNU-stack","",@progbits
复制代码
测试
  1. fn main(){    let r=U256([BASE::MAX;BASE_LEN]);    (r*r).into_iter().for_each(|x|println!("{x:x}"))}
复制代码
输出
  1. 1000fffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffff
复制代码
回复

使用道具 举报

0

主题

196

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-5 17:25:35 | 显示全部楼层
不使用adx指令,多用幾個寄存器,效率接近
  1. .section .text.globl mainmain:addq $-128, %rspmovq %rsp, %rdileaq 64(%rsp), %rcxleaq 128(%rsp), %rsixorl %ebx, %ebxlp:// mul256 startmovq (%rcx), %rdxmulxq (%rsi), %r8, %r12movq %r8, (%rdi)mulxq 8(%rsi), %r9, %r13addq %r12, %r9mulxq 16(%rsi), %r10, %r14adcq %r13, %r10mulxq 24(%rsi), %r11, %r8adcq %r14, %r11adcq $0, %r8movq 8(%rcx), %rdxmulxq (%rsi), %rax, %r12addq %rax, %r9movq %r9, 8(%rdi)mulxq 8(%rsi), %rax, %r13adcq %rax, %r10mulxq 16(%rsi), %rax, %r14adcq %rax, %r11mulxq 24(%rsi), %rax, %r9adcq %rax, %r8adcq $0, %r9addq %r12, %r10adcq %r13, %r11adcq %r14, %r8adcq $0, %r9movq 16(%rcx), %rdxmulxq (%rsi), %rax, %r12addq %rax, %r10movq %r10, 16(%rdi)mulxq 8(%rsi), %rax, %r13adcq %rax, %r11mulxq 16(%rsi), %rax, %r14adcq %rax, %r8mulxq 24(%rsi), %rax, %r9adcq %rax, %r9adcq $0, %r10addq %r12, %r11adcq %r13, %r8adcq %r14, %r9adcq $0, %r10movq 24(%rcx), %rdxmulxq (%rsi), %rax, %r12addq %rax, %r11movq %r11, 24(%rdi)mulxq 8(%rsi), %rax, %r13adcq %rax, %r8mulxq 16(%rsi), %rax, %r14adcq %rax, %r9mulxq 24(%rsi), %rax, %r9adcq %rax, %r10adcq $0, %r10addq %r12, %r8movq %r8, 32(%rsi)adcq %r13, %r9movq %r9, 40(%rsi)adcq %r14, %r10movq %r10, 48(%rsi)adcq $0, %r11movq %r11, 56(%rsi)//  mul256 endsubl $1, %ebxjnz lpsubq $-128, %rspret// rdi(dst) rsi(A) rdx=>rcx(B)// r8-r11 current considered 4 bytes// r12-r14 himul high// rax(tmp) rdx(mulx reg)/*mul256:movq %rdx, %rcxmovq (%rdx), %rdxmovq %r12, -8(%rsp)mulxq (%rsi), %r8, %r12movq %r8, (%rdi)movq %r13, -16(%rsp)mulxq 8(%rsi), %r9, %r13addq %r12, %r9movq %r14, -24(%rsp)mulxq 16(%rsi), %r10, %r14adcq %r13, %r10mulxq 24(%rsi), %r11, %r8adcq %r14, %r11adcq $0, %r8movq 8(%rcx), %rdxmulxq (%rsi), %rax, %r12addq %rax, %r9movq %r9, 8(%rdi)mulxq 8(%rsi), %rax, %r13adcq %rax, %r10mulxq 16(%rsi), %rax, %r14adcq %rax, %r11mulxq 24(%rsi), %rax, %r9adcq %rax, %r8adcq $0, %r9addq %r12, %r10adcq %r13, %r11adcq %r14, %r8adcq $0, %r9movq 16(%rcx), %rdxmulxq (%rsi), %rax, %r12addq %rax, %r10movq %r10, 16(%rdi)mulxq 8(%rsi), %rax, %r13adcq %rax, %r11mulxq 16(%rsi), %rax, %r14adcq %rax, %r8mulxq 24(%rsi), %rax, %r9adcq %rax, %r9adcq $0, %r10addq %r12, %r11adcq %r13, %r8adcq %r14, %r9adcq $0, %r10movq 24(%rcx), %rdxmulxq (%rsi), %rax, %r12addq %rax, %r11movq %r11, 24(%rdi)mulxq 8(%rsi), %rax, %r13adcq %rax, %r8mulxq 16(%rsi), %rax, %r14adcq %rax, %r9mulxq 24(%rsi), %rax, %r9adcq %rax, %r10adcq $0, %r10addq %r12, %r8movq %r8, 32(%rsi)adcq %r13, %r9movq %r9, 40(%rsi)adcq %r14, %r10movq %r10, 48(%rsi)adcq $0, %r11movq %r11, 56(%rsi)movq -8(%rsp), %r12movq -16(%rsp), %r13movq -24(%rsp), %r14ret*/
复制代码
  1. Performance counter stats for './a.out':         25,636.00 msec task-clock                #    0.999 CPUs utilized                       4,351      context-switches          #  169.722 /sec                                  283      cpu-migrations            #   11.039 /sec                                   47      page-faults               #    1.833 /sec                      100,564,298,132      cycles                    #    3.923 GHz                      (83.32%)       304,933,814      stalled-cycles-frontend   #    0.30% frontend cycles idle     (83.33%)    77,948,700,897      stalled-cycles-backend    #   77.51% backend cycles idle      (83.34%)   262,154,531,908      instructions              #    2.61  insn per cycle                                                           #    0.30  stalled cycles per insn  (83.33%)     4,334,044,774      branches                  #  169.061 M/sec                    (83.34%)         1,346,833      branch-misses             #    0.03% of all branches          (83.34%)      25.669427577 seconds time elapsed      25.625846000 seconds user       0.011995000 seconds sys
复制代码
  1. Timeline view:                    0123456789          0123Index     0123456789          0123456789    [0,0]     DeER .    .    .    .    .    .  .   movq        %rdx, %rcx[0,1]     DeeeeeER  .    .    .    .    .  .   movq        (%rdx), %rdx[0,2]     DeE----R  .    .    .    .    .  .   movq        %r12, -8(%rsp)[0,3]     .DeeeeeeeeeER  .    .    .    .  .   mulxq        (%rsi), %r8, %r12[0,4]     .D========eER  .    .    .    .  .   movq        %r8, (%rdi)[0,5]     .D=========eER .    .    .    .  .   movq        %r13, -16(%rsp)[0,6]     . DeeeeeeeeeER .    .    .    .  .   mulxq        8(%rsi), %r9, %r13[0,7]     . D========eER .    .    .    .  .   addq        %r12, %r9[0,8]     . D=========eER.    .    .    .  .   movq        %r14, -24(%rsp)[0,9]     .  DeeeeeeeeeER.    .    .    .  .   mulxq        16(%rsi), %r10, %r14[0,10]    .  D========eER.    .    .    .  .   adcq        %r13, %r10[0,11]    .   DeeeeeeeeeER    .    .    .  .   mulxq        24(%rsi), %r11, %r8[0,12]    .   D========eER    .    .    .  .   adcq        %r14, %r11[0,13]    .   D=========eER   .    .    .  .   adcq        $0, %r8[0,14]    .    DeeeeeE----R   .    .    .  .   movq        8(%rcx), %rdx[0,15]    .    DeeeeeeeeeER   .    .    .  .   mulxq        (%rsi), %rax, %r12[0,16]    .    D========eER   .    .    .  .   addq        %rax, %r9[0,17]    .    .D========eER  .    .    .  .   movq        %r9, 8(%rdi)[0,18]    .    .DeeeeeeeeeER  .    .    .  .   mulxq        8(%rsi), %rax, %r13[0,19]    .    .D========eER  .    .    .  .   adcq        %rax, %r10[0,20]    .    . DeeeeeeeeeER .    .    .  .   mulxq        16(%rsi), %rax, %r14[0,21]    .    . D========eER .    .    .  .   adcq        %rax, %r11[0,22]    .    .  DeeeeeeeeeER.    .    .  .   mulxq        24(%rsi), %rax, %r9[0,23]    .    .  D========eER.    .    .  .   adcq        %rax, %r8[0,24]    .    .  D=========eER    .    .  .   adcq        $0, %r9[0,25]    .    .   D======eE--R    .    .  .   addq        %r12, %r10[0,26]    .    .   D=======eE-R    .    .  .   adcq        %r13, %r11[0,27]    .    .   D========eER    .    .  .   adcq        %r14, %r8[0,28]    .    .   D=========eER   .    .  .   adcq        $0, %r9[0,29]    .    .   DeeeeeE-----R   .    .  .   movq        16(%rcx), %rdx[0,30]    .    .    DeeeeeeeeeER   .    .  .   mulxq        (%rsi), %rax, %r12[0,31]    .    .    D========eER   .    .  .   addq        %rax, %r10[0,32]    .    .    D=========eER  .    .  .   movq        %r10, 16(%rdi)[0,33]    .    .    .DeeeeeeeeeER  .    .  .   mulxq        8(%rsi), %rax, %r13[0,34]    .    .    .D========eER  .    .  .   adcq        %rax, %r11[0,35]    .    .    . DeeeeeeeeeER .    .  .   mulxq        16(%rsi), %rax, %r14[0,36]    .    .    . D========eER .    .  .   adcq        %rax, %r8[0,37]    .    .    .  DeeeeeeeeeER.    .  .   mulxq        24(%rsi), %rax, %r9[0,38]    .    .    .  D=========eER    .  .   adcq        %rax, %r9[0,39]    .    .    .  D==========eER   .  .   adcq        $0, %r10[0,40]    .    .    .   D======eE---R   .  .   addq        %r12, %r11[0,41]    .    .    .   D=======eE--R   .  .   adcq        %r13, %r8[0,42]    .    .    .   D=========eER   .  .   adcq        %r14, %r9[0,43]    .    .    .   D==========eER  .  .   adcq        $0, %r10[0,44]    .    .    .   DeeeeeE------R  .  .   movq        24(%rcx), %rdx[0,45]    .    .    .    DeeeeeeeeeE-R  .  .   mulxq        (%rsi), %rax, %r12[0,46]    .    .    .    D========eE-R  .  .   addq        %rax, %r11[0,47]    .    .    .    D=========eER  .  .   movq        %r11, 24(%rdi)[0,48]    .    .    .    .DeeeeeeeeeER  .  .   mulxq        8(%rsi), %rax, %r13[0,49]    .    .    .    .D========eER  .  .   adcq        %rax, %r8[0,50]    .    .    .    . DeeeeeeeeeER .  .   mulxq        16(%rsi), %rax, %r14[0,51]    .    .    .    . D========eER .  .   adcq        %rax, %r9[0,52]    .    .    .    .  DeeeeeeeeeER.  .   mulxq        24(%rsi), %rax, %r9[0,53]    .    .    .    .  D========eER.  .   adcq        %rax, %r10[0,54]    .    .    .    .  D=========eER  .   adcq        $0, %r10[0,55]    .    .    .    .   D======eE--R  .   addq        %r12, %r8[0,56]    .    .    .    .   D=======eE-R  .   movq        %r8, 32(%rsi)[0,57]    .    .    .    .   D========eER  .   adcq        %r13, %r9[0,58]    .    .    .    .   D=========eER .   movq        %r9, 40(%rsi)[0,59]    .    .    .    .   D=========eER .   adcq        %r14, %r10[0,60]    .    .    .    .   D==========eER.   movq        %r10, 48(%rsi)[0,61]    .    .    .    .    D=========eER.   adcq        $0, %r11[0,62]    .    .    .    .    D==========eER   movq        %r11, 56(%rsi)[0,63]    .    .    .    .    DeeeeeE------R   movq        -8(%rsp), %r12[0,64]    .    .    .    .    DeeeeeE------R   movq        -16(%rsp), %r13[0,65]    .    .    .    .    D=eeeeeE-----R   movq        -24(%rsp), %r14[0,66]    .    .    .    .    .DeeeeeeeE---R   retq
复制代码
补充内容 (2023-5-5 09:32):
程序修復後測試了正確性及效率 https://pastebin.com/nu1xu5jE
回复

使用道具 举报

0

主题

174

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-10-5 17:25:54 | 显示全部楼层
汇编是怎么写怎么调试的?
回复

使用道具 举报

0

主题

192

帖子

159

积分

关内侯

Rank: 2

积分
159
发表于 2023-10-5 17:26:06 | 显示全部楼层
https://pastebin.com/gktPUxJY
這個要40s但是我不知道瓶頸在哪。B讀進寄存器也差不多40
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-22 03:46 , Processed in 0.095320 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

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