文件

最小化网络流量

在本例中,我们将了解如何通过最小化网络流量来减少并行计算工具箱™中作业的运行时间。网络带宽很可能受到严重限制,特别是考虑到与内存传输速度相关的情况时,因此我们强烈希望最有效地利用网络带宽。此外,并行计算工具箱对任务可以接收和返回的MATLAB®对象的大小有限制,我们将看看如何围绕它们工作。特别是,我们将讨论如何使用文件系统,并展示使用它的一些优点和缺点。

先决条件:

为了进一步阅读,请参阅:

减少返回的数据量

如果沉重的网络流量导致我们的工作速度变慢,那么第一个问题就是我们是否真的需要正在传输的所有数据。如果没有,我们应该编写一个包装任务函数,删除冗余数据,只返回必要的数据。你可以在写作任务的功能的例子。

使用作业的Jobdata属性

使用MJS群集时,可以通过减少我们网络的数据传输来使用作业的Jobdata属性来最小化作业和任务创建时间。如果任务输入数据很大并且它在作业中的所有任务之间共享,我们可能会受益于通过将其传递给任务功能JobData工作的属性,而不是作为所有任务函数的输入参数。这样,数据仅发送一次到群集,而不是为每个任务传递一次。

让我们使用一个简单的例子来说明所涉及的语法。我们让任务函数包括计算x ^ p。, 在哪里X是一个固定的矢量和P.各不相同。这意味着X将存放在JobData工作的性质和P.将作为任务函数的输入参数传递。任务函数使用getcurrentjob.获取作业对象的函数,并获得JobData通过作业对象。

类型pctdemo_task_tutorial_network_traffic
函数y = pctdemo_task_tutorial_network_traffic(p) % pctdemo_task_tutorial_network_traffic计算x.^p。% y = pctdemo_task_tutorial_network_traffic(p)使用getCurrentJob获取当前作业的JobData属性%。然后,该函数返回在JobData属性中找到的向量的p次幂的%。% Copyright 2007 The MathWorks, Inc. job = getCurrentJob();我们不是在一个worker上运行,所以我们没有任何JobData要% work。y = [];返回;end x = get(job, 'JobData');y = x ^ p;end % pctdemo_task_tutorial_network_traffic结束。

我们现在可以创造一个JobData属性设置为X

myCluster = parcluster;工作= createJob (myCluster);x = 0:0.1:10;的工作。JobData = x;

我们在作业中创建任务,每个值为的任务P.。请注意,任务的功能仅有P.作为其输入参数。

Pvec = [0.1, 0.2, 0.3, 0.4, 0.5];为了p = pvec createTask(作业,@pctdemo_task_tutorial_network_traffic,1,{p});结尾提交(工作);

我们现在可以返回Matlab提示并在等待工作完成时继续工作。或者,我们可以阻止提示,直到作业完成:

等待(工作);

由于我们已经完成了作业对象,我们删除了它。

删除(工作);

何时使用共享文件系统

如果我们希望工人处理已存在于共享文件系统上的数据,我们使用含量径工作的财产。我们投入该单元格数组的所有文件夹名称都将添加到工人的路径中,从而使它们容易访问。用户运行的用户必须具有从这些文件夹中读取所需的权限。

关于何时将数据写入MATLAB客户机中的共享文件系统以使其对工作人员可用的问题,或者反之,我们必须记住,共享文件系统通常有很高的延迟。因此,如果我们按照上面给出的建议,只传输几百kb大小的对象,那么最好不要显式地使用文件系统,而是依赖于并行计算工具箱中内置的传输机制。但是,当使用MJS集群时,在传输数十兆或更大的对象时,使用文件系统可能更好。

处理共享文件系统的延迟更新

一些网络文件系统通过延迟更新来权衡延迟时间以提高网络效率。如果客户端计算机期望在工作人员上生成的文件立即可用,则延迟更新可能会导致问题。出于这个原因,我们建议避免在任务完成的回调函数中读取任务输出文件。根据经验,我们不应该期望在一台计算机上写入的文件能立即在所有其他计算机上可用。

在同一组群上写入共享文件系统

属性可以轻松地通过同质集群上的共享文件系统进行通信加载保存在matlab中的函数。当然,客户端和工人必须有权读写输入和输出文件。如果群集由Windows®机器组成,我们也必须记住仅使用UNC路径而不是映射网络驱动器的名称。也就是说,我们只能使用表单的完整文件名

f = ' \ \用户mycomputer \ \子目录\ myfile.mat”;

而不是

f ='h:\ subdir \ myfile.mat';

因为网络映射,比如\ \ mycomputer \用户H:,只能在客户端机器上工作,MATLAB可能无法访问工人上的映射。

写入异构集群的共享文件系统

使用共享文件系统如果它与工人和客户端看起来不一样难以更加困难。并行计算工具箱示例显示了解决Windows和UNIX®计算机的混合环境的情况下解决该问题的一种方法。让我们假设路径名称

windowsdir ='\\ mycomputer \ user \ subdir';unixdir =“/ home / user /子目录”

引用文件服务器上的同一目录,前者在所有Windows计算机上有效,后者在所有UNIX计算机上有效。我们可以告诉并行计算工具箱示例这个关联,并允许它通过发出命令来使用这个目录来写入临时文件

orgconf = paralleldemoconfig();paralleldemoconfig('networkdir'......结构('视窗'windowsdir,'unix',Unixdir));

当示例需要将文件写入文件系统时,它们看起来NetworkDir田野paralleldemoconfig结构体:

参看= paralleldemoconfig ();netDir = conf.NetworkDir;disp (netDir)
Windows:'\\ mycomputer \ user \ subdir'unix:'/ home / user / subdir'

给定文件名,例如“myfile.mat”从上面,例子传递了Netdir.结构和“myfile.mat”工人们。然后工人们可以选择是否使用

fullfile (netDir.windows“myfile.mat”的)

fullfile(netdir.unix,“myfile.mat”的)

根据他们的平台。此平台依赖的选择已被包装为示例功能pctdemo_helper_fullfile

类型pctdemo_helper_fullfile
function filename = pctdemo_helper_fullfile(networkDir, file) % pctdemo_helper_fullfile从parts构建完整的文件名。% PCTDEMO_HELPER_FULLFILE(networkDir, file)返回networkDir。% FULLFILE(networkDir. net . net)。Unix,文件)在其他平台上。% % networkDir必须是一个具有字段名'windows'和% 'unix'的结构,并且字段值必须是字符串。% %参见FULLFILE % Copyright 2007-2012 The MathWorks, Inc. % Verify The input argument narginchk(2,2);tc = pTypeChecker ();如果~ (tc)。isStructWithFields(networkDir, 'unix', 'windows')…&& iscellstr(struct2cell(networkDir))错误('pctexample:helperfullfile:InvalidArgument',…['Network directory must be a structure with the field names '…'windows和Unix,字段值必须是字符串']); end if ~ischar(file) || isempty(file) error('pctexample:helperfullfile:InvalidArgument', ... 'File must be a non-empty character array'); end if ispc base = networkDir.windows; else base = networkDir.unix; end filename = fullfile(base, file); end % End of pctdemo_helper_fullfile

这样工人们就只能打电话了

f = pctdemo_helper_fullfile(netdir,“myfile.mat”);

然后他们将收到正确的完整文件名myfile.mat

恢复原始设置

我们不希望本教程更改默认示例设置,因此我们还原其原始值。

paralleldemoconfig (orgconf);
这个话题有用吗?