(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-05-10
(54)【発明の名称】ステップ対応ワークフローのための方法及び装置
(51)【国際特許分類】
G06F 9/48 20060101AFI20220427BHJP
【FI】
G06F9/48 370
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021552525
(86)(22)【出願日】2020-09-25
(85)【翻訳文提出日】2021-09-03
(86)【国際出願番号】 US2020052675
(87)【国際公開番号】W WO2021062123
(87)【国際公開日】2021-04-01
(32)【優先日】2019-09-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-09-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-09-17
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】520353802
【氏名又は名称】テンセント・アメリカ・エルエルシー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ソダガァ,イラジ
(57)【要約】
本開示の態様は、ワークフローのワークフロー情報を受信するように構成された処理回路を含む方法及び装置を提供する。処理回路は、ワークフロー情報に基づいて、第1の処理タスク及び第2の処理タスクを含む複数の処理タスクと、第1のバッファリングタスクとを含むワークフローを生成する。第1の処理タスクは、入力データのサブセットが処理され、第1の処理済みサブセットデータとして第1のバッファリングタスクに出力される実行状態に入るようにされる。第1の処理タスクは、第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータの量が第1の閾値に等しいことに基づいて、実行状態から非実行状態に遷移させるようにされる。その後、第2の処理タスクは、第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータが処理される実行状態に入るようにされる。
【特許請求の範囲】
【請求項1】
処理回路が実行する、ワークフローを処理するための方法であって、
前記ワークフローのワークフロー情報を受信するステップと、
前記ワークフロー情報に基づいて、入力データを処理するための前記ワークフローを生成するステップであって、前記ワークフローは、複数の処理タスクと、第1のバッファリングタスクとを含み、前記複数の処理タスクは、第1の処理タスクと、第2の処理タスクとを含む、ステップと、
前記第1の処理タスクに対して、前記入力データのサブセットが前記第1の処理タスクによって処理され、第1の処理済みサブセットデータとして前記第1のバッファリングタスクに出力される実行状態に入らせるステップと、
前記第1の処理タスクに対して、前記第1のバッファリングタスクに記憶されている前記第1の処理済みサブセットデータの量が第1の閾値に等しいことに基づいて、前記実行状態から非実行状態に遷移させるステップと、
前記第1の処理タスクが前記非実行状態に遷移した後に、前記第2の処理タスクに対して、前記第1のバッファリングタスクに記憶されている前記第1の処理済みサブセットデータが前記第2の処理タスクによって処理される実行状態に入らせるステップと
を含む方法。
【請求項2】
前記第2の処理タスクは、前記処理された第1の処理済みサブセットデータを第2の処理済みサブセットデータとして、前記実行状態の第2のバッファリングタスクに出力するように構成され、
当該方法は、(i)前記第2のバッファリングタスクに記憶されている前記第2の処理済みサブセットデータの量が第2の閾値に等しいことと、(ii)前記第1のバッファリングタスクに記憶されている前記第1の処理済みサブセットデータの量が前記第2の処理タスクに提供されることとのうち1つに基づいて、前記第2の処理タスクに対して、前記実行状態から非実行状態に遷移させるステップを更に含む、請求項1に記載の方法。
【請求項3】
前記複数の処理タスクは、それぞれのタスクセグメント期間(TSD)で構成され、
前記複数の処理タスクのそれぞれは、前記TSD以外のデータから独立して、前記それぞれのTSDに等しいサイズを有するデータ量を処理するように構成され、
当該方法は、ワークフローセグメント期間(WSD)を、前記TSDの最小公倍数になるように決定するステップであって、前記第1の閾値は、(i)前記TSDと、(ii)前記WSDと、(iii)前記WSD及び前記第1の処理タスクが連続的に実行するように構成されるステップの数を示すパラメータSとのうち1つに基づく、ステップを更に含む、請求項1又は2に記載の方法。
【請求項4】
前記第1のバッファリングタスクは、インデックス付き先入れ先出し(iFIFO)バッファで構成されたiFIFOタスクであり、
前記iFIFOタスクは、前記入力データのバッファセグメントを記憶するように構成され、各バッファセグメントは、開始時間、期間及び長さでインデックス付けされ、iFIFOバッファサイズは、前記iFIFOバッファ内のバッファセグメントの前記長さ及び数に基づき、
前記iFIFOタスクは、前記iFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記第1の閾値に等しいことを示すイベントを生成するように構成され、
前記iFIFOタスクは、前記iFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記第2の処理タスクに提供されることを示す他のイベントを生成するように構成される、請求項3に記載の方法。
【請求項5】
前記第1のバッファリングタスクは、複数のiFIFOバッファで構成されたマルチインデックス先入れ先出し(MiFIFO)タスクであり、
前記MiFIFOタスクは、前記第1の処理タスクについて1つ以上の出力を提供するように構成され、前記複数のiFIFOバッファのそれぞれは、前記1つ以上の出力のそれぞれからの前記入力データのバッファセグメントを記憶するように構成され、各バッファセグメントは、開始時間、期間及び長さでインデックス付けされ、各iFIFOバッファのバッファサイズは、前記それぞれのiFIFOバッファ内のバッファセグメントの前記長さ及び数に基づき、
前記MiFIFOタスクは、前記MiFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記第1の閾値に等しいことを示すイベントを生成するように構成され、
前記MiFIFOタスクは、前記MiFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記第2の処理タスクに提供されることを示す他のイベントを生成するように構成される、請求項3に記載の方法。
【請求項6】
前記第1の処理タスクが前記非実行状態にある場合、前記第1の処理タスクの状態情報は記憶されず、前記非実行状態は、アイドル状態と破棄状態とのうち1つを含む、請求項1乃至5のうちいずれか1項に記載の方法。
【請求項7】
前記ワークフローは、前記iFIFOタスクを含む複数のバッファリングタスクを含み、
前記複数の処理タスクの各入力は、前記入力データのうち1つ及び前記複数のバッファリングタスクのうち1つ以上からのものであり、
前記複数の処理タスクのうち1つのみが、いずれかの時点で前記実行状態にあることが許容される、請求項4に記載の方法。
【請求項8】
前記入力データは、前記入力データの前記サブセットと、前記入力データの他のサブセットとを含み、
前記ワークフローは、前記iFIFOタスクを含む複数のバッファリングタスクを含み、
前記複数の処理タスクの各入力は、前記入力データのうち1つ及び前記複数のバッファリングタスクのうち1つ以上からのものであり、
当該方法は、
前記複数の処理タスクによって前記入力データの前記サブセットを順次処理するステップと、
前記入力データの前記サブセットが前記複数の処理タスクによって処理された後に、前記複数の処理タスクによって前記入力データの前記他のサブセットを順次処理するステップであって、前記複数の処理タスク内の残りの処理タスクは、非実行状態にある、ステップと
を更に含み、
前記複数の処理タスクのうち1つのみが、いずれかの時点で前記実行状態にあることが許容される、請求項4に記載の方法。
【請求項9】
前記ワークフローは、前記MiFIFOタスクを含む複数のバッファリングタスクを含み、
前記複数の処理タスクの各入力は、前記入力データのうち1つ及び前記複数のバッファリングタスクのうち1つ以上からのものであり、
前記複数の処理タスクのうち1つのみが、いずれかの時点で前記実行状態にあることが許容される、請求項5に記載の方法。
【請求項10】
前記入力データは、前記入力データの前記サブセットと、前記入力データの他のサブセットとを含み、
前記ワークフローは、前記MiFIFOタスクを含む複数のバッファリングタスクを含み、
前記複数の処理タスクの各入力は、前記入力データのうち1つ及び前記複数のバッファリングタスクのうち1つ以上からのものであり、
当該方法は、
前記複数の処理タスクによって前記入力データの前記サブセットを順次処理するステップと、
前記入力データの前記サブセットが前記複数の処理タスクによって処理された後に、前記複数の処理タスクによって前記入力データの前記他のサブセットを順次処理するステップであって、前記複数の処理タスク内の残りの処理タスクは、非実行状態にある、ステップと
を含み、
前記複数の処理タスクのうち1つのみが、いずれかの時点で前記実行状態にあることが許容される、請求項5に記載の方法。
【請求項11】
処理回路が実行する、複数のワークフローを処理するための方法であって、
前記複数のワークフローのワークフロー情報を受信するステップと、
前記ワークフロー情報に基づいて、入力データを処理するための前記複数のワークフローを生成するステップであって、前記複数のワークフローのうち少なくとも1つは、複数の処理タスクを含み、前記複数のワークフローは、第1のワークフローと、第2のワークフローとを含む、ステップと、
前記第1のワークフローに対して、前記入力データのサブセットが前記第1のワークフローによって処理され、第1の処理済みサブセットデータとしてバッファリングタスクに出力される実行状態に入らせるステップと、
前記バッファリングタスクに記憶されている前記第1の処理済みサブセットデータの量が閾値に等しいことに基づいて、前記第1のワークフローを前記実行状態から非実行状態に遷移させるステップと、
前記第1のワークフローが前記非実行状態に遷移した後に、前記第2のワークフローに対して、前記バッファリングタスクに記憶されている前記第1の処理済みサブセットデータが前記第2のワークフローによって処理される実行状態に入らせるステップと
を含む方法。
【請求項12】
前記第1のワークフローの前記非実行状態は、アイドル状態と破棄状態とのうち1つを含み、
前記第1のワークフローが前記非実行状態にある場合、前記第1のワークフローの状態情報は記憶されず、
前記第1のワークフローは、前記入力データの前記サブセット以外の残りのサブセットから独立して、前記入力データの前記サブセットを処理するように構成される、請求項11に記載の方法。
【請求項13】
前記バッファリングタスクは、iFIFOバッファで構成されたiFIFOタスクであり、
前記iFIFOタスクは、前記入力データのバッファセグメントを記憶するように構成され、各バッファセグメントは、開始時間、期間及び長さでインデックス付けされ、iFIFOバッファサイズは、前記iFIFOバッファ内のバッファセグメントの前記長さ及び数に基づき、
前記iFIFOタスクは、前記iFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記閾値に等しいことを示すイベントを生成するように構成され、
前記iFIFOタスクは、前記iFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記第2のワークフローに提供されることを示す他のイベントを生成するように構成される、請求項11又は12に記載の方法。
【請求項14】
前記バッファリングタスクは、複数のiFIFOバッファで構成されたマルチインデックス先入れ先出し(MiFIFO)タスクであり、
前記MiFIFOタスクは、前記第1のワークフローについて1つ以上の出力を提供するように構成され、前記複数のiFIFOバッファのそれぞれは、前記1つ以上の出力のそれぞれからの前記入力データのバッファセグメントを記憶するように構成され、各バッファセグメントは、開始時間、期間及び長さでインデックス付けされ、各iFIFOバッファのバッファサイズは、前記それぞれのiFIFOバッファ内のバッファセグメントの前記長さ及び数に基づき、
前記MiFIFOタスクは、前記MiFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記閾値に等しいことを示すイベントを生成するように構成され、
前記MiFIFOタスクは、前記MiFIFOタスクに記憶されている前記第1の処理済みサブセットデータの量が前記第2のワークフローに提供されることを示す他のイベントを生成するように構成される、請求項11又は12に記載の方法。
【請求項15】
処理回路を含む、ワークフローを処理するための装置であって、
前記処理回路は、
請求項1乃至10のうちいずれか1項に記載の方法を実行するように構成される、装置。
【請求項16】
処理回路を含む、ワークフローを処理するための装置であって、
前記処理回路は、
請求項11乃至14のうちいずれか1項に記載の方法を実行するように構成される、装置。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願への相互参照]
本出願は、2020年9月17日に出願された米国特許出願第17/024,193号「Method and Apparatus for a Step-Enabled Workflow」の優先権の利益を主張する。当該出願は、2019年9月28日に出願された米国仮出願第62/907,627号「Step-Enabled Stateless Workflows for Cloud Computing」及び2019年9月28日に出願された米国仮出願第62/907,625号「Indexed FIFO Functions for Segmented Processing in Cloud」の優先権の利益を主張する。先の出願の全開示の内容を参照により援用する。
【0002】
[技術分野]
本開示は、概して1つ以上のワークフローの処理を含むデータ処理に関連する実施形態を記載する。
【背景技術】
【0003】
本明細書で提供される背景技術の説明は、本開示の関連内容を一般的に提示するためのものである。本発明の発明者の研究は、当該研究がこの背景技術の段落に記載されている範囲において、また、出願時に他の点では従来技術として適していない可能性がある説明の側面において、本開示に対する従来技術として明示的にも暗示的にも認められるものではない。
【0004】
ワークフローは、データ処理システムにおいて、メディアデータのようなデータを処理するためのデータ処理において使用できる。いくつかの例では、ワークフローは多数の処理タスクを含む。多数のタスクがデータ処理に並行して実行される場合、データ処理システムは大量のリソースを投入する必要がある。
【発明の概要】
【0005】
本開示の態様は、1つ以上のワークフローを処理するための方法及び装置を提供する。当該装置は、ワークフローのワークフロー情報を受信するように構成された処理回路を含む。処理回路は、ワークフロー情報に基づいて、入力データを処理するためのワークフローを生成する。ワークフローは、複数の処理タスクと、第1のバッファリングタスクとを含む。複数の処理タスクは、第1の処理タスクと、第2の処理タスクとを含む。処理回路は、第1の処理タスクに対して、入力データのサブセットが第1の処理タスクによって処理され、第1の処理済みサブセットデータとして第1のバッファリングタスクに出力される実行状態に入らせる。処理回路は、第1の処理タスクに対して、第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータの量が第1の閾値に等しいことに基づいて、実行状態から非実行状態に遷移させる。第1の処理タスクが非実行状態に遷移した後に、処理回路は、第2の処理タスクに対して、第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータが第2の処理タスクによって処理される実行状態に入らせる。
【0006】
一実施形態では、第2の処理タスクは、処理された第1の処理済みサブセットデータを第2の処理済みサブセットデータとして、実行状態の第2のバッファリングタスクに出力するように構成される。処理回路は、(i)第2のバッファリングタスクに記憶されている第2の処理済みサブセットデータの量が第2の閾値に等しいことと、(ii)第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータの量が第2の処理タスクに提供されることとのうち1つに基づいて、第2の処理タスクに対して、実行状態から非実行状態に遷移させる。
【0007】
一実施形態では、複数の処理タスクは、それぞれのタスクセグメント期間(TSD, task segment duration)で構成される。複数の処理タスクのそれぞれは、TSD以外のデータから独立して、それぞれのTSDに等しいサイズを有するデータ量を処理するように構成される。処理回路は、ワークフローセグメント期間(WSD, workflow segment duration)を、TSDの最小公倍数になるように決定する。第1の閾値は、(i)TSDと、(ii)WSDと、(iii)WSD及び第1の処理タスクが連続的に実行するように構成されるステップの数を示すパラメータSとのうち1つに基づいてもよい。
【0008】
一実施形態では、第1のバッファリングタスクは、インデックス付き先入れ先出し(iFIFO, indexed first-in-first-out)バッファで構成されたiFIFOタスクである。iFIFOタスクは、入力データのバッファセグメントを記憶するように構成される。各バッファセグメントは、開始時間、期間及び長さでインデックス付けされてもよい。iFIFOバッファサイズは、iFIFOバッファ内のバッファセグメントの長さ及び数に基づいてもよい。iFIFOタスクは、iFIFOタスクに記憶されている第1の処理済みサブセットデータの量が第1の閾値に等しいことを示すイベントを生成するように構成される。iFIFOタスクは、iFIFOタスクに記憶されている第1の処理済みサブセットデータの量が第2の処理タスクに提供されることを示す他のイベントを生成するように構成される。
【0009】
一実施形態では、第1のバッファリングタスクは、複数のiFIFOバッファで構成されたマルチインデックス先入れ先出し(MiFIFO, multi-index first-in-first-out)タスクである。MiFIFOタスクは、第1の処理タスクについて1つ以上の出力を提供するように構成される。複数のiFIFOバッファのそれぞれは、1つ以上の出力のそれぞれからの入力データのバッファセグメントを記憶するように構成されてもよい。各バッファセグメントは、開始時間、期間及び長さでインデックス付けされてもよい。各iFIFOバッファのバッファサイズは、それぞれのiFIFOバッファ内のバッファセグメントの長さ及び数に基づいてもよい。MiFIFOタスクは、MiFIFOタスクに記憶されている第1の処理済みサブセットデータの量が第1の閾値に等しいことを示すイベントを生成するように構成される。MiFIFOタスクは、MiFIFOタスクに記憶されている第1の処理済みサブセットデータの量が第2の処理タスクに提供されることを示す他のイベントを生成するように構成される。
【0010】
一実施形態では、第1の処理タスクが非実行状態にある場合、第1の処理タスクの状態情報は記憶されない。非実行状態は、アイドル状態と破棄状態とのうち1つを含む。
【0011】
一実施形態では、ワークフローは、iFIFOタスクを含む複数のバッファリングタスクを含む。複数の処理タスクの各入力は、入力データのうち1つ及び複数のバッファリングタスクのうち1つ以上からのものであり、複数の処理タスクのうち1つのみが、いずれかの時点で実行状態にあることが許容される。
【0012】
一実施形態では、入力データは、入力データのサブセットと、入力データの他のサブセットとを含む。ワークフローは、iFIFOタスクを含む複数のバッファリングタスクを含む。複数の処理タスクの各入力は、入力データのうち1つ及び複数のバッファリングタスクのうち1つ以上からのものである。処理回路は、複数の処理タスクによって入力データのサブセットを順次処理してもよい。入力データのサブセットが複数の処理タスクによって処理された後に、処理回路は、複数の処理タスクによって入力データの他のサブセットを順次処理する。複数の処理タスク内の残りの処理タスクは、非実行状態でもよい。複数の処理タスクのうち1つのみが、いずれかの時点で実行状態にあることが許容される。
【0013】
一実施形態では、ワークフローは、MiFIFOタスクを含む複数のバッファリングタスクを含む。複数の処理タスクの各入力は、入力データのうち1つ及び複数のバッファリングタスクのうち1つ以上からのものであり、複数の処理タスクのうち1つのみが、いずれかの時点で実行状態にあることが許容される。
【0014】
一実施形態では、入力データは、入力データのサブセットと、入力データの他のサブセットとを含む。ワークフローは、MiFIFOタスクを含む複数のバッファリングタスクを含む。複数の処理タスクの各入力は、入力データのうち1つ及び複数のバッファリングタスクのうち1つ以上からのものである。処理回路は、複数の処理タスクによって入力データのサブセットを順次処理してもよい。入力データのサブセットが複数の処理タスクによって処理された後に、処理回路は、複数の処理タスクによって入力データの他のサブセットを順次処理してもよい。複数の処理タスク内の残りの処理タスクは、非実行状態でもよい。複数の処理タスクのうち1つのみが、いずれかの時点で実行状態にあることが許容される。
【0015】
処理回路は、複数のワークフローのワークフロー情報を受信するように構成されてもよい。処理回路は、ワークフロー情報に基づいて、入力データを処理するための複数のワークフローを生成する。複数のワークフローのうち少なくとも1つは、複数の処理タスクを含む。複数のワークフローは、第1のワークフローと、第2のワークフローとを含む。処理回路は、第1のワークフローに対して、入力データのサブセットが第1のワークフローによって処理され、第1の処理済みサブセットデータとしてバッファリングタスクに出力される実行状態に入らせる。処理回路は、バッファリングタスクに記憶されている第1の処理済みサブセットデータの量が閾値に等しいことに基づいて、第1のワークフローを実行状態から非実行状態に遷移させる。第1のワークフローが非実行状態に遷移した後に、処理回路は、第2のワークフローに対して、バッファリングタスクに記憶されている第1の処理済みサブセットデータが第2のワークフローによって処理される実行状態に入らせる。
【0016】
一実施形態では、第1のワークフローの非実行状態は、アイドル状態と破棄状態とのうち1つを含む。第1のワークフローが非実行状態にある場合、第1のワークフローの状態情報は記憶されない。第1のワークフローは、入力データのサブセット以外の残りのサブセットから独立して、入力データのサブセットを処理するように構成される。
【0017】
一実施形態では、バッファリングタスクは、iFIFOバッファで構成されたiFIFOタスクである。iFIFOタスクは、入力データのバッファセグメントを記憶するように構成される。各バッファセグメントは、開始時間、期間及び長さでインデックス付けされてもよい。iFIFOバッファサイズは、iFIFOバッファ内のバッファセグメントの長さ及び数に基づいてもよい。iFIFOタスクは、iFIFOタスクに記憶されている第1の処理済みサブセットデータの量が閾値に等しいことを示すイベントを生成するように構成される。iFIFOタスクは、iFIFOタスクに記憶されている第1の処理済みサブセットデータの量が第2のワークフローに提供されることを示す他のイベントを生成するように構成される。
【0018】
一実施形態では、バッファリングタスクは、複数のiFIFOバッファで構成されたMiFIFOタスクである。MiFIFOタスクは、第1のワークフローについて1つ以上の出力を提供するように構成される。複数のiFIFOバッファのそれぞれは、1つ以上の出力のそれぞれからの入力データのバッファセグメントを記憶するように構成される。各バッファセグメントは、開始時間、期間及び長さでインデックス付けされる。各iFIFOバッファのバッファサイズは、それぞれのiFIFOバッファ内のバッファセグメントの長さ及び数に基づいてもよい。MiFIFOタスクは、MiFIFOタスクに記憶されている第1の処理済みサブセットデータの量が閾値に等しいことを示すイベントを生成するように構成される。MiFIFOタスクは、MiFIFOタスクに記憶されている第1の処理済みサブセットデータの量が第2のワークフローに提供されることを示す他のイベントを生成するように構成される。
【0019】
また、本開示の態様は、コンピュータによって実行されたとき、コンピュータに1つ以上のワークフローを処理するための方法のいずれかを実行させる命令を記憶した非一時的なコンピュータ読み取り可能媒体を提供する。
【図面の簡単な説明】
【0020】
開示の対象物の更なる特徴、性質及び様々な利点は、以下の詳細な説明及び添付の図面からより明らかになる。
【
図1】本開示の一実施形態による例示的なデータ処理システムを示す。
【
図2A】本開示の一実施形態によるワークフローの例を示す。
【
図2B】本開示の一実施形態によるワークフローの例を示す。
【
図2C】本開示の一実施形態によるワークフローの例を示す。
【
図2D】本開示の一実施形態による複数のワークフローの例を示す。
【
図3】本開示の一実施形態によるタスクについてのタスクセグメント期間(TSD)の例を示す。
【
図4A】本開示の一実施形態による処理タスクの例示的なタスクライフサイクルを示す。
【
図4B】本開示の一実施形態によるワークフローの例示的なタスクライフサイクルを示す。
【
図5】本開示の一実施形態によるワークフローの例を示す。
【
図6】本開示の一実施形態によるプロセスを概略的に示すフローチャートを示す。
【
図7】本開示の一実施形態によるプロセスを概略的に示すフローチャートを示す。
【
図8】本開示の一実施形態によるプロセスを概略的に示すフローチャートを示す。
【
図9】一実施形態によるコンピュータシステムの概略図を示す。
【発明を実施するための形態】
【0021】
開示の態様は、データ処理(例えば、ネットワークにおけるメディア処理)に関連する。データ処理ソース(例えば、ネットワークベースのメディア処理(NBMP, network-based media processing)ソース)は、要求されたデータ処理(例えば、要求されたメディア処理)を記述し、処理されるべきデータ(例えば、メディアデータ)の制御情報を提供してもよい。したがって、ワークフローマネージャ(例えば、NBMPワークフローマネージャ)は、ワークフロー(例えば、メディア処理ワークフロー、NBMPワークフロー)を確立してもよく、ワークフローの準備ができていることをデータ処理ソース(例えば、NBMPソース)に通知してもよく、したがって、データ処理が開始してもよい。次いで、データソース(例えば、メディアソース)は、例えば、処理のためにデータをネットワークに送信し始めてもよい。
【0022】
一般的に、ワークフローは、処理タスク又はタスク(例えば、メディア処理タスク)を含んでもよい。接続グラフは、接続を使用して処理タスクの間の入出力関係を表すことによってワークフローを表してもよい。したがって、ワークフローは、処理タスクの接続グラフとして考えられてもよい。各タスクは、ビデオ復号、ビデオスティッチ(stitch)、ビデオ符号化等のような操作(例えば、メディア処理操作)を実行してもよい。ワークフローマネージャは、各タスク及びワークフロー出力を構成及び監視することによって、ワークフローの正確な操作を確保してもよい。ワークフローマネージャは、処理機能(例えば、メディア処理機能)を選択し、例えば、データ処理ソース(例えば、NBMPソース)から受信したワークフロー記述に基づいて、処理機能(例えば、メディア処理機能)をそれぞれのタスクとしてインスタンス化するように構成されてもよい。
【0023】
処理タスクを実行するように構成された処理エンティティ(例えば、メディア処理エンティティ)は、確立、ロード、インスタンス化及び監視されてもよい。アプリケーションプログラミングインタフェース(API, application programming interfaces)のようなインタフェースは、データ処理ソース及びワークフローマネージャと、ワークフローマネージャ及び処理タスクと、適切な機能を発見するためのAPIとの間で定義されてもよい。一般的に、データ処理システム又はプラットフォーム(例えば、NBMPプラットフォーム)は、データフォーマット(例えば、メディアフォーマット)及びプロトコルに非依存(agnostic)でもよい。データ処理システムは、データソース(例えば、メディアソース)とワークフローマネージャとタスクとの間で交換されるデータのためのデータ(例えば、メディアデータ)、メタデータ及び補足情報フォーマットを識別して伝達してもよい。
【0024】
データ処理フレームワーク(例えば、NBMPフレームワーク)は、データ処理のためにデジタルネットワークを通じて接続された様々なエンティティの間で、データフォーマットとAPIとの双方を含むインタフェースを定義してもよい。ユーザは、効率的且つインテリジェントな処理のために、ユーザ操作にリモートでアクセスして構成してもよい。データは、例えば、ネットワークにアップロードされてもよく、処理タスクがインスタンス化されてもよく、処理タスクが更に構成されてもよい。データ処理フレームワークは、データ処理パイプライン(例えば、メディア処理パイプライン)の動的な作成と、処理されるデータ及びメタデータへのリアルタイムの方法又は先送りした方法でのアクセスを可能にする。データソースとワークフローマネージャとデータ処理パイプライン内のデータ処理エンティティとの間で使用されるデータフォーマット及びメタデータフォーマットが指定されてもよい。
【0025】
データ処理フレームワークは、クライアント(例えば、クリエータ、サービスプロバイダ及びデジタルメディアの消費者)が、例えば、ネットワークにおいてデータ処理エンティティによって実行されるべきデータ処理操作を記述することを可能にしてもよい。ワークフローは、インタフェース(例えば、NBMP API)を通じてアクセス可能なデータ処理機能のセットを構成することによって記述されてもよい。データ処理エンティティ(例えば、メディア処理エンティティ(MPE, media processing entity))は、データソース又は他のタスクから受信したデータ及び関連するメタデータに適用される処理タスクを実行してもよい。データ処理エンティティ(例えば、MPE)は、処理タスクを構成、管理及び監視するための機能を提供してもよい。データ処理タスクは、データ及びメタデータ入力に適用され、データシンク(例えば、メディアシンク)又は他のデータ処理タスク(例えば、メディア処理タスク)によって消費されるべきデータ及び関連するメタデータ出力を生成するプロセスでもよい。
【0026】
データ処理フレームワークは、ストリーミング、ファイル配信、プッシュベースのプログレッシブダウンロード、ハイブリッド配信、マルチパス及び異種ネットワーク環境のような様々な配信方法をサポートしてもよい。
【0027】
図1は、本開示の一実施形態による例示的なデータ処理システム(例えば、NBMPシステム、NBMP参照アーキテクチャ、NBMPアーキテクチャ)(100)を示す。データ処理システム(100)は、データソース(例えば、NBMPソース、NBMPソースエンティティ)(101)、ワークフローマネージャ(例えば、NBMPワークフローマネージャ)(103)、機能リポジトリ(105)、データソース又はデータソースエンティティ(例えば、メディアソース、メディアソースエンティティ)(111)、データ処理エンティティ(例えば、MPE)(113)、データシンク又はデータシンクエンティティ(例えば、メディアシンク又はメディアシンクエンティティ)(115)、第三者エンティティ等のような複数のエンティティを含んでもよい。データ処理システム(100)は、更なるデータソース、データシンク及び/又はデータ処理エンティティを含んでもよい。データ処理システム(100)は、ネットワーク内の1つ以上の処理エンティティの間でデータを処理してもよい。様々なデータ及びデータについての制御情報(又は制御データ)のような情報は、データ処理システム(100)内の複数のエンティティの間で通信されてもよい。
【0028】
説明の目的で関連内容を提供するために、データ処理システム(100)は、以下ではNBMPシステム(100)として記載される。説明は、如何なるデータ処理システムに適切に適合されてもよい。
【0029】
NBMPソース(101)は、ネットワーク内のメディア処理を記述してもよく或いは他の方法で示してもよい。機能リポジトリ(105)は、様々なNBMP機能のNBMP機能記述を含んでもよい。NBMPソース(101)及びワークフローマネージャ(103)は、機能リポジトリ(105)からNBMP機能記述又は機能を検索してもよい。NBMP機能は、スタンドアローンの自己完結型メディア処理操作の実装及び/又は対応する操作の記述を示してもよい。
【0030】
処理タスク又はタスクは、MPE(113)によって実行されるNBMP機能の実行時インスタンスを示してもよい。NBMPワークフロー又はワークフローは、要求されたメディア処理を実現する1つ以上の接続されたタスクのグラフ(例えば、有向非循環グラフ(DAG, directed acyclic graph))によって表されてもよい。ワークフローマネージャ(103)は、例えば、ワークフロー記述ドキュメント(WDD, workflow description document)に基づいて、タスクを提供してタスクを接続し、ワークフローを作成、制御、管理及び監視してもよい。
【0031】
メディアソース(111)は、ワークフローによって処理されるべきメディアコンテンツ(例えば、メディアデータ、補足情報)を提供してもよい。補足情報は、メディアデータに関連するメタデータ又は補助情報を含んでもよい。メディアソース(111)は、ワークフローへの入力を提供してもよい。メディアシンク(115)は、ワークフローの出力を消費してもよい。MPE(113)は、1つ以上のメディア処理タスクを実行し、メディアコンテンツを処理してもよい。
【0032】
NBMPシステム(100)内の異なるエンティティ(例えば、NBMPソース(101)、ワークフローマネージャ(103)及びMPE(113))は、APIを使用し、メディアサービス要求を呼び出して応答してもよい。APIは、NBMPワークフローAPI又はワークフローAPIと、機能発見APIと、タスクAPIとを含んでもよい。ワークフローAPIは、NBMPソース(101)とワークフローマネージャ(103)との間のインタフェースを提供してもよい。タスクAPIは、ワークフローマネージャ(103)とメディア処理タスクとの間のインタフェースを提供してもよい。機能発見APIは、ワークフローマネージャ(103)/NBMPソース(101)と機能リポジトリ(105)との間のインタフェースを提供してもよい。
【0033】
上記のNBMPインタフェースは、ネットワーク内のメディア処理ワークフローを作成及び制御するために使用されてもよい。NBMPシステム(100)は、制御プレーン及びメディアプレーン(又はメディアデータプレーン)に分割されてもよい。制御プレーンは、ワークフローAPIと、機能発見APIと、タスクAPIとを含んでもよい。
【0034】
ワークフローAPIは、NBMPソース(101)によってメディア処理ワークフローを作成及び制御するために使用されてもよい。NBMPソース(101)は、ワークフローAPIを使用し、ネットワーク内のメディア処理を構成及び制御するためにワークフローマネージャ(103)と通信してもよい。NBMPソース(101)がワークフローリソース(WR, workflow resource)をワークフローAPIの操作に含めることによって要求をワークフローマネージャ(103)に送信した場合、ワークフローマネージャ(103)は、WR、含まれるWDD及び対応する記述子を解析し、要求された操作に従って適切なアクションを行ってもよい。次いで、ワークフローマネージャ(103)は、応答によって要求を確認してもよい。ワークフローAPI操作は、ワークフローの作成(例えば、CreateWorkflow)、ワークフローの更新(例えば、UpdateWorkflow)、ワークフローの削除(例えば、DeleteWorkflow)、ワークフローの検索(例えば、RetrieveWorkflow)等を含む。
【0035】
機能発見APIは、ワークフローマネージャ(103)及び/又はNBMPソース(101)がメディア処理ワークフローの一部としてロードできるメディア処理機能を発見する手段を提供してもよい。
【0036】
タスクAPIは、ワークフローマネージャ(103)によって実行時にタスク(例えば、MPE(113)によって実行されるタスク1及びタスク2)を構成及び監視するために使用されてもよい。タスクAPIは、例えば、タスクのリソースがMPE(113)において割り当てられた後に、ワークフローマネージャ(103)によるメディア処理タスクの構成のためのインタフェースを定義してもよい。タスクAPI操作は、タスクの生成(例えば、CreateTask)、タスクの更新(例えば、UpdateTask)、タスクの取得(例えば、GetTask)、タスクの削除(例えば、DeleteTask)等を含んでもよい。
【0037】
メディアプレーンでは、NBMPソース(111)とタスクとの間及びタスクの間のメディアフォーマット、メタデータ及び補足情報フォーマットが定義されてもよい。
【0038】
ワークフロー記述(WD, workflow description)は、NBMPソース(101)からワークフローマネージャ(103)に渡されてもよい。WDは、ワークフローについての入力データ、出力データ、機能及び他の要件のような情報を記述してもよい。
【0039】
ワークフローマネージャ(103)は、NBMPソース(101)からWDDを受信し、要求されたメディア処理のためのワークフローを構築してもよい。ワークフロー手順において、メディア処理機能は、例えば、機能リポジトリ(105)から選択されてもよく、次いで、対応するメディア処理タスクが構成され、1つ以上のMPE(例えば、MPE(113)を含む)のセットに分配されてもよい。
【0040】
機能リポジトリ(105)によって提供される機能のセットは、NBMPソース(101)及びワークフローマネージャ(103)によって読み取られてもよい。一実施形態では、NBMPソース(101)は、機能リポジトリ(105)内の機能のセットを使用してワークフローの作成を要求する。したがって、NBMPソース(101)は、ワークフローのための機能を選択するように構成される。NBMPソース(101)は、以下に説明するようにワークフローの作成を要求してもよい。NBMPソース(101)は、ワークフローが作成されるべきメディア処理タスクの記述を使用してもよく、メディア処理タスクの入力及び出力の接続を定義するための接続マップを指定してもよい。ワークフローマネージャ(103)がNBMPソース(101)から上記の情報を受信した場合、ワークフローマネージャ(103)は、それぞれの機能名に基づいてメディア処理タスクをインスタンス化し、接続マップに従ってメディア処理タスクを接続してもよい。
【0041】
或いは、NBMPソース(101)は、ワークフローマネージャ(103)がワークフローを構築できるキーワードのセットを使用して、ワークフローの作成を要求してもよい。したがって、NBMPソース(101)は、ワークフローに挿入されるべき機能のセットを認識しなくてもよい。NBMPソース(101)は、以下に説明するようにワークフローの作成を要求してもよい。NBMPソース(101)は、ワークフローマネージャ(103)が適切な機能を見つけことができるキーワードのセットを使用してもよく、適切なワークフロー記述を使用してワークフローの要件を指定してもよい。
【0042】
ワークフローマネージャ(103)がNBMPソース(101)から上記の情報(例えば、キーワードのセット)を受信した場合、ワークフローマネージャ(103)は、例えば、処理記述子で指定されたキーワードを使用して適切な機能を検索することにより、ワークフローを作成してもよい。次いで、ワークフローマネージャ(103)は、ワークフロー記述内の他の記述子を使用し、メディア処理タスクを提供し、メディア処理タスクを接続し、最終的なワークフローを作成してもよい。
【0043】
ワークフローマネージャ(103)の処理モデルは、以下のように記述されてもよい。
【0044】
ワークフローマネージャ(103)は、以下のように利用可能なメディア処理機能を発見してもよい。NBMP機能リポジトリ(105)は、要求された処理を満たすことができるメディア処理機能を外部エンティティが照会することを可能にするための機能発見インタフェース(又はAPI)を提供してもよい。ワークフローマネージャ(103)は、メディア処理機能の検索可能なリストを提供するディレクトリサービスにアクセスしてもよい。ワークフローマネージャ(103)は、ワークフロー記述内のメディア処理タスクの記述を使用し、ワークフローにとって適切な機能を見つけてもよい。
【0045】
ワークフローについてのメディア処理タスクの選択は、以下のように記述されてもよい。メディア処理の要求がNBMPソース(101)から受信された場合、ワークフローマネージャ(103)は、機能リポジトリ(105)を検索し、ワークフローを満たすことができる全ての利用可能な機能のリストを見つけてもよい。NBMPソース(101)からのワークフロー記述を使用して、ワークフローマネージャ(103)は、機能リポジトリ(105)からワークフローを実装する機能を見つけもよく、これは、NBMPソース(101)からのメディア処理情報に依存してもよい。メディア処理についての情報は、機能ディレクトリ(105)内の機能についての入出力記述と、要求された処理の記述と、他の記述子の情報とを含んでもよい。ワークフローに含まれるべき適切なメディア処理タスクへのソース要求のマッピングは、ネットワーク内のNBMPの実装の一部でもよい。タスク作成時に入力ポート名及び出力ポート名で入力ソースを参照及びリンクするために、入力ポート及び出力ポートが入力ストリームを参照するために使用されてもよい。
【0046】
タスクとしてインスタンス化されるべき適切な機能の検索は、ワークフローマネージャ(103)によって機能発見APIを使用して実行されてもよい。或いは、ワークフローマネージャ(103)は、機能発見APIを使用して、機能リポジトリ(105)内の一部又は全部の適切な機能の詳細情報を検索してもよい。次いで、ワークフローマネージャ(103)は、NBMPソース(101)からのメディア処理についての情報を、各機能の異なる記述子と比較してもよい。
【0047】
選択されたメディア処理タスクは、ワークフローにおいて構成されてもよい。ワークフローに含まれるべき機能が特定された場合、NBMPワークフローマネージャ(103)は、これらの機能をそれぞれのタスクとしてインスタンス化し、タスクがワークフローに追加できるようにタスクを構成してもよい。NBMPワークフローマネージャ(103)は、NBMPソース(101)から受信したメディア処理情報から構成データを抽出し、対応するタスクを構成してもよい。タスクの構成は、タスクAPI(例えば、NBMPタスクAPI)を使用して実行されてもよい。
【0048】
タスク割り当て及び分配は、以下のように記述されてもよい。ワークフローマネージャ(103)は、ワークフローを使用し、処理の展開を実行し、メディア処理エンティティを構成してもよい。一例として、計算集約的メディア処理要求について、ワークフローマネージャ(103)は、複数の計算インスタンスを設定し、複数の計算インスタンスの間でワークロードを分配してもよい。したがって、ワークフローマネージャ(103)は、必要に応じて複数の計算インスタンスを接続して構成してもよい。例えば、ワークフローマネージャ(103)は、同じタスクを複数のインスタンスに割り当て、選択されたスケジューリングメカニズムを使用して、複数のインスタンスの間でワークロードを分配するロードバランサを提供する。他の例では、ワークフローマネージャ(103)は、同じタスクの異なる操作を異なるインスタンスに割り当てる(例えば、並列操作)。上記の双方の例において、ワークフローマネージャ(103)は、インスタンスの間のワークフローパスを設定してもよく、したがって、適切なワークロードがうまく実現できる。ワークフローマネージャ(103)は、処理されたメディアデータ/ストリームをワークフローグラフ内の次のタスクにプッシュする(又はプルメカニズムを通じてこれらを利用可能にする)ようにタスクを構成してもよい。
【0049】
ワークフローマネージャ(103)がNBMPソース(101)からWDDを受信した場合、ワークフローマネージャ(103)は、ワークフローに挿入されるべきメディア処理機能の選択を実行してもよい。ワークフローに含まれるべきタスクのリストがコンパイルされた場合、ワークフローマネージャ(103)は、ワークフローを準備するためにタスクを接続してもよい。
【0050】
ワークフローマネージャ(103)は、WDDからのグラフ(例えば、DAG)で表されるように、ワークフローを生成してもよい。
図2Aは、本開示の一実施形態によるグラフ(例えば、DAG)(200A)の例を示す。DAG(200A)は、複数のノード(T1)~(T6)と、複数のリンク(又は接続)(202)~(208)とを含んでもよい。一例では、DAG(200A)はワークフロー(200A)を表す。
【0051】
DAG(200A)の各ノードは、ワークフロー(200A)内のメディア処理タスクを表してもよい。メディア処理に限定されない様々なタイプの処理タスクが、他の実施形態で実装されてもよい。DAG(200A)内での第1のノード(例えば、ノード(T1))を第2のノード(例えば、ノード(T2))に接続するリンク(例えば、リンク(202))は、第2のノード(例えば、ノード(T2))への入力として第1のノード(例えば、ノード(T1))の出力の転送を表してもよい。
【0052】
一般的に、ワークフローは、いずれかの適切な数の入力(又はワークフロー入力)と、いずれかの適切な数の出力(又はワークフロー出力)とを含んでもよい。ワークフロー入力は、メディアソース(111)、他のワークフロー等に接続されてもよく、ワークフロー出力は、メディアシンク(115)、他のワークフロー等に接続されてもよい。ワークフロー(200A)は、入力(201)と、出力(209)及び(210)とを有する。いくつかの実施形態では、ワークフロー(200A)は、中間ノードからの1つ以上の出力を有してもよい。
【0053】
図4Aは、本開示の一実施形態によるメディア処理タスクの例示的なタスクライフサイクル(400)を示す。タスクライフサイクル(400)は、他のタイプの処理タスクに適用されてもよい。メディア処理タスクは、メディア処理タスクの実行の異なる時点で、異なる状態に遷移してもよい。タスクライフサイクル(400)における異なる状態は、インスタンス化状態(401)、アイドル状態(402)、実行状態(403)、エラー状態(404)、破棄状態(405)等を含んでもよい。
【0054】
インスタンス化状態(401):メディア処理タスクは、例えば、onInstantiation遷移を使用して表されるようにインフラストラクチャマネージャのサービスを通じて、メディア処理タスクがワークフローマネージャ(103)によってインスタンス化されたときにインスタンス化状態(401)になる。(例えば、onTaskConfiguration遷移を使用して表されるように)メディア処理タスクが構成された場合、インスタンス化状態(401)は、アイドル状態(402)に遷移(又は変更)されてもよい。或いは、(例えば、onTermination遷移を使用して表されるように)メディア処理タスクが終了した場合、メディア処理タスクは破棄状態(405)に移行してもよい。
【0055】
アイドル状態(402):メディア処理タスクがインスタンス化状態(401)にあり、(例えば、onTaskConfiguration遷移を使用して表されるように)ワークフローマネージャ(103)がタスク構成を実行できる場合、メディア処理タスクはアイドル状態(402)に移行してもよい。アイドル状態(402)において、メディア処理タスクは、適切な処理で構成される。(例えば、onStart遷移を使用して表されるように)メディア処理タスクが開始した場合、メディア処理タスクは実行状態(403)に移行してもよい。或いは、アイドル状態(402)において、メディア処理タスクは再構成され、アイドル状態(402)に留まってもよい。アイドル状態(402)において、(例えば、onTermination遷移を使用して表されるように)メディア処理タスクが終了した場合、メディア処理タスクは破棄状態(405)に移行してもよい。アイドル状態(402)におて、(例えば、onReset遷移を使用して表されるように)メディア処理タスクがリセットされた場合、メディア処理タスクは、インスタンス化状態(401)に移行してもよい。
【0056】
実行状態(403)は、メディア処理タスクがアイドル状態(402)にあり、(例えば、onStart遷移を使用して)メディア処理タスクが開始した場合、メディア処理タスクはアイドル状態(402)から実行状態(403)に移行してもよい。実行状態(403)において、MPE(113)に割り当てられたメディア処理タスクは、メディア処理タスクがワークフローにおける前のメディア処理タスク又はNBMPソース(101)から受信したデータ(例えば、メディアソース(111)からのメディアデータ)を処理してもよい。或いは、実行状態(403)において、(例えば、onTaskConfiguration遷移を使用して表されるように)ワークフローマネージャ(103)がメディア処理タスクの再構成を実行できる場合、且つ、再構成の結果、メディア処理タスクへの現在のメディア/メタデータストリームに対する実行で再構成を処理することを生じる場合、メディア処理タスクは、実行状態(403)に留まってもよい。実行状態(403)において、(例えば、onStop遷移を使用して表されるように)メディア処理タスクが停止した場合又は(例えば、onCompletion遷移を使用して表されるように)完了した場合、メディア処理タスクはアイドル状態(402)に移行してもよい。実行状態(403)において、(例えば、onError遷移を使用して表されるように)メディア処理タスクがエラーに遭遇した場合、メディア処理タスクはエラー状態(404)に移行してもよい。実行状態(403)において、(例えば、onTermination遷移を使用して表されるように)メディア処理タスクが終了した場合、メディア処理タスクは破棄状態(405)に移行してもよい。
【0057】
エラー状態(404):メディア処理タスクがエラーに遭遇し、メディアデータ又はメタデータを処理できない場合、メディア処理タスクはエラー状態(404)になってもよい。(例えば、onErrorHandling遷移を使用して表されるように)エラーに対処すると、メディア処理タスクはアイドル状態(402)に戻ってもよい。或いは、エラー状態(404)の間に、メディア処理タスクがインスタンス化状態(401)に遷移できるように、(例えば、onReset遷移を使用して表されるように)メディア処理タスクがリセットされてもよい。エラー状態(404)において、メディア処理タスクが終了した場合、メディア処理タスクは破棄状態(405)に移行してもよい。
【0058】
破棄状態(405):メディア処理タスクがワークフローマネージャ(103)によって終了された場合、メディア処理タスクは破棄状態(405)になってもよい。メディア処理タスクは廃棄されてもよく、再利用されなくてもよい。
【0059】
メディア処理タスクの状態は、一般的な記述子の「状態」パラメータに反映させてもよい。いくつかの例では、onError遷移を除く上記の遷移のそれぞれは、ワークフローマネージャ(103)によって開始されるタスク操作によって生じてもよい。OnError遷移は、メディア処理タスクの内部状態変化により生じてもよい。
【0060】
図4Bは、本開示の一実施形態によるワークフローの例示的なワークフローライフサイクル(410)を示す。ワークフローは、ワークフローの実行の異なる時点で、異なる状態に遷移してもよい。ワークフローライフサイクル(410)における異なる状態は、インスタンス化状態(411)、アイドル状態(412)、実行状態(413)、エラー状態(414)、破棄状態(415)等を含んでもよい。
【0061】
インスタンス化状態(411):ワークフローは、(例えば、onInstantiation遷移を使用して表されるように)例えば、インフラストラクチャマネージャのサービスを通じて、ワークフローマネージャ(103)によってインスタンス化状態(411)になる。(例えば、onWorkflowConfig遷移を使用して表されるように)ワークフローが構成された場合、ワークフローは、アイドル状態(412)に移行してもよい。或いは、(例えば、onTermination遷移を使用して表されるように)インスタンス化状態(411)の間にワークフローが終了した場合、ワークフローは破棄状態(415)に移行してもよい。
【0062】
アイドル状態(412):ワークフローがインスタンス化状態(412)にあり、(例えば、onWorkflowConfig遷移を使用して表されるように)ワークフローマネージャ(103)がワークフロー構成を実行した場合、ワークフローはアイドル状態(412)に移行してもよい。アイドル状態(412)において、(例えば、インフラストラクチャマネージャを介して)1つ以上のMPEが設定され、MPEにおいて実行するタスクが提供されて構成される。(例えば、onStart遷移を使用して表されるように)ワークフローが開始した場合、ワークフローは実行状態(413)に移行してもよい。或いは、アイドル状態(412)において、ワークフローは再構成されてもよい。ワークフローは、メディアデータ又はメタデータが到着するのを待機するアイドル状態(412)に留まってもよい。アイドル状態(412)において、(例えば、onTermination遷移を使用して表されるように)ワークフローが終了した場合、ワークフローは破棄状態(415)に移行してもよい。アイドル状態(412)におて、(例えば、onReset遷移を使用して表されるように)ワークフローがリセットされた場合、ワークフローは、インスタンス化状態(411)に移行してもよい。
【0063】
実行状態(413)は、ワークフローがアイドル状態(412)にあり、(例えば、onStart遷移を使用して)ワークフローが開始した場合、ワークフローはアイドル状態(412)から実行状態(413)に移行してもよい。実行状態(413)において、NBMPソース(101)からのデータは、ワークフローにおいてMPEにより処理されてもよい。或いは、実行状態(413)において、(例えば、onWorkflowConfig遷移を使用して表されるように)ワークフローマネージャ(103)がワークフローの再構成を実行した場合、且つ、再構成の結果、現在のメディア/メタデータストリームに対する実行で再構成を処理することを生じる場合、ワークフローは、実行状態(413)に留まってもよい。実行状態(413)において、(例えば、onStop遷移を使用して表されるように)ワークフローが停止した場合又は(例えば、onCompletion遷移を使用して表されるように)処理が完了した場合、ワークフローはアイドル状態(412)に移行してもよい。実行状態(413)において、(例えば、onError遷移を使用して表されるように)ワークフローがエラーに遭遇した場合、ワークフローはエラー状態(414)に移行してもよい。実行状態(413)において、(例えば、onTermination遷移を使用して表されるように)ワークフローが終了した場合、ワークフローは破棄状態(415)に移行してもよい。
【0064】
エラー状態(414):ワークフローがエラーに遭遇し、ワークフロー処理を続けることができない場合、ワークフローはエラー状態(414)になってもよい。(例えば、onErrorHandling遷移を使用して表されるように)エラーに対処すると、ワークフローはアイドル状態(412)に戻ってもよい。或いは、エラー状態(414)の間に、ワークフローがインスタンス化状態(411)に遷移できるように、(例えば、onReset遷移を使用して表されるように)ワークフローがリセットされてもよい。エラー状態(414)において、ワークフローが終了した場合、ワークフローは破棄状態(415)に移行してもよい。
【0065】
破棄状態(415):ワークフローがワークフローマネージャ(103)によって終了された場合、ワークフローは破棄状態(415)になってもよい。ワークフローは、再び使用されるようにワークフローについてインスタンス化されてもよい。
【0066】
いくつかの例では、onError遷移を除く上記の遷移のそれぞれは、NBMPソース(101)によって開始されるワークフロー操作によって生じてもよい。OnError遷移は、ワークフローの内部状態変化により生じてもよい。
【0067】
一例では、クラウド上でメディアを処理する概念は、NBMPプロジェクトによって開発されている。しかし、NBMP設計は、関し、報告及び通知のための単一の方法を提供しない。いくつかの例では、報告又は通知のためのメッセージフォーマットが定義されていない。
【0068】
いくつかの例では、NBMPワークフローの部分的な実行は許容されず、したがって、ワークフローにおける全てのタスクは、ワークフローが操作するためにインスタンス化されることになり、全てのタスクは同時に動作する。したがって、基礎のプラットフォームは、ワークフローにおける全てのタスクにリソース(例えば、計算リソース、メモリリソース、帯域幅)を同時に割り当てることになる。リソースの実質的な割り当ては利用可能でない可能性があり、或いは、利用可能であるが高コストである可能性がある。
【0069】
パブリック、プライベート又はハイブリッドのクラウドサービスを利用することによってメディア処理効率、メディアサービスのより高速且つより低コストの展開、及び大規模な展開を提供する能力を増加させるために、本開示の態様は、ワークフローにおけるタスクが一度に1つのステップ及び/又は一度に1つのグループのステップを操作又は実行することを可能にする方法及び装置を提供する。上記の機能又はステップ毎モードは、例えば、全体のワークフローを実行するための十分なリソース(例えば、メモリリソース、計算リソース)が存在しない場合に有利である。本開示において開示される方法及び実施形態は、クラウドコンピューティング上のいずれか適切なワークフローの実装において、或いは、ワークフローを利用するいずれか適切なプラットフォーム上で使用されてもよい。
【0070】
本開示の態様によれば、バッファリング機能(例えば、先入れ先出し機能、以下に説明する先入れ先出し機能の変形)のようなステップモード機能がワークフローに追加されてもよい。ステップモード機能は、複数のワークフローにおける1つ以上のワークフローのタスクについて、ステップベースの操作又はステップ毎の操作を可能にすることができる。したがって、複数のステップがデータを処理するために使用される。ステップモードを使用して、ワークフローはタスクを別々に実行でき、したがって、残りのタスクが実行されていない間に、ワークフローにおけるタスクのサブセットが同時に実行されてもよい。一例では、ワークフローは6つのタスクを含む。一例では、タスクのサブセットは1つのタスクを含み、したがって、1つのタスクは、他の5つのタスクが実行されていない間に実行状態でデータを処理してもよい。他の5つのタスクは非実行状態(例えば、以下に説明するアイドル状態及び/又は破棄状態)にあってもよく、データを処理しない。他の例では、タスクのサブセットは2つのタスクを含み、したがって、2つのタスクは、他の4つのタスクが実行していない間に同時に実行されてもよい。
【0071】
他の例では、複数のワークフローは、第1のワークフローと、第2のワークフローとを含む。第1のワークフローがデータを処理するために実行している場合、第2のワークフローは非実行状態(例えば、以下に説明するアイドル状態又は破棄状態)にあり、データを処理しない。
【0072】
一実施形態では、ワークフローにおけるタスクによって処理されるべきメディアデータは、メディアデータの複数のサブセットを含んでもよい。本開示の態様によれば、メディアデータは、複数のサブセットのうち1つ以上の単位で処理されてもよく、ステップモード(又はステップ毎)で処理されてもよい。ステップサイズは、複数のサブセットのうち1つ以上でもよい。
【0073】
最大のステップサイズは、全体のメディアデータでもよく、メディアデータは1つのステップで処理される。一例では、メディアデータは100個のフレームを含み、10個のサブセットを含む。各サブセットは10個のフレームを含む。メディアデータは、100個のフレームのステップサイズを有する単一のステップで処理されてもよい。或いは、メディアデータは、10個のフレームのステップサイズを有する10個のステップで処理されてもよい。いくつかの実施態様では、ステップサイズは固定される必要はない。例えば、最後のステップは、ワークフローにおける他のステップよりもが小さいステップサイズを有してもよい。
【0074】
各タスクは、1つ以上のステップで実行してもよく、メディアデータの複数のサブセットのうち1つを1つのステップで処理してもよい。特定のタスクは、他のステップが処理できる前又は実行を開始できる前に複数のステップを実行してもよい。
【0075】
タスク実行の各ステップにおいて、メディアデータ(例えば、個の100フレーム)の一部(例えば、10個のフレームのような複数のサブセットのうち1つ)が処理されてもよく、限られた期間(又は限られた長さ、限られたサイズ)を有するタスクの出力(タスク出力とも呼ばれる)が生成されてもよい。次いで、タスクが停止してもよい(例えば、以下に説明するように、タスクがアイドル状態又は破棄状態のような非実行状態に遷移する)。本開示の態様によれば、タスクは、非実行状態であるタスクの状態情報(例えば、内部状態及びデータ)が記憶されないステートレスモードで実行することが許容される。例えば、非実行状態のタスクが終了してもよく、或いは、アイドル状態にされてもよい。一例では、非実行状態はアイドル状態又は破棄状態である。
【0076】
いくつかの例では、タスクに割り当てられたリソースが解放されてもよい。次いで、次のタスクは、非実行状態から実行状態に遷移し、次のタスクの入力時にデータを処理し、限られた期間を有する出力を生成してもよい。その後、次のタスクは、次のタスクの状態情報(例えば、内部状態及びデータなど)が記憶されない非実行状態に遷移してもよく、プロセスは他のタスクを続ける。
【0077】
ワークフローのステッププロセス(又はステップベースのプロセス)の利点は、以下のように記述されてもよい。ワークフローが限られたリソース又は低減したリソースで実行できる。これは、ワークフローにおける1つ又は少数のタスクのみが同時に操作(又は実行)し、ワークフローにおける他のタスクが停止するためである。クラウドサービスを使用するために、高いトラフィックの時間及び/又は高価な日時の間にワークフローを停止することによって、運用コストが低減できる。例えば、ワークフローは、インターネット上の重いトラフィックの間のように、高いトラフィックの時間に停止してもよい。ワークフローは、完全に直列化されてもよく、例えば、ワークフローにおける他のタスクが実行していない間に、全体のメディアデータ(例えば、映画)を処理するための初期タスクを実行し、ワークフローにおける他のタスクが実行していない間に、全体のメディアデータを処理するために次のタスクに移行する。例えば、ステップのサイズ(又は1つのステップで処理するデータの量)は、全体のメディアデータでもよい。したがって、初期タスク(T1)は、全体の映画を1つのステップで実行又は処理してもよい。様々な計算複雑性を有するタスクは、同じハードウェア上で実行されてもよい。より簡単なタスクのステップはより速く実行されてもよく、より複雑なタスクのステップの実行はより多くの時間を要してもよい。ステートレスモードの使用は、タスクがタスクの状態情報(例えば、内部状態)を記憶する必要なく非実行状態にされ得るクラウドプラットフォームのような特定の計算プラットフォームにおいて有利になり得る。
【0078】
本開示の態様は、上記のステップモデルに基づいて、機能及び実行タスクのためのセグメント処理モードを提供する。機能又は対応するタスクは、例えば、特定の量のデータを処理するために、セグメント処理モードをサポートするように設計されてもよい。
【0079】
本開示の態様は、バッファリング機能(例えば、インデックス付き先入れ先出し(FIFO)(iFIFO, indexed first-in-first-out)機能)について説明する。バッファリング機能についてバッファが構成されてもよく、例えば、iFIFO機能についてiFIFOバッファが構成される。一実施形態では、バッファリング機能(例えば、iFIFO機能)は、セグメント(バッファセグメントとも呼ばれる)に対して動作してもよく、したがって、セグメント処理モードを可能にする。本開示によれば、iFIFO機能は、ビットストリームのようなデータのインデックス付きバッファセグメント(エントリとも呼ばれる)を記憶してもよい。iFIFO機能は、(i)FIFOバッファに記憶されている最初のエントリがFIFOバッファから読み出される最初のエントリであるFIFOバッファ、及び(ii)FIFOにおける操作の単位がエントリであるという特性を有してもよい。各エントリは、開始時間si(例えば、ミリ秒(ms))、期間di(例えば、ms)、長さli(例えば、バイト)の属性を有し、整数iはiFIFOバッファ内のエントリの位置を示す。一例では、各エントリ(又は各バッファセグメント)は、対応する開始時間si、期間di及び長さliで(si,di,li)としてインデックス付けされる。iFIFOタスクの構成パラメータは、FIFOバッファの合計サイズ(例えば、エントリ数)と各エントリの最大サイズ(例えば、バイト)を含んでもよい。一例では、iFIFOに記憶できるデータの最大量は、FIFOバッファの合計サイズを各エントリの最大サイズで乗算したものに等しく、バッファサイズと呼ばれてもよい。
【0080】
一例では、iFIFO機能又はiFIFOタスクは、iFIFOタスクに記憶されているデータの量が閾値に等しいことを示すイベント(例えば、フルイベント、部分的フルイベント)を生成するように構成される。iFIFO機能又はiFIFOタスクは、iFIFOタスクに記憶されているデータの量が空であるか或いは処理タスクに提供されることを示す他のイベント(例えば、空イベント)を生成するように構成される。
【0081】
iFIFOバッファのインデックス付き入力又はインデックス付き出力は、iFIFOバッファの入力又は出力における次のバッファセグメントの開始時間、期間及び長さを提供してもよく、したがって、各バッファセグメントはインデックス付けされる。
【0082】
本開示によれば、バッファリング機能は、例えば、複数のビットストリームを処理するためのマルチインデックスFIFO機能(MiFIFO, multi-index FIFO)でもよい。MiFIFO機能は、複数のFIFOバッファを含んでもよい。複数のFIFOバッファのそれぞれは、上記のiFIFOバッファと同一でもよく或いは同様でもよい。複数のFIFOバッファの間での対応するバッファセグメントは、時間領域において整列されてもよい。一例では、MiFIFOは、第1のiFIFOと、第2のiFIFOとを含む。第1のiFIFOは、第1の開始時間及び第1の期間をそれぞれ有する第1のバッファセグメント0~4を含む。第2のiFIFOは、第2の開始時間及び第2の期間をそれぞれ有する第2のバッファセグメント0~4を含む。一例では、第1のバッファセグメント0~4の第1の開始時間は、それぞれ第2のバッファセグメント0~4の第2の開始時間と同じであり、第1のバッファセグメント0~4の第1の期間は、それぞれ第2のバッファセグメント0~4の第2の期間と同じである。MiFIFO機能は、タスクが複数の入力又は複数の出力を有する場合に使用されてもよい。
【0083】
一例では、MiFIFO機能又はMiFIFOタスクは、MiFIFOタスクに記憶されているデータの量が閾値に等しいことを示すイベント(例えば、フルイベント、部分的フルイベント)を生成するように構成される。MiFIFO機能又はMiFIFOタスクは、MiFIFOタスクに記憶されているデータの量が空であるか或いは処理タスクに提供されることを示す他のイベント(例えば、空イベント)を生成するように構成される。
【0084】
バッファリング機能(例えば、iFIFO機能、MiFIFO機能)は、以下に説明するように、空イベント及びフルイベントのようなイベントをサポートしてもよい。バッファ(例えば、iFIFOバッファ)が空である場合、又は複数のバッファ(例えば、MiFIFO機能におけるiFIFOバッファ)が空である場合(例えば、バッファに記憶されたデータが対応するタスクによって読み取られるか或いは対応するタスクに提供された場合)、空イベントが生成されてもよい。フルイベントは、バッファ(例えば、iFIFOバッファ)が一杯である場合、又は複数のバッファ(例えば、MiFIFO機能におけるiFIFOバッファ)のそれぞれが一杯である場合に生成されてもよい。いくつかの例では、バッファリング機能はX%(又は%X)イベントをサポートしてもよい。Xは、0よりも大きく100以下である値のような構成パラメータでもよい。一例では、Xは100よりも小さく、X%イベントは部分的フルイベントと呼ばれてもよい。X%イベントは、各iFIFOバッファがX%だけ一杯である場合に生成されてもよい。iFIFOバッファがX%だけ一杯である場合、イベント(又はX%イベント)が生成されてもよい。Xについて1つ又は複数の値が構成パラメータとして設定されてもよい。バッファリングタスク(例えば、iFIFOタスク、MiFIFOタスク)は、バッファリング機能(例えば、iFIFO機能、MiFIFO機能)を実装するためにインスタンス化されてもよい。
【0085】
バッファリング機能の利点は、以下のように記述されてもよい。バッファリング機能は、バッファを提供し、キャッシュメモリ、ランダムアクセスメモリ、ソリッドステート及びハードディスクのような長期ストレージを含む、いずれか適切なプラットフォームに実装され得る簡単な機能である。イベント(例えば、空イベント、フルイベント)は、バッファの空状態及び一杯状態に基づいて生成されてもよい。したがって、バッファリングタスクは、バッファリングタスクの状態をワークフローマネージャ(103)に効率的に通知できる。
【0086】
開示の態様によれば、ワークフローは、ワークフローにおいて1つ以上のバッファリングタスク(例えば、iFIFOタスク、MiFIFOタスク)を追加することによって、ステップ対応ワークフロー(又はステップベースのワークフロー、ステップ毎のワークフロー、ステップ可能ワークフロー)に変換されてもよい。ステップ対応ワークフローは、ステップモード操作で動作してもよい。バッファリングタスクは、2つのタスクの間で提供されてもよい。これらの2つのタスクは、タスクA及びタスクBを含むことができ、タスクAの出力はタスクBの入力に提供される。
【0087】
図2A~
図2Bを参照すると、ワークフロー(200A)は、通常ワークフロー(200A)と呼ばれる。例えば、通常ワークフロー(200A)は、ステップベースのワークフローではない。通常ワークフロー(200A)は、少なくとも1つのバッファリングタスクを通常ワークフロー(200A)に挿入することにより、ステップベースのワークフロー(例えば、ワークフロー(200B))に変換されてもよい。一般的に、ステップベースのワークフローにおけるタスクは、処理されるべきデータをタスクに提供する第1の数の入力バッファリングタスクと、タスクによって処理されたデータを記憶する第2の数の出力バッファリングタスクとを有してもよい。第1の数は、0、1、2等のようないずれか適切な非負の整数でもよい。第2の数は、0、1、2等のようないずれか適切な非負の整数でもよい。
図2Bに示すように、いくつかの例では、バッファリングタスクはステップベースのワークフローへの各ワークフロー入力(例えば、(201))について提供されない。いくつかの例では、少なくとも1つのバッファリングタスクが、ステップベースのワークフローへのワークフロー入力について提供される。
図2Bに示すように、いくつかの例では、バッファリングタスクはステップベースのワークフローからの各ワークフロー出力(例えば、(209)又は(210))について提供されない。いくつかの例では、少なくとも1つのバッファリングタスクがステップベースのワークフローからのワークフロー出力について提供される。
【0088】
図2Bに示す例では、バッファリングタスク(例えば、iFIFOタスク(231)~(237))は、それぞれのリンク(202)~(208)についてそれぞれ提供される。例えば、タスク(T1)は、ワークフロー入力に接続され、入力バッファリングタスクには接続されない。タスク(T1)は、1つの出力バッファリングタスク(231)に接続される。タスク(T2)は、1つの入力バッファリングタスク(231)及び2つの出力バッファリングタスク(232)~(233)に接続される。タスク(T5)は、2つの入力バッファリングタスク(233)及び(235)に接続され、1つの出力バッファリングタスク(237)に接続される。
【0089】
各リンク(例えば、リンク(202))は、ワークフロー(200B)の2つのタスク(例えば、タスク(T1)~(T2))の間の接続である。リンク(例えば(202))は、2つのタスクのうち1つ(例えば(T1))から2つのタスクのうち他のタスク(例えば(T2))へのデータ転送を表してもよい。バッファリングタスク(231)~(237)は、上記のバッファリング機能からインスタンス化されてもよい。一例では、バッファリングタスク(231)~(237)は、iFIFO機能からインスタンス化されたiFIFOタスクを含む。
【0090】
一般的に、バッファリングタスクに接続されるタスクペア(又は2つのタスク)は、バッファリングタスクについての「connect from」タスク及び「connect to」タスクを含んでもよい。バッファリングタスク(231)及びバッファリングタスク(231)によって接続されるタスクペア(T1)を参照すると、タスク(T1)は「connect from」タスクと呼ばれ、タスク(T2)はバッファリングタスク(231)の「connect to」タスクと呼ばれる。ワークフロー(200B)は、7つのバッファリングタスク(231)~(237)に対応する7つのタスクペアを含む。
【0091】
タスクペア(「connect from」タスク及び「connect to」タスクを含む)の間にバッファリングタスクを追加することは、「connect to」タスクが実行していない間に、「connect from」タスクが実行し、出力を生成し、バッファリングタスクについて構成されたバッファ(又は各バッファ)を一杯にすることを可能にする。「connect from」タスクは、バッファ(又は各バッファ)が一杯又は部分的に一杯(例えば、X%だけ一杯)になるまで実行してもよく、「connect from」タスクは「connect from」タスクの入力に接続されたバッファから処理するのに十分なデータを有してもよい。
【0092】
タスク(例えば、(T1))がワークフロー(200B)における他のタスク(例えば、(T2)~(T6))から独立して実行できる時間は、タスクの入力及び出力に接続されたタスクをバッファリングすることによって定義されてもよい。タスク入力に接続されたバッファリングタスクは、入力バッファリングタスク(又は入力バッファ)と呼ばれてもよく、タスク出力に接続されたバッファリングタスクは、出力バッファリングタスク(又は出力バッファ)と呼ばれてもよい。一般的に、バッファのサイズ及び一杯度のレベル(X%で記述されるもの等)は、タスクが実行できるステップの最大サイズ(又は長さ)(又は最大ステップサイズ)を定義してもよい。
【0093】
一例では、ワークフロー(200B)におけるタスク(例えば、(T2))について、タスクの入力バッファ(例えば、(231))のいずれも空でなく、タスクの出力バッファ(例えば、(232)~(233))のいずれも一杯でない場合、タスク(例えば、(T2))は、ワークフロー(200B)における他のタスク(例えば、(T1)及び(T3)~(T6))から独立して実行してもよい。一例では、タスクの入力バッファのいずれも空でなく、タスクの出力バッファのいずれもX%だけ一杯でない場合(Xは100未満の予め設定された値である)、タスク(例えば、(T2))は、ワークフロー(200B)における他のタスク(例えば、(T1)及び(T3)~(T6))から独立して実行してもよい。
【0094】
一例では、ステップ対応ワークフローにおける残りのタスクが実行していない間に、ステップ対応ワークフローにおける1つ以上のタスクがデータを処理するために実行してもよい。
図2Bを参照すると、バッファリングタスク(231)が省略される場合、タスク(T3)~(T6)が実行しておらず、非実行状態(例えば、アイドル状態及び/又は破棄状態)である間に、タスク(T1)~(T2)は、データを同時に処理するために実行してもよい。例えば、タスク(T1)は次のデータを処理するために実行され、タスク(T2)はタスク(T1)によって処理されたデータを更に処理するために実行する。いくつかの例では、バッファリングタスク(231)が省略される場合、例えば、タスク(T2)が入力データを有さない場合、又はタスク(T2)が実行状態でない場合には、タスク(T1)及びタスク(T2)は、同時に実行しない。
【0095】
通常(非ステップベース)ワークフローをステップベースのワークフローに変換する利点について、以下に説明する。変換は比較的簡単であり、ワークフローのトポロジー又は複雑さに依存せず、したがって、非監視の方法で実行され得る。
【0096】
処理タスクは、パラメータタスクセグメント期間(TSD, task segment duration)(タスク処理セグメント期間とも呼ばれる)で構成されてもよい。処理タスクについてのTSDは、処理タスクの出力における出力データが処理タスクの入力のいずれかにおけるデータの期間又は長さ以外のデータから独立することができるような、時間領域における期間又はデータの長さを示してもよい。例えば、処理タスクへの入力データは、第1のサブセットと、第2のサブセットと、第3のサブセットとを有し、それぞれのサブセットは、TSDの期間を有する。処理タスクは、第1のサブセット、第2のサブセット及び第3のサブセットを互いに独立して処理してもよい。処理タスクが第2のサブセットを処理する場合、対応する出力データは第2のサブセットのデータにのみ依存し、第1のセット及び第3のセットから独立する。時間(例えば、ms)、バイト、ビット等のようないずれか適切な単位がTSDに使用されてもよい。処理タスクの出力において生成された出力データは、時間領域における期間又はデータの長さの範囲内にある。
【0097】
図3は、本開示の一実施形態によるタスク(301)について構成されたTSDの例を示す。タスク(301)は、例えば、機能リポジトリ(105)における対応する機能からインスタンス化されてもよい。タスク(301)は、ビデオスティッチ又は他のメディア処理方法のようないずれかの処理方法を実装してもよい。例えば、第1のカメラからのビデオ1及び第2のカメラからのビデオ2は、メタデータに基づいてタスク(301)によってスティッチされる。タスク(301)は、スティッチされたビデオであるビデオ3と、ビデオ4とを出力してもよい。ビデオ4は、インデックス付けのような異なる操作に対応してもよい。いくつかの例では、ビデオ4はビデオ3と同じである。
【0098】
本開示によれば、タスク(301)は、TSDによって設定された時間ウィンドウ(例えば、
図3における期間T)内で、入力からの入力データを実行して処理し、出力において出力データを生成してもよく、TSDに設定された期間を有する出力は、TSD内の入力データにのみ依存してもよい。出力は、時間ウィンドウ外の入力データから独立してもよい。その後、タスク(301)は、各TSDの終了時に停止又は破棄されてもよく、次のTSDの開始時にインスタンス化又は開始されてもよい。
【0099】
図3に示す例では、タスク(301)についてのTSDはTである。ビデオ1は、第1のメディアデータの複数のサブセット(302)を含む。第1のメディアデータの各サブセットは、第1のメディアデータの3つのサブセット(302)がTSD T内にある第1のサイズを有してもよい。ビデオ2は、第2のメディアデータの複数のサブセット(303)を含む。第2のメディアデータの各サブセット(303)は、TSD Tである第2のサイズを有してもよい。メタデータは、メタデータの複数のサブセット(304)を含んでもよい。メタデータの各サブセット(304)は、6つのサブセット(304)のメタデータがTSD Tの範囲内にあるメタデータサイズを有してもよい。
【0100】
例えば、第1のメディアデータの3つのサブセット(302)及び第2のメディアデータのサブセット(303)を含む入力データは、例えば、メタデータの6つのサブセット(304)に基づいてタスク(301)によって処理され、出力を生成する。出力は、ビデオ3についての第3のメディアデータのサブセット(305)と、ビデオ4についての第4のメディアデータの2つのサブセット(306)とを含む。タスク(301)の出力(例えば、ビデオ3及びビデオ4)は、TSDに等しい期間(例えば、T)を有する時間ウィンドウ内で独立して生成されてもよい。その後、タスク(301)は、ウィンドウの終了時に停止又は破棄され、非実行状態に遷移してもよい。非実行状態はアイドル状態(402)又は破棄状態(405)でもよい。本開示によれば、タスク(301)が非実行状態である場合、タスクについての状態情報は記憶される必要がない。これは、入力データが期間TSDを有する時間ウィンドウ内に処理される場合、タスク(301)が事前データを使用せずに入力データを処理することができるためである。したがって、上記の処理のためにメモリは必要とされず、前の状態情報は必要とされない。タスク(301)は、TSDに等しい期間を有する次の時間ウィンドウの開始時にインスタンス化又は開始されてもよい。
図3に示す例では、ビデオ4の出力は、T/2の期間を有する独立したセグメント(タスクセグメントとも呼ばれる)で動作してもよい。
【0101】
図2Bを参照した上記の説明は、非ステップベースのワークフローをステップベースのワークフローに変換するために、非ステップベースのワークフローにおける1つ以上のMiFIFOタスクを提供するように適切に適合されてもよい。
図2A及び
図5を参照すると、ワークフロー(200A)は、1つ以上のMiFIFOタスクをワークフロー(200A)に挿入することにより、ステップベースのワークフロー(例えば、ワークフロー)(500)に変換されてもよい。一例では、タスクが複数の出力を含む場合、MiFIFOタスクが使用される。
【0102】
図5を参照すると、バッファリングタスクは、iFIFOタスク(531)、(536)及び(537)と、2つのMiFIFOタスク(例えば、(MiFIFO1)及び(MiFIFO2))とを含んでもよい。例えば、iFIFOタスク(531)は、タスク(T1)とタスク(T2)との間に提供される。タスク(T4)は、iFIFOタスク(536)に接続される。タスク(T5)は、iFIFOタスク(537)に接続される。iFIFOタスク(531)、(536)及び(537)は、上記のiFIFOバッファリング機能からインスタンス化されてもよい。
【0103】
タスク(T2)は2つの出力を有し、したがって、MiFIFOタスク(MiFIFO1)に接続されてもよい。(MiFIFO1)タスクは、それぞれリンク(203)~(204)に対応する2つのiFIFOバッファ(MiFIFO1-1)及び(MiFIFO1-2)で構成されてもよい。タスク(T3)は2つの出力を有し、したがって、MiFIFOタスク(MiFIFO2)に接続されてもよい。(MiFIFO2)タスクは、それぞれリンク(205)~(206)に対応する2つのiFIFOバッファ(MiFIFO2-1)及び(MiFIFO2-2)で構成されてもよい。MiFIFOタスク(MiFIFO1)及び(MiFIFO2)は、上記のMiFIFOバッファリング機能からインスタンス化されてもよい。
【0104】
MiFIFOタスク(例えば、(MiFIFO1))を追加することは、「connect to」タスク(例えば、(T3)及び(T5))が実行していない間に、「connect from」タスク(例えば、(T2))が実行し、出力を生成し、MiFIFOタスク(例えば、(MiFIFO1)について構成されたiFIFOバッファ(例えば、(MiFIFO1-1)及び(MiFIFO1-2))を一杯にすることを可能にする。「connect from」タスクは、iFIFOバッファが一杯になるまで実行してもよく、「connect from」タスクは、「connect from」タスクの入力に接続されたバッファから処理するのに十分なデータを有してもよい。
【0105】
いくつかの例では、iFIFOタスク(531)、(536)及び(537)はMiFIFOタスクに置き換えられ、したがって、ワークフロー(500)はMiFIFOタスクで構成される。
【0106】
一例では、タスクが複数の入力を含む場合、MiFIFOタスクが入力において提供され、上記の説明が適切に適合されてもよい。
【0107】
ワークフロー(200B)及び(500)は、TSDで構成された処理タスクを使用することにより、ステートレスモードで動作するように構成されてもよい。
図2Bを参照すると、各iFIFOタスクのiFIFOタスク期間(又はiFIFOタスクに記憶できるデータの最大量)が、iFIFOタスクが接続されている処理タスク(又は「connect to」タスク)の少なくともTSDサイズに設定されている場合、「connect to」タスクは、1つのTSDについて動作して出力を生成してもよい。上記のように、「connect to」タスクは、出力において次のタスクセグメントを生成するための状態情報を搬送又は記憶する必要はなく、したがって、状態情報は記憶されない。処理タスク(例えば、「connect to」タスク)は、ステートレスのステップ対応処理タスクと呼ばれてもよい。ステートレスのステップ対応処理タスクを含むワークフロー(200B)は、ステートレスモードで動作するように構成されてもよく、ステートレスステップ対応ワークフローと呼ばれてもよい。上記の説明は、MiFIFOタスク及びMiFIFOタスクを含むワークフロー(例えば、ワークフロー(500))に適切に適合されてもよい。
【0108】
1つのTSDで生成されるデータ(例えば、タスクセグメント)は、TSD以外のデータ(例えば、他のタスクセグメント)から独立しているが、データの開始及び終了は重要になり得る。例えば、エンコーダが符号化を開始する場合、エンコーダが生成するビットストリームの開始(例えば、ヘッダによる)は、後に生成される他のセグメントとは異なる。したがって、iFIFOバッファは、上記のように、開始時間、期間及び長さのような更なる情報を記憶するように構成されてもよい。
【0109】
図6は、本開示の一実施形態によるプロセス(600)の概略を示すフローチャートを示す。プロセス(600)は、いずれか適切な数のワークフロー入力及びいずれか適切な数のワークフロー出力を有するいずれか適切なステップ対応ワークフローの操作に適用されてもよい。ステップ対応ワークフローは、いずれか適切な数の処理タスクと、タスクのうち2つを接続するいずれか適切なリンク(又は接続)を含んでもよい。ステップ対応ワークフローは、バッファリングタスク(例えば、iFIFOタスク、MiFIFOタスク又はiFIFOタスクとMiFIFOタスクとの組み合わせ)を含んでもよく、バッファリングタスクはそれぞれのリンクにおいて提供されてもよい。ステップ対応ワークフローは、ワークフロー(200B)又は(500)でもよい。
【0110】
一例では、ステップ対応ワークフローは、
図5におけるワークフロー(500)である。ワークフロー(500)はMiFIFOタスクを含んでもよく、バッファリングタスク(531)、(536)及び(537)はMiFIFOタスクである。タスク(T1)~(T6)のそれぞれは、
図4Aを参照して説明したタスクライフサイクル(400)、異なる状態(401)~(405)、及び対応する遷移を有してもよい。ワークフローのステップ毎(又はステップベース、ステップ対応)の操作は、以下のように実装されてもよい。いずれか適切なデータ処理システム(例えば、NBMPシステム)は、ワークフローのステップ毎の操作を実装してもよい。以下の説明は、データ処理システム(100)について与えられ、いずれか適切なデータ処理システム(例えば、NBMPシステム)に適切に適合されてもよい。
【0111】
(S605)において、ワークフローは以下に説明するように初期化されてもよい。TSD(k)を初期ワークフローの処理タスクT(k)のTSDを表すものとする。ここで、kは、0からL-1の負でない整数であり、Lは、初期ワークフローにおける処理タスクの数である。初期ワークフローは、非ステップ対応ワークフローでもよい。
【0112】
ワークフローセグメント期間(WSD)は、TSDに基づいて決定されてもよい。例えば、WSDはTSDの最小公倍数(LCM, least common multiple)に基づいて計算される。一例では、WSDは、以下の式(1)を使用して計算される。
【0113】
WSD=LCM(TSD(0),...,TSD(L-1)) 式(1)
ワークフロー(又はステップ対応ワークフロー)は、各処理タスクの出力においてMiFIFOタスクを提供することによって生成されてもよく、出力からのデータがワークフローにおける他のタスクへの入力である。例えば、
図5を参照すると、MiFIFOタスク(MiFIFO1)は、タスク(T2)の2つの出力について提供される。MiFIFOタスクは、パラメータS及びWSDに基づく長さ(又はサイズ)を有してもよく、パラメータSは、ステップ対応ワークフローのステップサイズを示す整数(例えば、1、2等)である。一例では、ステップサイズは、WSDで乗算されたSでもよい。一例では、パラメータSは、処理タスク(例えば、(T2))が連続して実行するように構成されたステップの数を示す。
【0114】
各MiFIFOタスクは、空になるようにリセットされてもよく、対応するシーケンス番号は0である。
【0115】
(S610)において、ワークフローにおける処理タスクの中の初期タスクが、例えば、ワークフローマネージャ(103)によって識別されてもよい。初期タスクのそれぞれの入力は、ワークフロー入力でもよい。例えば、初期タスクの全ての入力は、データソース(例えば、メディアソース)(111)に接続される。初期タスクは、Ti0、Ti1、...、TiNとしてラベル付けされてもよく、Nは負でない整数である。
図5を参照すると、ワークフロー(500)において識別された初期タスクはタスク(T1)を含み、Ti0は(T1)であり、Nは0である。
【0116】
(S620)において、識別された初期タスクTi0、Ti1、...、及びTiNが順次実行してもよい。
図5に示す例を参照すると、初期タスクは(T1)を含む。以下の説明は、それぞれの識別された初期タスクについて適用されてもよい。
【0117】
ワークフローマネージャ(103)は、要求を初期タスク(T1)に送信し、タスク(T1)を実行状態(403)に移行してもよい。
【0118】
初期タスク(T1)は、S(例えば、1、2等)個のステップについて実行し、各ステップにおいて入力データの部分を処理してもよい。例えば、入力データの部分は、WSDに基づいて決定された期間又は長さを有する。一例では、期間(又は長さ)は各ステップにおけるWSDに等しい。
【0119】
初期タスク(T1)によってMiFIFOタスクに出力されるデータの量が、S×WSDの合計期間(又は合計サイズ)のような第1の閾値に達した場合又は近づいた場合、MiFIFOタスク(例えば、MiFIFOタスク(531))が一杯になる(或いは、X%だけ一杯になるように部分的に満たされ、Xは100未満である)。第1の閾値は、いずれか適切な期間又はサイズでもよく、いずれか適切な単位を使用して表されてもよい。第1の閾値は、TSD、WSD及び/又はパラメータSに基づいてもよい。
【0120】
したがって、MiFIFOタスクは、フルイベント(又は、例えば、S×WSDの合計期間がX%だけ一杯である場合には部分的フルイベント)をワークフローマネージャ(103)に送信してもよい。例えば、Sは2であり、タスク(T1)により出力されるデータの量が2WSDに達した場合、MiFIFOタスク(531)は、フルイベント(又は部分的フルイベント)を生成し、通知をワークフローマネージャ(103)に送信してもよい。
【0121】
ワークフローマネージャ(103)は、要求をタスク(T1)に送信し、タスク(T1)を実行状態(403)からアイドル状態(402)又は破棄状態(405)のような非実行状態に移行させてもよい。非実行状態(例えば、アイドル状態(402)又は破棄状態(405))において、タスク(T1)の状態情報(例えば、内部機能の状態及び値)は保持又は記憶される必要はなく、したがって、いくつかの例では、状態情報は非実行状態において記憶されず、タスク(T1)はステートレスモードで実行してもよい。
【0122】
(S620)は、初期タスクのそれぞれについて繰り返されてもよい。(T1)についての上記の説明は、他の初期タスクについて適切に適合されてもよい。一例では、初期タスクは、第1の閾値を含む異なる閾値を有する。或いは、初期タスクは、同じ第1の閾値を有する。
【0123】
(S630)において、ワークフローマネージャ(103)は、後続のタスクを識別してもよく、後続のタスクの全ての入力は空でないバッファリングタスク(例えば、iFIFOタスク、MiFIFOタスク)に接続される。後続のタスクは、Tj0,Tj1,...,TjMとしてラベル付けされてもよく、Mは負でない数である。
図5を参照すると、空でないバッファリングタスクは、タスク(T1)によって処理されるデータ量を記憶するバッファリングタスク(531)を含む。(S630)において識別された後続のタスクは(T2)を含み、したがって、Tj0=(T2)であり、Mは0である。
【0124】
(S640)において、識別された後続のタスクTj0、Tj1、...、TjMが順次実行してもよい。
図5に示す例を参照すると、後続のタスクは(T2)を含む。以下の説明は、それぞれの識別された後続のタスクについて適用されてもよい。
【0125】
ワークフローマネージャ(103)は、要求を後続のタスク(T2)に送信し、タスク(T2)を実行状態(403)に遷移させてもよい。
【0126】
後続のタスク(T2)は、S(例えば、1、2等)個のステップについて実行し、例えば、各ステップにおいてWSDに基づいて決定された期間又は長さを有する、バッファリングタスク(531)に記憶されたデータを処理してもよい。一例では、期間(又は長さ)は各ステップにおけるWSDに等しい。
【0127】
後続のタスク(T2)によって出力されるデータの量が、S×WSDの合計期間(又は合計サイズ)のような第2の閾値に達した場合又は近づいた場合、MiFIFOタスクが一杯になる(或いは、X%だけ一杯になるように部分的に満たされ、Xは100未満である)。したがって、MiFIFOタスク(例えば、MiFIFOタスク(MiFIFO-1))は、フルイベント(又は部分的フルイベント)をワークフローマネージャ(103)に送信してもよい。例えば、Sは2であり、タスク(T2)により出力されるデータの量が2WSDに達した場合、MiFIFOタスク(MiFIFO-1)は、フルイベント(又は、例えば、S×WSDの合計期間がX%だけ一杯である場合には部分的フルイベント)を生成し、通知をワークフローマネージャ(103)に送信してもよい。第2の閾値は、いずれか適切な期間又はサイズでもよく、いずれか適切な単位を使用して表されてもよい。第2の閾値は、TSD、WSD及び/又はパラメータSに基づいてもよい。
【0128】
ワークフローマネージャ(103)は、要求をタスク(T2)に送信し、タスク(T2)を実行状態(403)からアイドル状態(402)又は破棄状態(405)のような非実行状態に移行させてもよい。非実行状態(例えば、アイドル状態(402)又は破棄状態(405))において、タスク(T2)の状態情報(例えば、内部機能の状態及び値)は保持又は記憶される必要はなく、したがって、いくつかの例では、状態情報は非実行状態において記憶されず、タスク(T2)はステートレスモードで実行してもよい。
【0129】
(S640)は、後続のタスクのそれぞれについて繰り返されてもよい。(T2)についての上記の説明は、他の後続のタスクについて適切に適合されてもよい。一例では、後続のタスクは、第2の閾値を含む異なる閾値を有する。或いは、後続のタスクは、同じ第2の閾値を有する。一例では、ワークフローにおける複数の処理タスクは、S×WSDのような同じ閾値を有する。
【0130】
(S650)において、処理されるべき残りのタスクが後続のタスクであるか否かが決定されてもよい。上記のように、後続のタスクの全ての入力は、空でないバッファリングタスク(例えば、MiFIFOタスク)である。残りのタスクが後続のタスクであると決定された場合、プロセス(600)は(S630)に戻り、したがって、新たに識別された後続のタスクについて(S630)及び(S640)が繰り返される。残りのタスクが後続のタスクでないと決定された場合、プロセス(600)は(S660)に進む。
【0131】
例えば、タスク(T3)は新たに識別された後続のタスクであり、(S640)はタスク(T3)について繰り返される。その後、(S650)及び(S630)が繰り返され、したがって、タスク(T4)~(T5)が新たな後続のタスクとして識別され、(S640)が(T4)~(T5)について繰り返される。最後に(T6)が識別され、(S640)が(T6)について繰り返される。
【0132】
一般的に、(S630)及び(S640)は、空でないバッファリングタスクに接続された入力を有する残りの後続のタスクについて、ワークフロー(500)における全てのタスクがデータを処理するために実行するまで繰り返されてもよい。したがって、残りのタスクが後続のタスクでないと決定された場合、プロセス(600)は(S660)に進む。
【0133】
(S660)において、処理されるべき更なる入力データが残っているか否かが決定される。更なる入力データが処理されるべきであると決定されない場合、プロセス(600)は(S699)に進み、終了する。更なる入力データが処理されるべきであると決定された場合、プロセス(600)は(S610)に戻り、入力データの他のサブセット(例えば、S×WSDの期間を有する)について(S610)、(S620)、(S630)、(S640)及び(S650)を繰り返す。
【0134】
一例では、ワークフローにおける処理タスクはステートレスモードで実行し、したがって、ワークフローは、処理タスクが非実行状態にあるときに非実行状態の処理タスクについての状態情報が保存されないステートレスモードで実行してもよい。
【0135】
プロセス(600)は、適切に適合されてもよい。プロセス(600)におけるステップは変更及び/又は省略されてもよい。更なるステップが追加されてもよい。いずれか適切な実施順序が使用されてもよい。上記の例では、1つのタスクが実行するときに、ワークフロー(500)における他のタスクは実行していない。他の例では、ワークフローにおける他のタスクが実行していない間に、1つ以上のタスクが1つのステップで同時に実行してもよい。
【0136】
一例では、ステップ対応ワークフローによって処理されるべき入力データは複数のバッファセグメントに分割され、各バッファセグメントがインデックス付けされる。したがって、入力データは、入力データの複数のサブセットを含んでもよく、各サブセットは複数のインデックス付きバッファセグメントを含む。各サブセットのサイズ又は長さは、処理タスクのTSD及び/又はパラメータSに基づいて決定されてもよい。一例では、各サブセットの長さは、S×WSD(例えば、WSD、2WSD、3WSD)であり、各処理タスクは、非実行状態に遷移する前に、S×WSDの長さを有する入力データのサブセットを処理してもよい。一例では、TSDは同じであり、したがって、WSDは各処理タスクのTSDに等しく、したがって、各サブセットの長さは、TSD、2TSD、3TSD等のようなS×TSDである。
【0137】
プロセス(600)は、MiFIFOタスクを有するワークフロー(500)を使用して記載されている。プロセス(600)は、ワークフロー(200B)のようなiFIFOタスクを有するステップ対応ワークフローに適切に適合されてもよい。プロセスは、iFIFOタスク及びMiFIFOタスクを有するステップ対応ワークフローに適切に適合されてもよい。
【0138】
プロセス(600)及び/又はステップ毎のワークフロー(500)の利点は、以下のように記述されてもよい。データ処理システム(例えば、NBMPシステム)(100)(例えば、ワークフローマネージャ(103))がプロセス(600)を実行するためのロジックは簡単である。伝搬モデルは、ワークフロー入力から開始し、各タスクの1つのステップを実行し、次にタスクの出力に接続されたタスクを実行してもよい。プロセス(600)及び/又はワークフロー(500)は、複数のステップでワークフローの出力を生成してもよい。ステップはイベントによってトリガーされてもよく、したがって、ワークフロー管理は非常に効率的になり得る。ステップサイズSは、いずれか適切な数に選択されてもよい。
【0139】
本開示によれば、ステートレスのステップ対応処理タスクを実装するために、処理タスクを生成するためにインスタンス化され得る対応する機能は、構成パラメータ及び入力パラメータで構成されてもよい。構成パラメータは、上記のTSDパラメータを含んでもよい。TSDは、処理されるべきデータ内の他のタスクセグメントから独立して処理タスクが処理できるタスクセグメントの期間を決定してもよい。いくつかの例では、TSDパラメータは、処理タスクについての他の構成パラメータに依存する。構成パラメータは、処理タスクがステートレスモードで動作し得るTSDの数を参照する操作サンプルを含んでもよい。例えば、出力は、N1個の入力サンプルの処理に基づいて生成され、N1は、TSDに関連する整数でもよい。入力パラメータは、メタデータのような更なる入力を含んでもよい。更なる入力は、入力データ内の入力タスクセグメントについての開始時間、期間等を示してもよい。入力タスクセグメントの期間はTSDでもよい。
【0140】
一例では、処理されるべき入力データは複数のバッファセグメントに分割され、各バッファセグメントは、バッファセグメントについての開始時間、期間及び長さを提供するためにインデックス付けされてもよい。
【0141】
ステップベースのワークフローの上記の設計は、全体のワークフローに適用されてもよく、例えば、ワークフローは、ワークフロー入力及び/又はワークフロー出力においてバッファリングタスク(例えば、iFIFOタスク、MiFIFOタスク)を実装することによりステップ毎に実行されてもよい。上記の手法の利点は、ワークフローの個々のタスクがステップ対応でなくてもよいが、ワークフローがステップで処理され得ることである。したがって、ワークフローはステップ毎に実行できる。したがって、プラットフォームリソースが全体のセッションを1つステップで実行するために連続的に利用可能でない場合、残りのワークフローが実行されていない間に(例えば、アイドル状態又は破棄状態において)、1つ以上のワークフローが実行できる。ワークフローがマルチワークフロー設定の一部であり、各ワークフローがステップ毎に実行できる場合、全てのワークフローが同時に実行されているとは限らない。
【0142】
図2Cは、本開示の一実施形態によるワークフロー(200C)の例を示す。ワークフロー(200C)は、処理タスク(T4)~(T9)を含む。一例では、処理タスク(T4)~(T9)のうち2つの間にバッファリングタスクは挿入されず、処理タスク(T4)~(T9)はデータを処理するために同時に実行してもよく、ステップ対応ではない。1つ以上のバッファリングタスクはワークフロー入力及び/又はワークフロー出力に挿入されてもよく、したがって、ワークフロー(200C)は、ステップモードで或いは一度に1つのステップで実行してもよい。一例では、バッファリングタスク(271)はワークフロー入力(255)において提供され、バッファリングタスク(272)はワークフロー出力(263)において提供される。一例では、ワークフロー(200C)は、(i)バッファリングタスク(271)に記憶されたデータがワークフロー(200C)に提供されること(例えば、バッファリングタスク(271)が空であること)、及び(ii)バッファリングタスク(272)が一杯であることの条件のうち1つが満たされるまで、データを処理するために実行する。ワークフロー(200C)の上記の説明は、ワークフローがステップ対応タスクを含む場合に適切に適合されてもよい。バッファリングタスク(271)は、iFIFOタスク、MiFIFOタスク等でもよい。バッファリングタスク(272)は、iFIFOタスク、MiFIFOタスク等でもよい。一例では、MiFIFOタスクはリンク263-264について提供される。
【0143】
図2Dは、本開示の一実施形態による複数のワークフロー(280)の例を示す。複数のワークフロー(280)は、ワークフロー(200C)及びワークフロー(200D)を有するワークフローのカスケードを含んでもよい。ワークフロー(200C)は、
図2Cに記載されている。ワークフロー(200D)は、処理タスク(T1)~(T3)を含み、ワークフロー入力(251)は入力データをタスク(T1)に提供し、ワークフロー出力(255)は入力データをワークフロー(200C)に提供する。したがって、ワークフロー(200D)のワークフロー出力(255)は、ワークフロー(200C)のワークフロー入力(255)である。
【0144】
バッファリングタスク(271)は、ワークフロー(200C)とワークフロー(200D)との間に挿入され、したがって、ワークフロー(200C)が非実行状態にあり、データを処理するために実行していない間に、複数のワークフロー(280)はステップモードで実行し、ワークフロー(200D)はデータを処理するために実行する。バッファリングタスク(271)は、iFIFOタスク、MiFIFOタスク等を含んでもよい。
【0145】
バッファリングタスクがワークフロー入力又はワークフロー出力において提供される場合、ワークフローはステップモードで実行してもよい。
【0146】
本開示の態様によれば、非ステップ可能タスクを含む通常ワークフロー(又は非ステップ対応ワークフロー)は、簡単なバッファリング機能(又はバッファリングタスク)を使用することによって、ステップ可能タスクを含むステップ可能ワークフローに変換され得る。バッファリング機能(例えば、iFIFO機能、MiFIFO機能)又は対応するタスク(例えば、iFIFOタスク、MiFIFOタスク)は、全ての適切なプラットフォームで実装するのに効率的になり得る。イベント(例えば、空イベント、フルイベント、部分的フルイベント)駆動ステップのプロセスは、設計を簡略化し、ワークフローの管理を効率的にし得る。タスクの実行毎に1つのステップを通じてワークフローを伝搬するためのワークフローアルゴリズムは簡単である。ワークフローの出力は、ステップで生成されてもよい。ステップサイズは、ワークフロー内のタスクを処理するためのパラメータS及びTSDに基づいてもよく、したがって、例えば、パラメータSを変更することによって構成可能である。ステップ対応ワークフローにおける処理タスクが、実行状態から非実行状態に遷移した場合、処理タスクの状態情報は記憶される必要はない。したがって、様々な例において、処理タスクの状態情報は、ステートレスのステップ対応処理タスクではなく、ステートレスのタスク操作を実行しない。ステートレスのタスク操作は、クラウドプラットフォームのような特定のコンピューティングプラットフォームにおいて有利になり得る。
【0147】
本開示の態様によれば、バッファリングタスクがワークフロー入力、ワークフロー出力又はワークフロー内の2つのタスクの間に提供される場合、ワークフローはステップモードで実行し得る。ワークフローは、ステップ毎に実行でき、したがって、ワークフローは、データがワークフローに入力されるときに、データ(例えば、メディアデータ)を処理するために連続的に実行しない。その代わりに、ワークフローは、第1のステップでデータの第1のサブセットを処理してもよい。データの処理された第1のサブセットを出力した後に、ワークフローは、第2のステップでデータの第2のサブセットを処理してもよい。
【0148】
ステップ毎のワークフローは、いずれか適切な方法を使用して達成できる。一例では、ワークフローは、
図2B及び
図5に示すように、ワークフローにおけるタスクの間に提供されるバッファリングタスク(例えば、iFIFOタスク、MiFIFOタスク)を含んでもよい。ワークフローにおける1つ以上のタスクは、他のタスクが非実行状態である間に、実行状態で同時に実行してもよく、したがって、全てのタスクを同時に実行する際に使用されるリソース(例えば、計算リソース、メモリリソース)を低減する。
【0149】
図7は、本開示の一実施形態によるプロセス(700)の概略を示すフローチャートを示す。一例では、プロセス(700)は、メディアデータのような入力データを処理するためにデータ処理システム(例えば、NBMPシステム)(100)を使用して実装される。いくつかの実施形態では、プロセス(700)は、ソフトウェア命令で実装され、したがって、処理回路がソフトウェア命令を実行した場合、処理回路は、プロセス(700)を実行する。プロセスは(S701)で始まり、(S710)に進む。
【0150】
(S710)において、ワークフローのワークフロー情報が処理回路によって受信されてもよい。一例では、ワークフロー情報は、ワークフローマネージャ(例えば、ワークフローマネージャ(103))によってデータ処理ソース(例えば、NBMPソース(101))から受信される。
【0151】
(S720)において、ワークフロー情報に基づいて、入力データを処理するためのワークフローが生成されてもよい。ワークフローは、複数の処理タスクと、第1のバッファリングタスクとを含んでもよい。一例では、複数の処理タスクは、対応するTSDで構成される。複数の処理タスクのそれぞれは、TSD以外のデータから独立して、それぞれのTSDに等しいサイズを有するデータの量を処理するように構成されてもよい。したがって、各処理タスクは、TSDの期間を有する時間ウィンドウ内のデータを独立して処理してもよく、時間ウィンドウ内の処理タスクによって生成された出力は、時間ウィンドウ以外の他のデータに対して独立している。複数の処理タスクは、第1の処理タスクと、第2の処理タスクとを含んでもよい。ワークフローは、
図2B又は
図5に記載のようにステップ対応ワークフローでもよい。第1のバッファリングタスクは、上記のように対応するバッファリング機能からインスタンス化されてもよい。第1のバッファリングタスクは、iFIFOタスク、MiFIFOタスク等でもよい。一例では、入力データは、入力データのサブセットを有する入力データの複数のサブセットを含む。
【0152】
(S730)において、第1の処理タスクは、入力データのサブセットが第1の処理タスクによって処理され、第1の処理済みサブセットデータとして第1のバッファリングタスクに出力される実行状態に入るようにされてもよい。一例では、第1の処理タスクが入力データのサブセットを処理するために実行状態にある場合、第2の処理タスクは、上記のように、非実行状態(例えば、アイドル状態又は破棄状態)にある。第1のバッファリングタスクは、第1の処理済みサブセットデータを記憶し、第1の処理済みサブセットデータを第2の処理タスクに提供するように構成されてもよい。
【0153】
(S740)において、第1の処理タスクは、第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータの量が第1の閾値に等しいことに基づいて、実行状態から非実行状態(例えば、アイドル状態又は破棄状態)に遷移させるようにされてもよい。一例では、第1の処理タスクの状態情報は、非実行状態において記憶されない。第1の閾値は、(i)複数の処理タスクのTSD、(ii)ワークフローのWSD又は(iii)WSD及び第1の処理タスクが連続的に実行するように構成されるステップの数を示すパラメータSに基づいてもよい。一例では、第1の閾値はS×WSDである。
【0154】
一例では、第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータの量が第1の閾値に等しい場合、イベント(例えば、上記のフルイベント)が、例えば第1のバッファリングタスクによって生成されてもよく、通知がワークフローマネージャに送信されてもよい。その後、ワークフローマネージャは、要求を第1の処理タスクに送信し、第1の処理タスクを実行状態から非実行状態に遷移させてもよい。
【0155】
一例では、バッファリングタスク(入力バッファリングタスクと呼ばれる)が入力を第1の処理タスクに提供し、バッファリングタスクに記憶されているデータが第1の処理タスクに提供された場合、第1の処理タスクは、実行状態から非実行状態に遷移させるようにされてもよい。例えば、バッファリングタスクは、バッファリングタスクに記憶されているデータが第1の処理タスクに提供された場合、空イベントを生成してもよく、通知がワークフローマネージャに送信されてもよい。その後、ワークフローマネージャは、要求を第1の処理タスクに送信し、第1の処理タスクを実行状態から非実行状態に遷移させてもよい。
【0156】
一例では、入力バッファリングタスクに記憶されているデータが第1の処理タスクに提供された場合、又は第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータの量が第1の閾値に等しい場合、第1の処理タスクは、実行状態から非実行状態に遷移させるようにされてもよい。
【0157】
(S750)において、第1の処理タスクが非実行状態に遷移した後に、第2の処理タスクは、第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータが第2の処理タスクによって処理される実行状態に入るようにされてもよい。一例では、第2の処理タスクが第1の処理済みサブセットデータを処理するために実行する間に、第1の処理タスクは非実行状態にある。したがって、第1の処理タスク及び第2の処理タスクは同時に実行せず、順次実行する。
【0158】
プロセス(700)は、適切に適合されてもよい。プロセス(700)におけるステップは、変更及び/又は省略されてもよい。更なるステップが追加されてもよい。いずれか適切な実施順序が使用されてもよい。
【0159】
一例では、実行状態にある第2の処理タスクは、処理された第1の処理済みサブセットデータを第2の処理済みサブセットデータとして、第2のバッファリングタスクに出力する。第2のバッファリングタスクは、第2の処理済みサブセットデータを記憶し、第2の処理済みサブセットデータを複数の処理タスク内の第3の処理タスクに提供するように構成されてもよい。(S750)の後に、第2の処理タスクは、(i)第2のバッファリングタスクに記憶されている第2の処理済みサブセットデータの量が第2の閾値に等しいことと、(ii)第1のバッファリングタスクに記憶されている第1の処理済みサブセットデータの量が第2の処理タスクに提供されること(例えば、第1のバッファリングタスクについて構成されたバッファが空であること)とのうち1つに基づいて、実行状態から非実行状態に遷移させるようにされてもよい。一例では、第2の処理タスクの状態情報は、非実行状態において記憶されない。第2の閾値は、(i)複数の処理タスクのTSD、(ii)ワークフローのWSD又は(iii)WSD及び第1の処理タスクが連続的に実行するように構成されるステップの数を示すパラメータSに基づいてもよい。一例では、第2の閾値はS×WSDである。第1の閾値及び第2の閾値は、同じでもよく或いは異なってもよい。
【0160】
一例では、ワークフローは、第1のバッファリングタスク(例えば、iFIFOタスク又はMiFIFO)を有する複数のバッファリングタスクを更に含む。複数の処理タスクの各入力は、入力データのうち1つ及び複数のバッファリングタスクのうち1つ以上からのものであり、複数の処理タスクのうち1つのみが、いずれかの時点で実行状態にあることが許容される。
【0161】
一例では、入力データは、入力データのサブセットと、入力データの他のサブセットとを含む。ワークフローは、第1のバッファリングタスク(例えば、iFIFOタスク、MiFIFOタスク)を含む複数のバッファリングタスクを含む。複数の処理タスクの各入力は、入力データのうち1つ及び複数のバッファリングタスクのうち1つ以上からのものである。入力データのサブセットは、複数の処理タスクによって順次処理されてもよい。入力データのサブセットが複数の処理タスクによって処理された後に、複数の処理タスク内の残りの処理タスクが非実行状態にある間に、入力データの他のサブセットが複数の処理タスクによって順次処理されてもよい。複数の処理タスクのうち1つのみが、いずれかの時点で実行状態にあることが許容される。
【0162】
図8は、本開示の一実施形態によるプロセス(800)の概略を示すフローチャートを示す。一例では、プロセス(800)は、メディアデータのような入力データを処理するためにデータ処理システム(例えば、NBMPシステム)(100)を使用して実装される。いくつかの実施形態では、プロセス(800)は、ソフトウェア命令で実装され、したがって、処理回路がソフトウェア命令を実行した場合、処理回路は、プロセス(800)を実行する。プロセスは(S801)で始まり、(S810)に進む。
【0163】
(S810)において、複数のワークフローのワークフロー情報が処理回路によって受信されてもよい。一例では、ワークフロー情報は、ワークフローマネージャ(例えば、ワークフローマネージャ(103))によってデータ処理ソース(例えば、NBMPソース(101))から受信される。
【0164】
(S820)において、ワークフロー情報に基づいて、入力データを処理するための複数のワークフローが生成されてもよい。複数のワークフローのうち少なくとも1つは、複数の処理タスクを含んでもよい。複数のワークフローは、第1のワークフローと、第2のワークフローとを含んでもよい。第1のワークフロー及び第2のワークフローのうち少なくとも1つは、
図2Cにおいて上記に説明したように、入力バッファリングタスク又は出力バッファリングタスクを有する。
【0165】
(S830)において、第1のワークフローは、入力データのサブセットが第1のワークフローによって処理され、第1の処理済みサブセットデータとしてバッファリングタスクに出力される実行状態に入るようにされてもよい。一例では、第1のワークフローが入力データのサブセットを処理するために実行状態にある場合、第2のワークフローは、上記のように、非実行状態(例えば、アイドル状態又は破棄状態)にある。一例では、バッファリングタスクは、第1の処理済みサブセットデータを記憶し、第1の処理済みサブセットデータtaを第2のワークフローに提供するように構成されてもよい。バッファリングタスクは、上記のように対応するバッファリング機能からインスタンス化されてもよい。バッファリングタスクは、iFIFOタスク、MiFIFOタスク等でもよい。
【0166】
(S840)において、第1のワークフローは、バッファリングタスクに記憶されている第1の処理済みサブセットデータの量が閾値に等しいことに基づいて、実行状態から非実行状態に遷移させるようにされてもよい。
【0167】
一例では、バッファリングタスクに記憶されている第1の処理済みサブセットデータの量が閾値に等しい場合、イベント(例えば、上記のフルイベント)が、例えば、バッファリングタスクによって生成されてもよく、通知がワークフローマネージャに送信されてもよい。その後、ワークフローマネージャは、要求を第1のワークフローに送信し、第1のワークフローを実行状態から非実行状態に遷移させてもよい。
【0168】
一例では、バッファリングタスク(入力バッファリングタスクと呼ばれる)が入力を第1のワークフローに提供し、入力バッファリングタスクに記憶されているデータが第1のワークフローに提供された場合、第1のワークフローは、実行状態から非実行状態に遷移させるようにされてもよい。例えば、入力バッファリングタスクは、入力バッファリングタスクに記憶されているデータが第1のワークフローに提供された場合、空イベントを生成してもよく、通知がワークフローマネージャに送信されてもよい。その後、ワークフローマネージャは、要求を第1のワークフローに送信し、第1のワークフローを実行状態から非実行状態に遷移させてもよい。
【0169】
一例では、入力バッファリングタスクに記憶されているデータが第1の処理タスクに提供された場合、又はバッファリングタスク(又は出力バッファリングタスク)に記憶されている第1の処理済みサブセットデータの量が閾値に等しい場合、第1のワークフローは、実行状態から非実行状態に遷移させるようにされてもよい。
【0170】
(S850)において、第1のワークフローが非実行状態に遷移した後に、第2のワークフローは、バッファリングタスクに記憶されている第1の処理済みサブセットデータが第2のワークフローによって処理される実行状態に入るようにされてもよい。一例では、第2のワークフローが第1の処理済みサブセットデータを処理するために実行する間に、第1のワークフローは非実行状態にある。したがって、第1のワークフロー及び第2のワークフローは同時に実行せず、順次実行する。
【0171】
プロセス(800)は、適切に適合されてもよい。プロセス(800)におけるステップは、変更及び/又は省略されてもよい。更なるステップが追加されてもよい。いずれか適切な実施順序が使用されてもよい。一例では、第1のワークフローの非実行状態は、アイドル状態又は破棄状態を含む。第1のワークフローが非実行状態にある場合、第1のワークフローの状態情報は記憶されない。第1のワークフローは、入力データのサブセット以外の残りのサブセットから独立して、入力データのサブセットを処理するように構成される。
【0172】
上記の技術は、コンピュータ読み取り可能命令を使用してコンピュータソフトウェアとして実装され、1つ以上のコンピュータ読み取り可能媒体に物理的に記憶されてもよい。
【0173】
本開示の方法及び実施形態は、別々に使用されてもよく、或いは、いずれかの順序で組み合わされてもよい。さらに、方法(又は実施形態)、機能又はタスクのそれぞれは、処理回路(例えば、1つ以上のプロセッサ又は1つ以上の集積回路)によって実装されてもよい。一例では、1つ以上のプロセッサは、非一時的なコンピュータ読み取り可能媒体に記憶されたプログラムを実行する。
【0174】
上記の技術は、コンピュータ読み取り可能命令を使用してコンピュータソフトウェアとして実装され、1つ以上のコンピュータ読み取り可能媒体に物理的に記憶されてもよい。例えば、
図9は、開示の対象物の特定の実施形態を実装するのに適したコンピュータシステム(900)を示す。
【0175】
コンピュータソフトウェアは、いずれかの適切な機械コード又はコンピュータ言語を使用して符号化されてもよく、当該機械コード又はコンピュータ言語は、命令を含むコードを生成するために、アセンブリ、コンパイル、リンク又は類似のメカニズムを受けてもよく、当該命令は、1つ以上のコンピュータ中央処理装置(CPU, central processing unit)、グラフィックス処理ユニット(GPU, Graphics Processing Unit)等によって、直接的に或いはインタープリタ、マイクロコード実行等を通じて実行されてもよい。
【0176】
命令は、例えば、パーソナルコンピュータ、タブレットコンピュータ、サーバ、スマートフォン、ゲームデバイス、モノのインターネットのデバイス等を含む様々なタイプのコンピュータ又はその構成要素上で実行されてもよい。
【0177】
コンピュータシステム(900)について
図9に示される構成要素は、本質的に例示的なものであり、本開示の実施形態を実装するコンピュータソフトウェアの使用範囲又は機能に関する如何なる限定も示唆することを意図するものではない。また、構成要素の構成も、コンピュータシステム(900)の例示的な実施形態に示される構成要素のいずれか1つ又は組み合わせに関する如何なる依存性又は要件も有するものとして解釈されるべきではない。
【0178】
コンピュータシステム(900)は、特定のヒューマンインタフェース入力デバイスを含んでもよい。このようなヒューマンインタフェース入力デバイスは、例えば、触覚入力(キーストローク、スワイプ、データグローブの動き等)、オーディオ入力(音声、拍手等)、視覚入力(ジェスチャ等)、嗅覚入力(図示せず)を通じて、1人以上の人間のユーザによる入力に応答してもよい。また、ヒューマンインタフェースデバイスは、オーディオ(例えば、会話、音楽、周辺音)、画像(スキャンされた画像、静止画カメラから取得された写真画像等)、ビデオ(2次元ビデオ、立体ピクチャを含む3次元ビデオ等)のような、人間による意識的入力に必ずしも直接関連しない特定のメディアをキャプチャするために使用されてもよい。
【0179】
入力ヒューマンインタフェースデバイスは、キーボード(901)、マウス(902)、トラックパッド(903)、タッチ画面(910)、データグローブ(図示せず)、ジョイスティック(905)、マイクロフォン(906)、スキャナ(907)、カメラ(908)のうち1つ以上を含んでもよい。
【0180】
また、コンピュータシステム(900)は、特定のヒューマンインタフェース出力デバイスを含んでもよい。このようなヒューマンインタフェース出力デバイスは、例えば、触覚出力、音、光及び嗅覚/味覚を通じて、1人以上の人間のユーザの感覚を刺激してもよい。このようなヒューマンインタフェース出力デバイスは、触覚出力デバイス(例えば、タッチ画面(910)、データグローブ(図示せず)又はジョイスティック(905)による触覚フィードバック、ただし、入力デバイスとして機能しない触覚フィードバックデバイスが存在してもよい)と、オーディオ出力デバイス(スピーカ(909)、ヘッドフォン(図示せず)等)と、視覚出力デバイス(それぞれがタッチ画面入力機能を有しても有さなくてもよく、それぞれが触覚フィードバック機能を有しても有さなくてもよく、いくつかが2次元視覚出力又は立体出力のような手段を通じた3次元以上の出力を出力可能でもよいCRT画面、LCD画面、プラズマ画面、OLED画面を含む画面(910)、仮想現実メガネ(図示せず)、ホログラフィックディスプレイ及びスモークタンク(図示せず))と、プリンタ(図示せず)とを含んでもよい。
【0181】
また、コンピュータシステム(900)は、CD/DVD又は同様の媒体(921)を有するCD/DVD ROM/RW(920)を含む光媒体のような人間がアクセス可能な記憶デバイス及び関連する媒体、サムドライブ(922)、取り外し可能ハードドライブ又はソリッドステートドライブ(923)、テープ及びフロッピーディスク(図示せず)のようなレガシー磁気媒体、セキュリティドングル(図示せず)のような特殊なROM/ASIC/PLDに基づくデバイス等を含んでもよい。
【0182】
また、当業者は、ここに開示の対象物に関連して使用される用語「コンピュータ読み取り可能媒体」が伝送媒体、搬送波又は他の非一時的な信号を含まないことを理解すべきである。
【0183】
また、コンピュータシステム(900)は、1つ以上の通信ネットワークへのインタフェースを含んでもよい。ネットワークは、例えば、無線、有線、光でもよい。ネットワークは、ローカル、広域、メトロポリタン、車両及び産業、リアルタイム、遅延耐性等でもよい。ネットワークの例は、イーサネット、無線LAN、セルラネットワーク(GSM、3G、4G、5G、LTE等を含む)、TV有線又は無線広域デジタルネットワーク(ケーブルTV、衛星TV、及び地上放送TVを含む)、車両及び産業(CANBusを含む)等を含む。特定のネットワークは、一般的に、特定の汎用データポート又は周辺バス(949)に取り付けられる外部ネットワークインタフェースアダプタ(例えば、コンピュータシステム(900)のUSBポート等)を必要とし、他のネットワークインタフェースアダプタは、一般的に、以下に説明するシステムバス(例えば、PCコンピュータシステムへのイーサネットインタフェース又はスマートフォンコンピュータシステムへのセルラネットワーク)に取り付けられることによって、コンピュータシステム(900)のコアに統合される。これらのネットワークのいずれかを使用して、コンピュータシステム(900)は、他のエンティティと通信することができる。このような通信は、一方向の受信のみ(例えば、放送TV)、一方向の送信のみ(例えば、特定のCANbusデバイスへのCANbus)でもよく、或いは、例えば、ローカル又は広域デジタルネットワークを使用する他のコンピュータシステムへの双方向でもよい。特定のプロトコル及びプロトコルスタックは、上記のようなネットワーク及びネットワークインタフェースのそれぞれにおいて使用されてもよい。
【0184】
上記のヒューマンインタフェースデバイス、人間がアクセス可能な記憶デバイス及びネットワークインタフェースは、コンピュータシステム(900)のコア(940)に取り付けられてもよい。
【0185】
コア(940)は、1つ以上の中央処理装置(CPU)(941)、グラフィックス処理ユニット(GPU)(942)、フィールドプログラマブルゲートアレイ(FPGA, Field Programmable Gate Area)(943)の形式の特殊なプログラム可能処理ユニット、特定のタスク用のハードウェアアクセラレータ(944)等を含んでもよい。これらのデバイスは、読み取り専用メモリ(ROM)(945)、ランダムアクセスメモリ(946)、内部大容量記憶装置(内部のユーザアクセス不可能なハードドライブ、SSD等)(947)と共に、システムバス(948)を通じて接続されてもよい。いくつかのコンピュータシステムでは、システムバス(948)は、更なるCPU、GPU等による拡張を可能にするために、1つ以上の物理プラグの形式でアクセス可能でもよい。周辺デバイスは、コアのシステムバス(948)に直接取り付けられてもよく、或いは、周辺バス(949)を通じて取り付けられてもよい。周辺バスのアーキテクチャは、PCI、USB等を含む。
【0186】
CPU(941)、GPU(942)、FPGA(943)及びアクセラレータ(944)は特定の命令を実行してもよく、当該特定の命令は、組み合わせによって上記のコンピュータコードを構成してもよい。当該コンピュータコードは、ROM(945)又はRAM(946)に記憶されてもよい。また、一時的なデータは、RAM(946)に記憶されてもよいが、永続的なデータは、例えば、内部大容量記憶装置(947)に記憶されてもよい。1つ以上のCPU(941)、GPU(942)、大容量記憶装置(947)、ROM(945)、RAM(946)等と密接に関連してもよいキャッシュメモリを使用することによって、メモリデバイスのいずれかへの高速記憶及び検索が可能になってもよい。
【0187】
コンピュータ読み取り可能媒体は、様々なコンピュータに実装された動作を実行するためのコンピュータコードを有してもよい。媒体及びコンピュータコードは、本開示の目的のために特に設計及び構築されたものでよく、或いは、コンピュータソフトウェア分野における当業者に周知で入手可能なようなものでもよい。
【0188】
限定ではなく一例として、アーキテクチャ(900)、具体的には、コア(940)を有するコンピュータシステムは、1つ以上の有形のコンピュータ読み取り可能媒体に具現されたソフトウェアを実行するプロセッサ(CPU、GPU、FPGA、アクセラレータ等を含む)の結果として機能を提供できる。このようなコンピュータ読み取り可能媒体は、コア内部の大容量記憶装置(947)又はROM(945)のような非一時的な性質のコア(940)の特定の記憶装置と同様に、上記のようなユーザがアクセス可能な大容量記憶装置に関連する媒体でもよい。本開示の様々な実施形態を実装するソフトウェアは、このようなデバイスに記憶されてコア(940)によって実行されてもよい。コンピュータ読み取り可能媒体は、特定のニーズに従って、1つ以上のメモリデバイス又はチップを含んでもよい。ソフトウェアは、コア(940)、具体的には、その中のプロセッサ(CPU、GPU、FPGA等を含む)に、RAM(946)に記憶されたデータ構造を定義し、ソフトウェアによって定義された処理に従ってこのようなデータ構造を修正することを含む、本明細書に記載の特定の処理又は特定の処理の特定の部分を実行させてもよい。さらに或いは代替として、コンピュータシステムは、回路(例えば、アクセラレータ(944))内に配線されたロジック又は他の方法で具現されたロジックの結果として、機能を提供してもよく、当該回路は、本明細書に記載の特定の処理又は特定の処理の特定の部分を実行するために、ソフトウェアの代わりに或いはソフトウェアと共に動作してもよい。ソフトウェアへの言及は、ロジックを含み、必要に応じて、その逆も可能である。コンピュータ読み取り可能媒体への言及は、必要に応じて、実行するためのソフトウェアを記憶する回路(集積回路(IC)等)、実行するためのロジックを具現する回路又はこれらの双方を含んでもよい。本開示は、ハードウェア及びソフトウェアのいずれかの適切な組み合わせを含む。
【0189】
本開示は、いくつかの例示的な実施形態を記載しているが、本開示の範囲内に入る変更、置換及び様々な代替の等価物が存在する。したがって、当業者は、本明細書に明示的に図示又は記載されていないが、本開示の原理を具現し、したがって、本開示の真意及び範囲内にある多数のシステム及び方法を考案することができることが認識される。
【国際調査報告】