SPMD 与 Parfor
Posted
技术标签:
【中文标题】SPMD 与 Parfor【英文标题】:SPMD vs. 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
【问题讨论】:
【参考方案1】:spmd 是一个并行区域,而 parfor 是一个并行 for 循环。不同之处在于,在 spmd 区域中,当涉及到可以并行执行的任务时,您具有更大的灵活性。你可以写一个for循环,你可以对分布式数组和向量进行操作。您可以对整个工作流程进行编程,该流程通常包含多个循环。这是有代价的:您需要了解更多关于在线程之间分配工作和数据的信息。例如,并行化循环需要在工作程序之间显式划分循环索引范围(您在代码中使用 labindex 执行此操作),并且可能创建分布式数组。
parfor 另一方面只是这样做 - 一个并行化的 for 循环。自动并行化,您可以添加,因此工作由 MATLAB 在工作人员之间分配。
如果您只想并行运行一个循环,然后在本地客户端上处理结果,您应该使用 parfor。如果您想并行化整个 MATLAB 程序,则必须处理 spmd 和工作分配的复杂性。
【讨论】:
感谢您的解释。因此,如果我没记错的话,我编写的示例会以不同的方式产生相同的结果,对吧? @Lazza87 是的。在这种情况下没有区别,您可以使用两种方法。以上是关于SPMD 与 Parfor的主要内容,如果未能解决你的问题,请参考以下文章
将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio 2019
将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio 2019