利用SSE計算向量點乘simd dot

2021-08-07 14:39:01 字數 813 閱讀 4857

滷煮:非文藝小燕兒

所謂sse(streaming simd extensions),也就是單指令多資料流的擴充套件。所謂單指令多資料流呢,簡單理解就是多個資料流同時處理一條指令。

舉個栗子:

乙個水箱中的水,底部開1個洞放水,就是單指令單資料流。底部同時開多個相同大小的洞放水,就是單指令多資料流。

多個洞放水當然會比1個洞放得快啦,也就是同樣的指令,多資料流速度就快呀。

對於sse,其實就是處理器中專門開闢了多個128位的暫存器。對於單精度浮點數,占用32bit,那麼1個128bit的sse暫存器,就可以存放4個單精度浮點數。對於單精度浮點數的運算指令,其實就相當於開了4個洞。比如,兩個128位的sse暫存器中存放的資料進行乘法運算,那麼一次性就能得到4組運算結果。

大概就是這麼個意思。接下來就對採用sse優化的向量點乘進行詳細注釋說明。

輸入x和y都是長度為len的向量。我們要求x.*y,並將結果返回。

float simd_dot(const float* x, const float* y, const long& len) 

_mm_storeu_ps(&temp[0], acc); // 將acc中的4個32位的資料載入進記憶體

inner_prod = temp[0] + temp[1] + temp[2] + temp[3];//點乘求和

// 剛才只是處理了前4的倍數個元素的點乘,如果len不是4的倍數,那麼還有個小尾巴要處理一下

for (; i < len; ++i)

return inner_prod;//大功告成

}

向量 向量叉乘 向量點乘

向量 向量叉乘 向量點乘 2010年07月28日 星期三 14 33 向量 vector 在幾乎所有的幾何問題中,向量 有時也稱向量 是乙個基本點。向量的定義包含方向和乙個數 長度 在二維空間中,乙個向量可以用一對x和y來表示。例如由點 1,3 到 5,1的向量可以用 4,2 來表示。這裡大家要特別...

向量點乘與叉乘

點乘 dot product 點乘,也叫向量的內積 數量積。顧名思義,求下來的結果是乙個數。向量a 向量b a b cos 在物理學中,已知力與位移求功,實際上就是求向量f與向量s的內積,即要用點乘。將向量用座標表示 三維向量 若向量a a1,b1,c1 向量b a2,b2,c2 則 向量a 向量b...

向量點乘與叉乘

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!向量 vector 在幾乎所有的幾何問題中,向量 有時也稱向量 是乙個基本點。向量的定義包含方向和乙個數 長度 在二維空間中,乙個向量可以用一對x和y來表示。例如由點 1,3 到 5,1的向量可以用 4,2 來表示。這裡大家要特別注意,我這樣說並不...