【发布时间】:2015-06-08 21:22:23
【问题描述】:
在我的代码中我解决积分问题
y=x^2-4x+6
我使用了 SSE - 它允许我一次对 4 个值进行操作。我编写了一个程序,用从 0 到 5 的值除以五个 4 元素向量 n1、n2、n3、n4 来解决这个积分。
.data
n1: .float 0.3125,0.625,0.9375,1.25
n2: .float 1.5625,1.875,2.1875,2.5
n3: .float 2.8125,3.12500,3.4375,3.75
n4: .float 4.0625,4.37500,4.6875,5
szostka: .float 6,6,6,6
czworka: .float 4,4,4,4
.text
.global main
main:
movups (n1),%xmm0
mulps %xmm0,%xmm0
movups (szostka),%xmm2
addps %xmm2,%xmm0
movups (n1),%xmm1
movups (czworka),%xmm2
mulps %xmm2,%xmm1
subps %xmm1,%xmm0
movups %xmm0,%xmm7
movups (n2),%xmm0
mulps %xmm0,%xmm0
movups (szostka),%xmm2
addps %xmm2,%xmm0
movups (n1),%xmm1
movups (czworka),%xmm2
mulps %xmm2,%xmm1
subps %xmm1,%xmm0
movups %xmm0,%xmm6
movups (n3),%xmm0
mulps %xmm0,%xmm0
movups (szostka),%xmm2
addps %xmm2,%xmm0
movups (n1),%xmm1
movups (czworka),%xmm2
mulps %xmm2,%xmm1
subps %xmm1,%xmm0
movups %xmm0,%xmm5
movups (n4),%xmm0
mulps %xmm0,%xmm0
movups (szostka),%xmm2
addps %xmm2,%xmm0
movups (n1),%xmm1
movups (czworka),%xmm2
mulps %xmm2,%xmm1
subps %xmm1,%xmm0
movups %xmm0,%xmm4
mov $1,%eax
mov $0,%ebx
int $0x80
最后,我在寄存器 xmm7、xmm6、xmm5、xmm4 中有 4 个向量。为了解决积分问题,我需要将向量相互添加(这很容易),然后将向量中的值也相互添加。
我该怎么做?
【问题讨论】:
-
假设你想水平添加元素,你可以使用
haddps。您需要调用它两次才能将所有 4 个元素相加。 -
请记住,
haddps需要 SSE3 支持。 -
那么我还能做些什么吗?
-
你是说你的 CPU 没有 SSE3,即它已经 > 10 岁了吗?
-
不!老实说,我只是要开始阅读有关此的内容。
标签: x86 sse simd gnu-assembler att