【发布时间】:2014-09-02 06:27:46
【问题描述】:
我正在尝试 matlab 并行处理,在此期间我尝试将这个东西应用到我的代码中。下面是代码。
matlabpool open 2
pop = create_population(match_matrix,PopSize);
ftns = zeros(PopSize,1);
parfor i=1:PopSize
ftns(i) = get_fitness(pop{i});
end
matlabpool close
我得到的错误如下
Error using parallel_function (line 589)
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error stack:
SWIFTga>(parfor body) at 127
Error in SWIFTga (line 126)
parfor i=1:PopSize
如果我将 parfor 替换为 for,我不会出错。请提出可能出了什么问题....
【问题讨论】:
-
该错误表明 get_fitness 的输出不是标量值。如果不查看 get_fitness 和 create_population 中的代码,很难判断问题所在。
-
get_fitness 给出了标量值,我在 parfor 之前检查了手动设置断点。当我在 for 循环中实现它时,即使它没有给出任何错误。在 for 循环之后,所有元素也都填充了标量值。
-
在 parfor 中尝试做:test = get_fitness(pop{i});显示(测试);证明你得到了你所期望的。
-
我打印了输入参数,然后打印了输出测试。输入正常,但输出为空 []。这就是为什么它显示错误。但是当我使用相同的输入参数调用函数 get_fitness(arg) 时,它不会显示任何错误并返回我期望的值。并行处理是否受函数调用影响?
标签: matlab parallel-processing parfor