1function [exportClasses, cacheClasses] = getExportableClasses(self)
2% [EXPORTCLASSES, CACHECLASSES] = GETEXPORTABLECLASSES()
4% Returns a logical array indicating which
classes should be exported to JMT.
5% Classes with 0 customers are normally skipped unless they are used as
6% cache hit/miss
classes (since jobs will
switch into them).
9% exportClasses - logical array,
true for classes to
export
10% cacheClasses - array of
class indices used as cache hit/miss
classes
12% Copyright (c) 2012-2026, Imperial College London
16numOfClasses = sn.nclasses;
20for i = 1:length(sn.nodeparam)
21 if ~isempty(sn.nodeparam{i}) && isfield(sn.nodeparam{i},
'hitclass')
22 cacheClasses = [cacheClasses, sn.nodeparam{i}.hitclass(sn.nodeparam{i}.hitclass > 0)];
24 if ~isempty(sn.nodeparam{i}) && isfield(sn.nodeparam{i},
'missclass')
25 cacheClasses = [cacheClasses, sn.nodeparam{i}.missclass(sn.nodeparam{i}.missclass > 0)];
28cacheClasses = unique(cacheClasses);
30% Build set of
classes that can receive jobs via
class-switching
31% A
class can receive jobs if it's in the same chain as another class with jobs
32classSwitchClasses = [];
34 classesInChain = find(sn.chains(c,:) > 0);
35 if length(classesInChain) > 1
36 % Check
if any
class in this chain has jobs
38 for r = classesInChain
45 % All
classes in
this chain can receive jobs via
class-switching
46 classSwitchClasses = [classSwitchClasses, classesInChain];
50classSwitchClasses = unique(classSwitchClasses);
52% Determine which
classes to
export
53exportClasses =
true(1, numOfClasses);
55 % Skip closed
classes with 0 customers unless they are cache
classes
56 % or can receive jobs via
class-switching
57 if isfinite(sn.njobs(r)) && sn.njobs(r) == 0 && ...
58 ~ismember(r, cacheClasses) && ~ismember(r, classSwitchClasses)
59 exportClasses(r) =
false;