2013-07-16 7 views
5

में उनके उपयोग को अक्षम करें मेरे पास एक कोड है जो एसएसएसई 3 आंतरिक आदेशों का उपयोग करता है (ट्रिपल एस नोट करें) और रनटाइम चेक का उपयोग करना है या नहीं, इसलिए मुझे लगता है कि एप्लिकेशन को CPU पर निष्पादित करना चाहिए एसएसएसई 3 समर्थन। हालांकि, -एम 1 ऑप्टिमाइज़ेशन के साथ -mssse3 का उपयोग करते समय संकलक एसएसएसई 3 निर्देशों को भी सम्मिलित करता है जिन्हें मैंने स्पष्ट रूप से कॉल नहीं किया था, इसलिए प्रोग्राम क्रैश हो गया।एसएसएसई 3 इंट्रिनिक्स को कैसे सक्षम करें लेकिन कंपाइलर ऑप्टिमाइज़ेशन

क्या मैं एसएसएसई 3 कोड को सक्षम करने का कोई तरीका है जब मैं प्रासंगिक आंतरिक कार्यों को कॉल करता हूं, लेकिन संकलक को अपना स्वयं का एसएसएसई 3 कोड जोड़ने से रोकने के लिए?

ध्यान दें कि मैं -O1 अनुकूलन अक्षम नहीं कर सकता।

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/15584983/whats-the-proper-way-to-use- अलग-versions-of-sse-intrinsics-in-gcc – yohjp

+0

अलग-अलग सेटिंग्स के साथ विभिन्न टीयू संकलित करें । – PlasmaHH

+1

अलग-अलग विकल्पों के साथ अलग-अलग फ़ाइलों को संकलित करें, या अलग-अलग विकल्पों के साथ अलग-अलग फ़ंक्शंस (प्राग्मा, विशेषता), या जीसीसी -4.9 का उपयोग करें। –

उत्तर

10

इस समस्या का समाधान सभी प्रोग्राम कोड को -mssse3 विकल्प के साथ संकलित नहीं करना है, और केवल उस भाग को संकलित करना है जो वास्तव में उस विकल्प के साथ इन सुविधाओं का उपयोग करता है। दूसरे शब्दों में:

// main.cpp 
... 

    if (use_ssse3()) 
     do_something_ssse3(); 
    else 
     do_something_traditional(); 

// traditional.cpp: 
void do_something_traditional() 
{ 
    ... 
    code goes here ... 
} 

// ssse3.cpp: 
void do_something_ssse3() 
{ 
    ... 
    code goes here ... 
} 

केवल "ssse3.cpp" -mssse3 ध्वज के साथ संकलित किया जाना चाहिए।

+0

यह भी देखें [जीसीसी अंक 57202 - कृपया इंटिंटिन हेडर्स जैसे immintrin.h को कंपाइलर झंडे के बिना उपयोग करने योग्य बनाएं] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57202)। – jww

0

आप जीसीसी का उपयोग करते हैं, तो आप सिर्फ कोड -mssse3 स्विच का उपयोग किए बिना संकलन, और

#define __SSSE3__ 1 
#include <tmmintrin.h> 

जहाँ आप उन्हें जरूरत के साथ SSSE3 intrinsics में खींच सकते हैं।

+3

ध्यान दें कि यह काम नहीं करेगा, क्योंकि __builtin_some_intrinsic मौजूद नहीं होगा जब संकलक अंतर्निहित कार्यक्षमता द्वारा घोषित इनलाइन फ़ंक्शन का विस्तार करता है, और इस प्रकार सही ढंग से संकलित नहीं होगा। कंपाइलर नियंत्रण जो बिल्टिन फ़ंक्शंस को -msse विकल्पों द्वारा घोषित किया जाता है। –

संबंधित मुद्दे