2013-01-21 45 views
1

鑄造正常雙*到_m128d *是非常容易和易於理解的。 假設你有一個這樣的數組:上證所:鑄雙**爲_m128d **

double arr[8] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0}; 

然後_m128d呈現還挺應該是這樣的:

_m128d m_arr[8] = { [1.0,2.0] , [3.0,4.0] , [5.0,6.0] , [7.0,8.0] }; 

因爲總是2的值存儲,如果你可以說(這就是我想象它)。 但是,如果我使用3x3矩陣而不是將值分割?例如: -

double mat[3][3] = { {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0} }; 

我想只是總結矩陣中的所有值,但真的不明白如何與SSE effictively做到這一點,因此我需要了解矩陣如何處理_m128d**。 有人知道嗎?

+2

二維數組不是雙指針。 – 2013-01-21 19:17:28

+0

是的,很瀟灑。我希望這個問題很明顯,無論如何 –

+0

哦,所以你知道這一點。抱歉,相反。 – 2013-01-21 19:23:28

回答

2

事情是多維數組存儲在一個連續的內存塊中(C標準保證了這一點)。因此可以使用一個簡單的指針引用它們:

double mat[3][3] = { {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0} }; 
double *ptr = (double *)mat; 

然後就可以遍歷使用該指針的9號和取消對它的引用以獲得雙,其然後可被鑄造/轉換爲另一種類型。

+0

謝謝,這實際上非常有用。 –