2008-09-23 10 views
13

मैं कुछ कोड लिख रहा हूं और सिमड इंट्रिनिक्स एसएसई 2/3 का उपयोग करके इसे तेज करने की कोशिश कर रहा हूं। मेरा कोड ऐसी प्रकृति का है कि मुझे कुछ डेटा को एक्सएमएम रजिस्टर में लोड करने और कई बार इस पर कार्य करने की आवश्यकता है। जब मैं जेनरेट किए गए असेंबलर कोड को देख रहा हूं, ऐसा लगता है कि एक्सएमएम 0 और एक्सएमएम 1 में कुछ और फिर से लोड करने के लिए जीसीसी मेमोरी में डेटा को फ्लश कर रहा है। मैं x86-64 के लिए संकलित कर रहा हूं इसलिए मेरे पास 15 रजिस्ट्रार हैं। जीसीसी केवल दो का उपयोग क्यों कर रहा है और मैं इसे और अधिक उपयोग करने के लिए कहने के लिए क्या कर सकता हूं? क्या कोई तरीका है कि मैं एक रजिस्टर में कुछ मूल्य "पिन" कर सकता हूं? मैंने अपनी चर परिभाषा में "रजिस्टर" कीवर्ड जोड़ा, लेकिन जेनरेट असेंबली कोड समान है।इंट्रिनिक्स का उपयोग करते समय जीसीसी को दो से अधिक सिम रजिस्टरों का उपयोग करने के लिए कैसे प्राप्त करें?

+0

मुझे एआरएम के साथ एक ही समस्या है। AFAICT, मैं जिस वाक्यविन्यास का उपयोग कर रहा हूं वह सही है - यह जीसीसी दस्तावेज़ों में निर्दिष्ट मैचों से मेल खाता है। हालांकि, मुझे एक ही त्रुटि मिलती है ... मुझे आश्चर्य है कि इस संबंध में नवीनतम जीसीसी को गड़बड़ कर दिया गया है या नहीं। –

+0

आह - माफ करना - मेरी टिप्पणी वास्तव में नीचे दिए गए उत्तर पर अपनी टिप्पणी में फ्लोरिन की समस्या के संबंध में है (एएसएम ("regname") का उपयोग करके त्रुटि उत्पन्न होती है)। –

+1

इस व्यवहार के लिए एक आम कारण ऑप्टिमाइज़ेशन (-O1, -O2 या -O3) को सक्षम नहीं कर रहा है, ऑप्टिमाइज़िक्स के बिना इंट्रिनिक्स का उपयोग करते समय यह हर बार स्मृति में फ्लश करेगा और अनिवार्य रूप से केवल 2-3 सिम रजिस्टर्स का उपयोग करें – jtaylor

उत्तर

3

हाँ, आप कर सकते हैं। Explicit Reg Vars सिंटैक्स के बारे में वार्तालाप आपको एक चर को एक विशिष्ट रजिस्टर में पिन करने की आवश्यकता है।

+0

मैंने कोशिश की >> रजिस्टर __m128i v0 asm ("xmm7"); << लेकिन संकलक इसे पसंद नहीं करता है >> त्रुटि: 'asm' से पहले अपेक्षित '=', ',', ';', 'asm' या '__attribute__' <<। – florin

+0

क्या आपने #शामिल किया था? –

2

यदि आप उस बिंदु पर जा रहे हैं जहां आप प्रत्येक आंतरिक के लिए व्यक्तिगत रजिस्ट्रार निर्दिष्ट कर रहे हैं, तो आप असेंबली निर्देशिका भी लिख सकते हैं, विशेष रूप से कई मामलों में आंतरिक रूप से अनावश्यक रूप से निराशाजनक जीसीसी की गंदी आदत दी गई है।