Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

createTask

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

    説明

    t = createTask(j,fcn,N,{x1,...,xn}) は、ジョブ j に新しいタスク オブジェクトを作成し、追加したタスク オブジェクトのハンドル t を返します。このタスクは関数ハンドルまたは関数名 fcn で指定された関数を、指定された入力引数の cell 配列 {x1,...,xn} を使用して評価し、N 個の出力引数を返します。

    t = createTask(j,fcn,N,{C1,...,Cm}) は、m 個の cell 配列 (要素は入力引数) からなる cell 配列を使用して、ジョブ jm 個のタスク オブジェクトを作成します。各タスクは、関数ハンドルまたは関数名 fcn で指定された関数を評価します。cell 配列 C1 は最初のタスク、C2 は 2 番目のタスクという形で、入力引数の cell 配列ごとに 1 つのタスクがあります。

    fcn が cell 配列の場合、fcn の各要素はベクトル内の各タスクの関数を指定し、m 個の要素が必要です。N が double の配列である場合、各要素は各タスクの出力引数の数を指定します。

    入力 fcnN および {C1,...,Cm} からなる多次元行列がサポートされています。fcn が cell 配列であるか、N が double の配列である場合、それらの次元は {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 はタスク オブジェクトからなる 3 行 1 列の行列になります。

    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 個のタスクを作成します。T のプロパティを表示します。

    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);

    入力引数としてすべて cell 配列を指定してシングル タスクを作成するには、createTask{C1} 構文を使用します。たとえば、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
    

    {inputargs} 構文を {inputargs} = {{'1','1','2'},{'+','='}} で使用しようとした場合、createTask{C1,...,Cm} 構文を使用し、複数のタスクを作成します。たとえば、次のコードは、strjoin('1','1','2') にタスクを 1 つ、strjoin('+','=') にタスクを 1 つ、合計 2 つのタスクを誤って作成します。

    task = createTask(job,@strjoin,1,{{'1','1','2'},{'+','='}});
    

    入力引数

    すべて折りたたむ

    タスク オブジェクトが作成されるジョブ。parallel.Job オブジェクトとして指定します。

    例: j = createJob;

    データ型: parallel.Job

    タスクで評価される関数。関数ハンドルまたは関数名として指定します。複数のタスク関数は、関数ハンドルの cell 配列として指定します。この cell 配列の要素数は、入力引数の cell 配列 {C1,...,Cm} の要素数と同じでなければなりません。

    例: createTask(j,@zeros,1,{x,y}); は、関数 zeros を評価しなければならないタスクを指定します。

    データ型: char | string | cell | function_handle

    評価された関数 fcn から返される出力数。非負の整数として指定します。複数の出力数は、非負の整数の配列として指定します。この配列の要素数は、cell 配列からなる cell 配列 {C1,...,Cm} の要素数と同じでなければなりません。

    例: createTask(j,@zeros,1,{x,y}); は、必要な単一出力を指定します。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    関数 fcn の入力引数。cell 配列として指定します。cell 配列に含まれる各要素が、個別の入力引数として渡されます。

    例: createTask(j,@zeros,1,{x,y}); は、関数 zeros の入力引数 x および y を指定します。

    データ型: cell

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

    例: createTask(j,@zeros,1,{{x1,y1},{x2,y2},{x3,y3}}); は、関数 zeros を評価する 3 つのタスクの入力引数として {{x1,y1},{x2,y2},{x3,y3}} を指定します。

    データ型: cell

    クラスターの識別に使用するクラスター プロファイル。'Profile' と、ProfileName を表す文字ベクトルまたは string で構成されるコンマ区切りのペアとして指定します。

    例: j = createTask(j,@zeros,1,{x,y},'Profile','Processes');

    データ型: char | string

    出力引数

    すべて折りたたむ

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

    データ型: parallel.Task

    バージョン履歴

    R2006a より前に導入