diff options
| author | ov-4 <hausemasterstream@gmail.com> | 2026-05-24 14:38:09 +0000 |
|---|---|---|
| committer | ov-4 <hausemasterstream@gmail.com> | 2026-05-24 14:38:09 +0000 |
| commit | e4540230ef3f6466b40cb44d679ba3c640c88c54 (patch) | |
| tree | 776305f1e5bbbb272446056739f3f5040b647550 /cachelab-handout | |
| parent | 21c76a8ece5a7652d760c6f3d74c0dab2c55e0bd (diff) | |
added some comments to part A
Diffstat (limited to 'cachelab-handout')
| -rw-r--r-- | cachelab-handout/csim.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/cachelab-handout/csim.cc b/cachelab-handout/csim.cc index ff0be4b..3d65edd 100644 --- a/cachelab-handout/csim.cc +++ b/cachelab-handout/csim.cc @@ -32,7 +32,7 @@ public: vector<vector<ov4Cache>> cache; -void findFreeSlot(const size_t Tag, const size_t Set) // evaCnt +void findFreeSlot(const size_t Tag, const size_t Set) // update evaCnt { // if we can find free slot! auto findFree = find_if(cache[Set].begin(), cache[Set].end(), @@ -43,7 +43,7 @@ void findFreeSlot(const size_t Tag, const size_t Set) // evaCnt if (findFree != cache[Set].end()) { findFree->valid = true; - findFree->time = timeCnt; + findFree->time = timeCnt; // very important to update time findFree->tag = Tag; return; } @@ -60,13 +60,14 @@ void findFreeSlot(const size_t Tag, const size_t Set) // evaCnt findOld->tag = Tag; } -void solve(const size_t addr) // hitCnt, missCnt +void solve(const size_t addr) // update hitCnt, missCnt { timeCnt++; size_t Tag, Set; Tag = addr >> (s+b); Set = ((addr << (64-s-b)) >> (64-s-b))>>b; + // determine hit/miss auto res = find_if(cache[Set].begin(), cache[Set].end(), [&](const ov4Cache &c) { @@ -75,7 +76,7 @@ void solve(const size_t addr) // hitCnt, missCnt if (res != cache[Set].end()) { hitCnt++; - res->time = timeCnt; + res->time = timeCnt; // update the time, because we use it again return; } @@ -123,6 +124,9 @@ int main(int argc, char *argv[]) return -1; } + // handle every line + // NB. `L` `S` are acutally same operations in terms of counting + // for `M`, it can be treated as `L` followed by `S`, and subsequently twice `solve()` string line; while (getline(file, line)) { |
