目前,我有以下代碼:使用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