-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathglobecomedgenetworks.m
127 lines (125 loc) · 4.55 KB
/
globecomedgenetworks.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
function [Scheduletotal] = globecomedgenetworks(Usernum,Servernum,Local,Taskgraph,Tasknum,Transdata,Computecost,Transferrate,Comstartup,Computenergy,Transmitpower,alfa,Size)
%GLOBECOMEDGENETWORKS 此处显示有关此函数的摘要
% 此处显示详细说明
Timeslot=0;
Nummax=max(Tasknum);
for k=1:Usernum
for i=1:Nummax
if i>Tasknum(1,k)
Taskgraph(i,i,k)=-3;
continue;
end
Taskgraph(i,i,k)=mean(Computecost(i,:,k));
end
end
N=0;
for k=1:Usernum
N=N+Tasknum(1,k);
end
Q=Servernum+Usernum;
for k=1:Usernum
for i=1:Nummax
for j=1:Nummax
if Taskgraph(i,j,k)==1 &&i~=j
Taskgraph(i,j,k)=mean(Comstartup(1:Servernum))+Comstartup(1,Servernum+k)+Transdata(i,j,k)/mean(Transferrate(1,:,k));%A(i,j)代表平均通讯时间
Taskgraph(j,i,k)=-Taskgraph(i,j,k);
elseif Taskgraph(i,j,k)==-2 &&i~=j
Taskgraph(i,j,k)=0;
Taskgraph(j,i,k)=-3;
end
end
end
end
Rank=zeros(1,Nummax,Usernum);
for k=1:Usernum
Rank(:,:,k)=Rankup(Taskgraph(:,:,k),Nummax);
end
Scheduletotal=zeros(2,N,Q)-1;%是否已调度,初始时均未调度 为全-1矩阵
schedulenum=0;
Rankbackup=Rank;
Startsearch=zeros(1,Usernum);
basesearch=0;
for t=1:Usernum
Startsearch(1,t)=basesearch;
basesearch=basesearch+Tasknum(1,t);
end
Scheduletemp=Scheduletotal;
Startsearch=zeros(1,Usernum);
basesearch=0;
for t=1:Usernum
Startsearch(1,t)=basesearch;
basesearch=basesearch+Tasknum(1,t);
end
while schedulenum<N
[Rankset,Actualnum]=Maxset(Rank,Tasknum,Usernum);
for index=1:Usernum
[user,temp]=Prioritymax(Taskgraph,Tasknum,Transdata,Transferrate,Rank,Rankset,Usernum,Servernum,alfa,Size,Computecost,Computenergy,Transmitpower,Local);
if user==-1
break;
end
Rank(1,temp,user)=-1;
Rankset(1,user)=-1;
schedule=zeros(2,N,Servernum+1);
schedule(:,:,1:Servernum)=Scheduletotal(:,:,1:Servernum);
schedule(:,:,Servernum+1)=Scheduletotal(:,:,Servernum+user);
for j=(Servernum+1):-1:1 %卸载到边缘服务器1上执行
%if i==1&&j~=Local
%continue; 不能绑定在某一个核上
% end
if (temp==1||temp==Tasknum(1,user))&&j~=Local(1,user)
continue;
end
m=j;
if j>Servernum
m=Servernum+user;
end
Finishtime=EFTcompute(Taskgraph(:,:,user),schedule,Scheduletemp(:,:,m),temp,j,Comstartup,Transdata(:,:,user),Transferrate(:,:,user),Computecost(:,:,user),N,Servernum+1,Tasknum(1,user),Startsearch(1,user),Timeslot);
if j==Local(1,user) || FirstFinish>Finishtime
FirstFinish=Finishtime;
processor=j;
tempcore=j;
end
end
schedule(2,temp+Startsearch(1,user),processor)=FirstFinish;
schedule(1,temp+Startsearch(1,user),processor)=FirstFinish-Computecost(temp,tempcore,user);
if processor==Local(1,user)
processor=Servernum+user;
end
if Scheduletemp(1,N,processor)==-1
Scheduletemp(1,N,processor)=FirstFinish-Computecost(temp,tempcore,user);
Scheduletemp(2,N,processor)=FirstFinish;
else
Start=1;
End=N;
k=floor((Start+End)/2);
while Start~=End
if Scheduletemp(2,k,processor)==-1
Start=k+1;
else
End=k;
end
k=floor((Start+End)/2);
end
for t=k:N
if Scheduletemp(2,t,processor)>FirstFinish
Scheduletemp(1,t-1,processor)=FirstFinish-Computecost(temp,tempcore);
Scheduletemp(2,t-1,processor)=FirstFinish;
t=N-1;
break;
else
Scheduletemp(1,t-1,processor)=Scheduletemp(1,t,processor);
Scheduletemp(2,t-1,processor)=Scheduletemp(2,t,processor);
end
end
if t==N
Scheduletemp(1,t,processor)=FirstFinish-Computecost(temp,tempcore);
Scheduletemp(2,t,processor)=FirstFinish;
end
end
Scheduletotal(:,:,1:Servernum)=schedule(:,:,1:Servernum);
Scheduletotal(:,:,Servernum+user)=schedule(:,:,Servernum+1);
%假设边缘服务器之间通过高速光纤连接,不考虑信道拥塞 这里还需要斟酌
end
schedulenum=schedulenum+Actualnum;
end
end