Matlab程序优化:任务分配与执行时间分析
Matlab程序优化:任务分配与执行时间分析
本文分析了一段Matlab程序,该程序旨在计算不同任务数量下,任务分配策略对执行时间的影响。程序通过生成随机任务大小,并根据任务大小进行排序,模拟了任务分配的过程。
原始代码:
f0=1000000000;
f1=5000000000;
C=2000000;
z=0;
Q=[5 10 15 20 25];%任务数作为自变量,确定随机数的生成个数
for s=1:5
nums=randi([10000 50000],1,Q(s));%随机数的生成,任务输入大小dn
sorted_nums=sort(nums);%从小到大排序
for i=1:Q(s)
T0=0;
T1=0;
for m=1:i
c(m)=1000*sorted_nums(m);
T0=T0+c(m)/f0;
end
for n=i+1:Q(s)
c(n)=1000*sorted_nums(n);
d(n)=sorted_nums(n);
T1=T1+d(n)/C+c(n)/f1;
end
if T0>=T1
k=i;
break;
end
end
end
plot(Q,max(T0,T1));
问题分析:
-
变量初始化: 在循环中,变量
T0和T1每次迭代都需要重新初始化,否则会造成结果累加错误。同理,变量c和d也需要在循环外进行初始化,避免数组越界。 -
语法错误:
plot(Q,max(T0,T1))语法错误,max()函数应该接受一个数组作为参数,可以使用max([T0,T1])。 -
逻辑问题: 变量
k赋值后没有被使用,代码逻辑可能存在问题。 -
累加操作: 循环中缺少对不同任务数量下
T0和T1的累加操作,导致最终结果无法反映真实情况。
优化建议:
-
在循环外初始化变量
T0、T1、c和d。 -
将
plot(Q,max(T0,T1))修改为plot(Q,max([T0,T1]))。 -
检查变量
k的使用逻辑,确认是否需要保留或修改。 -
在循环中添加对
T0和T1的累加操作,记录每个任务数量下的执行时间。
优化后的代码:
f0=1e9;
f1=5e9;
C=2e6;
Q=[5 10 15 20 25];
T_record = zeros(size(Q)); % 初始化执行时间记录数组
for s = 1:length(Q)
nums = randi([1e4 5e4], 1, Q(s));
sorted_nums = sort(nums);
T0 = 0;
T1 = 0;
c = zeros(1, Q(s)); % 初始化 c 数组
d = zeros(1, Q(s)); % 初始化 d 数组
for i = 1:Q(s)
c(1:i) = 1000 * sorted_nums(1:i);
T0 = sum(c(1:i) / f0); % 使用sum函数计算总和
d(i+1:end) = sorted_nums(i+1:end);
c(i+1:end) = 1000 * sorted_nums(i+1:end);
T1 = sum(d(i+1:end) / C) + sum(c(i+1:end) / f1); % 使用sum函数计算总和
if T0 >= T1
break;
end
end
T_record(s) = max([T0, T1]); % 记录每个任务数量下的最大执行时间
end
plot(Q, T_record); % 绘制任务数量与执行时间的关系图
xlabel('任务数量');
ylabel('执行时间');
title('任务数量与执行时间的关系');
总结:
通过以上优化,程序解决了原始代码中的语法错误、逻辑问题和效率问题,提高了代码的可读性和可维护性,并能更准确地模拟任务分配与执行时间的关系。
原文地址: https://www.cveoy.top/t/topic/jkul 著作权归作者所有。请勿转载和采集!