2011-10-15 21 views
6

मैं निम्न आदेश का उपयोग कर मेरी कोड संकलन कर रहा हूँ:जीसीसी का उपयोग करते समय मैं वेक्टरेशन को कैसे अक्षम कर सकता हूं?

gcc -O3 -ftree-vectorizer-verbose=6 -msse4.1 -ffast-math 
यह सब अनुकूलन सक्षम होते हैं के साथ

लेकिन मैं अन्य अनुकूलन को रखते हुए वेक्टरेशन को अक्षम करना चाहता हूं।

उत्तर

8

अधिकांश जीसीसी स्विच का उपयोग no उपसर्ग के साथ उनके व्यवहार को अक्षम करने के लिए किया जा सकता है। -fno-tree-vectorize के साथ प्रयास करें (कमांड लाइन पर -O3 के बाद)।

5

आप भी चुनिंदा सक्षम और अनुकूलन समारोह के साथ अक्षम vectorization कर सकते हैं विशेषताओं या pragmas

http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html

उदा

__attribute__((optimize("no-tree-vectorize"))) 
void f(double * restrict a, double * restrict b) 
{ 
    for (int i = 0; i < 256; i++) 
     a[i] += b[i]; 
} 
0

बहुत बढ़िया, अब है कि जीसीसी जैसे vectorizing में और अधिक आक्रामक हो गया है

extern "C" __attribute__((optimize("no-tree-vectorize"))) 
/* Subroutine */ 
int s111_ (integer * ntimes, integer * ld, integer * n, 
      real * ctime, real * dtime, 
      real * __restrict a, real * b, real * c__, real * d__, 
      real * e, real * aa, real * bb, real * cc) 
{ 
    .... 
    for (i__ = 2; i__ <= i__2; i__ += 2) 
     a[i__] = a[i__ - 1] + b[i__]; 
    .... 

मामले में उपरोक्त पोस्ट को हटाने restrict काम करने के लिए प्रयोग किया जाता है, लेकिन अब जी ++ 6.0 __restrict को हटाने के द्वारा vectorizing से रोका नहीं जा सकता।

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

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