如何加快模拟包含多个循环吗?
2视图(30天)
显示旧的评论
我有一个脚本:
为(DBuck_On = 0.99: -0.09:0.01)
为(Mode_Control = 0:1:3)
为(DT_Comp_Mode = 0:1:3)
为(Fs = 50 e3:50e3:200e3)
为(DT_On = -500 e-9:50e-9:500e-9)
为(DT_Off = -500 e-9:50e-9:500e-9)
为(T_On_Min = 50 e-9: 50 e-9: 250 e-9)
为(T_Off_Min = 50 e-9: 50 e-9: 250 e-9)
为(Aux_Control = 0:1)
为(T_Aux_On_Min = [50 e-9 60 e-9])
为(T_Aux_Off_Min = [50 e-9 60 e-9])
为(DT_Aux_On =[200年50 e-9 100 e-9 e-9])
为(DT_Aux_Off =[200年50 e-9 100 e-9 e-9])
Ts = 1 / f;
DBuck_Off = 1-DBuck_On;
如果(Mode_Control = = 1)
DBuck_Off = 0.5 -dbuck_on / 2;
结束
D1 = DBuck_On;
D2 = DBuck_Off;
D3 = 1-DBuck_On-DBuck_Off;
sim卡(“DPWMIgalSimulation_Comparison_RoiVersion_Vs_MyVersion”);
MyRawData = csvread (strcat (pwd,“\ MyTempTestVector.csv”));
RoiRawData = csvread (strcat (pwd,“\ RoiTempTestVector.csv”));
如果(~ isequal (MyRawData RoiRawData))
如果(旗)
MyData = MyRawData;
RoiData = RoiRawData;
国旗= false;
继续;
结束
MyData = [MyData; MyRawData]
RoiData = [RoiData; RoiRawData]
结束
结束
结束
结束
结束
结束
结束
结束
结束
结束
结束
结束
结束
结束
我模拟接待输入(DbuckOn模式,DT…)和输出单一向量,为MyRawData / RoiRawData然后我积累向量在两个数据库是不一样的:MyData RoiData。这个数据我将保存在CSV。
有办法使用所有处理器核为了执行循环更快呢?
我试着parfor但似乎不工作(我使用Matlab2016试验)。
任何其他建议速度优化吗?
谢谢你!
0评论
答案(2)
提多Edelhofer
2016年6月14日
你好,
此外,我建议更换你的许多循环ndgrid,类似
[DBuck_OnVec, Mode_ControlVec DT_Comp_ModeVec] = ndgrid (0.99: -0.09:0.01 0:3, 0:3);
parfor问= 1:元素个数(DBuck_On)
DBuck_On = DBuck_OnVec(问);
…
sim卡(…)
结束
提图斯
提多Edelhofer
2016年6月17日
嗨俄梅珥,
通常最好将调用sim卡放入一个函数。传递函数的变量,因为他们是必须的,类似
函数y =模拟(k, Ts, Mode_Control DT_Comp_Mode)
sim卡(“DPWMIgalSimulation_Comparison_RoiVersion_Vs_MyVersion”,“SrcWorkspace”,“当前”);
结束
为什么k ?你应该确保文件名包含了“k”,否则并行模拟将写入同一个. csv文件。
csv文件之后(即阅读。,after the call to "simulate") and delete them in order to not have hundreds of files.
提图斯