2012-12-13 56 views
0

我在瀏覽AVX指令指南,雖然有32位整數值的加載,存儲和置換操作,但其他操作(如確定最小值或最大值)或混洗操作是隻出現在浮動和雙打中。因此,如果我想將這些操作用於32位整數,是否需要將它轉換爲浮點類型,然後將其轉換回來或者是否存在其他一些我缺少的指令?使用AVX的最小有符號/無符號整數

此外,如果我想在32位整數上使用它,那麼洗牌蒙版是否與浮點數保持一樣?

回答

2

32B向量的整數運算的大部分在AVX2擴展中(不是初始AVX擴展,它幾乎完全是浮點運算)。英特爾最新的AVX Programming Reference具有完整的細節;您可能還想看看英特爾的blog post宣佈的一些細節。

不幸的是,您不能使用浮點最小或最大操作來模擬整數數據上的這些操作,因爲當解釋爲浮點數據時,大量整數映射到NaN值,而NaN比較的語義不會不做你想要的整數比較(你還需要處理浮點編碼是符號大小的事實,所以負值的順序是「反轉的」,並且+ 0和-0比較相等)。

+1

英特爾將128位整數SSE操作轉移到128位AVX指令(使用3操作數編碼),但以其他方式讓它們保持獨立。唯一的256位整數運算用於int <->浮點轉換。 AVX2是好東西即將到來的地方。 –

+0

@Stephen:你能詳細說明爲什麼類型轉換不能工作,即什麼時候整型映射到NaN或者如何保留負值的排序? – user1715122

+0

@ user1715122我認爲Stephen誤解了這一點,並認爲你打算重新解釋位模式。當你進行普通的類型轉換時,你的問題是:a)速度很慢,可能比有條件的移動慢,b)精度損失,「整數 - >浮點 - >整數」不一定是往返。 –