2013-06-23 28 views
0

有沒有一種更有效的方法來獲得兩個內存塊的絕對差之和在C/C + +中的double數組比執行循環的數組元素?所以,我奇怪的是,如果有此目的類似功能memsetmemcpymemcmp有效的方法來獲得兩個陣列的雙倍絕對差的總和

你是如何定義的區別?

存儲器塊包含double值,並且我需要的是在存儲器塊陣列的對應的索引值之間的絕對數值差的總和。

+1

你如何定義差異? – detly

+0

內存塊包含double值,我需要的是內存塊對應索引中值之間絕對數值差的總和。 – user2503950

+2

如果你正在談論雙打,你不是在談論「內存塊」,你正在談論數組。 –

回答

1

是的,有SIMD。如果您使用GCC,您可以嘗試添加諸如-msse2 -O3之類的東西,並查看它是否會自動爲您生成SIMD指令。如果確實如此,或者如果您選擇使用庫來執行顯式SIMD,則可以按指令處理四個浮點數。爲了提高您的機會,請儘量讓內部循環更加簡單,以便優化程序可以輕鬆應對。

+0

你在這裏討論的內容叫做* autovectorization *。這在很大程度上是一個廢話 - 它偶爾會*工作,但它只適用於簡單循環,高度依賴於編譯器版本,並且經常受到bug影響。 [使用編譯器內在函數]幾乎總是更有效(http://stackoverflow.com/questions/661338/sse-sse2-and-sse3-for-gnu-c)。 – duskwuff

+0

如果您要運行的處理器足夠新,您可以嘗試更強的標誌,例如'-msse4'或'-mavx'。 – ugoren

相關問題