LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
CacheClassSwitcher.m
1classdef CacheClassSwitcher < StatefulClassSwitcher
2 % A class switcher section based on cache hits and misses
3 %
4 % Copyright (c) 2012-2026, Imperial College London
5 % All rights reserved.
6
7 properties
8 items;
9 cap;
10 levels;
11 hitClass;
12 missClass;
13 actualHitProb;
14 actualMissProb;
15 end
16
17 methods
18 function self = CacheClassSwitcher(classes, items, capacity, levels)
19 % SELF = CACHECLASSSWITCHER(CLASSES, ITEMS, CAPACITY, LEVELS)
20
21 if nargin<4 %~exist('levels','var')
22 levels = 1;
23 end
24 self@StatefulClassSwitcher(classes, 'Cache');
25 self.classes = classes;
26 self.items = items;
27 self.cap = capacity;
28 self.levels = levels;
29 self.csFun = @(r, s, state, statep) self.simpleHitMiss(r, s, state, statep); % do nothing by default
30 self.hitClass = sparse([]);
31 self.missClass = sparse([]);
32 self.actualHitProb = sparse([]); % this field is filled after model solution
33 self.actualMissProb = sparse([]); % this field is filled after model solution
34 end
35 end
36
37 methods
38 function prob = simpleHitMiss(self, r, s, state, statep)
39 % PROB = SIMPLEHITMISS(R, S, STATE, STATEP)
40
41 if nargin <= 3
42 state = []; %local server state
43 statep = []; %local server state
44 end
45 if isempty(state) % get csMask (B matrix)
46 if (r==s ... % hit and miss in the cache can depart in the same class
47 || ((r <= length(self.hitClass) && r <= length(self.missClass)) ... % since hitClass and missClass are sparse, check entry for r exists
48 && (s == self.hitClass(r) || s == self.missClass(r)))) ... % route out hit or miss classes
49 && (~isempty(find(r == self.hitClass)) || ~isempty(find(r == self.missClass))) % don't route out classes that are not hit or miss
50 prob = 1;
51 else
52 prob = 0;
53 end
54 else
55 % un-comment to restore class-switching in routing
56 % if sum(state) == sum(statep)+1 % hit
57 % if (r <= length(self.hitClass)) && s == self.hitClass(r)
58 % prob = 1;
59 % else
60 % prob = 0;
61 % end
62 % else % miss
63 % if (r <= length(self.missClass)) && s == self.missClass(r)
64 % prob = 1;
65 % else
66 % prob = 0;
67 % end
68 % end
69 end
70 end
71 end
72
73end