Main Content

createTask

ジョブに新しいタスクを作成する

    説明

    t = createTask(j,fcn,N,{x1,...,xn}) は、ジョブ j に新しいタスクを作成し、対応するタスク オブジェクト t を返します。このタスクは関数 fcn を、入力引数の cell 配列 {x1,...,xn} を使用して評価し、N 個の出力引数を返します。

    cell 配列からなる配列を入力として使用して、1 個のタスクを作成しようとすると、createTask は cell 配列ごとに 1 個ずつタスクを作成します。cell 配列からなる配列を入力として使用して 1 つのタスクを作成するには、cell 配列の配列を入力として使用するシングル タスクの作成を参照してください。

    t = createTask(j,fcn,N,{C1,...,Cm}) は、m 個の cell 配列 (要素は入力引数) からなる cell 配列を使用して、ジョブ jm 個のタスク オブジェクトを作成します。各タスクは関数 fcn を評価します。cell 配列 C1 は最初のタスクに入力引数を提供し、C2 は 2 番目のタスクにという形で、各タスクが対応する入力引数の cell 配列をもちます。

    fcn が cell 配列の場合、fcn の各要素は各タスクの関数を指定するため、fcn には m 個の要素が必要です。N が数値配列である場合、各要素は各タスクの出力引数の数を指定します。

    fcn が cell 配列であるか、N が数値配列である場合、それらの次元は {C1,...,Cm} の次元と一致しなければなりません。出力 t は、{C1,...,Cm} と同じ要素数をもつベクトルになります。

    通信ジョブには 1 つのタスクしかないため、ベクトル化されたこのような形式のタスクの作成は、これらのジョブには適していません。

    t = createTask(___,Name=Value) は、1 つ以上の名前と値の引数を使用して、タスク オブジェクトのプロパティを指定します。サポートされるプロパティのリストについては、parallel.Task を参照してください。

    t = createTask(___,Profile=profileName) は、クラスター プロファイル ProfileName に対応するプロパティ値をもつタスク オブジェクトを作成します。クラスター プロファイルの定義と適用についての詳細については、クラスターの検出とクラスター プロファイルの使用を参照してください。

    すべて折りたたむ

    この例では、ジョブに対して 1 つのタスクを作成する方法を示します。

    既定のプロファイルを使用してクラスターを作成してから、ジョブを作成します。

    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
    

    この例では、ジョブに複数のタスクを追加する 2 つの方法を説明します。

    1 つの呼び出しを使用して、ジョブに 3 つのタスクを作成します。それぞれのタスクが異なる関数を使用します。各タスクの入力引数を定義する 3 つの cell 配列からなる cell 配列を指定します。

    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 オブジェクトとして指定します。

    タスクで評価される関数。関数ハンドル、関数名を指定する文字ベクトルまたは string 配列、あるいは関数ハンドルの cell 配列として指定します。複数のタスク関数は、関数ハンドルの cell 配列として指定します。この cell 配列の要素数は、{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 への入力引数。cell 配列として指定します。cell 配列に含まれる各要素が、個別の入力引数として fcn に渡されます。

    例: {x,y}

    データ型: cell

    各タスクへの入力引数。cell 配列からなる cell 配列として指定します。cell 配列ごとにタスクが作成されます。

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

    データ型: cell

    クラスター プロファイル。文字ベクトルまたは string スカラーとして指定します。

    例: "Processes"

    データ型: char | string

    出力引数

    すべて折りたたむ

    タスク。parallel.Task オブジェクトとして返されます。

    バージョン履歴

    R2006a より前に導入