2012-08-27 9 views
6

मैं सिम कोड को समकक्ष सी कोड में परिवर्तित कर रहा हूं। मैं 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 क्या मतलब है पर अटक कर रहा हूँ?

उत्तर

14

असल में, "संतृप्ति" का अर्थ है कि कुछ "अधिकतम" मान से परे मान "अधिकतम" पर सेट हो जाते हैं, और "न्यूनतम" मान के नीचे मान "मिनट" पर सेट हो जाते हैं। आमतौर पर, "न्यूनतम" और "अधिकतम" मान कुछ डेटा प्रकार के लिए एप्रोपियेट होते हैं।

इस प्रकार, उदाहरण के लिए, यदि आप हस्ताक्षरित बाइट्स पर अंकगणित लेते हैं, तो "128 + 128" होना चाहिए "256" (जो हेक्स 0x100 है), जो बाइट में फिट नहीं होता है। सामान्य पूर्णांक अंकगणित एक अतिप्रवाह पैदा करेगा और उस भाग को त्याग देगा जो फिट नहीं है, जिसका अर्थ है "128 + 128 -> 0"। संतृप्त अंकगणित के साथ, "256> 255" तो परिणाम 255 है।

एक और विकल्प स्केलिंग होगा, जो मूल रूप से मानों को एक छोटी सी सीमा में "संपीड़ित" करता है। संतृप्ति बस उन्हें बंद कर देता है।

आप बड़े प्रकार को छोटे में रखने के लिए इसका उपयोग भी कर सकते हैं, जैसे कि 16 बिट मानों को 8 बिट मानों में डालना। आपका उदाहरण सबसे अधिक संभावना है कि, हालांकि आप शायद मुझसे बेहतर तरीके से जानते होंगे कि आप किस प्रकार के प्रकार से निपट रहे हैं।

"बिना हस्ताक्षर किए गए स्थिति" में सबसे अधिक संभावना है "0" का एक मिनट और परिणाम का अधिकतम जो भी अधिकतम "अधिकतम" है। इस प्रकार, नकारात्मक इनपुट "0" में बदल जाते हैं।

1

सैतुराट का मतलब है कि दिया गया चर बहने के बजाय अधिकतम संभव मूल्य रखता है।

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

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

प्रिंट v1 = 0 वी 2 = 65535

संतृप्त की अवधारणा मानक सी में मौजूद नहीं है और एक्सटेंशन द्वारा प्रदान किया जाना चाहिए।

3

निर्देश 16-बिट हस्ताक्षरित पूर्णांक 8-बिट हस्ताक्षरित पूर्णांक में परिवर्तित करता है। समस्या यह है कि जब मूल्य फिट नहीं होता है तो क्या करना है। दूसरे शब्दों में 0 से कम या 255 से बड़ा है। बिना हस्ताक्षर संतृप्ति निर्दिष्ट करती है कि मान को तब इसकी सीमा में फिसल दिया जाता है। दूसरे शब्दों में, 0 से कम मान 0 में परिवर्तित हो जाते हैं, 255 से 255 से अधिक।