SSEに興味があり、ためしに配列の値の合計を求めるプログラムを書いてみました。 まだまだ勉強中なので、プロの方から見たら駄目駄目かもしれません。こんなコードでも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]; } }
IT関連の技術やプログラミングを中心に記事を書いています。ハードウェアも好きなので、日々のちょっとしたお役立ち情報も投稿しています。