#include <cstring>
#include <ctime>
#include <iostream>
#include <vector>
struct Frame
{
Frame()
: start(std::clock())
{
}
~Frame()
{
clocks += std::clock() - start;
++frames;
}
static double GetTime()
{
if (!frames)
return 0;
return clocks * 1000.0 / CLOCKS_PER_SEC / frames;
}
std::clock_t start;
static std::clock_t clocks;
static std::uint64_t frames;
};
std::clock_t Frame::clocks;
std::uint64_t Frame::frames;
#define FRAME_START() { Frame __frame;
#define FRAME_STOP() }
int main()
{
const int size = 1024*1024;
std::vector<int> a(size), b(size);
for (int k = 0; k < 1000; ++k) {
FRAME_START()
int *pa = a.data();
int *pb = b.data();
for (int i = 0; i < 1024; ++i) {
#if 1
std::memcpy(pa, pb, 1024 * 4);
pa += 1024;
pb += 1024;
#else
for (int j = 0; j < 1024; ++j)
*pa++ = *pb++;
#endif
}
FRAME_STOP()
}
std::cout << "Frame time: "<< Frame::GetTime() << "\n";
}
I2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxjdGltZT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IEZyYW1lCnsKCUZyYW1lKCkKCQk6IHN0YXJ0KHN0ZDo6Y2xvY2soKSkKCXsKCX0KCQoJfkZyYW1lKCkKCXsKCQljbG9ja3MgKz0gc3RkOjpjbG9jaygpIC0gc3RhcnQ7CgkJKytmcmFtZXM7Cgl9CgkKCXN0YXRpYyBkb3VibGUgR2V0VGltZSgpCgl7CgkJaWYgKCFmcmFtZXMpCgkJCXJldHVybiAwOwoJCQoJCXJldHVybiBjbG9ja3MgKiAxMDAwLjAgLyBDTE9DS1NfUEVSX1NFQyAvIGZyYW1lczsKCX0KCQoJc3RkOjpjbG9ja190IHN0YXJ0OwoJc3RhdGljIHN0ZDo6Y2xvY2tfdCBjbG9ja3M7CglzdGF0aWMgc3RkOjp1aW50NjRfdCBmcmFtZXM7Cn07CgpzdGQ6OmNsb2NrX3QgRnJhbWU6OmNsb2NrczsKc3RkOjp1aW50NjRfdCBGcmFtZTo6ZnJhbWVzOwoKI2RlZmluZSBGUkFNRV9TVEFSVCgpIHsgRnJhbWUgX19mcmFtZTsKI2RlZmluZSBGUkFNRV9TVE9QKCkgfQoKaW50IG1haW4oKQp7Cgljb25zdCBpbnQgc2l6ZSA9IDEwMjQqMTAyNDsKCXN0ZDo6dmVjdG9yPGludD4gYShzaXplKSwgYihzaXplKTsKCQoJZm9yIChpbnQgayA9IDA7IGsgPCAxMDAwOyArK2spIHsKCQlGUkFNRV9TVEFSVCgpCgkJaW50ICpwYSA9IGEuZGF0YSgpOwoJCWludCAqcGIgPSBiLmRhdGEoKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IDEwMjQ7ICsraSkgewojaWYgMQoJCQlzdGQ6Om1lbWNweShwYSwgcGIsIDEwMjQgKiA0KTsKCQkJcGEgKz0gMTAyNDsKCQkJcGIgKz0gMTAyNDsKI2Vsc2UKCQkJZm9yIChpbnQgaiA9IDA7IGogPCAxMDI0OyArK2opCgkJCQkqcGErKyA9ICpwYisrOwojZW5kaWYKCQl9CgkJRlJBTUVfU1RPUCgpCgl9CgkKCXN0ZDo6Y291dCA8PCAiRnJhbWUgdGltZTogIjw8IEZyYW1lOjpHZXRUaW1lKCkgPDwgIlxuIjsKfQ==