1.
https://ww2.mathworks.cn/matlabcentral/answers/46102-when-to-use-spmd-and-parfor-function
这是一个非常简短的摘要:
PARFOR比SPMD使用起来简单得多,通常在尝试并行化独立计算的集合时,它通常是您的首选。您需要确保您的计算不依赖于顺序(即,它们一定不能依赖于先前计算的结果)。
SPMD较难使用,但允许使用labSend和labReceive的工作人员之间进行通信。如果您希望为分布式阵列实现新功能,这也是合适的选择。
2.
https://ww2.mathworks.cn/matlabcentral/answers/48871-best-approach-to- this -problem-spmd-or-parfor
我想说这听起来像是您的PARFOR解决方案可能接近您可以做的最好的事情。听起来您的问题很适合PARFOR-很多独立的工作要做。使用SPMD可以实现相同的目的,但是您将无法获得PARFOR所提供的自动负载平衡功能,因此最终运行效率可能会降低。
您可能考虑的一件事是将PARFOR循环移动到外部循环,因为这将减少与并行运行相关的一些开销。
3.
https://stackoverflow.com/questions/12385534/spmd-vs-parfor
spmd是并行区域,而parfor是并行for循环。区别在于,在spmd区域中,您可以并行执行的任务具有更大的灵活性。您可以编写一个for循环,可以对分布式数组和向量进行操作。您可以对整个工作流程进行编程,该 工作流 程通常包含多个循环。这是有代价的:您需要更多地了解如何在线程之间分配工作和数据。例如,并行化循环需要在工作线程之间显式地划分循环索引范围(通过使用labindex在代码中进行此操作),并可能创建分布式数组。
另一方面,parfor仅这样做-并行化的for循环。您可以添加自动并行化的工作,因此工作可以通过MATLAB在工作人员之间进行划分。
如果只想并行运行一个循环,然后再在本地客户端上处理结果,则应使用parfor。如果要并行化整个MATLAB程序,则必须处理spmd和工作分配的复杂性。
4.
spmd如果您在计算期间需要worker之间的通信,请使用此选项。
parfeval在以下情况下使用:
● 您想在后台运行计算。
● 每个任务都依赖于其他任务。

5.
https://ww2.mathworks.cn/help/ parallel -computing/choose-spmd-parfor-parfeval.html
通信并行代码
要运行在并行计算,可以使用parfor, parfeval,parfevalOnAll,或 spmd。每个构造都依赖于不同的并行编程概念。如果你要求工人在整个计算,用于通信 parfeval,parfevalOnAll或 spmd。
● 如果您的代码可以分为一组任务,请使用parfeval或parfevalOnAll,其中每个任务可以取决于其他任务的输出。
● spmd如果您在计算期间需要工作人员之间的通信,请使用此选项。
与parfeval的计算最好用图形表示,类似于带阻塞的看板。通常,计算完成后会从工作人员那里收集结果。您可以parfeval使用afterEach 或从执行操作中收集结果 afterAll。通常将结果用于进一步的计算。
spmd类似于瀑布式工作流程,用最好用流程图表示。执行spmd 语句的池工作程序称为实验室。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删