簡體   English   中英

如何並行比較兩個以上的數字?

[英]How to compare more than two numbers in parallel?

是否可以使用SSE4在一條指令中比較一對以上的數字?

英特爾參考咨詢有關PCMPGTQ的內容如下

PCMPGTQ - 比較大於的打包數據

對目標操作數(第一個操作數)和源操作數(第二個操作數)中的壓縮四字進行SIMD比較。 如果第一個(目標)操作數中的數據元素大於第二個(源)操作數中的相應元素,則目標中的相應數據元素將設置為全1; 否則,它被設置為0。

這不是我想要的,因為我希望能夠決定哪些整數更大,哪些整數更小。

例如,如果我需要比較

32 with 45
13 with 78
44 with 12
99 with 66

我打算將[32, 13, 44, 99]放在一個向量中,將[45, 78, 12, 66]放在另一個向量中,並在一條指令中使用SSE4進行比較,得到[0, 0, 1, 1] 0,0,1,1 [0, 0, 1, 1]結果(0 - 少,1 - 更大)

但似乎這不是PCMPGTQ所做的。 有關如何在此級別使用並行性來加速此比較的任何建議?

我相信這實際上是PCMPGT系列運營商所做的。 后綴指定元素的大小 - 對於8位元素為B ,對於16位元素為W ,對於32位元素為D ,對於64位元素為Q 因此,如果要一次比較4個32位數字,請使用帶有128位向量參數的PCMPGTD 有關這些操作碼的偽代碼說明,請參閱此頁面

但是,它們不會只寫10 ; 他們為每個元素寫入全1或全0,因此使用PCMPGTB0x12345678876543210x8765432112345678進行PCMPGTB應該給出0x0000FFFFFFFF0000

這篇英特爾白皮書給出了一個簡單的例子來執行a[i] = (a[i] > b[i]) ? a[i] : b[i] a[i] = (a[i] > b[i]) ? a[i] : b[i] (即a[i] = max(a[i], b[i]) )使用向量運算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM