Main Content

本页采用了机器翻译。点击此处可查看英文原文。

createTask

在作业中创建新任务

    说明

    t = createTask(j,fcn,N,{x1,...,xn}) 在作业 j 中创建一个新任务并返回相应的任务对象 t。此任务使用输入参量单元格数组 {x1,...,xn} 评估函数 fcn 并返回 N 输出参量。

    如果您尝试创建一个以单元格数组作为输入的任务,createTask 将为每个单元格数组创建一个任务。要创建一个以单元格数组作为输入的任务,请参阅 使用单元格数组作为输入创建单个任务

    示例

    t = createTask(j,fcn,N,{C1,...,Cm}) 使用输入参量的 m 单元格数组在作业 j 中创建 m 任务对象。每个任务评估函数 fcn。单元数组 C1 为第一个任务提供输入参量,C2 为第二个任务提供输入参量,依此类推,以便每个任务都有一个相应的输入参量单元数组。

    如果 fcn 是一个单元数组,则 fcn 的每个元素为每个任务指定一个函数,并且 fcn 必须具有 m 元素。如果 N 是一个数值数组,则每个元素指定每个任务的输出参量的数量。

    如果 fcn 是元胞数组或 N 是数值数组,则它们的大小必须与 {C1,...,Cm} 的大小相匹配。输出 t 是一个具有与 {C1,...,Cm} 相同数量元素的向量。

    由于一个通信作业只有一个任务,因此这种向量化任务创建形式并不适用于这些作业。

    示例

    t = createTask(___,Name=Value) 使用一个或多个名称-值参量指定任务对象属性。有关受支持的属性的列表,请参阅 parallel.Task

    示例

    t = createTask(___,Profile=profileName) 创建一个任务对象,其属性值与集群配置文件 ProfileName 相对应。有关定义和应用集群配置文件的详细信息,请参阅 发现集群并使用集群配置文件

    示例

    示例

    全部折叠

    此示例显示如何为一项作业创建一项任务。

    使用默认配置文件创建一个集群,然后创建一个作业。

    c = parcluster;
    j = createJob(c);

    添加一个生成 10×10 随机矩阵的任务。

    t = createTask(j,@rand,1,{10,10});

    运行作业。

    submit(j);

    等待作业运行完毕,然后使用 fetchOutputs 函数获取任务评估的输出。

    wait(j);
    taskoutput = fetchOutputs(j);

    最后,显示 10×10 的随机矩阵。

    disp(taskoutput{1});
        0.1349    0.3414    0.0378    0.2873    0.6815    0.1700    0.6341    0.8666    0.1985    0.0739
        0.6744    0.6596    0.1527    0.1777    0.8329    0.3007    0.9087    0.9242    0.2509    0.7697
        0.9301    0.9604    0.0199    0.4932    0.7620    0.8125    0.9334    0.4732    0.5438    0.4916
        0.5332    0.2081    0.7638    0.8810    0.3301    0.8027    0.9230    0.5052    0.0748    0.7206
        0.1150    0.0206    0.2389    0.3993    0.8738    0.4026    0.4597    0.4667    0.9900    0.7507
        0.6540    0.0097    0.7247    0.3138    0.4917    0.9944    0.2229    0.7484    0.7052    0.4890
        0.2621    0.4432    0.3819    0.3073    0.6435    0.7122    0.0043    0.2366    0.4252    0.2600
        0.9625    0.6220    0.1527    0.6538    0.5951    0.5486    0.6156    0.1400    0.8675    0.6854
        0.8972    0.9800    0.4316    0.3740    0.0846    0.9692    0.2890    0.7388    0.8969    0.8876
        0.3187    0.4841    0.8672    0.2539    0.1876    0.6113    0.0459    0.9253    0.6454    0.9783
    

    此示例显示了向作业添加多个任务的两种方法。

    使用一次调用为一个作业创建三个任务,每个任务使用不同的函数。提供一个由三个单元格数组组成的单元格数组,定义每个任务的输入参量。

    c = parcluster;
    j = createJob(c);
    t = createTask(j,{@rand,@magic,@ones},1,{{3,3} {3} {3,3}});

    显示并查看有关 t 的信息。

    t
    t = 
    
     3x1 Task array:
     
             ID        State              FinishDateTime  Function  Errors  Warnings
           -------------------------------------------------------------------------
        1     1      pending                                  rand       0         0
        2     2      pending                                 magic       0         0
        3     3      pending                                  ones       0         0
    
    whos t
      Name      Size            Bytes  Class                    Attributes
    
      t         3x1                24  parallel.task.CJSTask              
    

    或者,使用 for 循环为作业 j 创建 150 个任务。显示 tasks 的属性。

    for idx = 1:150
        tasks(idx) = createTask(j,@magic,1,{idx});
    end
    whos tasks
      Name       Size             Bytes  Class                    Attributes
    
      tasks      1x150             1200  parallel.task.CJSTask              
    

    创建一个捕获工作进程日记的任务,无论集群配置文件中的设置如何。

    c = parcluster;
    j = createJob(c);
    t1 = createTask(j,@rand,1,{10,10},CaptureDiary=true);

    创建一个具有与 myMJS_Cluster 集群配置文件相对应的属性值的任务。

    t2 = createTask(j,@magic,1,{10},Profile="myMJS_Cluster");

    在默认集群上创建一个作业对象。

    c = parcluster;
    job = createJob(c);

    创建一个运行 strjoin({'1','1','2'},{'+','='}) 的任务。

    task = createTask(job,@strjoin,1,{{{'1','1','2'},{'+','='}}});
    task.InputArguments{:}
    ans = 1×3 cell
        {'1'}    {'1'}    {'2'}
    
    
    ans = 1×2 cell
        {'+'}    {'='}
    
    

    提交并等待作业。

    submit(job);
    wait(job);

    检索并显示输出。

    outputs = fetchOutputs(job);
    disp(outputs{1});
    1+1=2
    

    输入参数

    全部折叠

    软件创建任务的作业,指定为 parallel.Job 对象。

    任务评估的函数,指定为函数句柄、指定函数名称的字符向量或字符串数组,或函数句柄的单元格数组。将多个任务函数指定为函数句柄的单元数组。单元数组必须具有与 {C1,...,Cm} 输入相同数量的元素。

    示例: @zeros

    数据类型: char | string | cell | function_handle

    fcn 的输出数量,指定为非负整数或非负整数数组。将多个输出指定为非负整数数组。该数组必须具有与 {C1,...,Cm} 输入相同数量的元素。

    示例: createTask(j,@zeros,1,{x,y}); 指定预期单个输出。

    数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    fcn 的输入参量,指定为单元数组。软件将单元数组中的每个元素传递给 fcn 作为单独的输入参量。

    示例: {x,y}

    数据类型: cell

    每个任务的输入参量,指定为单元格数组的单元数组。软件为每个单元数组创建一个任务。

    示例: {{x1,y1},{x2,y2},{x3,y3}}

    数据类型: cell

    聚类配置文件文件,指定为字符向量或字符串标量。

    示例: "Processes"

    数据类型: char | string

    输出参量

    全部折叠

    任务,作为 parallel.Task 对象返回。

    版本历史记录

    在 R2006a 之前推出