繁体   English   中英

在MATLAB中加速批处理作业执行

[英]Accelerate batch job execution in MATLAB

我是MATLAB中批处理作业执行的新手。 我正在玩以下代码:

clear 
a = rand(10,1);
job = batch('l_beta');
wait(job)
load(job,'b')

l_beta只是一行代码:

b = sum(a);

尽管所有操作都很简单,但令人惊讶的是,在第一个块中执行代码需要12秒钟。 我在以下链接中查看了讨论

https://www.mathworks.com/matlabcentral/answers/166757-why-is-batch-so-slow

似乎有很多与启动批处理作业相关的开销。 我想知道是否有简单的方法来减少这种开销。 说,如果我只进行一次配置/预热,然后只要运行MATLAB就不必担心。

您可以使用tic / toc和job属性很容易地调试它。 见下面的例子

clc; close all; clear;
a = 10;

tic;
c = parcluster();
fprintf('Creating the cluster: %.2f sec\n', toc);

tic;
job = createJob(c);
fprintf('Creating a job: %.2f sec\n', toc);

tic;
createTask(job, @exp, 1, {a});
createTask(job, @sin, 1, {a});
fprintf('Creating the tasks: %.2f sec\n', toc);

tic;
submit(job);
fprintf('Submitting the job: %.2f sec\n', toc);

% Most of the time goes on scheduling the job here
% pause(10);

tic;
wait(job)
fprintf('Waiting time: %.2f sec\n', toc);

tic;
results = fetchOutputs(job);
fprintf('Fetching Results: %.2f sec\n\n', toc);

fprintf('Job Properties\n');
fprintf('Create Time: %s \n', job.CreateTime);
fprintf('Submit Time: %s \n', job.SubmitTime);
fprintf('Start Time: %s \n', job.StartTime);
fprintf('Finish Time: %s \n', job.FinishTime);

delete(job);

如果运行此命令,则会得到以下信息

Creating the cluster: 0.01 sec
Creating a job: 0.02 sec
Creating the tasks: 0.04 sec
Submitting the job: 0.19 sec
Waiting time: 4.13 sec
Fetching Results: 0.02 sec

Job Properties
Create Time: Mon May 22 10:30:23 BST 2017 
Submit Time: Mon May 22 10:30:23 BST 2017 
Start Time: Mon May 22 10:30:26 BST 2017 
Finish Time: Mon May 22 10:30:27 BST 2017 

您会看到在提交和开始之间大部分时间都浪费了。 执行本身非常快。 如果通过从pause(10)删除注释来引入暂停,则会得到以下内容

Creating the cluster: 0.01 sec
Creating a job: 0.02 sec
Creating the tasks: 0.04 sec
Submitting the job: 0.19 sec
Waiting time: 0.06 sec
Fetching Results: 0.02 sec

Job Properties
Create Time: Mon May 22 10:31:44 BST 2017 
Submit Time: Mon May 22 10:31:44 BST 2017 
Start Time: Mon May 22 10:31:47 BST 2017 
Finish Time: Mon May 22 10:31:48 BST 2017 

因此,您可以考虑在代码中尽早提交作业,在计划和运行作业时执行一些其他操作,然后在代码中进一步获取结果。 我希望这是有帮助的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM