मेरे पास एक बुलियन अभिव्यक्ति है जिसे मैंने एसएसई 2 में लागू करने में कामयाब रहा है। अब मुझे एवीएक्स में समांतरता वृद्धि (128 बिट सिम प्रकार से 256 तक) में एक अतिरिक्त कारक 2 का शोषण करने का प्रयास करना अच्छा लगेगा। हालांकि, एवीएक्स पूर्णांक ऑपरेशन का समर्थन नहीं करता है (जो AVX2 करता है, लेकिन मैं एक सैंडी ब्रिज प्रोसेसर पर काम कर रहा हूं, इसलिए यह वर्तमान में एक विकल्प नहीं है)। हालांकि, चूंकि AVX intrinsics for bitwise operations हैं। मैंने सोचा कि मैं अपने पूर्णांक प्रकारों को फ्लोट प्रकारों में परिवर्तित करके देख सकता हूं और देख सकता हूं कि यह काम करता है या नहीं।क्या AVX पर _m256 प्रकारों के लिए पूर्णांक बिटवाई ऑपरेशंस अनुकरण करने का कोई तरीका है?
__m256 ones = _mm256_set_ps(1,1,1,1,1,1,1,1);
__m256 twos = _mm256_set_ps(2,2,2,2,2,2,2,2);
__m256 result = _mm256_and_ps(ones, twos);
मैं guetting कर रहा हूँ सभी 0 के रूप में मैं करना चाहिए:
पहला परीक्षण सफल रहा। Simularly दुक्की AND'ing बजाय मैं 2. का एक परिणाम मिलता है लेकिन जब 11 XOR 4 तदनुसार की कोशिश कर रहा:
__m256 elevens = _mm256_set_ps(11,11,11,11,11,11,11,11);
__m256 fours = _mm256_set_ps(4,4,4,4,4,4,4,4);
__m256 result2 = _mm256_xor_ps(elevens, fours);
परिणाम है 6.46e -46 (यानी 0 के करीब) और नहीं कर रही 15. Simularly 11 या 4 मुझे 22 का मान देता है और 15 जैसा नहीं होना चाहिए। मुझे समझ में नहीं आता कि यह क्यों है। क्या यह एक बग या कुछ विन्यास है जो मुझे याद आ रही है?
मैं वास्तव में फ्लोट के साथ काम करने की मेरी परिकल्पना की उम्मीद कर रहा था जैसे कि वे काम नहीं करने के लिए पूर्णांक थे क्योंकि फ्लोट वैल्यू में शुरू होने वाले पूर्णांक वास्तव में सटीक मूल्य नहीं बल्कि निकटतम अनुमान हो सकता है। लेकिन फिर भी, मुझे मिलने वाले परिणाम से आश्चर्यचकित हूं।
क्या किसी को इस समस्या का हल है या क्या मुझे अपने सीपीयू को एवीएक्स 2 समर्थन प्राप्त करने के लिए अपग्रेड करना चाहिए?
ऐसा लगता है कि आप 6.46e-46 प्राप्त करने के लिए एक फ्लोट के रूप में एक पूर्णांक प्रिंट कर रहे हैं। क्या आप सुनिश्चित हैं कि आपके 'printf()' स्वरूपण विनिर्देशक सही हैं? –
मैं मुद्रण नहीं कर रहा था। मैंने अभी विजुअल स्टूडियो डीबगर में मूल्य की जांच की है। – Toby999