LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
getEnsembleAvg.m
1function [QN,UN,RN,TN,AN,WN] = getEnsembleAvg(self)
2% [QN,UN,RN,TN,AN,WN] = GETENSEMBLEAVG(SELF)
3
4
5iterate(self); % run iterations
6QN = nan(self.lqn.nidx,1);
7UN = nan(self.lqn.nidx,1);
8RN = nan(self.lqn.nidx,1);
9TN = nan(self.lqn.nidx,1);
10PN = nan(self.lqn.nidx,1); % utilization will be first stored here
11SN = nan(self.lqn.nidx,1); % response time will be first stored here
12WN = nan(self.lqn.nidx,1); % residence time
13AN = nan(self.lqn.nidx,1); % not available yet
14E = self.nlayers;
15for e=1:E
16 clientIdx = self.ensemble{e}.attribute.clientIdx;
17 serverIdx = self.ensemble{e}.attribute.serverIdx;
18 sourceIdx = self.ensemble{e}.attribute.sourceIdx;
19 % determine processor metrics
20 if self.ensemble{e}.stations{serverIdx}.attribute.ishost
21 hidx = self.ensemble{e}.stations{serverIdx}.attribute.idx;
22 TN(hidx) = 0;
23 PN(hidx) = 0;
24 for c=1:self.ensemble{e}.getNumberOfClasses
25 if self.ensemble{e}.classes{c}.completes
26 t = 0;
27 u = 0;
28 if ~isnan(clientIdx)
29 t = max(t, self.results{end,e}.TN(clientIdx,c));
30 end
31 if ~isnan(sourceIdx)
32 t = max(t, self.results{end,e}.TN(sourceIdx,c));
33 end
34 TN(hidx) = TN(hidx) + max(t,self.results{end,e}.TN(serverIdx,c));
35 end
36 type = self.ensemble{e}.classes{c}.attribute(1);
37 switch type
38 case LayeredNetworkElement.ACTIVITY
39 aidx = self.ensemble{e}.classes{c}.attribute(2);
40 tidx = self.lqn.parent(aidx);
41 if isnan(PN(aidx)), PN(aidx)=0; end
42 if isnan(PN(tidx)), PN(tidx)=0; end
43 PN(aidx) = PN(aidx) + self.results{end,e}.UN(serverIdx,c);
44 PN(tidx) = PN(tidx) + self.results{end,e}.UN(serverIdx,c);
45 PN(hidx) = PN(hidx) + self.results{end,e}.UN(serverIdx,c);
46 end
47 end
48 TN(hidx) = NaN; % added for consistency with LQNS
49 end
50
51 % determine remaining metrics
52 for c=1:self.ensemble{e}.getNumberOfClasses
53 type = self.ensemble{e}.classes{c}.attribute(1);
54 switch type
55 case LayeredNetworkElement.TASK
56 tidx = self.ensemble{e}.classes{c}.attribute(2);
57 if self.ensemble{e}.stations{serverIdx}.attribute.ishost
58 if isnan(TN(tidx))
59 % store the result in the processor
60 % model
61 TN(tidx) = self.results{end,e}.TN(clientIdx,c);
62 end
63 else
64 % nop
65 end
66 case LayeredNetworkElement.ENTRY
67 eidx = self.ensemble{e}.classes{c}.attribute(2);
68 tidx = self.lqn.parent(eidx);
69 SN(eidx) = self.servt(eidx);
70 if self.ensemble{e}.stations{serverIdx}.attribute.ishost
71 if isnan(TN(eidx))
72 % store the result in the processor model
73 if isnan(TN(eidx)), TN(eidx)=0; end
74 TN(eidx) = self.results{end,e}.TN(clientIdx,c);
75 end
76 else
77 % nop
78 end
79 case LayeredNetworkElement.CALL
80 cidx = self.ensemble{e}.classes{c}.attribute(2);
81 aidx = self.lqn.callpair(cidx,1);
82 SN(aidx) = SN(aidx) + self.results{end,e}.RN(serverIdx,c) * self.lqn.callproc{cidx}.getMean();
83 if isnan(QN(aidx)), QN(aidx)=0; end
84 QN(aidx) = QN(aidx) + self.results{end,e}.QN(serverIdx,c);
85 case LayeredNetworkElement.ACTIVITY
86 aidx = self.ensemble{e}.classes{c}.attribute(2);
87 tidx = self.lqn.parent(aidx);
88 QN(tidx) = QN(tidx) + self.results{end,e}.QN(serverIdx,c);
89 if isnan(TN(aidx)), TN(aidx)=0; end
90 if isnan(QN(aidx)), QN(aidx)=0; end
91 switch self.ensemble{e}.classes{c}.type
92 case JobClassType.CLOSED
93 TN(aidx) = TN(aidx) + self.results{end,e}.TN(serverIdx,c);
94 case JobClassType.OPEN
95 TN(aidx) = TN(aidx) + self.results{end,e}.TN(sourceIdx,c);
96 end
97 % SN(aidx) = self.servt(aidx);
98 if isnan(SN(aidx)), SN(aidx)=0; end
99 SN(aidx) = SN(aidx) + self.results{end,e}.RN(serverIdx,c);
100 if isnan(RN(aidx)), RN(aidx)=0; end
101 RN(aidx) = RN(aidx) + self.results{end,e}.RN(serverIdx,c);
102 if isnan(WN(aidx)), WN(aidx)=0; end
103 if isnan(WN(tidx)), WN(tidx)=0; end
104 WN(aidx) = WN(aidx) + self.results{end,e}.WN(serverIdx,c);
105 WN(tidx) = WN(tidx) + self.results{end,e}.WN(serverIdx,c);
106 if isnan(QN(aidx)), QN(aidx)=0; end
107 QN(aidx) = QN(aidx) + self.results{end,e}.QN(serverIdx,c);
108 end
109 end
110end
111
112for e=1:self.lqn.nentries
113 eidx = self.lqn.eshift + e;
114 tidx = self.lqn.parent(eidx);
115 if isnan(UN(tidx)), UN(tidx)=0; end
116 UN(eidx) = TN(eidx)*SN(eidx);
117 for aidx=self.lqn.actsof{tidx}
118 UN(aidx) = TN(aidx)*SN(aidx);
119 end
120 UN(tidx) = UN(tidx) + UN(eidx);
121end
122
123for idx=find(self.ignore)
124 QN(idx)=0;
125 UN(idx)=0;
126 RN(idx)=0;
127 TN(idx)=0;
128 PN(idx)=0;
129 SN(idx)=0;
130 WN(idx)=0;
131 AN(idx)=0;
132end
133
134QN = UN;
135UN = PN;
136RN = SN;
137end