ffd演算法
㈠ 加拿大pc演算法教程
1.三級流水線:其實對於PC = PC +8這個問題很簡單,這兩個PC其實代表著不同的意義,第一個PC是對於CPU而言,而第二個PC而言是我們通過編譯器看到的PC(PC指向程序正在運行的那一條指令),但是對於CPU的PC是永遠指向取指那個步,故PC = PC +8。
2.五級流水線; ARM9流水線包括取指(fetch)、解碼(decode)、執行(excute)、緩沖/數據(buffer/data)、回寫(write-back)寄存器堆。ARM9流水線在解碼階段已經開始讀取操作數寄存器,因此解碼階段的PC值和取指階段的PC值關系為:PC(decode)=PC(fetch)+4。因此執行階段的PC值和解碼階段的PC值關系為:PC(excute)=PC(decode)+4。
3.對於軟中斷函數的返回時的PC:如下
ARM Thumb
SWI PC-8 PC-4
xxx 》 PC -4 PC-2 (異常返回將執行這條指令)
yyy PC PC
因此返回指令為: MOV PC , LR
原因:異常是由指令本身引起的,因此內核在計算LR時的PC值並沒有被更新。對於ARM狀態,因為SWI指令表示將跳到異常處理函數,此時SWI這條指令的PC = PC -8,當進入異常處理函數之前,硬體會自動把PC-4保存到LR寄存器中,所以異常處理函數結束後直接MOV PC, LR就行,就會跳到xxx這一條指令去執行。對於Thumb狀態同理。
4.對於IRQ和FIQ中斷函數返回時的PC:
ARM Thumb
xxx PC-12 PC-6 (程序在運行這條代碼時就產生了中斷信號)
yyy 》 PC-8 PC-4 (異常返回將執行這條指令)
zzz PC-4 PC-2
www PC PC
返回指令為: SUBS PC, LR, #4
原因:異常在當前指令執行完成後才會被響應,因此內核在計算LR時的PC值已被更新。對於ARM狀態,程序在執行xxx這條指令時,中斷信號產生,但是由於中斷必須在這一條指令執行完之後才會被響應,執行完後,則此時對於CPU的PC已經指向了www這條指令的取指,在中斷函數函數時應該執行yyy這條指令,雖然硬體會把PC-4的值賦值給LR寄存器,但是這是指向zzz這條指令的,所以返回時應該SUBS PC, LR, #4。對於Thumb狀態同理。
㈡ 急需一個裝箱演算法的MATLAB程序!謝謝啦~願出高分!
%裝箱問題FFD演算法實現
%物品的體積
W = [0.125,0.268,0.159,0.168,0.126,0.168,0.249,0.536,0.427,0.179,0.182,0.149,0.156,0.152,0.135,0.161,0.191,0.183,0.174,0.198];
%箱子的編號
V = 1:1:20;
%箱子的體積
U = [1.4,1.3,1.0,1.1];
%箱子的狀態
state = zeros(20,4);
%第一步:將物品體積按照從大到小排序
for i = 1:length(W) - 1
for j = i + 1 :length(W)
if W(i) < W(j)
temp = W(i);
temp_v = V(i);
W(i) = W(j);
V(i) = V(j);
W(j) = temp;
V(j) = temp_v;
end
end
end
%第二步:每次將體積最大的物品放到剩餘體積最小的箱子中
for i = 1:length(W)
%找到剩餘體積最大的箱子
max = 0;%保存剩餘體積最大的體積
max_k = 0;%保存最大體積的箱子的編號
for j = 1:length(U)
if max < U(j)
max = U(j);
max_k = j;
end
end
%將最大的物品放到剩餘體積最大的箱子
if W(i) < U(max_k) & state(V(i),max_k) == 0%如果物品的體積比剩餘的箱子的體積大
state(V(i),max_k) = 1;%狀態發生變化
U(max_k) = U(max_k) - W(i);%箱子的體積變化
else%如果物品的體積比箱子的體積小,則找到下一個剩餘體積最小的箱子
maxx = 0;
maxx_k = 0;
for j = 1:length(U)%找到下一個剩餘空間最小的箱子
if maxx < U(j) & U(j) > U(max_k)
maxx = U(j);
maxx_k = j;
end
end
%將物品放到這個箱子中
if W(i) < U(maxx_k) & state(V(i),maxx_k) == 0
state(V(i),maxx_k) =1;%狀態發生變化
U(maxx_k) = U(maxx_k) - W(i);%箱子的體積變化
else
continue;%否則的話繼續循環下一個物品
end
end
end