#include <iostream>
#include <stdlib.h>
#include <time.h>
typedef unsigned int uint32;
const int buf_size = 1024 * 1024 * 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+Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzI7Cgpjb25zdCBpbnQgYnVmX3NpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQgLyA0Owp0eXBlZGVmIGludCBidWZfdHlwZTsKdm9sYXRpbGUgaW50IHJlYWRfaGFjazsKCnZvaWQgdGVzdDR3cml0ZSggYnVmX3R5cGUgKmJ1ZiApCnsKCWZvciAoIGludCBpID0gMDsgaSA8IGJ1Zl9zaXplOyBpKysgKQoJewoJCWJ1ZlsgaSBdID0gMDsKCX07Cn07Cgp2b2lkIHRlc3Q0cmVhZCggYnVmX3R5cGUgKmJ1ZiApCnsKCWJ1Zl90eXBlIHJlcyA9IDA7Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBidWZfc2l6ZTsgaSsrICkKCXsKCQlyZXMgKz0gYnVmWyBpIF07Cgl9OwoJcmVhZF9oYWNrID0gcmVzOwoJLy9zdGQ6OmNvdXQgPDwgInJlczogIiA8PCByZXMgPDwgIlxuIjsKfTsKCnR5cGVkZWYgdm9pZCAoKmZwdHIpKGJ1Zl90eXBlICopOwoKdm9pZCB0ZXN0KCBmcHRyIGZwLCBjb25zdCBjaGFyICpsYWJlbCwgYnVmX3R5cGUgKnBhcmFtICkKewoJY2xvY2tfdCB0ID0gY2xvY2soKTsKCWZwKCBwYXJhbSApOwoJdCA9IGNsb2NrKCkgLSB0OwoJZG91YmxlIHggPSAoKGRvdWJsZSl0KSAvIENMT0NLU19QRVJfU0VDOwoJc3RkOjpjb3V0IDw8IGxhYmVsIDw8ICIgdGltZTogIiA8PCB4IDw8ICIgc2VjID0+ICIgPDwgMS94IDw8ICIgR2Ivc2VjXG4iOwp9OwoKaW50IG1haW4oKSAKewoJYnVmX3R5cGUgKmJ1ZiA9IG5ldyBidWZfdHlwZVsgYnVmX3NpemUgXTsKCXRlc3QoIHRlc3Q0d3JpdGUsICJpbml0IHdyaXRlIiwgYnVmICk7Cgl0ZXN0KCB0ZXN0NHdyaXRlLCAid3JpdGUiLCBidWYgKTsKCXRlc3QoIHRlc3Q0cmVhZCwgInJlYWQiLCBidWYgKTsKCXRlc3QoIHRlc3Q0d3JpdGUsICJ3cml0ZSIsIGJ1ZiApOwoJdGVzdCggdGVzdDRyZWFkLCAicmVhZCIsIGJ1ZiApOwoJdGVzdCggdGVzdDR3cml0ZSwgIndyaXRlIiwgYnVmICk7Cgl0ZXN0KCB0ZXN0NHJlYWQsICJyZWFkIiwgYnVmICk7CglkZWxldGVbXSBidWY7CglyZXR1cm4gMDsKfTs=