2011-01-04 14 views
5

में समर्थन मैं नीचे के रूप में एक कोड देखें:।SSE (SIMD एक्सटेंशन) जीसीसी

#include "stdio.h" 

#define VECTOR_SIZE   4 
typedef float v4sf __attribute__ ((vector_size(sizeof(float)*VECTOR_SIZE))); 
// vector of four single floats 

typedef union f4vector 
{ 
    v4sf v; 
    float f[VECTOR_SIZE]; 
} f4vector; 

void print_vector (f4vector *v) 
{ 
    printf("%f,%f,%f,%f\n", v->f[0], v->f[1], v->f[2], v->f[3]); 
} 

int main() 
{ 
    union f4vector a, b, c; 

    a.v = (v4sf){1.2, 2.3, 3.4, 4.5}; 
    b.v = (v4sf){5., 6., 7., 8.}; 
    c.v = a.v + b.v; 

    print_vector(&a); 
    print_vector(&b); 
    print_vector(&c); 
} 

इस कोड को ठीक बनाता है और जीसीसी का उपयोग कर प्रत्याशित काम करता है (यह inbuild SSE/MMX एक्सटेंशन और वेक्टर डेटा प्रकार इस कोड को कर रही है है ।

typedef float v4sf __attribute__ ((vector_size(sizeof(float)*VECTOR_SIZE))); 

vector_size क्या है (: एक SIMD वेक्टर 4 एकल तैरता का उपयोग कर इसके अलावा

मैं विस्तार से समझने के लिए प्रत्येक खोजशब्द/इस typedef लाइन पर समारोह कॉल का मतलब है और करता है क्या चाहते हैं) समारोह वापसी; के लिए

यहाँ __attribute__ कीवर्ड नाव डेटा प्रकार से किया जा रहा प्रकार प्रकार vfsf को परिभाषित किया गया है

क्या है?

मैं बाकी भाग को समझता हूं।

धन्यवाद,

-AD

उत्तर

8

__attribute__ संकलक कि सी या सी ++ मानकों में नहीं है से कार्यक्षमता उजागर की GCCs तरीका है। __attribute__((vector_size(x))) आकार x के वेक्टर के रूप में प्रकार का इलाज करने के लिए जीसीसी को निर्देश देता है। एसएसई के लिए यह 16 बाइट्स है।

हालांकि, मैं विभिन्न <*mmintrin.h> हेडर में पाए गए __m128, __m128i या __m128d प्रकारों का उपयोग करने का सुझाव दूंगा। वे कंपाइलरों में अधिक पोर्टेबल हैं।

+0

इसके अलावा कम पठनीय :) – LtWorf

+0

इंट्रिनिक्स एमएसवीसी के लिए केवल अधिक पोर्टेबल हैं। वेक्टर एक्सटेंशन जीसीसी, क्लैंग और आईसीसी के लिए काम करते हैं। वे हार्डवेयर पर भी निर्भर नहीं हैं। इसका मतलब है कि आप उन्हें एआरएम के लिए भी इस्तेमाल कर सकते हैं। आप उनमें से वेक्टर एक्सटेंशन की शक्ति देख सकते हैं [यहां] (https://stackoverflow.com/a/48283672/2542702) जिसे मैंने x86 और एआरएम दोनों पर जीसीसी और क्लैंग के लिए मुकदमा दायर किया था। आईसीसी के लिए भी उन्हें विस्तारित करना आसान होगा लेकिन मेरा जवाब अधिक लंबा होगा। –