#include <iostream>
#include <vector>
#include <chrono>
#include <unistd.h>
#define ARRAY_SIZE (1024 * 1024 * 512)
#define STRIDE 64
void memory_read_test(std::vector<int> &array) {
volatile int sum = 0;
auto start = std::chrono::high_resolution_clock::now();
while (true) {
for (size_t i = 0; i < array.size(); i += STRIDE) {
sum += array[i];
}
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = end - start;
double readCnt = (array.size() * sizeof(int)) / (elapsed.count() * 1024 * 1024 * 1024);
std::cout << "Data throughput: " << readCnt << " GB/s" << std::endl;
start = end;
}
}
int main() {
std::vector<int> memory_array(ARRAY_SIZE, 1);
memory_read_test(memory_array);
return 0;
}