#include #include #include 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); }