#include #include #include "common.h" #include "distance.h" int flops_dot(int n) { return 2*n; } int flops_distance(int n) { return 3*n + 1; } float dot_c(float *v1, float *v2, int N) { int i,j; float dot = 0.0; for(i=0; i<(N>>MINPOW2); ++i) for(j=0; j<(MINPOW2<<1); ++j) { dot+= *(v1++) * *(v2++); } return dot; } float distance_c(float *v1, float *v2, int N) { int i,j; float dist2 = 0.0; for(i=0; i<(N>>MINPOW2); ++i) for(j=0; j<(MINPOW2<<1); ++j) { double diff; diff = *(v1++) - *(v2++); dist2 += diff * diff; } return sqrt(dist2); } #if SSE float distance_sse(float *v1, float *v2, int N) { int i; float dist2 = 0.0; __asm__ __volatile__ ( "xorps %%xmm0, %%xmm0 \n" : : : "memory" ); for(i=0; i