【问题标题】:parallel computing in matlab [closed]matlab中的并行计算[关闭]
【发布时间】:2014-09-02 21:50:34
【问题描述】:

假设我们在简单的计算机上工作,我想知道并行代码计算和不并行计算是否有一些区别?有关于并行计算的链接

http://www.bu.edu/tech/support/research/training-consulting/online-tutorials/matlab-pct/#TOPICS

给出了几个例子,与积分、特征值计算等有关,但是如果我使用并行计算或不使用并行计算有什么区别吗?瞬间我想在巨大的矩阵上计算特征值分解,我怎么能将其分发到 4 个客户端以及如何最终获得结果?请给我一些与此主题相关的代码或示例,提前谢谢,例如我们有这个矩阵

a=rand(200,200);
>> tic
>> [V,D]=eig(a);
>> toc
Elapsed time is 9.819754 seconds.

并行计算呢?

【问题讨论】:

  • 是的,如果您可以访问并行计算工具箱和分布式计算工具箱,则可以使用distributed 数组,并实现了许多对此类数组进行操作的算法(包括EIG):@ 987654322@。大多数分布式数组的线性代数函数都是在底层使用 ScaLAPACK 实现的。
  • 只是一个小例子,是的,我可以访问并行计算
  • 您是否查看了文档(本地或在线),它充满了示例和大量教程和解释(比我能提供的要好得多):mathworks.com/help/distcomp/distributed-arrays-and-spmd.html
  • 如何确定我需要多少工人?
  • 例如这个 spmd (3) R = rand(4,4);结束

标签: matlab parallel-processing cluster-computing distributed-computing


【解决方案1】:

这是您要求的一个简单示例:

% open a local pool of 2 workers
parpool('local',2)

% random matrix distributed over workers (each gets half of the data)
A = distributed.rand(1000);

% (non symmetric eigenvalue EIG is not yet available for codistributed arrays)
A = A + A.';

% compute eigenvalues/eigenvectors
[V,D] = eig(A);

% V and D are distributed arrays.
% If you want to retrieve contents of distributed array on this client
%V = gather(V);

% shutdown workers
delete(gcp)

我仍然建议您阅读文档以了解分布式数组如何在 MATLAB 中工作。

【讨论】:

  • 会优化代码吗?
  • (一如既往)视情况而定。
  • 独立工作人员之间的通信和来回传输数据会产生开销。因此,与并行性成本相比,每个工作人员的计算量很大时,您通常会受益
  • 但是当有多个真实客户端连接时,基本上推荐这种方法吧?
  • 无论工作人员是本地进程还是远程进程,这同样适用(我认为都是使用 MPI 消息实现的)
猜你喜欢
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多