-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathP1_infocom_network.m
57 lines (45 loc) · 2.64 KB
/
P1_infocom_network.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function [preCache,preTaskComputationSpeed,preFinishTime] = P1_infocom_network(Tasknum,userNum,Servernum,ServerMemory,TaskMemory,Possionrate,Taskgraph,Transferrate,Transferrate_network,Computespeed_Local,ComputeSpeed_server)
%与Copy_of_P1_infocom相比,多了输入参数Transferrate_network,并且调用P2_infocom_network
%外层函数P1,决定缓存策略Cache,作为P2的输入调用P2
%每次随机改变一个server的缓存策略,注意判断改变之后是否满足每种类型任务最多被缓存一次,以及服务器的内存大小是否超出限制
%preCache缓存决策,preTaskComputationSpeed边缘服务器分配给各任务的计算速率,preFinishTime平均每个DAG的完成时间加权平均
%
%P1的结束条件是什么?暂时是迭代100次
%ServerMemory(i)表示第i个边缘服务器的内存大小
%TaskMemory(i)表示缓存第i种类型任务所需的内存大小 1*Tasknum
%合成的DAG中每种类型子任务最终的泊松到达参数和
Possionrate_sum = zeros(1,Tasknum);
for j=1:userNum
for i=1:Tasknum
if Taskgraph(i,i,j) ~= 0
Possionrate_sum(i) = Possionrate_sum(i) + Possionrate(j);
end
end
end
preCache = zeros(Tasknum,Servernum);%Tasknum*Servernum的矩阵,Cache(i,j)==1/0表示server j缓存/没缓存任务i
%hasCached = zeros(1,Tasknum);%hasCached(i) =1表示任务i已经被缓存了
%初始所有边缘服务都不缓存任何任务,Cache中所有元素都为0
%调用P2,得到现在的最终延迟
[preTaskComputationSpeed,preFinishTime] = P2_infocom_network(Tasknum,userNum,Servernum,preCache,Possionrate,Possionrate_sum,Taskgraph,Transferrate,Transferrate_network,Computespeed_Local,ComputeSpeed_server);
w = 5;%这个参数暂时设置为0.1,会影响到缓存策略是否改变
Iterationnum = 500;%这里暂时以迭代100次作为结束条件。结束条件是否应该是每次得到的时间波动很小?
for iteration =1:Iterationnum
changeIndex = randi(Servernum,1,1);%随机选中一个服务器
%随机更新这个服务器上的缓存策略
hasCached = HasCacheTasks(changeIndex,preCache,Tasknum,Servernum);%其他服务器上已经缓存任务情况
newCache = preCache;
newCache(:,changeIndex) = RandomCachePolicy(changeIndex,hasCached,ServerMemory,TaskMemory,Tasknum);
%把新缓存策略带入P2,得到新的延迟结果
[curTaskComputationSpeed,curFinishTime] = P2_infocom_network(Tasknum,userNum,Servernum,newCache,Possionrate,Possionrate_sum,Taskgraph,Transferrate,Transferrate_network,Computespeed_Local,ComputeSpeed_server);
%根据新旧缓存策略得到的延迟结果,判断要不要更新缓存策略
probaility = 1/(1 + exp((curFinishTime-preFinishTime)/w));
temp = [0,1];%以probaility的概率取到0,表示更新缓存决策,以1-probaility概率取到1表示不更新
prob = [probaility,1-probaility];
update = randsrc(1,1,[temp;prob]);
if(update == 0)
preTaskComputationSpeed = curTaskComputationSpeed;
preFinishTime = curFinishTime;
preCache = newCache;
end
end
end