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