__m128

2013-07-14 5 views
5

में न्यूनतम 4 एसपी मानों का मानना ​​है कि __m128 वैरिएबल होल्डिंग 4 एसपी मान हो, और आप न्यूनतम चाहते हैं, क्या कोई अंतर्निहित फ़ंक्शन उपलब्ध है, या मूल्यों के बीच बेवकूफ रैखिक तुलना के अलावा कुछ भी है?__m128

सही पता चलेगा कि मेरा समाधान निम्नलिखित (लगता इनपुट __m128 चर x है):

x = _mm_min_ps(x, (__m128)_mm_srli_si128((__m128i)x, 4)); 
min = _mm_min_ss(x, (__m128)_mm_srli_si128((__m128i)x, 8))[0]; 

कौन सा काफी भयानक है, लेकिन यह काम कर रहा है (Btw, वहाँ _mm_srli_si128 की तरह लेकिन __m128 प्रकार के लिए कुछ भी है?)

उत्तर

5

कोई एकल अनुदेश/आंतरिक लेकिन आप दो शफ़ल और दो मिनट के साथ यह कर सकते हैं:

__m128 _mm_hmin_ps(__m128 v) 
{ 
    v = _mm_min_ps(v, _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 1, 0, 3))); 
    v = _mm_min_ps(v, _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 0, 3, 2))); 
    return v; 
} 

आउटपुट वेक्टर में इनपुट वेक्टर में सभी तत्वों का न्यूनतम हिस्सा होगा, जो आउटपुट वेक्टर में दोहराया जाएगा।

+0

क्या आप वाकई यह सही हैं? मैंने इस इनपुट वेक्टर के साथ परीक्षण किया ('v [0]' से 'v [3]') '0.109375 0.096875 0.093750 0.096875' और यह आउटपुट है:' 0.096875 0.096875 0.093750 0.093750'। प्रतिकृति से आपका क्या मतलब है? –

+0

क्षमा करें - मैंने परमिट स्थिरांक को गड़बड़ कर दिया - यह अब तय और परीक्षण किया गया है। आउटपुट वेक्टर में इनपुट वेक्टर के न्यूनतम तत्व के बराबर सभी 4 तत्व होते हैं। –

संबंधित मुद्दे