7

我是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
4

1 回答 1

12

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

另一方面, parfor 仅执行此操作-并行化的 for 循环。自动并行化,您可以添加,因此工作由 MATLAB 在工作人员之间分配。

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

于 2012-09-12T14:03:39.503 回答