void computeA(int nTerms, int mid) { computeB(nTerms, mid); int i, j; for (i = 0; i < nTerms; i++) { for (j = mid; j < nTerms; j++) { a[i][j].real = a[i][j].real*TIME_DECAY + b[i][j].real; a[i][j].imag = a[i][j].imag*TIME_DECAY + b[i][j].imag; a[2*mid-i][2*mid-j].real = a[i][j].real; a[2*mid-i][2*mid-j].imag = -a[i][j].imag; } } a[mid][mid].imag = 0.0; }
int main(int argc, char**) { { long long t1=0; float s1=0; long long t2=0; float s2=0; long long t3=0; float s3=0; fillR(); computeV(); for (int i=0; i!=10000; ++i) { fillO(); t1 -= rdtsc(); computeV(); t1 += rdtsc(); s1+=sum(); t2 -= rdtsc(); computeA(); t2 += rdtsc(); s2+=sum(); t3 -= rdtsc(); computeB(); t3 += rdtsc(); s3+=sum(); } std::cout << "native vector " << s1 << " " << double(t1)/10000 << std::endl; std::cout << "vector by elements " << s2 << " " << double(t2)/10000 << std::endl; std::cout << "scalar " << s3 << " " << double(t3)/10000 << std::endl << std::endl; } { long long t1=0; float s1=0; long long t2=0; float s2=0; long long t3=0; float s3=0; fillO(); computeV(); for (int i=0; i!=10000; ++i) { fillR(); t1 -= rdtsc(); computeV(); t1 += rdtsc(); s1+=sum(); t2 -= rdtsc(); computeA(); t2 += rdtsc(); s2+=sum(); memcpy(a,va,sizeof(float)*1024*vfl); t3 -= rdtsc(); computeL(); t3 += rdtsc(); memcpy(vb,b,sizeof(float)*1024*vfl); s3+=sum(); } std::cout << "native vector " << s1 << " " << double(t1)/10000 << std::endl; std::cout << "vector by elements " << s2 << " " << double(t2)/10000 << std::endl; std::cout << "scalar " << s3 << " " << double(t3)/10000 << std::endl << std::endl; } { long long t1=0; float s1=0; long long t2=0; float s2=0; long long t3=0; float s3=0; fillO(); computeV(); for (int i=0; i!=10000; ++i) { fillW(); t1 -= rdtsc(); computeV(); t1 += rdtsc(); s1+=sum(); t2 -= rdtsc(); computeA(); t2 += rdtsc(); s2+=sum(); t3 -= rdtsc(); computeB(); t3 += rdtsc(); s3+=sum(); } std::cout << "native vector " << s1 << " " << double(t1)/10000 << std::endl; std::cout << "vector by elements " << s2 << " " << double(t2)/10000 << std::endl; std::cout << "scalar " << s3 << " " << double(t3)/10000 << std::endl << std::endl; } return 0; }