《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 773|回复: 0
收起左侧

[提问] 关于在大循环中spmd的时间问题

[复制链接]
发表于 2015-7-3 19:41:33 | 显示全部楼层 |阅读模式
新手使用MATLAB 的并行包,启动了4个worker
下面是程序:
startmatlabpool(4);
tic;
for t=1:100
   spmd
         x(t)=t;
   end
end
t_1=toc;
matlabpool close;

tic;
for t=1:100
   y(t)=t;
   y(t+100)=t;
   y(t+200)=t;
   y(t+300)=t;
end
t_2=toc;

跑完发现t_1是5秒多,而t_2不到0.01秒
很简单的思路,但时间差距非常大。可以看出,[x{1},x{2},x{3},x{4}]=y本来想着让在一个循环中各个处理器分摊不同参数的计算(参数实际中可能很多很繁)从而节省时间,想法应该是对的,但这个例子体现的效果非常差,不知道是为什么?能不能就像想象中的那样分了4块计算就快将近4倍?
注:
1.对于为什么不把t放在spmd里面,这个只是个小例子来说明spmd调用时间的问题,真实情况远比这个复杂,for里面还有其他东西,t就是迭代的时间,不能简单的把t并入spmd。
2.就是针对1,把for循环改成i=1:100这样的数组,t_1也要花0.08s以上,这样是不是说明多的这零点零几秒就是每次spmd的调用所要必须浪费的时间?因为如果是这样对于一些需要大量迭代运算的值,采用分模块到处理器计算就显得不太划算了,因为每一步都要调用spmd。
3.针对大量迭代的问题,例如像大规模的微分方程组和代数方程组的联立求解,用隐式法的话,需要在每一时间步(也就是上面的t)中求解非线性方程组,规模也许会很大,在求解非线性方程中的雅可比矩阵中的很多元素是时变的,如果每一时间步中调用spmd都要花这么长的时间的话,有没有其他一些更好的方法,来使用多核发挥威力,也就是加速,哪怕不使用matlab的方法。
PS:问题也许有些绕,但作为观众,无论您想到了哪怕任何一点点idea,或是遇到类似的问题,都请畅所欲言,在下感激不尽。
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-4-3 01:01 , Processed in 0.044697 second(s), 14 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表