#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNzdGRkZWY+Cgp0eXBlZGVmIHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2sgaHJlc19jbGs7CnR5cGVkZWYgc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzIG5zOwoKI2RlZmluZSBNSU5fQkxPQ0tfU0laRSAgICAzMjc2CiNkZWZpbmUgTUFYX0JMT0NLX1NJWkVfTDEgKDMyICogMTAyNCAqIDIpCiNkZWZpbmUgU1RFUCAgICAgICAgICAgICAgMzI3NgoKaW50IG1haW4oKSB7CiAgdWludDhfdCAqcCA9ICh1aW50OF90KiltYWxsb2MoTUFYX0JMT0NLX1NJWkVfTDEpOwogIGZvciAoc2l6ZV90IGIgPSBNSU5fQkxPQ0tfU0laRSwgaSA9IDA7IGIgPD0gTUFYX0JMT0NLX1NJWkVfTDE7IGIgKz0gU1RFUCwgaSArPSAxKSB7CiAgICAgIGF1dG8gcHJlID0gaHJlc19jbGs6Om5vdygpOwogICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGI7IGMgKz0gMSkgewogICAgICAgICAgcFtjXSA9IGM7CiAgICAgIH0KICAgICAgYXV0byBwb3N0ID0gaHJlc19jbGs6Om5vdygpOwogICAgICBzdGQ6OmNvdXQgPDwgaSA8PCAnXHQnIDw8IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PG5zPihwb3N0IC0gcHJlKS5jb3VudCgpCiAgICAgICAgICAgICAgICA8PCAnXHQnIDw8IGIgPDwgJ1x0JyAKICAgICAgICAgICAgICAgIDw8IChzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxucz4ocG9zdCAtIHByZSkuY291bnQoKSAvIChkb3VibGUpIGIpIDw8ICdcbic7CiAgfQogIHJldHVybiAwOwp9