#include <iostream>
#include <chrono>
#include <cstdlib>
#include <cstddef>

typedef std::chrono::high_resolution_clock hres_clk;
typedef std::chrono::nanoseconds ns;

#define MIN_BLOCK_SIZE    3276
#define MAX_BLOCK_SIZE_L1 (32 * 1024 * 2)
#define STEP              3276

int main() {
  uint8_t *p = (uint8_t*)malloc(MAX_BLOCK_SIZE_L1);
  for (size_t b = MIN_BLOCK_SIZE, i = 0; b <= MAX_BLOCK_SIZE_L1; b += STEP, i += 1) {
      auto pre = hres_clk::now();
      for (size_t c = 0; c < b; c += 1) {
          p[c] = c;
      }
      auto post = hres_clk::now();
      std::cout << i << '\t' << std::chrono::duration_cast<ns>(post - pre).count()
                << '\t' << b << '\t' 
                << (std::chrono::duration_cast<ns>(post - pre).count() / (double) b) << '\n';
  }
  return 0;
}