簡體   English   中英

SSE指令中的UnsignedSaturate是什么意思?

[英]What does UnsignedSaturate in SSE instruction mean?

我正在將SIMD代碼轉換為等效的c代碼。 我被困在SSE指令之一

__m128i _mm_packus_epi16 (__m128i a, __m128i b)

它返回

r0 := UnsignedSaturate(a0)
r1 := UnsignedSaturate(a1)

...
r7 := UnsignedSaturate(a7)
r8 := UnsignedSaturate(b0)
r9 := UnsignedSaturate(b1)
...
r15 := UnsignedSaturate(b7)

UnsignedSaturate是什么意思?

基本上,“飽和度”意味着超出某個“最大”值的值被設置為“最大”,而低於“最小值”的值被設置為“最小”。 通常,“min”和“max”是適合某些數據類型的值。

因此,例如,如果對無符號字節進行算術運算,則“128 + 128”必須為“256”(十六進制0x100),這不適合一個字節。 正常整數運算會產生溢出並丟棄不適合的部分,這意味着“128 + 128 - > 0”。 使用飽和算術,“256> 255”,結果為255。

另一種選擇是縮放,它基本上將值“壓縮”到較小的范圍。 飽和只會削減它們。

您也可以使用它將較大的類型放入較小的類型中,例如將16位值放入8位值。 你的例子最有可能就是這樣,雖然你可能比我知道的更好,你在那里處理的是哪種類型。

“UnsignedSaturation”最有可能具有“0”的最小值和結果類型的最大值的“最大值”。 因此,負輸入變為“0”。

該指令將16位有符號整數轉換為8位無符號整數。 問題是當值不適合時該怎么做。 換句話說,小於0或大於255.無符號飽和度指定該值被剪切到其范圍。 換句話說,小於0的值將轉換為0,大於255到255。

飽和只是意味着給定變量保持最大可能值而不是溢出。

unsigned short v1 = 65535;
unsigned (saturate) short v2 = 65535;

v1++;
v2++;
printf("v1=%u v2=%u\n", v1, v2);

print v1 = 0 v2 = 65535

飽和度的概念在標准C中不存在,必須由擴展提供。

暫無
暫無

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

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