![](/img/trans.png)
[英]SIMD-within-a-register version of min/max
假設我有兩個uint16_t[4] arrays, a和b 。 這些 arrays 中的每個 integer 都在 [0, 16383] 范圍內,因此未設置位 14 和 15。 然后我有一些代碼可以找到每個i的a[i]和b[i]中的最小值和最大值: 假設出於某種原因我不能/不會使用 SIMD,但我 ...
[英]SIMD-within-a-register version of min/max
假設我有兩個uint16_t[4] arrays, a和b 。 這些 arrays 中的每個 integer 都在 [0, 16383] 范圍內,因此未設置位 14 和 15。 然后我有一些代碼可以找到每個i的a[i]和b[i]中的最小值和最大值: 假設出於某種原因我不能/不會使用 SIMD,但我 ...
[英]Fastest way to find 16bit match in a 4 element short array?
我可以使用 nanobench 來確認。 今天我覺得自己不聰明,想不出一個簡單的方法我有一個數組, short arr[]={0x1234, 0x5432, 0x9090, 0xFEED}; . 我知道我可以使用 SIMD 一次比較所有元素,使用movemask + tzcnt找到匹配項的索引。 ...
[英]Performantly reverse the order of 16-bit quantities within a 64-bit word
我需要對少量小的無符號整數進行字典比較。 如果有(例如)8 個 8 位整數,顯而易見的方法是對它們進行字節交換並在 GPR 中進行普通整數比較。 如果有 2 個 32 位整數,則 32 位循環和普通比較就可以了。 如果有 4 個 16 位整數怎么辦? 顯然,使用向量寄存器很容易將它們打亂,但是有沒有 ...
[英]SWAR byte counting methods from 'Bit Twiddling Hacks' - why do they work?
Bit Twiddling Hacks包含以下宏,它們計算字x中小於或大於n的字節n : #define countless(x,n) \ (((~0UL/255*(127+(n))-((x)&~0UL/255*127))&~(x)&~0UL/255*128)/128%25 ...
[英]Can a register hold multiple values at a time?
在 64 位 x86 寄存器的情況下,如果一個值的大小足夠小以至於多個指令可以放入一個寄存器,是否可以在同一個寄存器中一次保存多個值? 例如將兩個 32 位整數裝入一個寄存器。 如果可能,這會是一件壞事嗎? 我一直在閱讀寄存器,我對這個概念很陌生。 ...
[英]Subtracting packed 8-bit integers in an 64-bit integer by 1 in parallel, SWAR without hardware SIMD
如果我有一個 64 位整數,我將其解釋為一個包含 8 個元素的壓縮 8 位整數數組。 我需要在處理溢出時從每個壓縮整數中減去常量1 ,而一個元素的結果不會影響另一個元素的結果。 我現在有這個代碼並且它可以工作,但我需要一個解決方案來並行地減去每個打包的 8 位整數並且不進行內存訪問。 在 x86 ...
[英]Compare 64-bit integers by segments
我有兩個 64 位整數x和y 。 每個代表5個無符號短整數:前10位代表第一個整數,接下來的13位代表第二個整數,接下來的16位代表第三個整數,接下來的14位代表第四個整數,其余位代表第 5 個整數。 設x0 , x1 , x2 , x3 , x4是構成x的 5 個短整數。 設y0 , y1 , ...
[英]How 0x01010101 is equivalent to 1<<24 + 1<<16 + 1<<8 + 1
這個問題解釋了用於計算給定數字中 1 數量的SWAR 算法。 在解釋ilmari 時寫了0x01010101 = (1 << 24) + (1 << 16) + (1 << 8) + 1 。 有人可以解釋它是如何相等的。 ...
[英]Is there an efficient way of doing 32-bit bitwise rotation separately on the high and low 32-bit parts of a 64-bit number?
我目前在 C/C++ 工作,我有一個uint64_t 。 我需要分別對前 32 位和后 32 位進行按位旋轉。 例如,如果我的輸入是 我需要向右旋轉 2 位,正確的輸出是 顯而易見的方法是創建一個臨時的 32 位數字並分別對其進行旋轉操作,但是否有不同的、有效的方法來做到這一點? ...
[英]How does this algorithm to count the number of set bits in a 32-bit integer work?
我看過這段代碼,它計算 32 位整數中的位數等於1 ,我注意到它的性能優於__builtin_popcount但我無法理解它的工作方式。 有人可以詳細解釋這段代碼是如何工作的嗎? ...
[英]How does this color blending trick that works on color components in parallel work?
我看到這個 Java 代碼非常有效地在兩種 RGB888 顏色之間進行了完美的 50% 混合: public static int blendRGB(int a, int b) { return (a + b - ((a ^ b) & 0x00010101)) >> 1; ...
[英]Signed INT Conversion of MSB ->LSB and LSB->MSB in C++
我檢查了 SWAR 算法( S IMD W inhin A R寄存器)以反轉unsigned int的位順序。 有沒有類似的signed int ? ...