blob: df108de35dd4834277bb751acd205e050dd11bbc [file] [log] [blame]
#include "cache_size.h"
#include <stdlib.h>
#include <time.h>
// Analyzes a ranges of sizes to find the cache size based on timing
// information.
// The user should manually analyze the results and pinpoints the cache size where there
// is jump in average latency time (cache misses happened).
int CacheSizeAnalysis() {
static constexpr int64_t kMaxSize = 32 * 1024 * 1024;
static constexpr int64_t kMinSize = 1024;
static constexpr int kIterations = 20;
std::cout << "writing timing results..." << std::endl;
FILE* f = fopen("cache_size_results.csv", "w");
if (!f) return 1;
for (int i = 0; i < kIterations; ++i) {
// analyzes a range of memory sizes to find the maximum time needed to read
// each of their elements
for (int64_t size = kMinSize; size <= kMaxSize; size *= 1.5) {
fprintf(f, "%d, %lu\n", sz, FindMaxReadingTime(sz));
std::cout << ".";
std::flush(std::cout);
}
}
fclose(f);
return 0;
}
int main() {
int res = CacheSizeAnalysis();
if (res == 0) {
std::cout << "Cache size analysis succeeded" << std::endl;
} else {
std::cout << "Cache size analysis failed" << std::endl;
}
return 0;
}