53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
|
#include <iostream>
|
||
|
#include <sys/time.h>
|
||
|
#include <random>
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
const int SIZE = 256 * 1024 * 1024;
|
||
|
const int pagenum = 16 * 1024;
|
||
|
const int pagesize = SIZE / pagenum;
|
||
|
|
||
|
void xorsum_seq(int *data)
|
||
|
{
|
||
|
int xorsum = 0;
|
||
|
timeval start, end;
|
||
|
gettimeofday(&start, nullptr);
|
||
|
for (int page = 0; page < pagenum; page++)
|
||
|
{
|
||
|
for (int idx = 0; idx < pagesize; idx++)
|
||
|
xorsum ^= data[page * pagesize + idx];
|
||
|
}
|
||
|
|
||
|
gettimeofday(&end, nullptr);
|
||
|
double usec = (end.tv_sec - start.tv_sec) + (double)(end.tv_usec - start.tv_usec) / 1000000;
|
||
|
cout << __func__ << " duration: " << usec << ", xorsum: " << xorsum << endl;
|
||
|
}
|
||
|
|
||
|
void xorsum_jmp(int *data)
|
||
|
{
|
||
|
int xorsum = 0;
|
||
|
timeval start, end;
|
||
|
gettimeofday(&start, nullptr);
|
||
|
for (int idx = 0; idx < pagesize; idx++)
|
||
|
{
|
||
|
for (int page = 0; page < pagenum; page++)
|
||
|
xorsum ^= data[page * pagesize + idx];
|
||
|
}
|
||
|
gettimeofday(&end, nullptr);
|
||
|
double usec = (end.tv_sec - start.tv_sec) + (double)(end.tv_usec - start.tv_usec) / 1000000;
|
||
|
cout << __func__ << " duration: " << usec << ", xorsum: " << xorsum << endl;
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
int *data = new int[SIZE];
|
||
|
int xorsum = 0;
|
||
|
srand(time(nullptr));
|
||
|
for (int idx = 0; idx < SIZE; idx++)
|
||
|
{
|
||
|
data[idx] = rand();
|
||
|
}
|
||
|
xorsum_seq(data);
|
||
|
xorsum_jmp(data);
|
||
|
}
|