并行执行一段x64代码

问题描述 投票:0回答:1

考虑以下由 clang 生成的 x64 代码:

    mov     rax, qword ptr [rsi]                        ; 1
    mov     rdx, qword ptr [rip + hash_mult]            ; 1
    imul    rdx, qword ptr [rax - 8]                    ; 2
    movzx   ecx, byte ptr [rip + hash_shift]            ; 1
    shr     rdx, cl                                     ; 3
    mov     rax, qword ptr [rip + vptrs]                ; 2 - or 3 ???
    mov     rax, qword ptr [rax + 8*rdx]                ; 4
    mov     rcx, qword ptr [rip + slots_strides]        ; 1
    mov     rax, qword ptr [rax + 8*rcx]                ; 2
    jmp     rax                                         ; 5

我有两个问题。

  1. 我可以假设标有相同序数的行可以并且将会并行执行吗?

  2. byte ptr
    指令使用的
    movzx
    有什么用?这是否表明对齐不良?

assembly x86-64
1个回答
0
投票

你的分析几乎是正确的。 指令

mov     rax, qword ptr [rip + vptrs]
也可以早在第 1 组执行——寄存器重命名将指令与它们使用的寄存器名称分开。 因此,下面的指令最早可以在组 2 处执行。请注意,指令执行的实际顺序取决于所使用的特定微体系结构。 使用像 uiCA 这样的工具来分析这个。

byte ptr
短语表示操作数是指向字节的指针,而不是像其他操作数那样指向四字的指针。

© www.soinside.com 2019 - 2024. All rights reserved.