के लिए मैं एक पाशSSE SIMD अनुकूलन लूप
for(int i = 0; i < n; i++)
{
u[i] = c * u[i] + s * b[i];
}
तो में कुछ कोड है, यू और ख एक ही लंबाई के वैक्टर, और ग कर रहे हैं और रों scalars हैं। क्या यह कोड स्पीडअप प्राप्त करने के लिए एसएसई के साथ उपयोग के लिए वेक्टरेशन के लिए एक अच्छा उम्मीदवार है?
अद्यतन
मैं vectorization सीखा है और SSE में मेरे पाश लागू किया (यह इतनी मेहनत करता है, तो आप intrinsics का उपयोग नहीं है पता चला है)। हालांकि, वीसी ++ कंपाइलर में एसएसई 2 ध्वज सेट करते समय, मुझे अपने स्वयं के एसएसई कोड के समान प्रदर्शन मिलता है। दूसरी तरफ इंटेल कंपाइलर मेरे एसएसई कोड या वीसी ++ कंपाइलर से बहुत तेज था।
यहाँ कोड मैं संदर्भ
double *u = (double*) _aligned_malloc(n * sizeof(double), 16);
for(int i = 0; i < n; i++)
{
u[i] = 0;
}
int j = 0;
__m128d *uSSE = (__m128d*) u;
__m128d cStore = _mm_set1_pd(c);
__m128d sStore = _mm_set1_pd(s);
for (j = 0; j <= i - 2; j+=2)
{
__m128d uStore = _mm_set_pd(u[j+1], u[j]);
__m128d cu = _mm_mul_pd(cStore, uStore);
__m128d so = _mm_mul_pd(sStore, omegaStore);
uSSE[j/2] = _mm_add_pd(cu, so);
}
for(; j <= i; ++j)
{
u[j] = c * u[j] + s * omegaCache[j];
}
[नोट VC11 अब अपने अनुकूलन में SIMD का उपयोग करता है] (http://blogs.microsoft.co.il/blogs/sasha/archive/2011/10/17/simd-optimized-c-code-in -विज़ुअल-स्टूडियो-11.aspx) – bobobobo