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
从上一次迭代完成。那么,为什么它不是一个依赖循环 -
答案 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源操作数时可以实现并行性。