Main Content

createTask

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

構文

t = createTask(j, F, N, {inputargs})
t = createTask(j, F, N, {C1,...,Cm})
t = createTask(..., 'p1',v1,'p2',v2,...)
t = createTask(...,'Profile', 'ProfileName',...)

引数

t

タスク オブジェクトまたはタスク オブジェクトを成分とするベクトル

j

タスク オブジェクトが作成されるジョブ

F

タスクが評価されるときに呼び出される関数のハンドル、または関数ハンドルからなる配列

N

タスク関数の実行から返される出力引数の数。これは double 値、または double 値からなる配列です。

{inputargs}

関数 F に渡す入力引数を指定する行 cell 配列。cell 配列に含まれる各要素が、個別の入力引数として渡されます。これが cell 配列からなる cell 配列の場合、タスクは各 cell 配列ごとに作成されます。

{C1,...,Cm}

m 個の各タスクへの入力引数を定義する cell 配列からなるcell 配列

p1, p2

オブジェクト作成時に構成されるタスク オブジェクト プロパティ

v1, v2

対応するタスク オブジェクト プロパティの初期値

説明

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

t = createTask(j, F, N, {C1,...,Cm}) は、m 個の cell 配列からなる cell 配列を使用してジョブ jm 個のタスク オブジェクトを作成し、それら新しいタスク オブジェクトへの参照を成分とするベクトル t を返します。各タスクは、関数ハンドルまたは関数名 F で指定される関数を評価します。cell 配列 C1 は最初のタスクに、C2 は 2 番目のタスクにといった形で、cell 配列ごとに 1 つのタスクが対応して入力引数が提供されます。各タスクは N 個の出力引数を返します。F が cell 配列の場合、F の各要素はベクトル内の各タスクの関数を指定します。これには m 個の要素がなければなりません。N が倍精度型の配列である場合、各要素はベクトル内の各タスクの出力引数の数を指定します。入力 FN および {C1,...,Cm} からなる多次元行列がサポートされます。F に cell 配列列が使用されるか、N に double の配列が使用される場合、その次元は cell 配列からなる入力引数 cell 配列の次元と一致しなければなりません。出力 t{C1,...,Cm} と同数の成分をもつベクトルとなります。通信ジョブには 1 つのタスクしかないため、ベクトル化されたこのような形式のタスクの作成には適していません。

t = createTask(..., 'p1',v1,'p2',v2,...) は、指定されたプロパティ値をもつタスク オブジェクトを追加します。作成されたオブジェクトの有効なプロパティのリストは、parallel.Task オブジェクトのリファレンス ページを参照してください。プロパティ名は文字ベクトルでなければならず、その値はそのプロパティに適した型でなければなりません。これらのプロパティと値のペアで指定された値によって、プロファイルの値がオーバーライドされます。無効なプロパティ名またはプロパティ値が指定された場合、オブジェクトは作成されません。

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

すべて折りたたむ

ジョブ オブジェクトを作成します。

c = parcluster(); % Use default profile
j = createJob(c);

10 行 10 列の乱数行列を生成するタスク オブジェクトを追加します。

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

ジョブを実行します。

submit(j);

ジョブの実行完了を待ち、タスク評価の出力を取得します。

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

10 行 10 列の乱数行列を表示します。

disp(taskoutput{1});

次の例では、10 行 10 列の乱数行列を生成するタスクを 3 つ含むジョブを作成します。

c = parcluster(); % Use default profile
j = createJob(c);
t = createTask(j, @rand, 1, {{10,10} {10,10} {10,10}});

次の例では、プロファイルの設定に関係なくワーカーのダイアリをキャプチャするタスクを作成します。

c = parcluster(); % Use default profile
j = createJob(c);
t = createTask(j,@rand,1,{10,10},'CaptureDiary',true);

既定のクラスター上にジョブ オブジェクトを作成します。

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'},{'+','='}});

バージョン履歴

R2006a より前に導入