我对 matlab 中的并行计算很陌生。我有一个创建分类器(SVM)的函数,我想用几个数据集来测试它。我有一个 2 核工作站,所以我想并行运行测试。有人可以向我解释一下以下之间的区别:
dataset_array={dataset1, dataset2}
matlabpool open 2
spmd
my_function(dataset(labindex));
end
and
dataset_array={dataset1, dataset2}
matlabpool open 2
parfor i:1=2
my_function(dataset(i));
end
spmd 是并行区域,而 parfor 是并行 for 循环。不同之处在于,在 spmd 区域中,您在可以并行执行的任务方面具有更大的灵活性。你可以写一个for循环,你可以操作分布式数组和向量。您可以对整个工作流程进行编程,该流程通常由多个循环组成。这是有代价的:您需要更多地了解如何在线程之间分配工作和数据。例如,并行化循环需要在工作人员之间显式划分循环索引范围(您在代码中使用labindex),也许还可以创建分布式数组。
另一方面,parfor 只做这个——一个并行的 for 循环。自动并行化,可以添加,因此工作由 MATLAB 在工人之间分配。
如果您只想并行运行一个循环,然后在本地客户端上处理结果,则应该使用 parfor。如果您想要并行化整个 MATLAB 程序,您将必须处理 spmd 和工作分配的复杂性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)