我是关于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
答案 0 :(得分:11)
spmd是一个并行区域,而parfor是一个并行for循环。不同之处在于,在spmd区域,当您可以并行执行任务时,您具有更大的灵活性。您可以编写for循环,可以对分布式数组和向量进行操作。您可以编写整个工作流程,通常包含多个循环。这需要付出代价:您需要了解更多关于在线程中分发工作和数据的信息。例如,并行化循环需要在工作者之间明确划分循环索引范围(您在代码中使用 labindex 进行了划分),并且可能创建分布式数组。
另一方面,parfor只能这样做 - 一个并行的for循环。自动并行化,你可以添加,所以工作由MATLAB分为工人。如果您只想并行运行单个循环,然后在本地客户端上处理结果,则应使用parfor。如果要并行化整个MATLAB程序,则必须处理spmd和工作分配的复杂性。