我对matlab中的并行计算是个新手。我有一个创建分类器(SVM)的函数,我想用几个数据集来测试它。我有一个双核工作站,所以我想并行运行测试。有没有人能给我解释一下:
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发布于 2012-09-12 22:03:40
spmd是一个并行区域,而parfor是一个并行for循环。不同之处在于,在spmd区域中,当涉及到可以并行执行的任务时,您拥有更大的灵活性。你可以写一个for循环,你可以对分布式数组和向量进行操作。您可以对整个工作流进行编程,它通常由多个循环组成。这是有代价的:您需要更多地了解如何在线程之间分发工作和数据。例如,将循环并行化需要显式地在工作者之间划分循环索引范围(您在代码中使用labindex做到了这一点),并且可能还需要创建分布式数组。
另一方面,parfor只做这件事--一个并行的for循环。自动并行化,你可以添加,所以工作是由MATLAB在工人之间分配的。
如果您只想并行运行单个循环,然后在本地客户机上处理结果,则应该使用parfor。如果你想并行你的整个MATLAB程序,你将不得不处理复杂的spmd和工作分配。
https://stackoverflow.com/questions/12385534
复制相似问题