#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;
class mytimer
{
public:
mytimer() { _start_time = clock(); }
void restart() { _start_time = clock(); }
clock_t elapsed() const
{ return clock() - _start_time; }
private:
clock_t _start_time;
}; // timer
int main()
{
const int num_samples = 1000;
float* samples = new float[num_samples];
mytimer timer;
for (int x = 0 ; x != 100000 ; x++) {
for (int i = 0; i < num_samples; i++) {
samples[i] = 1.f;
}
}
double result = timer.elapsed();
std::cout << "rewrite of " << (num_samples*sizeof(float)/(1024*1024)) << " Mb takes " << result << std::endl;
timer.restart();
float sum;
for (int x = 0 ; x != 100000 ; x++) {
sum=0;
for (int i = 0; i < num_samples; i++) {
sum += samples[i];
}
}
result = timer.elapsed();
std::cout << "naive:\t\t" << result << ", sum = " << sum << std::endl;
timer.restart();
float* end = samples + num_samples;
for (int x = 0 ; x != 100000 ; x++) {
sum = 0;
for(float* i = samples; i < end; i++) {
sum += *i;
}
}
result = timer.elapsed();
std::cout << "pointers:\t" << result << ", sum = " << sum << std::endl;
timer.restart();
sum = 0;
for (int x = 0 ; x != 100000 ; x++) {
sum = std::accumulate(samples, end, 0.0F);
}
result = timer.elapsed();
std::cout << "algorithm:\t" << result << ", sum = " << sum << std::endl;
}