2013-03-05 9 views
5

मैं अपने एआरएम प्रांतस्था A9 पर नियोन vectorization सक्षम करना चाहते हैं, लेकिन मैं संकलन में इस आउटपुट प्राप्त:एआरएम नियोन vectorization विफलता

"vectorized नहीं: प्रासंगिक stmt समर्थित नहीं: D.14140_82 = D.14143_77

void my_mul(float32_t * __restrict data1, float32_t * __restrict data2, float32_t * __restrict out){  
    for(int i=0; i<SIZE*4; i+=1){ 
     out[i] = data1[i]*data2[i]; 
    } 
} 

और विकल्पों संकलन में प्रयोग किया है::

-march=armv7-a -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize -mvectorize-with-neon-quad -ftree-vectorizer-verbose=2 
* D.14141_81 "

यहाँ मेरी पाश है

मैं आर्म-लिनक्स-gnueabi (v4.6) कंपाइलर का उपयोग कर रहा हूं।

यह ध्यान रखना महत्वपूर्ण है कि समस्या केवल फ्लोट 32 वैक्टर के साथ दिखाई देती है। अगर मैं int32 में स्विच करता हूं, तो वेक्टरेशन किया जाता है। शायद float32 के लिए वेक्टरेशन अभी तक उपलब्ध नहीं है ...

क्या किसी के पास कोई विचार है? क्या मैं cmd ​​लाइन में या मेरे कार्यान्वयन में कुछ भूल जाता हूं?

आपकी मदद के लिए अग्रिम धन्यवाद।

Guix

उत्तर

8

GCC's ARM options page

-mfpu = नाम

से ...

चयनित फ्लोटिंग प्वाइंट हार्डवेयर नियोन विस्तार (शामिल है जैसे -mfpu = `नीयन '), ध्यान दें कि चल बिन्दु आपरेशनों जीसीसी के ऑटो vectorization पास द्वारा उत्पन्न नहीं कर रहे हैं जब तक -फनसाफ-गणित-अनुकूलन भी निर्दिष्ट है। इसका कारण यह है नियोन हार्डवेयर पूरी तरह से फ्लोटिंग प्वाइंट अंकगणित (विशेष रूप से denormal मूल्यों में शून्य माना जाता है) के लिए आईईईई 754 मानक को लागू नहीं करता, इसलिए नियोन निर्देश के उपयोग परिशुद्धता का एक नुकसान हो सकता है है।

आप -funsafe-math-optimizations यह काम करना चाहिए निर्दिष्ट करते हैं, लेकिन आप उच्च परिशुद्धता के साथ इस का उपयोग करने जा रहे हैं ऊपर टिप्पणी पुन: पढ़ने हैं।

+0

धन्यवाद, '-फनसाफ-गणित-अनुकूलन' चाल करता है! – user2092113