循环携带依赖。发现

时间:2016-05-19 21:13:54

标签: x86

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从上一次迭代完成。那么,为什么它不是一个依赖循环 -

1 个答案:

答案 0 :(得分:1)

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

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

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.nijinsha.bingomultiplayer.Game_Act" android:background="@drawable/bkgd" android:padding="5dp"> <ImageView android:layout_width="330dp" android:layout_height="340dp" android:id="@+id/imageView" android:src="@drawable/bgrid" android:background="@drawable/gdbk" android:scaleType="fitXY" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <LinearLayout android:orientation="vertical" android:layout_width="330dp" android:layout_height="340dp" android:layout_alignTop="@+id/imageView" android:layout_alignLeft="@+id/imageView" android:layout_alignStart="@+id/imageView"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="68.5dp" android:weightSum="1"> <TextView android:layout_width="62dp" android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="02" android:id="@+id/textView1" android:gravity="center_vertical|center_horizontal" android:textSize="50sp" /> <TextView android:layout_width="62dp" android:layout_height="match_parent" android:textAppearance="?android:attr/textAppearanceLarge" android:text="05" android:id="@+id/textView2" android:gravity="center_vertical|center_horizontal" android:textSize="50sp" /> </LinearLayout> </LinearLayout> </RelativeLayout> 是一个3循环的循环dep链,但在计算每次迭代的xmm3源操作数时可以实现并行性。