SSE के साथ के लिए 256-बिट बराबर आप आंतरिक _mm_load1_ps()AVX _mm_load1_ps
AVX साथ 256 बिट विस्तृत SIMD का उपयोग करते समय के साथ एक __m128 के सभी 4 स्लॉट में स्मृति से एक भी नाव लोड कर सकते हैं, वहाँ हो रहा है कोई _mm256_load1_ps() वेक्टर के सभी 8 स्लॉट में स्मृति से एक ही फ्लोट लोड करने के लिए।
यह चूक क्यों है, और इसके आसपास सबसे अच्छा तरीका क्या है?
या इससे भी बेहतर: वेक्टर के लक्षित स्लॉट 0..7 पर एक ही फ्लोट लोड करने का कोई तरीका है?
एवीएक्स और एवीएक्स 2 अभी भी आपको कम 128 ('पिनएसआरडी '/' INSERTPS': तत्व संख्या = संकलन-समय स्थिरांक में तत्वों को सम्मिलित करने की अनुमति देता है)। ऊपरी 128 को शून्य किए बिना ऐसा करना गैर-वेक्स एन्कोडिंग के साथ ही संभव है, जो इंटेल प्री-स्काइलेक पर भारी मात्रा में मंदी को VEX और गैर-VEX निर्देशों को मिलाकर ट्रिगर करता है। आप extractf128, insertps, insertf128 कर सकते हैं। –
'_mm_load1_ps' एक फ्लोट प्रसारित करने के लिए 'movss' + shuffle के लिए एक समग्र आंतरिक है। यदि आप पहले से ही कंपाइलर को रजिस्टर में स्थिर होने की तरह महसूस करने के लिए तैयार थे, तो '_mm256_set1_ps (* f) 'एक अच्छी पसंद है। स्मार्ट कंपाइलर्स उपयुक्त होने पर 'VBROADCASTSS 'उत्सर्जित करेंगे। –