मैं एक उत्सुक समस्या में भाग गया हूं। एक एल्गोरिथ्म मैं पर काम कर रहा हूँ इस32-बिट बनाम 64-बिट फ्लोटिंग-पॉइंट प्रदर्शन
q = x(0)*y(0)*z(0) + x(1)*y(1)*z(1) + ...
जहां योग की लंबाई 4 और 7
के बीच
मूल संगणना सभी 64-बिट परिशुद्धता का उपयोग किया जाता है की तरह संगणना के बहुत सारे के होते हैं। प्रयोग के लिए, मैंने एक्स, वाई, जेड इनपुट मानों के लिए 32-बिट परिशुद्धता का उपयोग करने की कोशिश की (ताकि कंप्यूटेशंस 32-बिट का उपयोग करके किया जा सके), और अंतिम परिणाम को 64-बिट मान (सीधा फॉरवर्ड) के रूप में संग्रहीत किया जा सके।मुझे 32-बिट प्रदर्शन बेहतर होने की उम्मीद है (कैश आकार, SIMD आकार, आदि), लेकिन मेरे आश्चर्य के लिए प्रदर्शन में कोई अंतर नहीं था, शायद यहां तक कि कमी भी हो सकती है।
प्रश्न में आर्किटेक्चर इंटेल 64, लिनक्स, और GCC है। दोनों कोड SSE का उपयोग करते प्रतीत होते हैं और दोनों मामलों में सरणी 16 बाइट सीमा से गठबंधन होती हैं।
ऐसा क्यों होगा? मेरा अनुमान है कि 32-बिट परिशुद्धता केवल पहले चार तत्वों पर एसएसई का उपयोग कर सकती है, बाकी को कास्ट ओवरहेड द्वारा क्रमबद्ध रूप से मिश्रित किया जा रहा है।
आपने एक उपहार दिया है - आपको डिस्मिचा के उत्तर के बारे में क्या पसंद नहीं आया? यह सबसे हालिया जीसीसी आप या इंटेल के कंपाइलर http://software.intel.com/en-us/articles/non-commercial-software-download/ को देखने के लिए भी लायक हो सकता है यह देखने के लिए कि क्या वे एक बेहतर नौकरी संकलन/वेक्टरिंग कर रहे हैं । – Rup
@Rup मुझे उसका जवाब पसंद है, फिर भी अन्य राय भी पसंद करेंगे, इसलिए मैंने – Anycorn