के साथ लगातार फ्लोट्स मैं माइक्रोसॉफ्ट के एसएसई इंट्रिनिक्स का उपयोग कर कुछ कोड को अनुकूलित करने के लिए अपना हाथ आजमा रहा हूं। मेरे कोड को अनुकूलित करते समय सबसे बड़ी समस्याओं में से एक एलएचएस होता है जब भी मैं निरंतर उपयोग करना चाहता हूं। कुछ स्थिरांक (here और here - section 13.4) उत्पन्न करने पर कुछ जानकारी प्रतीत होती है, लेकिन इसकी सभी असेंबली (जो मैं इससे बचूंगा)।सिमड
समस्या तब होती है जब मैं आंतरिक चीज़ों के साथ एक ही चीज़ को लागू करने का प्रयास करता हूं, एमएसवीसी असंगत प्रकारों के बारे में शिकायत करता है आदि। क्या किसी को इंट्रिनिक्स का उपयोग करके किसी समकक्ष चाल के बारे में पता है?
उदाहरण - उत्पन्न {1.0,1.0,1.0,1.0}
//pcmpeqw xmm0,xmm0
__m128 t = _mm_cmpeq_epi16(t, t);
//pslld xmm0,25
_mm_slli_epi32(t, 25);
//psrld xmm0,2
return _mm_srli_epi32(t, 2);
यह असंगत प्रकार (__m128 _m128i बनाम) के बारे में त्रुटियों की एक गुच्छा उत्पन्न करता है। मैं इसके लिए बहुत नया हूं, इसलिए मुझे पूरा यकीन है कि मुझे कुछ स्पष्ट याद आ रहा है। क्या कोई मदद कर सकता है?
tldr - मैं एमएस इंट्रिनिक्स के साथ एकल परिशुद्धता निरंतर फ्लोट से भरा __m128 vec कैसे उत्पन्न करूं?
पढ़ने के लिए धन्यवाद :)
आपको क्या लगता है कि आपको ऐसा करने की आवश्यकता है? आमतौर पर स्थिरांक एक कम्प्यूटेशनल लूप से पहले केवल एक बार लोड होते हैं, इसलिए स्मृति पहुंच की सापेक्ष लागत नगण्य है। –
मेरे पास कई स्थिरांक हैं, जिनमें से सभी एक लूप के भीतर उपयोग किए जाते हैं जो दुर्भाग्य से पहले से ही सभी 8 एक्सएमएम रजिस्टरों का उपयोग करने लगता है। Vtune के भीतर मुझे उस बिंदु पर एक बहुत ही उच्च सीपीआई मिलता है जिस पर इनमें से कुछ स्थिरांक का उपयोग किया जाता है। मुझे लगता है कि अगर मैं उन स्थिरांकों की संख्या को कम कर सकता हूं जो मैं एक्सेस कर रहा हूं, और इसके बजाय कुछ उत्पन्न कर सकता हूं, जो लागत को कम कर सकता है क्योंकि कोई दूसरे की लागत को छुपाएगा। इसके अलावा, अजीब बात यह है कि, स्थिरांक में से किसी एक पर रजिस्टर कीवर्ड का उपयोग करके थोड़ा सा मदद मिली (भले ही इसके परिणामस्वरूप कुछ अन्य मूल्यों को इसके बजाय xmm regs से बाहर धकेल दिया गया हो)। – JBeFat
यदि आप कर सकते हैं तो x86-64 का उपयोग करें - इस तरह आपको 16 एक्सएमएम रजिस्ट्रार मिलते हैं। यह भी ध्यान रखें कि भले ही आपको एक या अधिक कैश मिल जाए, पहली बार इन स्थिरांकों को लोड किया जाता है, इसे बड़ी संख्या में पुनरावृत्तियों पर मिश्रित किया जाना चाहिए जहां स्थिरांक बाद में एल 1 कैश में होंगे। (बेशक आपके पास केवल थोड़ी सी लूप पुनरावृत्तियों की संख्या है?) –