在并行工作者上创建持久资源
肖恩他本周的选择是WorkerObjWrapperMathWorks的并行计算小组.
背景
MATLAB的并行计算工具箱为您提供了打开MATLAB工作者池的能力,您可以使用高级命令将工作分发给parfor.
当与这个池中的工作者通信时,总是会有数据通信的开销。我们向工人传输的数据越少,速度就会提高得越快。在处理大型数组时,这可能很困难,而且实际上可能导致并行计算比串行计算慢。WorkerObjWrapper提供了一种方便的方法使数据持久化在一个worker上;这可能是大型数组,到数据库的连接或其他我们在每次迭代中需要的东西parfor循环。
让我们在行动中看到它
我有一个证券列表和我想从他们相应的字段:
证券和理想领域证券= {“3”,“PG”,“微软”,“山姆”,...“厂商”,“yahoo”,“发生”,“光芒四射”};字段= {“高”, {“低”,“高”},“高”,“高”,...{“低”,“高”},“低”, {“低”,“体积”},“低”};
我首先想确保有一个开放的并行池(parpool)来分发计算。我有一台双核笔记本电脑,所以我将通过选择桌面左下角的图标打开两个本地工作程序。
我写了三个等价的函数来从Yahoo!
- fetchFOR-使用一个常规的for循环获取价格
- fetchPARFOR-使用并行的for循环
- fetchWOWPARFOR-使用一个并行的for循环和WorkerObjWrapper在所有worker上建立连接。
首先,进行健全性检查,确保它们都在做同样的事情:
ff = fetchFOR(证券,字段);fp = fetchPARFOR(证券,字段);fw = fetchWOWPARFOR(证券,字段);断言(isequal (ff、fp fw));%错误,如果它们不相等
由于传递了断言,这意味着函数返回相同的结果,现在我们可以进行计时。我将使用时间.
T = 0 (3,1);%测量时间t(1) = timeit(@()fetchFOR(证券,字段),1);t(2) = timeit(@()fetchPARFOR(证券,字段),1);t(3) = timeit(@()fetchWOWPARFOR(证券,字段),1);显示结果流(' %。3.fs %s\n't (1),“对”t (2),“parfor”t (3),'parfor with WorkerObjWrapper')
8.631s for 5.991s parfor 4.255s parfor使用WorkerObjWrapper
因此,我们可以看到,在并行池中的每个工作线程上创建一次连接,然后使用parfor给了我们最好的计算时间。
评论
你是否需要处理大量数据或重复一个过程,而并行计算可能会有所帮助?我很想听听你的经历和你所面临的挑战。
- 범주:
- 先进的MATLAB,
- 选择
댓글
댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。