目前,我有以下代码:使用SSE将4个浮点数乘以4个浮点数的最有效方法是什么?
float a[4] = { 10, 20, 30, 40 };
float b[4] = { 0.1, 0.1, 0.1, 0.1 };
asm volatile("movups (%0), %%xmm0\n\t"
"mulps (%1), %%xmm0\n\t"
"movups %%xmm0, (%1)"
:: "r" (a), "r" (b));
我首先是几个问题:
(1)如果我要对齐16字节边界的数组,将它甚至工作?由于数组是分配在堆栈上的,因此调整它们几乎是不可能的。
看到所选答案的这篇文章:Are stack variables aligned by the GCC __attribute__((aligned(x)))?
(2)可以将代码在所有被重构,使之更有效率?如果我将两个浮点数组都放入寄存器而不只是一个,会怎么样?
感谢
感谢;但正如本文所述http://stackoverflow.com/questions/841433/gcc-attributealignedx-explanation似乎不可能对齐在堆栈上分配的数组? (而不是全局数组分配在.data中) – horseyguy 2009-08-04 12:44:11
感谢修复Bastien :) Banister ...你能试试看看会发生什么吗?如果与解释相关的是正确的,那么就不可能像正确地对齐double这样的东西,然而它们会对齐。 – Goz 2009-08-04 12:55:10
是的,我很快就会......我有一种感觉,相关的解释是错误的,因为这个问题中的每个人都似乎暗示。感谢大家! :) – horseyguy 2009-08-04 12:58:16