2016-12-11 12 views
5

में वेक्टर को कैसे बढ़ाया जाए, मैं सिमड वेक्टर के तत्वों को बढ़ाने के लिए इंट्रिनिक्स का उपयोग करना चाहता हूं। सबसे आसान तरीका प्रत्येक तत्व के लिए 1 जोड़ने के लिए, इस तरह हो रहा है:AVX/AVX2

(ध्यान दें: vec_inc से पहले 1 पर सेट किया गया है)

vec = _mm256_add_epi16 (vec, vec_inc); 

लेकिन वहाँ एक वेक्टर बढ़ाने के लिए किसी भी विशेष निर्देश है? this page में पसंद है? या कोई और आसान तरीका?

+2

नहीं, वहाँ कोई विशेष निर्देश नहीं है - केवल, +1 का वेक्टर जोड़ने आप ऊपर का सुझाव के रूप में। –

उत्तर

7

INC निर्देश एक सिम स्तर स्तर निर्देश नहीं है, यह पूर्णांक स्केलर पर चलता है। जैसा कि आप और पॉल ने पहले ही सुझाव दिया है, सबसे आसान तरीका 1 प्रत्येक वेक्टर तत्व में जोड़ना है, जिसे आप 1 एस के वेक्टर जोड़कर कर सकते हैं।

आप एक आंतरिक अनुकरण करने के लिए चाहते हैं, आप अपने खुद के समारोह को लागू कर सकते हैं:

inline __m256i _mm256_inc_epi16(__m256i a) 
{ 
    return _mm256_add_epi16(a, _mm256_set1_epi16(1)); 
} 

भविष्य में 86 intrinsics पर समान प्रश्नों के लिए, आप Intel's Intrinsics Guide पर इंटेल ईसा intrinsics के संग्रह पा सकते हैं । इसके अलावा व्यापक संसाधनों और टैग जानकारी के तहत दस्तावेज देखें:

+0

मैंने 'इंटेल इंस्ट्रिनिक्स गाइड' खा लिया है। वैसे मैं जवाब – Martin

+4

स्वीकार करूंगा यदि आप इंटेल इंट्रिनिक्स गाइड खाने के बाद भी भूख लगी हैं, तो [टैग: x86] टैग विकी में संसाधनों को देखना सुनिश्चित करें। :-) @fac मैं भी भविष्य उपयोगकर्ताओं के लिए जवाब देने के लिए कि गयी। –

+1

@ कोडीग्रे: [एसएसई टैग विकी] (http://stackoverflow.com/tags/sse/info) में कुछ एसएसई/एवीएक्स इंट्रिनिक्स ट्यूटोरियल टाइप चीजें भी हैं। X86 टैग विकी इसका उल्लेख करता है (शीर्ष पर), लेकिन मुझे संदेह है कि ज्यादातर लोग इसे नोटिस नहीं करेंगे। –