#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define COUNT1 262144 // 2^18
#define COUNT2 262145 // 2^18 + 1
#define COUNT3 262154 // 2^18 + 10
#define REPEATS 10000
void benchmark_copy(const int *src, int *dst, size_t count, const char *label) {
size_t size_bytes = count * sizeof(int);
for (int i = 0; i < REPEATS; ++i) {
}
double total_sec = (double)(end - start) / CLOCKS_PER_SEC;
printf("%s: Copied %zu bytes (%zu ints) %d times\n", label
, size_bytes
, count
, REPEATS
); printf("%s: Total time: %.6f sec\n", label
, total_sec
);
// Prevent optimizing away some stuff
}
int main(void) {
static int src[COUNT3], dst[COUNT3];
for (size_t i = 0; i < COUNT3; ++i) src[i] = (int)i;
// Do all benchmarks twice just in case
benchmark_copy(src, dst, COUNT1, "COUNT1 (2^18)");
benchmark_copy(src, dst, COUNT1, "COUNT1 (2^18)");
benchmark_copy(src, dst, COUNT2, "COUNT2 (2^18 + 1)");
benchmark_copy(src, dst, COUNT2, "COUNT2 (2^18 + 1)");
benchmark_copy(src, dst, COUNT3, "COUNT3 (2^18 + 10)");
benchmark_copy(src, dst, COUNT3, "COUNT3 (2^18 + 10)");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dGltZS5oPgoKI2RlZmluZSBDT1VOVDEgMjYyMTQ0ICAgLy8gMl4xOAojZGVmaW5lIENPVU5UMiAyNjIxNDUgICAvLyAyXjE4ICsgMQojZGVmaW5lIENPVU5UMyAyNjIxNTQgICAvLyAyXjE4ICsgMTAKI2RlZmluZSBSRVBFQVRTIDEwMDAwCgp2b2lkIGJlbmNobWFya19jb3B5KGNvbnN0IGludCAqc3JjLCBpbnQgKmRzdCwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpsYWJlbCkgewogICAgc2l6ZV90IHNpemVfYnl0ZXMgPSBjb3VudCAqIHNpemVvZihpbnQpOwoKICAgIGNsb2NrX3Qgc3RhcnQgPSBjbG9jaygpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBSRVBFQVRTOyArK2kpIHsKICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHNpemVfYnl0ZXMpOwogICAgfQogICAgY2xvY2tfdCBlbmQgPSBjbG9jaygpOwoKICAgIGRvdWJsZSB0b3RhbF9zZWMgPSAoZG91YmxlKShlbmQgLSBzdGFydCkgLyBDTE9DS1NfUEVSX1NFQzsKICAgIHByaW50ZigiJXM6IENvcGllZCAlenUgYnl0ZXMgKCV6dSBpbnRzKSAlZCB0aW1lc1xuIiwgbGFiZWwsIHNpemVfYnl0ZXMsIGNvdW50LCBSRVBFQVRTKTsKICAgIHByaW50ZigiJXM6IFRvdGFsIHRpbWU6ICUuNmYgc2VjXG4iLCBsYWJlbCwgdG90YWxfc2VjKTsKCiAgICAvLyBQcmV2ZW50IG9wdGltaXppbmcgYXdheSBzb21lIHN0dWZmCiAgICBwcmludGYoIiVkIFxuIiwgZHN0WzE0XSk7Cn0KCmludCBtYWluKHZvaWQpIHsKICAgIHN0YXRpYyBpbnQgc3JjW0NPVU5UM10sIGRzdFtDT1VOVDNdOwoKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQ09VTlQzOyArK2kpIHNyY1tpXSA9IChpbnQpaTsKICAgIAogICAgLy8gRG8gYWxsIGJlbmNobWFya3MgdHdpY2UganVzdCBpbiBjYXNlCiAgICBiZW5jaG1hcmtfY29weShzcmMsIGRzdCwgQ09VTlQxLCAiQ09VTlQxICgyXjE4KSIpOwogICAgYmVuY2htYXJrX2NvcHkoc3JjLCBkc3QsIENPVU5UMSwgIkNPVU5UMSAoMl4xOCkiKTsKICAgIGJlbmNobWFya19jb3B5KHNyYywgZHN0LCBDT1VOVDIsICJDT1VOVDIgKDJeMTggKyAxKSIpOwogICAgYmVuY2htYXJrX2NvcHkoc3JjLCBkc3QsIENPVU5UMiwgIkNPVU5UMiAoMl4xOCArIDEpIik7CiAgICBiZW5jaG1hcmtfY29weShzcmMsIGRzdCwgQ09VTlQzLCAiQ09VTlQzICgyXjE4ICsgMTApIik7CiAgICBiZW5jaG1hcmtfY29weShzcmMsIGRzdCwgQ09VTlQzLCAiQ09VTlQzICgyXjE4ICsgMTApIik7CgogICAgcmV0dXJuIDA7Cn0=