SSEに興味があり、ためしに配列の値の合計を求めるプログラムを書いてみました。
まだまだ勉強中なので、プロの方から見たら駄目駄目かもしれません。こんなコードでもIntelのCPUでは、SSEなしで書いたプログラムより単純に2倍ぐらい高速になるので面白いです :)
まだまだ勉強中なので、プロの方から見たら駄目駄目かもしれません。こんなコードでもIntelのCPUでは、SSEなしで書いたプログラムより単純に2倍ぐらい高速になるので面白いです :)
#include <emmintrin.h>
double sum(double *src, int len){
int o = len%2;
double a[2] = {0,0};
__m128d xsum = _mm_loadu_pd(a);
for(int i = 0, loopNum = len - o; i < loopNum; i+=2 )
{
xsum = _mm_add_pd(xsum, _mm_loadu_pd(src + i));
}
_mm_storeu_pd(a, xsum);
if(o)
{
return a[0]+a[1]+src[len-1];
}
else{
return a[0]+a[1];
}
}
コメント