- 如果你跑parfor没有平行池?(被相同的代码转换,要做到这一点,要么关掉并行优先自动创建一个池塘,否则使用特殊的parfor (i = 1: N, 0)语法)
- 是你的为循环在脚本或一个函数?如果它是一个脚本,使它成为一个功能——改变了MATLAB语言的优化可以使用
Matlab工人怎么工作?
3视图(30天)
显示旧的评论
所以我一直在努力优化/ parallelising现有的代码作为项目的一部分,在我的研究。这样做的时候,我遇到了一个非常奇怪的问题,至少给我。
“问题”时我让代码运行在一个正常的循环,而parfor-loop。根据parfor-loop tic-toc命令的运行时使用一个职工大约一半的运行时,它将使用一个标准的for循环。
我的问题是,根据我的理解独立的Matlab是单线程的。但也使用一个线程使用一个职工仍然是更快,甚至更快。这正是我对形势的理解让我困惑。
是的,我有检查,实际上只有一个工人使用单个线程。
最重要的是我需要一个解释,我为这个项目最终的论文。
我真的希望找到任何解释或甚至一个提示,对我来说,奇怪的行为。
4评论
答案(1)
托拜厄斯Brambier
2022年5月19日
编辑:托拜厄斯Brambier
2022年5月19日
1评论
Edric埃利斯
2022年5月23日
我没有一个明确的答案,但这就是我
认为
是怎么回事。串行MATLAB分析器显示,昂贵的计算的增量
k_elem_gs
的更新
k_parallel
。特别是,我
认为
的更新
k_parallel
得到
更多的
非零元素数量的增加。这是重要的,因为一个
parfor
这些添加循环重新排列。即使当使用一个工人,
parfor
的工作循环分为“子范围”,分别执行。这些附属的区域将开始增加
k_parallel
从头开始,即从“廉价”添加。因此而客户端
为
这是循环:
k = k + k + k + k + k + k + k;
的一名员工
parfor
更喜欢这个:
k = {k + k + k} + {k + k} + {k + k};
(每
k
右边当然是不同的)。仍然有相同数量的增加,但并不是所有的昂贵的增加。