CacheSim/main.cpp

52 lines
1.4 KiB
C++

#include <iostream>
#include <math.h>
#include "simulator.h"
int main(){
std::string temp;
int machineBits, cacheSize, waySize, blockSize;
short setSize;
short offsetSize, tagSize, indexSize;
std::cin >> temp >> temp >> machineBits;
std::cin >> temp >> temp >> cacheSize;
std::cin >> temp >> waySize;
std::cin >> temp >> temp >> blockSize;
setSize = cacheSize * 1024 / blockSize / waySize;
std::cout << setSize << " sets" << std::endl << std::endl;
offsetSize = log2(blockSize);
indexSize = log2(setSize);
tagSize = machineBits - offsetSize - indexSize;
std::cout << "offset: " << offsetSize << std::endl;
std::cout << "index : " << indexSize << std::endl;
std::cout << "tag : " << tagSize << std::endl;
CacheSim::Simulator sim(machineBits, setSize, waySize, tagSize);
std::string action, address;
bool status;
std::vector<std::pair<std::string, bool>> result;
while(std::cin >> action >> address){
std::cout << "action: "<< action << " address: " << address << std::endl;
status = sim.read(address);
result.push_back(std::make_pair(address, status));
std::cout << std::endl << std::endl;
}
int allCount = 0, hitCount = 0;
for(int i=0; i<result.size(); i++){
std::cout << result[i].first << "... ";
allCount++;
if(result[i].second){
hitCount++;
std::cout << "HIT" << std::endl;
}else{
std::cout << "MISS" << std::endl;
}
}
std::cout << "Hit rate: " << (double)hitCount/allCount*100 << "%" << std::endl;
}