在池为 2 的 Batch 中循环 运行 多少次?
How many times does a loop run in Batch with a pool of 2?
我有一个 for 循环,它生成一个 1 x n 数组,然后将该数组保存为一个名为 "Batch_Test_N (For Loop Iteration Number)" 的 mat 文件。如果我用 2 个并行池批量 运行 这个,每个 mat 文件生成 2 次,还是每个循环 运行 一次?例如,工人 1 运行 完成整个 for 循环,然后工人 2 也 运行 完成整个 for 循环,或者工人 1 只执行迭代 1,3,...9,剩下的工作由工人 2 完成?
for i=1:10
filename=['Batch_Test_',num2str(i)];
Array=ones(1,i);
save(filename,'Array')
end
job=batch('Script_Name','Pool',2)
@David 已经在评论中给出了正确答案,这个答案只是对此做一些扩展。
当你 运行 batch('<script>', 'Pool', N)
时,基本上就好像你 运行
parpool(N);
<script>
在 MATLAB 中 - 换句话说,您的脚本使用大小为 N 的开放并行池执行。因此请注意 batch(..., 'Pool', N)
在集群上使用 N+1
个工作线程。
因此,正如@David 正确指出的那样 - 要在集群上获得并行性,您的脚本需要包含并行语言结构,例如 parfor
、spmd
或 parfeval
。这在文档中有描述:https://uk.mathworks.com/help/parallel-computing/run-a-batch-job.html#bu62o45
我有一个 for 循环,它生成一个 1 x n 数组,然后将该数组保存为一个名为 "Batch_Test_N (For Loop Iteration Number)" 的 mat 文件。如果我用 2 个并行池批量 运行 这个,每个 mat 文件生成 2 次,还是每个循环 运行 一次?例如,工人 1 运行 完成整个 for 循环,然后工人 2 也 运行 完成整个 for 循环,或者工人 1 只执行迭代 1,3,...9,剩下的工作由工人 2 完成?
for i=1:10
filename=['Batch_Test_',num2str(i)];
Array=ones(1,i);
save(filename,'Array')
end
job=batch('Script_Name','Pool',2)
@David 已经在评论中给出了正确答案,这个答案只是对此做一些扩展。
当你 运行 batch('<script>', 'Pool', N)
时,基本上就好像你 运行
parpool(N);
<script>
在 MATLAB 中 - 换句话说,您的脚本使用大小为 N 的开放并行池执行。因此请注意 batch(..., 'Pool', N)
在集群上使用 N+1
个工作线程。
因此,正如@David 正确指出的那样 - 要在集群上获得并行性,您的脚本需要包含并行语言结构,例如 parfor
、spmd
或 parfeval
。这在文档中有描述:https://uk.mathworks.com/help/parallel-computing/run-a-batch-job.html#bu62o45