【问题标题】:Loop-carried dependency. Detection循环携带的依赖。检测
【发布时间】:2016-05-19 21:13:53
【问题描述】:
mov ebx, beginOfArray
xor eax, eax
.L:
    movsd xmm3, [ebx]
    mulsd xmm3, xmm1
    mulsd xmm1, xmm2
    addsd xmm0, xmm3 
    add   eax, 8
    cmp eax, 1024
    jl .L

对于我的眼睛循环携带依赖:

add eax, 8 
mulsd xmm1, xmm2
addsd xmm0, xmm3

所以我们有三个循环携带的依赖。 但是,我不确定为什么 mulsd xmm3, xmm1 不是依赖项。为什么? xmm3 实际上不是问题(寄存器重命名),但毕竟这条指令必须等到 mulsd xmm1, xmm2 从上一次迭代中完成。那么,为什么它不是依赖循环携带的呢?

【问题讨论】:

    标签: x86


    【解决方案1】:

    xmm3 是仅依赖于循环计数器的负载的结果,因此它不是长循环承载的 dep 链的一部分。 mulsd xmm3,xmm1 每次迭代都会“分叉”一个新的 dep 链。

    每次迭代都有一个单独的 load->mulsd 链来为addsd 生成输入。

    addsd xmm0, xmm3 是一个 3 循环循环承载的 dep 链,但在每次迭代计算 xmm3 源操作数时可以进行并行处理。

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 2013-08-19
      • 2011-10-21
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多