LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
CacheTask.m
1classdef CacheTask < Task
2 % A software server in a LayeredNetwork.
3 %
4 % Supports multi-level cache hierarchies with configurable capacities
5 % per level (e.g., L1, L2, L3 caches).
6 %
7 % Copyright (c) 2012-2026, Imperial College London
8 % All rights reserved.
9
10 properties
11
12 items;
13 itemLevelCap; % Scalar or array for multi-level cache capacities
14 replacestrategy;
15
16 end
17
18 methods
19 %public methods, including constructor
20
21 %constructor
22 function self = CacheTask(model, name, nitems, itemLevelCap, replStrat, multiplicity, scheduling)
23 %self = CacheTask(model, name, nitems, itemLevelCap, replStrat, multiplicity, scheduling)
24 %
25 % itemLevelCap can be:
26 % - Scalar: Single-level cache with given capacity
27 % - Vector: Multi-level cache with capacity per level
28
29 if ~exist('name','var')
30 line_error(mfilename,'Constructor requires to specify at least a name.');
31 end
32
33 if nargin < 6
34 multiplicity = 1;
35 end
36
37 if nargin < 7
38 scheduling = SchedStrategy.FCFS;
39 end
40 self@Task(model, name, multiplicity, scheduling);
41
42 self.items = nitems;
43
44 % Validate and store itemLevelCap (scalar or array)
45 if isscalar(itemLevelCap)
46 self.itemLevelCap = itemLevelCap;
47 elseif isvector(itemLevelCap)
48 self.itemLevelCap = itemLevelCap(:)'; % Ensure row vector
49 else
50 line_error(mfilename, 'itemLevelCap must be scalar or vector');
51 end
52
53 self.replacestrategy = replStrat;
54 end
55
56 % Get item level capacity
57 function cap = getItemLevelCap(self, level)
58 % CAP = GETITEMLEVELCAP(SELF, LEVEL)
59 %
60 % Get capacity for a specific cache level or all levels.
61 %
62 % Args:
63 % level: (optional) Cache level index (1-based)
64 %
65 % Returns:
66 % cap: Capacity value(s) - scalar if level specified, array otherwise
67
68 if nargin == 1
69 % Return all levels
70 cap = self.itemLevelCap;
71 else
72 % Return specific level
73 if isscalar(self.itemLevelCap)
74 % Single-level cache
75 if level ~= 1
76 line_error(mfilename, 'Single-level cache only has level 1');
77 end
78 cap = self.itemLevelCap;
79 else
80 % Multi-level cache
81 if level < 1 || level > length(self.itemLevelCap)
82 line_error(mfilename, sprintf('Level %d out of range [1, %d]', level, length(self.itemLevelCap)));
83 end
84 cap = self.itemLevelCap(level);
85 end
86 end
87 end
88
89 % Get total capacity across all levels
90 function total = getTotalCapacity(self)
91 % TOTAL = GETTOTALCAPACITY(SELF)
92 %
93 % Get the sum of capacities across all cache levels.
94 %
95 % Returns:
96 % total: Sum of all level capacities
97
98 total = sum(self.itemLevelCap);
99 end
100
101 % Set item level capacity
102 function setItemLevelCap(self, caps)
103 % SETITEMLEVELCAP(SELF, CAPS)
104 %
105 % Set cache level capacities.
106 %
107 % Args:
108 % caps: Scalar for single-level or vector for multi-level
109
110 if isscalar(caps)
111 self.itemLevelCap = caps;
112 elseif isvector(caps)
113 self.itemLevelCap = caps(:)'; % Ensure row vector
114 else
115 line_error(mfilename, 'caps must be scalar or vector');
116 end
117 end
118
119 % Get number of cache levels
120 function n = getNumberOfLevels(self)
121 % N = GETNUMBEROFLEVELS(SELF)
122 %
123 % Get the number of cache levels.
124 %
125 % Returns:
126 % n: Number of levels (1 for single-level, >1 for multi-level)
127
128 if isscalar(self.itemLevelCap)
129 n = 1;
130 else
131 n = length(self.itemLevelCap);
132 end
133 end
134 end
135end