#include <iostream>
#include <stdlib.h>
#include <time.h>
typedef unsigned int uint32;
const int buf_size = 1024 * 10 * 1024 / 4;
typedef int buf_type;
volatile int read_hack;
void test4write( buf_type *buf )
{
for ( int i = 0; i < buf_size; i++ )
{
buf[ i ] = 0;
};
};
void test4read( buf_type *buf )
{
buf_type res = 0;
for ( int i = 0; i < buf_size; i++ )
{
res += buf[ i ];
};
read_hack = res;
//std::cout << "res: " << res << "\n";
};
typedef void (*fptr)(buf_type *);
void test( fptr fp, const char *label, buf_type *param )
{
clock_t t = clock();
fp( param );
t = clock() - t;
double x = ((double)t) / CLOCKS_PER_SEC;
std::cout << label << " time: " << x << " sec => " << 1/x << " Gb/sec\n";
};
int main()
{
buf_type *buf = new buf_type[ buf_size ];
test( test4write, "init write", buf );
test( test4write, "write", buf );
test( test4read, "read", buf );
test( test4write, "write", buf );
test( test4read, "read", buf );
test( test4write, "write", buf );
test( test4read, "read", buf );
delete[] buf;
return 0;
};
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx0aW1lLmg+Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7Cgpjb25zdCBpbnQgYnVmX3NpemUgPSAxMDI0ICogMTAgKiAxMDI0IC8gNDsKdHlwZWRlZiBpbnQgYnVmX3R5cGU7CnZvbGF0aWxlIGludCByZWFkX2hhY2s7Cgp2b2lkIHRlc3Q0d3JpdGUoIGJ1Zl90eXBlICpidWYgKQp7CiAgZm9yICggaW50IGkgPSAwOyBpIDwgYnVmX3NpemU7IGkrKyApCiAgewogICAgYnVmWyBpIF0gPSAwOwogIH07Cn07Cgp2b2lkIHRlc3Q0cmVhZCggYnVmX3R5cGUgKmJ1ZiApCnsKICBidWZfdHlwZSByZXMgPSAwOwogIGZvciAoIGludCBpID0gMDsgaSA8IGJ1Zl9zaXplOyBpKysgKQogIHsKICAgIHJlcyArPSBidWZbIGkgXTsKICB9OwogIHJlYWRfaGFjayA9IHJlczsKICAvL3N0ZDo6Y291dCA8PCAicmVzOiAiIDw8IHJlcyA8PCAiXG4iOwp9OwoKdHlwZWRlZiB2b2lkICgqZnB0cikoYnVmX3R5cGUgKik7Cgp2b2lkIHRlc3QoIGZwdHIgZnAsIGNvbnN0IGNoYXIgKmxhYmVsLCBidWZfdHlwZSAqcGFyYW0gKQp7CiAgY2xvY2tfdCB0ID0gY2xvY2soKTsKICBmcCggcGFyYW0gKTsKICB0ID0gY2xvY2soKSAtIHQ7CiAgZG91YmxlIHggPSAoKGRvdWJsZSl0KSAvIENMT0NLU19QRVJfU0VDOwogIHN0ZDo6Y291dCA8PCBsYWJlbCA8PCAiIHRpbWU6ICIgPDwgeCA8PCAiIHNlYyA9PiAiIDw8IDEveCA8PCAiIEdiL3NlY1xuIjsKfTsKCmludCBtYWluKCkgCnsKICBidWZfdHlwZSAqYnVmID0gbmV3IGJ1Zl90eXBlWyBidWZfc2l6ZSBdOwogIHRlc3QoIHRlc3Q0d3JpdGUsICJpbml0IHdyaXRlIiwgYnVmICk7CiAgdGVzdCggdGVzdDR3cml0ZSwgIndyaXRlIiwgYnVmICk7CiAgdGVzdCggdGVzdDRyZWFkLCAicmVhZCIsIGJ1ZiApOwogIHRlc3QoIHRlc3Q0d3JpdGUsICJ3cml0ZSIsIGJ1ZiApOwogIHRlc3QoIHRlc3Q0cmVhZCwgInJlYWQiLCBidWYgKTsKICB0ZXN0KCB0ZXN0NHdyaXRlLCAid3JpdGUiLCBidWYgKTsKICB0ZXN0KCB0ZXN0NHJlYWQsICJyZWFkIiwgYnVmICk7CiAgZGVsZXRlW10gYnVmOwogIHJldHVybiAwOwp9Ow==