Chris@27: Chris@27: #include Chris@27: Chris@27: #include Chris@27: #include Chris@27: #include Chris@27: #include Chris@27: Chris@27: using namespace std; Chris@27: using namespace breakfastquay; Chris@27: Chris@27: int main(int argc, char **argv) Chris@27: { Chris@27: vector sizes { 512, 2048 }; Chris@27: Chris@27: int iterations = 2000; Chris@27: int times = 100; Chris@27: Chris@27: for (auto size: sizes) { Chris@27: Chris@27: FFT fft(size); Chris@27: double total = 0.0; Chris@27: Chris@27: auto start = chrono::high_resolution_clock::now(); Chris@27: Chris@27: for (int ti = 0; ti < times; ++ti) { Chris@27: Chris@27: total = 0.0; Chris@27: Chris@27: for (int i = 0; i < iterations; ++i) { Chris@27: Chris@27: vector ri(size), ro(size/2+1), io(size/2+1); Chris@27: for (int j = 0; j < size; ++j) { Chris@27: ri[j] = (j % 2) / 4.0; Chris@27: } Chris@27: Chris@27: fft.forward(ri.data(), ro.data(), io.data()); Chris@27: Chris@27: for (int j = 0; j <= size/2; ++j) { Chris@27: total += sqrt(ro[j] * ro[j] + io[j] * io[j]); Chris@27: } Chris@27: Chris@27: // synthesise the conjugate half Chris@27: for (int j = 1; j < size/2; ++j) { Chris@27: total += sqrt(ro[j] * ro[j] + io[j] * io[j]); Chris@27: } Chris@27: } Chris@27: } Chris@27: Chris@27: auto end = chrono::high_resolution_clock::now(); Chris@27: Chris@27: double ms = chrono::duration(end - start).count() / times; Chris@27: Chris@28: cerr << "for " << iterations << " * size " << size << ": total = " Chris@28: << total << ", time = " << ms Chris@28: << " ms (" << (iterations / (ms / 1000.0)) << " itr/sec)" << endl; Chris@27: } Chris@27: } Chris@27: