本周文件交换选择

我们最好的用户反馈

在并行工作者上创建持久资源

肖恩他本周的选择是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®R2013b

|

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。