gpt4 book ai didi

matlab - MATLAB parfor 中的错误版本或字节序键?

转载 作者:太空宇宙 更新时间:2023-11-03 19:20:56 25 4
gpt4 key购买 nike

我正在使用 MATALB parfor 进行并行计算。代码结构看起来很像

%%% assess fitness %%%
% save communication overheads
bitmaps = pop(1, new_indi_idices);
porosities = pop(2, new_indi_idices);
mid_fitnesses = zeros(1, numel(new_indi_idices));
right_fitnesses = zeros(1, numel(new_indi_idices));
% parallelization starts
parfor idx = 1:numel(new_indi_idices) % only assess the necessary
bitmap = bitmaps{idx};
if porosities{idx}>POROSITY_MIN && porosities{idx}<POROSITY_MAX
[mid_dsp, right_dsp] = compute_displacement(bitmap, ['1/' num2str(PIX_NO_PER_SIDE)]);
mid_fitness = 100+mid_dsp;
right_fitness = 100+right_dsp;
else % porosity not even qualified
mid_fitness = 0;
right_fitness = 0;
end
mid_fitnesses(idx) = mid_fitness;
right_fitnesses(idx) = right_fitness;
fprintf('Done.\n');
pause(0.01); % for break
end

我遇到了以下奇怪的错误。

Error using parallel.internal.pool.deserialize (line 9)
Bad version or endian-key

Error in distcomp.remoteparfor/getCompleteIntervals (line 141)
origErr =
parallel.internal.pool.deserialize(intervalError);

Error in nsga2 (line 57)
parfor idx = 1:numel(new_indi_idices) % only assess the necessary

我该如何解决?快速 Google 搜索未返回任何解决方案。

更新1

更奇怪的是,以下代码片段在完全相同的设置和相同的 HPC 下完美运行。我认为它们两者之间可能存在一些细微的差异,导致一个工作而另一个失败。工作片段:

%%% assess fitness %%%
% save communication overheads
bitmaps = pop(1, new_indi_idices);
porosities = pop(2, new_indi_idices);
fitnesses = zeros(1, numel(new_indi_idices));
% parallelization starts
parfor idx = 1:numel(new_indi_idices) % only assess the necessary
bitmap = bitmaps{idx};
if porosities{idx}>POROSITY_MIN && porosities{idx}<POROSITY_MAX
displacement = compute_displacement(bitmap, ['1/' num2str(PIX_NO_PER_SIDE)]);
fitness = 100+displacement;
else % porosity not even qualified
fitness = 0;
end
fitnesses(idx) = fitness;
%fprintf('Done.\n', gen, idx);
pause(0.01); % for break
end
pop(3, new_indi_idices) = num2cell(fitnesses);

更新2

怀疑 [mid_dsp, right_dsp] = compute_displacement(bitmap, ['1/' num2str(PIX_NO_PER_SIDE)]); 给我带来麻烦,我将其替换为

mid_dsp = rand();
right_dsp = rand();

然后,它起作用了!这证明这确实是由这条特定的线引起的。然而,我确实测试了这个函数,它正确地返回了两个数字!由于该函数返回值就像 rand() 一样,所以我看不出有什么区别。这让我更加困惑。

最佳答案

我有同样的问题,结果是 Matlab 2015 为 parfor 中的每个循环保留所有必要的内存资源,导致内存中断不足。错误消息很棘手。在对循环中的代码进行微调并通过 Windows 10 中的 Pagefile 中的系统设置从 SSD 提供 120GB RAM 后,parfor 执行得很漂亮。

关于matlab - MATLAB parfor 中的错误版本或字节序键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24592602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com