【问题标题】:SPMD vs. ParforSPMD 与 Parfor
【发布时间】:2012-09-05 07:37:11
【问题描述】:

我是 matlab 中的并行计算新手。我有一个创建分类器(SVM)的函数,我想用几个数据集对其进行测试。我有一个 2 核工作站,所以我想并行运行测试。有人可以解释一下两者之间的区别:

 dataset_array={dataset1, dataset2}
 matlabpool open 2
 spmd
      my_function(dataset(labindex));
 end

 dataset_array={dataset1, dataset2}
 matlabpool open 2
 parfor i:1=2
      my_function(dataset(i));
 end

【问题讨论】:

    标签: matlab parallel-processing classification


    【解决方案1】:

    spmd 是一个并行区域,而 parfor 是一个并行 for 循环。不同之处在于,在 spmd 区域中,当涉及到可以并行执行的任务时,您具有更大的灵活性。你可以写一个for循环,你可以对分布式数组和向量进行操作。您可以对整个工作流程进行编程,该流程通常包含多个循环。这是有代价的:您需要了解更多关于在线程之间分配工作和数据的信息。例如,并行化循环需要在工作程序之间显式划分循环索引范围(您在代码中使用 labindex 执行此操作),并且可能创建分布式数组。

    parfor 另一方面只是这样做 - 一个并行化的 for 循环。自动并行化,您可以添加,因此工作由 MATLAB 在工作人员之间分配。

    如果您只想并行运行一个循环,然后在本地客户端上处理结果,您应该使用 parfor。如果您想并行化整个 MATLAB 程序,则必须处理 spmd 和工作分配的复杂性。

    【讨论】:

    • 感谢您的解释。因此,如果我没记错的话,我编写的示例会以不同的方式产生相同的结果,对吧?
    • @Lazza87 是的。在这种情况下没有区别,您可以使用两种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2013-07-11
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多