Ree*_*rds 6 parallel-processing matlab for-loop
我在Matlab中运行parfor循环需要花费很多时间,我想知道剩下多少次迭代.我怎样才能获得这些信息?
我不相信你可以直接从MATLAB获得这些信息,除了每次迭代打印一些东西并手工计算这些行.
要了解原因,请记住每次parfor迭代都在自己的工作空间中执行:虽然在循环中递增计数器是合法的,但访问其"当前"值不是(因为在循环完成之前该值不存在).此外,parfor构造不保证任何特定的执行顺序,因此打印迭代器值没有帮助.
cnt = 0;
parfor i=1:n
cnt = cnt + 1; % legal
disp(cnt); % illegal
disp(i); % legal ofc. but out of order
end
Run Code Online (Sandbox Code Playgroud)
也许有人确实有一个聪明的解决方法,但我认为parfor迭代的独立性质掩盖了可靠的计数.上述限制以及使用evalin等限制支持了这一结论.
正如@Jonas建议的那样,您可以通过MATLAB外部发生的副作用获得迭代计数,例如在某个目录中创建空文件并对其进行计数.你可以在MATLAB中做到这一点:
fid = fopen(['countingDir/f' num2str(i)],'w');
fclose(fid);
length(dir('countingDir'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7155 次 |
| 最近记录: |