JP5888052B2 - タスク通信方法、情報処理装置およびタスク通信プログラム - Google Patents

タスク通信方法、情報処理装置およびタスク通信プログラム Download PDF

Info

Publication number
JP5888052B2
JP5888052B2 JP2012072155A JP2012072155A JP5888052B2 JP 5888052 B2 JP5888052 B2 JP 5888052B2 JP 2012072155 A JP2012072155 A JP 2012072155A JP 2012072155 A JP2012072155 A JP 2012072155A JP 5888052 B2 JP5888052 B2 JP 5888052B2
Authority
JP
Japan
Prior art keywords
task
data
group
tasks
order
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012072155A
Other languages
English (en)
Other versions
JP2013205966A (ja
Inventor
孝寛 久村
孝寛 久村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2012072155A priority Critical patent/JP5888052B2/ja
Publication of JP2013205966A publication Critical patent/JP2013205966A/ja
Application granted granted Critical
Publication of JP5888052B2 publication Critical patent/JP5888052B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Multi Processors (AREA)

Description

本発明は、タスク通信方法、情報処理装置およびタスク通信プログラムに関し、特に、複数のタスクが通信を行いながら処理を実行するように構成されたソフトウェアにおいて、タスク間の通信を1対1同期通信で行う場合のタスク通信方法、情報処理装置およびタスク通信プログラムに関する。
本出願人は、先に、複数のタスクそれぞれを同時並行的に実行する方法として、特願2010−229784号「データ処理方法、データ処理装置及び、データ処理プログラム」に記載した処理方法を提案している。該処理方法は、タスクそれぞれを同時並行的に動作させ、データの供給側と使用側というデータ依存関係に基づいて、タスクがハンドシェイク型の同期通信を行うことにより、タスク内の計算を実行する、というパイプライン的な並列データ処理方法を採用している。
より具体的には、データ供給タスクにおけるデータの計算後に、データ供給タスクが割り当てられたスレッドと、データ使用タスクが割り当てられたスレッドとの間で、ハンドシェイク型の同期通信を行うことによって、ロック/アンロックをすることなく、排他的なデータアクセスを行うことを可能にするようにしている。
かくのごとき並列データ処理方法において、タスクそれぞれは、同時並行的に動作する小規模プログラムである。この小規模プログラムの具体的な例としては、例えば、LinuxにおけるスレッドあるいはRTOS(Real Time Operating System)におけるタスク等、が挙げられる。
複数のタスクが通信を行いながら処理を実行するように構成されたソフトウェアにおいては、或る一つのタスクと他の一つのタスクとが通信する1対1の通信を行う以外に、タスクとして多対1や1対多の通信を行うことがある。 例えば、CSP(Communicating Sequential Processes)理論に基づいた並列処理は、複数のタスクが通信を行ないながら処理を同時に実行するように構成された並列処理の一つである。
このような複数のタスクとタスク間の通信とによって構成された並列処理を特定の実行環境に実装する場合に、実行環境如何によっては、多対1や1対多の通信手段が提供されていなかったり、提供される通信手段の仕様が所望の仕様と異なっているために利用することができなかったり、 あるいは、利用することができたとしても効率が悪かったり、といったことが発生する可能性がある。
多対1や1対多の通信API(Application Programming Interface)を利用できない実行環境においては、多くの実行環境で利用可能と考えられる1対1通信APIのみを用いて全てのタスク間通信を行うことになる。 ところが、1対1通信APIを使って多対1や1対多の通信を表現しようとすると、場合によっては、デッドロックが発生する可能性がある。
例えば、図10に示す4個のタスクA、B、C、Dによる計算を行う場合を考える。図10は、通信を行いながら同時に動作する4個のタスクA、B、C、Dで構成されたタスクセットにおいて、デッドロックが発生する1対1同期通信の送受信順序を説明するための説明図である。図10の例において、これらのタスクが、A→B、B→D、A→D、A→C、C→D、という通信を行うものと仮定する。また、タスクA、B、C、Dの各タスクは、(1)受信処理、(2)計算、(3)送信処理、を繰り返すものとする。さらに、全てのタスク間通信を同期通信(送信処理も受信処理も相手側を待ち合わせる)で行うものとする。
例えば、1対1同期通信のみが可能な状態において、図10に示すように、タスクAの送信順序を、
(a1)タスクBと1対1同期通信
(a2)タスクDと1対1同期通信
(a3)タスクCと1対1同期通信
と決めて、タスクDの受信順序を、
(d1)タスクCと1対1同期通信
(d2)タスクAと1対1同期通信
(d3)タスクBと1対1同期通信
と決めたとする。
かくのごとき通信順序で、タスク間の通信を1対1同期通信で行う場合には、デッドロックが発生する。すなわち、前述のように、タスクAは、(a1)タスクB、(a2)タスクD、(a3)タスクC、の順で、タスクDは、(d1)タスクC、(d2)タスクA、(d3)タスクB、の順で1対1同期通信を行うと、図11に示すように、 タスクBへの通信を完了した後のタスクAは、(a2)の時点でタスクDの受信状態への移行を待ち続け、一方、タスクDは(d1)の時点でタスクCからの送信を待ち続け、さらに、タスクCはタスクAからの送信を待ち続ける、という状態になり、デッドロックに陥る。図11は、図10のタスクセットにおいてタスク間通信のデッドロックが発生する様子を説明するための説明図である。
図11の実線矢印は、タスク間の同期通信が成功した場合を示しているが、破線矢印は、デッドロックに陥った通信を表している。同期通信がデッドロックに陥った原因は、各タスクの受信処理や送信処理において、不適切な順番で1対1同期通信を使ったためである。デッドロック回避対策として、特許文献1の特開平6−85841号公報「通信制御装置」のように、たとえ、各通信データを一時的に保存する通信用のバッファメモリを備えたとしても、図10に示した不適切な順番で1対1同期通信が繰り返されると、通信用のバッファメモリのオーバフローが発生し、デッドロックに陥る事態を完全には防ぐことはできない。ただし、もし、多対1および1対多同期通信APIを使うことが可能であれば、不適切な順番に陥ることはなく、デッドロックの発生を防止することが可能になる。
あるいは、全てのタスク間通信を、非同期通信(送信処理は受信処理を待ち合わせない、一方、受信処理は送信処理を待ち合わせる通信)を用いて行うならば、 どんな順番で1対1非同期通信APIを使っても、デッドロックを発生させないようにすることが可能になる。ただし、非同期通信を行う場合にはタスク間の同期制御上の別の問題(適切な通信バッファメモリ等の実装および管理等)を対策することが必要になる。
特開平6−85841号公報(第3−5頁)
以上説明したように、 複数のタスクと同期通信とによって構成された処理において、多対1や1対多の同期通信を1対1同期通信で代用せざるを得ない場合には、各タスク内の不適切な通信順序が原因となり、タスク間通信のデッドロックが発生する可能性がある、という課題がある。
(本発明の目的)
本発明は、かかる事情に鑑みてなされたものであり、複数のタスクと同期通信とによって構成された処理におけるタスク間同期通信にデッドロックを発生させずに1対1同期通信APIを用いることが可能なタスク通信方法、情報処理装置およびタスク通信プログラムを提供することを、その目的としている。
前述の課題を解決するため、本発明によるタスク通信方法、情報処理装置およびタスク通信プログラムは、主に、次のような特徴的な構成を採用している。
(1)本発明によるタスク通信方法は、複数のタスクが相互に通信しながら同時に動作するように構成したタスクセットにおいてタスク間の通信を行うタスク通信方法であって、前記タスクが受信処理の後に送信処理を行うように構成し、なおかつ、前記タスクセットを表す非循環有向グラフにおいて前記タスクの順序を決定する手法であるトポロジカルソート(Topological Sort)の結果に基づいて得られる順序番号を前記タスクに付与し、前記タスクは、当該タスクへ入力データを供給するデータ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行い、かつ、前記タスクは、当該タスクの出力データを使用するデータ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクへ1対1同期送信を行うことを特徴とする。
(2)本発明による情報処理装置は、複数のタスクが相互に通信しながら同時に動作するように構成したタスクセットにおいてタスク間の通信を行う情報処理装置であって、前記タスクが受信処理の後に送信処理を行うように構成し、なおかつ、前記タスクセットを表す非循環有向グラフにおいて各前記タスクの順序を決定する手法であるトポロジカルソート(Topological Sort)の結果に基づいて得られる順序番号を前記各タスクに付与する手段を備え、前記タスクは、当該タスクへ入力データを供給するデータ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行う手段を備え、かつ、前記タスクは、当該タスクの出力データを使用するデータ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクへ1対1同期送信を行う手段を備えていることを特徴とする。
(3)本発明によるタスク通信プログラムは、複数のタスクが相互に通信しながら同時に動作するように構成したタスクセットにおいてタスク間の通信を行うタスク通信方法をコンピュータによって実行可能なプログラムとして実施するタスク通信プログラムであって、前記タスクが受信処理の後で送信処理を行うように構成し、なおかつ、前記タスクセットを表す非循環有向グラフにおいて各前記タスクの順序を決定する手法であるトポロジカルソート(Topological Sort)の結果に基づいて得られる順序番号を前記各タスクに付与するステップを有し、前記タスクは、当該タスクへ入力データを供給するデータ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行うステップを有し、かつ、各前記タスクは、当該タスクの出力データを使用するデータ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクへ1対1同期送信を行うステップを有していることを特徴とする。
本発明のタスク通信方法、情報処理装置およびタスク通信プログラムによれば、以下のような効果を奏することができる。
すなわち、本発明においては、複数のタスクからなるタスクセットを、各タスクが相互に通信しながら同時に動作するように構成し、かつ、各タスクが受信処理の後で送信処理を行うように構成し、なおかつ、該タスクセットを表す非循環有向グラフの各ノードの実行順序を決定する手法であるトポロジカルソート(Topological Sort)の結果に基づいた順序にしたがって順序付けられた1対1同期通信API(Application Programming Interface)によって、各タスクにおける複数タスクからの受信処理および複数タスクへの送信処理を実施する仕組みを採用しており、該トポロジカルソートで得られる順序は、非循環有向グラフで表されたタスクを逐次的に実行する際の適切な実行順序を表すものとなっている。
したがって、複数のタスクとタスク間同期通信とによって構成された処理において、タスクが受信処理の後で送信処理を行うようにし、かつ、各タスクにおける多対1あるいは1対多の同期通信をトポロジカルソートによって決定された順序の1対1同期通信で置き換えることにより、多対1や1対多の同期通信が必要な状況下に対して1対1同期通信APIを適用した場合であっても、各タスク内の不適切な通信順序が原因になってデッドロックを引き起こすことを確実に防止することができる。つまり、複数のタスクとタスク間同期通信とによって構成された処理を、多対1や1対多の通信APIが利用可能でない環境下で実行する場合に、各タスクにおける多対1あるいは1対多の同期通信をトポロジカルソートによって決定された順序の1対1同期通信で置き換えることにより、デッドロックを発生させることがない1対1同期通信APIを各タスク間通信に適用することができる。
本発明の模範的な実施形態におけるタスクの動作を説明する説明図である。 本発明の第一の実施形態のタスク通信方法を示すフローチャートである。 非循環有向グラフによって表現されたタスクセットの一例を示す図である。 図3に例示したタスクセットをトポロジカルソートした結果の一例を示す図である。 図3に例示したタスクセットのタスク間の通信順序を説明する説明図である。 本発明の第二の実施形態のタスク通信方法を示すフローチャートである。 イタレーション間データ依存関係を有するタスクセットの一例を示す図である。 図7に例示したタスクセットを、破線エッジ(イタレーション間データ依存関係)を無視してトポロジカルソートした結果の一例を示す図である。 図7に例示したタスクセットのタスク間の通信順序を説明する説明図である。 通信を行いながら同時に動作する4個のタスクA、B、C、Dで構成されたタスクセットにおいて、デッドロックが発生する1対1同期通信の送受信順序を説明するための説明図である。 図10のタスクセットにおいてタスク間通信のデッドロックが発生する様子を説明するための説明図である。
以下、本発明によるタスク通信方法、情報処理装置およびタスク通信プログラムの好適な実施形態について添付図を参照して説明する。なお、以下の説明においては、本発明によるタスク通信方法について説明するが、かかるタスク通信方法を実施する手段を備えた情報処理装置として実現するようにしても良いし、また、かかるタスク通信方法をコンピュータにより実行可能なタスク通信プログラムとして実施するようにしても良いし、あるいは、タスク通信プログラムをコンピュータにより読み取り可能な記録媒体に記録するようにしても良いことは言うまでもない。
(本発明の特徴)
本発明の実施形態の説明に先立って、本発明の特徴についてその概要をまず説明する。本発明は、タスク間の通信において、受信処理の後で送信処理を行うという順序則と非循環有向グラフにおけるトポロジカルソート(Topological Sort)による順序則とを組み合せることによって、従来技術において1対1同期通信にて発生する可能性があったデッドロックの発生を確実に回避し、高信頼のタスク通信の仕組みを実現することを主要な特徴としている。
つまり、複数のタスクからなるタスクセットを、各タスクが相互に同期通信しながら同時に動作するように構成し、かつ、タスクが受信処理の後で送信処理を行うように構成し、なおかつ、トポロジカルソートによって得られる順序番号を各タスクに付与して、各タスクは、当該タスクへ入力データを供給するデータ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行い、かつ、各タスクは、当該タスクの出力データを使用するデータ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクへ1対1同期送信を行うことを、主要な特徴としている。而して、複数のタスクと同期通信とによって構成された処理において、デッドロックを発生させことなくタスク間通信に1対1同期通信APIを適用することができる。
さらに、本発明は、少なくとも二つのタスクの間にイタレーション(iteration)間データ依存関係が存在するような複数のタスクからなるタスクセットによって構成されている場合についても、以下のような仕組みを採用することによって、デッドロックを発生させことなく各タスク間通信に1対1同期通信APIを適用することができる。イタレーションとは、タスクセット全体の一回分の実行を表す。イタレーション間データ依存関係とは、第N回目のタスクセットの実行と(Nは整数)、第(N+1)回目のタスクセットの実行との間のデータ依存関係を表す。
すなわち、複数のタスクからなるタスクセットにおいて少なくとも二つのタスクの間にイタレーション(iteration)間データ依存関係が存在する場合には、当該複数のタスクからなるタスクセットを、各タスクが相互に同期通信しながら同時に動作するように構成し、かつ、タスクが受信処理の後で送信処理を行うように構成し、なおかつ、前記タスクセットからイタレーション間データ依存関係を除いたタスクセットを表す非循環有向グラフに対するトポロジカルソートによって得られる順序番号を各タスクにあらかじめ付与する。
さらに、各タスクについて、当該タスクへ入力データを供給するタスク(データ供給タスク)を、イタレーション間データ依存関係に対応する第一のグループと、それ以外の第二のグループとに分ける。そして、各タスクは、まず、第一のグループのタスク(データ供給タスク)からの受信を優先して、その後に、第二のグループのタスク(データ供給タスク)からの受信を行う順序として、それぞれのグループ内においては、付与された前記順序番号の順番にしたがって、それぞれ1対1同期受信を行う。
さらに、各タスクについて、当該タスクの出力データを使用するタスク(データ使用タスク)を、イタレーション間データ依存関係に対応する第三のグループと、それ以外の第四のグループとに分ける。そして、各タスクは、まず、第三のグループのタスク(データ使用タスク)への送信を優先して、その後に、第四のグループのタスク(データ使用タスク)への送信を行う順序として、それぞれのグループ内においては、付与された前記順序番号の順番にしたがって、それぞれ1対1同期送信を行う。
(本発明の実施形態)
次に、本発明の実施形態について説明する。
<本発明が対象とする並列処理モデル>
まず、本発明の模範的な実施形態における並列処理の概念について説明する。 本発明の実施形態が対象とする並列処理は、何らかの計算を行う複数のタスクが同時並行的に動作し、なおかつ、データ依存関係を有するタスク同士が同期通信を行うことによって、複数のタスクの実行タイミングを調整する。
ここで、データ依存関係とは、タスクが使用するデータに関するデータ供給タスクとデータ使用タスクとの間の依存関係のことを意味している。例えば、タスクT1の計算結果のデータR1をタスクT2が使用する場合には、タスクT1からタスクT2に対してデータ依存関係が存在する。 この場合、データR1に関して、タスクT1はデータ供給タスクであり、タスクT2はデータ使用タスクである。タスクT1からタスクT2に対してデータ依存関係が存在する場合には、タスクT2はタスクT1の後で実行されなければならない。
本発明が対象とする並列処理モデルにおいては、 各タスクは、Windows(商標)やLinux(商標)等のオペレーティングシステムにおけるスレッド、 あるいは、リアルタイムオペレーティングシステム(RTOS)におけるタスクといったプログラムのことである。 複数のタスクは、同時並行的に動作し、タスクの内部の処理や計算は逐次的に実行される。つまり、各タスク(各ノード)は、図1(A)に示すように、その内部において、受信処理の後で送信処理を行うように構成され、以下の(1)〜(3)の三つの処理を繰り返す。図1は、本発明の模範的な実施形態におけるタスクの動作を説明する説明図である。
(1)受信: 入力データの計算完了を待つ。
(2)計算: タスクの計算を実行する。
(3)送信:出力データの計算完了を通知する。
タスクは、図1(B)の矢印に示すように、1ないし複数のタスクからのデータを必要とする場合、はじめに、(1)受信状態において、当該タスクが必要とする入力データが計算完了の状態になるまで待つ。 次いで、タスクは、当該タスクへ入力データを供給する全てのデータ供給タスクからの計算完了通知を受信することによって、当該タスクの入力データが計算完了の状態になっているものと判断する。計算完了通知は、データ供給タスクが計算を完了したことを表す通知であれば良く、通知の中に計算結果あるいは計算結果の格納場所を表すポインタを含んでいても良いし、他に、通信の宛先や発信元の情報を含んでいても良い。
続いて、全てのデータ供給タスクからの計算完了通知を受信したタスクは、(2)計算状態において、計算を実行する。この計算により、当該タスクの出力データが作成される。そして、タスクは、(3)送信状態において、計算完了通知を送信することにより、出力データの計算が完了したことを当該出力データを使用する全てのデータ使用タスクに対して通知する。
以上の処理を繰り返すことにより、複数のタスクによる並列処理が行われる。 なお、前述の(1)受信状態において、「タスクの計算を終了せよ」というメッセージを受信した場合には、タスクを終了させるようにしても良い。
<トポロジカルソート(Topological Sort)について>
次に、本発明において重要な概念であるトポロジカルソートについて説明する。 トポロジカルソートとは、非循環有向グラフ(Directed Acyclic Graph、DAG)のノード(タスク)とエッジ(データなど何らかの依存関係)との関係に基づいて、各ノード(タスク)の順序付けを行うものであり、順序付けとして、どのノード(タスク)もその出力エッジの先のノード(タスク)よりも前に位置するように並べ替えることである。例えば、トポロジカルソートの典型的な利用例としては、タスクのスケジューリングや、コンパイラにおける命令スケジューリング等がある。
つまり、データ依存関係を有する複数のタスクからなるタスクセットを非循環有向グラフによって表現し、該非循環有向グラフをトポロジカルソートすることによって、 タスクを実行すべき順序を判別することが可能になる。なお、トポロジカルソートで得られる順序は、一つだけとは限らず、複数の正しい順序が存在し得る。トポロジカルソートの結果に基づいて、タスク間(ノード間)の1対1同期通信の実行順序を決定することにより、各タスク(ノード)は、デッドロックを確実に回避可能しながらタスク間同期通信を行うことができる。
<第一の実施形態>
次に、本発明のタスク通信方法の第一の模範的な実施形態について、図2のフローチャートを用いて説明する。図2は、本発明の第一の実施形態のタスク通信方法を示すフローチャートである。第一の実施形態のタスク通信方法は、複数のタスクからなるタスクセットにおけるタスク間の多対1および1対多の通信を、トポロジカルソートによってあらかじめ得られている順序に基づいて、複数の1対1同期通信にて行う場合を示している。
図2のフローチャートにおいて、第一の実施形態が扱うタスクセットは、事前に、トポロジカルソートされて、各タスクにトポロジカルソートの順序番号が付与されている(ステップS0)。順序番号があらかじめ付与された各タスクは、図1に示したように、まず、(1)受信状態において当該タスクへ入力データを供給する全てのデータ供給タスクの計算完了通知を受信した後(ステップS1)、(2)計算において全てのデータ供給タスクからの入力データを用いた計算を実施し(ステップS2)、しかる後に、(3)送信状態において全てのデータ使用タスクに対して出力データの計算完了通知を送信する(ステップS3)という三つの処理を繰り返す。
ステップS0において事前にトポロジカルソートによって当該タスクに付与されている順序番号にしたがって通信を行うのは、ステップS1の(1)受信とステップS3の(3)送信の処理である。
ステップS1の(1)受信状態においては、非循環有向グラフで表現されたタスクセットの中において、各タスクは、前述のように、データ供給タスクから計算完了通知を受信する。もし、或るタスクが入力エッジを有していない場合であれば、当該タスクにはデータ供給タスクは存在していないので、当該タスクはステップS1の(1)受信状態においては何もしないで、次のステップS2の(2)計算処理へ進む。
これに対して、もし、タスクが入力エッジを一つ以上有している場合であれば、当該タスクは、各入力エッジにつながるデータ供給タスクから、タスクセットをトポロジカルソートして得られた順序に基づいて、計算完了通知を1対1同期通信によって受信する。具体的には、ステップS0において、事前に、タスクセットをトポロジカルソートして、各タスクにトポロジカルソートの順序番号を付与しておき、ステップS1の(1)受信状態において、各タスクは、データ供給タスクのトポロジカルソートの順序番号が小さい方から順番に、1対1同期通信により計算完了通知を受信する。
一方、ステップS3の(3)送信状態においては、各タスクは、前述のように、データ使用タスクに対して計算完了通知を送信する。もし、或るタスクが出力エッジを有していない場合であれば、当該タスクにはデータ使用タスクは存在していないので、当該タスクはステップS3の(3)送信状態においては何もしないで、ステップS1に復帰して、再び、次のイタレーション(反復動作)の(1)受信状態に戻る。
これに対して、もし、タスクが出力エッジを一つ以上有している場合であれば、当該タスクは、各出力エッジにつながるデータ使用タスクに対して、タスクセットをトポロジカルソートして得られた順序に基づいて、計算完了通知を1対1同期通信によって送信する。具体的には、ステップS0において、事前に、タスクセットをトポロジカルソートして、各タスクにトポロジカルソートの順序番号を付与しておき、ステップS3の(3)送信状態において、各タスクは、データ使用タスクのトポロジカルソートの順序番号が小さい方から順番に、1対1同期通信により計算完了通知を送信する。
<第一の実施形態の具体的動作>
次に、図2に示した第一の実施形態のタスク通信方法の通信に関する具体的な動作について図面を参照しながらさらに詳細に説明する。図3は、非循環有向グラフ(DAG)によって表現されたタスクセットの一例を示す図であり、タスクセットが6個のタスクA〜Fからなっている場合について例示している。ここで、図3に一例を示すタスクセットにおいて、丸で囲まれたノードはそれぞれタスクA〜Fを示し、矢印付きの実線でノード間を結ぶエッジは、タスク間のデータ依存関係を示している。
まず、タスクセットのトポロジカルソートおよびタスクへの順序番号の付与に関する処理について説明する。これらの処理は、図2において説明したように、タスクセットに対して事前に行う処理である。図3のタスクセットをトポロジカルソートした結果を、図4に示している。つまり、図4は、図3に例示したタスクセットをトポロジカルソートした結果の一例を示す図である。なお、丸で囲まれたノード(タスク)間を結んでいる矢印付きの実線は、タスク間のデータ依存関係を示すエッジであり、図3における矢印付きの実線と同じ状態にある。
図4の各ノード内の括弧付きの数字(1)〜(6)の順序番号によって示しているように、図4に例示したタスクセットのトポロジカルソートの結果として、タスクA、B、C、D、E、Fという順序が得られる。得られた順序にしたがって、各タスクA〜Fに対してトポロジカルソートの順序番号を付与する。つまり、図4に示すように、順序番号として、タスクAに(1)を、タスクBに(2)を、タスクCに(3)を、タスクDに(4)を、タスクEに(5)を、タスクFに(6)を、それぞれ付与する。
続いて、図5を用いて、各タスクの(1)受信状態および(3)送信状態における各タスク間の1対1同期通信時の通信順序について説明する。図5は、図3に例示したタスクセットのタスク間の通信順序を説明する説明図である。
タスクAは、図3に示したように、入力エッジを一つも有していないが、出力エッジを三つ有している。また、タスクAの三つの出力エッジは、図3に示したように、タスクC、D、Eにそれぞれつながっている。一方、図4に説明したように、タスクC、D、Eのトポロジカルソートの順序番号は、それぞれ、3、4、5である。したがって、図5(A)に示すように、タスクAが(3)送信状態において1対1同期通信により送信処理を行う順番は、(a1)タスクCに対する送信、(a2)タスクDに対する送信、(a3)タスクEに対する送信の順番になる。
また、タスクBは、図3に示したように、入力エッジを一つも有していないが、出力エッジを二つ有している。また、タスクBの二つの出力エッジは、図3に示したように、タスクD、Eにそれぞれつながっている。一方、図4に説明したように、タスクD、Eのトポロジカルソートの順序番号は、それぞれ4、5である。したがって、図5(B)に示すように、タスクBが(3)送信状態において1対1同期通信により送信処理を行う順番は、(b1)タスクDに対する送信、(b2)タスクEに対する送信の順番になる。
また、タスクCは、図3に示したように、入力エッジを一つ、出力エッジを二つ有している。また、図3に示したように、タスクCの一つの入力エッジはタスクAに、また、二つの出力エッジはタスクE、Fそれぞれにつながっている。ここで、入力エッジあるいは出力エッジが一つだけの場合には、受信順序あるいは送信順序を決めるまでもない。一方、図4に説明したように、タスクE、Fのトポロジカルソートの順序番号は、それぞれ5、6である。 したがって、図5(C)に示すように、タスクCは、(1)受信状態において1対1同期通信により受信処理を行う順番はなく、(c11)タスクAからの受信のみであり、(3)送信状態において1対1同期通信により送信処理を行う順番は、(c31)タスクEに対する送信、(c32)タスクFに対する送信の順番になる。
タスクD、タスクE、タスクF、においても、各タスクが(1)受信状態において1対1同期通信により受信処理を行う順番は、入力エッジにつながるタスクのトポロジカルソートの順序番号の若い順番である。そして、各タスクが(3)送信状態において1対1同期通信により送信処理を行う順番は、出力エッジにつながるタスクのトポロジカルソートの順序番号の若い順番である。
つまり、図5(D)に示すように、タスクDが行う1対1同期通信の受信処理の順番は、(d11)タスクAからの受信、(d12)タスクBからの受信の順番になり、1対1同期通信の送信信処理の順番は、(d31)タスクEに対する送信、(d32)タスクFに対する送信の順番になる。また、図5(E)に示すように、タスクEが行う1対1同期通信の受信処理の順番は、(e1)タスクAからの受信、(e2)タスクBからの受信、(e3)タスクCからの受信、(e4)タスクDからの受信の順番になり、1対1同期通信の送信処理はない。また、図5(F)に示すように、タスクFが行う1対1同期通信の受信処理の順番は、(f1)タスクCからの受信、(f2)タスクDからの受信の順番になり、1対1同期通信の送信処理はない。
以上のように、複数のタスクからなるタスクセットを、各タスクが相互に同期通信しながら同時に動作するように構成し、かつ、タスクが受信処理の後で送信処理を行うように構成し、なおかつ、前記タスクセットを表す非循環有向グラフをトポロジカルソートすることによって得られる順序番号を各タスクに付与して、各タスクは、当該タスクへ入力データを供給するデータ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行い、かつ、各タスクは、当該タスクの出力データを使用するデータ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクに対して1対1同期送信を行うことによって、複数のタスクとタスク間同期通信とによって構成された処理において、デッドロックを発生させることなく各タスク間通信に1対1同期通信APIを適用することができる。
<第二の実施形態>
次に、本発明のタスク通信方法の第二の模範的な実施形態について、図6のフローチャートを用いて説明する。図6は、本発明の第二の実施形態のタスク通信方法を示すフローチャートである。第二の実施形態のタスク通信方法は、異なるイタレーション間のデータ依存関係(イタレーション間データ依存関係)を有する複数のタスクを含むタスクセットを対象として、トポロジカルソートによってあらかじめ得られている順序に基づいて、複数の1対1同期通信にて行う場合を示している。ここで、イタレーションとは、タスクセット全体の一回分の実行を意味するものであり、イタレーション間データ依存関係とは、第N回目(N:正整数)のタスクセットの実行と、第(N+1)回目のタスクセットの実行との間のデータ依存関係を意味している。
先に説明した第一の実施形態のタスク通信方法は、イタレーション間データ依存関係を有していない場合のタスクセットを対象としているものであって、イタレーション間データ依存関係を有するタスクを扱うことを想定していない。これに対して、本第二の実施形態のタスク通信方法は、前述のように、イタレーション間のデータ依存関係を有するタスクを含むタスクセットを対象としており、前記第一の実施形態のタスク通信方法を、イタレーション間データ依存関係を取り扱うために改良を施したタスク通信方法の一例を説明するものである。
図6のフローチャートにおいて、第二の実施形態が扱うタスクセットは、第一の実施形態の場合と同様に、事前に、トポロジカルソートされて、各タスクにトポロジカルソートの順序番号が付与されている(ステップS10)。順序番号があらかじめ付与された各タスクは、図2に第一の実施形態のフローチャートとして示した場合と同様に、まず、(1)受信状態において当該タスクへ入力データを供給する全てのデータ供給タスクの計算完了通知を受信した後(ステップS11)、(2)計算において全てのデータ供給タスクからの入力データを用いた計算を実施し(ステップS12)、しかる後に、(3)送信状態において全てのデータ使用タスクに対して出力データの計算完了通知を送信する(ステップS13)という三つの処理を繰り返す。
なお、図6のステップS10において、第二の実施形態が扱うタスクセットをトポロジカルソートする際には、当該タスクセットを非循環有向グラフと見做すために、当該タスクセットに含まれるイタレーション間データ依存関係を無視する。例えば、後述する図7にイタレーション間データ依存関係を有するタスクを含むタスクセットの一例を示しているが、図7においてイタレーション間データ依存関係を有するタスク(ノード)のエッジは、タスクFからタスクBへの破線で示すエッジである。図7のタスクセットをトポロジカルソートする際には、この破線エッジを無視することにより、タスクセットを非循環有向グラフとみなせるようにする。一つのイタレーション内部におけるタスクセットのデータ依存関係を扱う際には、イタレーション間データ依存関係は無関係であるので、図7のタスクFからタスクBへの破線で示すエッジ(イタレーション間データ依存関係)を無視することができる。
ステップS10において事前にトポロジカルソートによって当該タスクに付与されている順序番号にしたがって通信を行うのは、第一の実施形態の場合と同様、ステップS11の(1)受信とステップS13の(3)送信の処理である。
ステップS11の(1)受信状態においては、非循環有向グラフで表現されたタスクセットの中において、各タスクは、前述のように、入力エッジにつながるデータ供給タスクから計算完了通知を受信する。ここで、タスクセットにおいて、少なくとも一つのタスクの入力エッジには、図7のタスクセットの例で示したように、実線エッジ(イタレーション内部のデータ依存関係)以外の破線エッジ(イタレーション間のデータ依存関係)を含むものも存在しているものとする。もし、或るタスクが入力エッジを有していない場合であれば、第一の実施形態の場合と同様、当該タスクにはデータ供給タスクは存在していないので、当該タスクはステップS11の(1)受信状態においては何もしないで、次のステップS12の(2)計算処理へ進む。
これに対して、もし、タスクが入力エッジを一つ以上有していれば、当該タスクは、イタレーション間のデータ依存関係を対象としていない第一の実施形態の場合とは異なり、次に説明する順序にしたがって、各入力エッジにつながるデータ供給タスクから計算完了通知を受信する。
まず、タスクへの入力エッジを、実線エッジ(イタレーション内部のデータ依存関係を表すエッジ)と破線エッジ(イタレーション間のデータ依存関係を表すエッジ)との二つのグループに分ける。しかる後、最初に、破線エッジにつながるデータ供給タスクのグループ(すなわち、イタレーション間のデータ依存関係を有する1ないし複数のデータ供給タスクのグループ)に着目して、破線エッジにつながるデータ供給用タスクに付与された順序番号の順番にしたがって、データ供給タスクから計算完了通知を1対1同期通信によって受信する。具体的には、ステップS11の(1)受信状態において、各タスクは、まず、破線エッジにつながるデータ供給タスクに付与された順序番号が小さい方から順番に、1対1同期通信により、データ供給タスクから計算完了通知を受信する(ステップS111)。
続いて、実線エッジにつながるデータ供給タスクのグループ(すなわち、イタレーション間のデータ依存関係を有していなく、イタレーション内部のデータ依存関係のみを有する1ないし複数のデータ供給タスクのグループ)に着目して、実線エッジにつながるデータ供給タスクに付与された順序番号の順番にしたがって、データ供給タスクから計算完了通知を1対1同期通信によって受信する。具体的には、ステップS11の(1)受信状態において、ステップS111の処理を終了してから、各タスクは、実線エッジにつながるデータ供給タスクに付与された順序番号が小さい方から順番に、1対1同期通信により、データ供給タスクから計算完了通知を受信する(ステップS112)。
一方、ステップS13の(3)送信状態においては、各タスクは、前述のように、データ使用タスクに対して計算完了通知を送信する。ここで、タスクセットにおいて、少なくとも一つのタスクの出力エッジには、図7のタスクセットの例で示したように、実線エッジ(イタレーション内部のデータ依存関係)以外の破線エッジ(イタレーション間のデータ依存関係)を含むものも存在しているものとする。もし、或るタスクが出力エッジを有していない場合であれば、第一の実施形態の場合と同様、当該タスクにはデータ使用タスクは存在していないので、当該タスクはステップS13の(3)送信状態においては何もしないで、ステップS11に復帰して、再び、次のイタレーション(反復動作)の(1)受信状態に戻る。
これに対して、もし、タスクが出力エッジを一つ以上有している場合であれば、当該タスクは、イタレーション間のデータ依存関係を対象としていない第一の実施形態の場合とは異なり、次に説明する順序にしたがって、各出力エッジにつながるデータ使用タスクに対して計算完了通知を送信する。
まず、タスクからの出力エッジを、ステップS11の(1)受信状態の場合と同様に、実線エッジ(イタレーション内部のデータ依存関係を表すエッジ)と破線エッジ(イタレーション間のデータ依存関係を表すエッジ)との二つのグループに分ける。しかる後、最初に、破線エッジにつながるデータ使用タスクのグループ(すなわち、イタレーション間のデータ依存関係を有する1ないし複数のデータ使用タスクのグループ)に着目して、破線エッジにつながるデータ使用タスクに付与された順序番号の順番にしたがって、データ使用タスクに対して計算完了通知を1対1同期通信によって送信する。具体的には、ステップS13の(3)送信状態において、各タスクは、まず、破線エッジにつながるデータ使用タスクに付与された順序番号が小さい方から順番に、1対1同期通信により、データ使用タスクへ計算完了通知を送信する(ステップS131)。
続いて、実線エッジにつながるデータ使用タスクのグループ(すなわち、イタレーション間のデータ依存関係を有していなく、イタレーション内部のデータ依存関係のみを有する1ないし複数のデータ使用タスクのグループ)に着目して、実線エッジにつながるデータ使用タスクに付与された順序番号の順番にしたがって、データ使用タスクに対して計算完了通知を1対1同期通信によって送信する。具体的には、ステップS13の(3)送信状態において、ステップS131の処理を終了してから、各タスクは、実線エッジにつながるデータ使用タスクに付与された順序番号が小さい方から順番に、1対1同期通信により、データ使用タスクへ計算完了通知を送信する(ステップS132)。
<第二の実施形態の具体的動作>
次に、図6に示した第二の実施形態のタスク通信方法の通信に関する具体的な動作について図面を参照しながらさらに詳細に説明する。図7は、イタレーション間データ依存関係を有するタスクセットの一例を示す図であり、タスクセットが6個のタスクA〜Fからなっている場合について例示している。
ここで、図7に一例を示すタスクセットにおいて、丸で囲まれたノードはそれぞれタスクA〜Fを示し、矢印付きの実線でノード間を結ぶエッジ(実線エッジ)は、イタレーション内部におけるタスク間のデータ依存関係を、また、矢印付きの破線でノード間を結ぶエッジ(破線エッジ)は、異なるイタレーションのタスク間のデータ依存関係を、それぞれ示している。図7の例において、イタレーション間データ依存関係になる破線エッジは、タスクFからタスクBへの破線で示すエッジである。かくのごとき破線エッジを無視することによって、図7についても、第一の実施形態の図3の場合と同様、非循環有向グラフと見做すことができる。
まず、タスクセットのトポロジカルソートおよびタスクへの順序番号の付与に関する処理について説明する。これらの処理は、図6において説明したように、タスクセットに対して事前に行う処理である。図7のタスクセットを、破線エッジ(イタレーション間データ依存関係)を無視してトポロジカルソートした結果を図8に示している。つまり、図8は、図7に例示したタスクセットを、破線エッジ(イタレーション間データ依存関係)を無視してトポロジカルソートした結果の一例を示す図である。なお、丸で囲まれたノード(タスク)間を結んでいる矢印付きの実線は、イタレーション内部におけるタスク間のデータ依存関係((イタレーション内データ依存関係)を示すエッジであり、図7における矢印付きの実線と同じ状態にある。また、丸で囲まれたノード(タスク)間を結んでいる矢印付きの破線は、異なるイタレーションのタスク間のデータ依存関係(イタレーション間データ依存関係)を示すエッジであり、図7における矢印付きの破線と同じ状態にある。
図8の各ノード内の括弧付きの数字(1)〜(6)の順序番号によって示しているように、図8に例示したタスクセットのイタレーション間データ依存関係を無視したトポロジカルソートの結果として、タスクA、B、C、D、E、Fという順序が得られる。得られた順序にしたがって、各タスクA〜Fに対してトポロジカルソートの順序番号を付与する。つまり、図8に示すように、順序番号として、タスクAに(1)を、タスクBに(2)を、タスクCに(3)を、タスクDに(4)を、タスクEに(5)を、タスクFに(6)を、それぞれ付与する。
続いて、図9を用いて、各タスクの(1)受信状態および(3)送信状態における各タスク間の1対1同期通信の順序について説明する。図9は、図7に例示したタスクセットのタスク間の通信順序を説明する説明図である。
タスクAは、図7に示したように、入力エッジを一つも有していないが、出力エッジを三つ有している。また、タスクAの三つの出力エッジは、図7に示したように、タスクB、C、Dにそれぞれつながっている。一方、図8に説明したように、タスクB、C、Dのトポロジカルソートの順序番号は、それぞれ、2、3、4である。したがって、図9(A)に示すように、タスクAが(3)送信状態において1対1同期通信により送信処理を行う順番は、(a1)タスクBに対する送信、(a2)タスクCに対する送信、(a3)タスクDに対する送信の順番になる。
また、タスクBは、図7に示したように、入力エッジを二つ有し、出力エッジを一つ有している。ここで、タスクBの二つの入力エッジは、一つがタスクAにつながる実線エッジであり、もう一つがタスクFにつながる破線エッジである。また、タスクBの一つの出力エッジは、図7に示したように、タスクDにつながっている。一方、図7に説明したように、タスクA、D、Fのトポロジカルソートの順序番号は、それぞれ1、4、6である。図6のフローチャートにおいて説明したように、イタレーション間データ依存関係を示す破線エッジが含まれている場合は、まず、破線エッジにつながるタスクとの通信を行い、しかる後に、イタレーション内データ依存関係を示す実線エッジにつながるタスクとの通信を行うことになる。また、入力エッジあるいは出力エッジが一つだけの場合には、受信順序あるいは送信順序を決めるまでもない。
したがって、図9(B)に示すように、タスクBは、(1)受信状態において1対1同期通信により受信処理を行う順番は、まず、(b11)トポロジカルソートの順序番号は大きいものの、破線エッジにつながるタスクFからの1対1同期受信を先に行い、しかる後に、(b12)実線エッジにつながるタスクAからの1対1同期受信を行うという順番になる。(3)送信状態においては、出力エッジは一つだけなので、(b31)タスクDに対する1対1同期送信を行うことになる。
タスクCは、図7に示したように、入力エッジを一つ、出力エッジを一つ有している。図7に示したように、タスクCの一つの入力エッジはタスクAに、また、一つの出力エッジはタスクDにそれぞれつながっている。入力エッジあるいは出力エッジが一つだけの場合には、受信順序あるいは送信順序を決めるまでもない。したがって、図9(C)に示すように、タスクCは、(1)受信状態において、(c11)タスクAから1対1同期受信を行い、(3)送信状態において、(c31)タスクDに対して1対1同期送信を行う。
タスクD、タスクE、タスクF、においても、各タスクが(1)受信状態において1対1同期通信により受信処理を行う順番は、イタレーション間データ依存関係を有する入力エッジ(破線エッジ)につながるデータ供給タスクのグループが先であり、イタレーション内データ依存関係を有する入力エッジ(実線エッジ)につながるデータ供給タスクのグループが後である。破線エッジ、実線エッジそれぞれにつながるデータ供給タスクのグループ内においては、入力エッジにつながるデータ供給タスクに付与された順序番号の若い順番に1対1同期受信する。そして、各タスクが(3)送信状態において1対1同期通信により送信処理を行う順番は、イタレーション間データ依存関係を有する出力エッジ(破線エッジ)につながるデータ使用タスクのグループが先であり、イタレーション内データ依存関係を有する出力エッジ(実線エッジ)につながるデータ使用タスクのグループが後である破線エッジ、実線エッジそれぞれのグループ内においては、出力エッジにつながるデータ使用タスクに付与された順序番号の若い順番に1対1同期送信する。
つまり、図9(D)に示すように、タスクDのエッジは全て実線エッジであり、入力エッジが三つ、出力エッジが一つである。したがって、タスクDが行う1対1同期通信の受信処理の順番は、入力エッジにつながるタスクのトポロジカルソートの順序番号の若い順番の(d11)タスクAからの受信、(d12)タスクBからの受信、(d13)タスクCからの受信の順番である。タスクDが行う1対1同期通信の送信処理については、(d31)タスクEに対する送信のみである。
また、図9(E)に示すように、タスクEのエッジは全て実線エッジであり、入力エッジ、出力エッジが一つずつである。したがって1対1同期通信の順番を決めるまでもなく、タスクEが行う1対1同期通信の送受信処理は、(e11)タスクDからの受信と、(e31)タスクFに対する送信である。
また、図9(F)に示すように、タスクEのエッジは、入力エッジが実線エッジであり、出力エッジが破線エッジであるが、入力エッジ、出力エッジが一つずつである。したがって1対1同期通信の順番を決めるまでもなく、タスクFが行う1対1同期通信の送受信処理は、(f11)タスクEからの受信と、(f31)タスクBに対する送信である。
以上のように、第二の実施形態は、少なくとも二つのタスクの間にイタレーション間データ依存関係が存在するような複数のタスクからなるタスクセットを、各タスクが相互に通信しながら同時に動作するように構成し、かつ、タスクが受信処理の後で送信処理を行うように構成し、なおかつ、イタレーション間データ依存関係を無視したトポロジカルソートによって得られる順序番号を各タスクにあらかじめ付与する。
さらに、第二の実施形態は、各タスクへ入力データを供給するタスク(データ供給タスク)を、イタレーション間データ依存関係に対応する第一グループと、それ以外の第二グループとに分け、各タスクにおける1対1同期受信順序を、第一グループのデータ供給タスクからの受信の後に第二グループのデータ供給タスクからの受信として、それぞれのグループ内の1対1同期受信順序を、データ供給タスクに付与された順序番号の順番にしたがうものとする。
さらに、第二の実施形態は、各タスクの出力データを使用するタスク(データ使用タスク)を、イタレーション間データ依存関係に対応する第三グループと、それ以外の第四グループとに分け、各タスクにおける1対1同期送信順序を、第三グループのデータ使用タスクへの送信の後に第四グループのデータ使用タスクへの送信として、それぞれのグループ内の1対1同期送信順序を、データ使用タスクに付与された順序番号の順番にしたがうものとする。
かくのごとき仕組みを採用することによって、イタレーション間データ依存関係を持つ複数のタスクからなるタスクセットに対しても、第二の実施形態は、デッドロックを発生させることなく各タスク間通信に1対1同期通信APIを適用することができる。
以上に詳細に説明したように、本発明を使用すれば、複数のタスクが同期通信を行いながら処理を実行するように構成されたソフトウェアにおいて、タスクが受信処理の後で送信処理を行うように構成し、かつ、トポロジカルソートによってタスク間の1対1同期通信の順序を決定することにより、 デッドロックを発生させることなく、各タスク間通信に1対1同期通信APIを適用することができる。かくのごときタスク通信方法は、多対1や1対多の同期通信APIが提供されないような実装環境において非常に有益である。したがって、本発明は、組込み向けのマルチプロセッサや汎用のマルチコアPCなど、複数のタスクが通信しながら動作する計算機システムにおいて幅広く応用することが可能である。
以上、本発明の好適な実施形態の構成を説明した。しかし、かかる実施形態は、本発明の単なる例示に過ぎず、何ら本発明を限定するものではないことに留意されたい。本発明の要旨を逸脱することなく、特定用途に応じて種々の変形変更が可能であることが、当業者には容易に理解できよう。
A タスク(ノード)
B タスク(ノード)
C タスク(ノード)
D タスク(ノード)
E タスク(ノード)
F タスク(ノード)

Claims (3)

  1. 複数のタスクが相互に通信しながら同時に動作するように構成したタスクセットにおいてタスク間の通信を行うタスク通信方法であって、
    前記タスクが受信処理の後に送信処理を行うように構成し、
    前記タスクセットを構成する複数のタスクのうち、少なくとも二つのタスクの間にイタレーション間データ依存関係が存在し、
    なおかつ、前記タスクセットの前記イタレーション間データ依存関係を無視して得られる非循環有向グラフをトポロジカルソートして得られる順序番号を前記タスクに付与し、
    前記タスクは、当該タスクへ入力データを供給するデータ供給タスクを、イタレーション間データ依存関係をもつ第一グループと、それ以外の第二グループとに分け、まず第一グループの前記データ供給タスクから、次に第二グループの前記データ供給タスクから、そしてグループ内では前記データ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行い、
    かつ、前記タスクは、当該タスクの出力データを使用するデータ使用タスクを、イタレーション間データ依存関係をもつ第三グループと、それ以外の第四グループとに分け、まず第三グループの前記データ使用タスクへ、次に第四グループの前記データ使用タスクへ、そしてグループ内では前記データ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクへ1対1同期送信を行う、
    ことを特徴とするタスク通信方法。
  2. 複数のタスクが相互に通信しながら同時に動作するように構成したタスクセットにおいてタスク間の通信を行う情報処理装置であって、
    前記タスクが受信処理の後に送信処理を行うように構成し、
    なおかつ、前記タスクセットを表す非循環有向グラフをトポロジカルソートして得られる順序番号を前記タスクに付与する手段を備え、
    前記タスクは、当該タスクへ入力データを供給するデータ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行う手段を備え、
    かつ、前記タスクは、当該タスクの出力データを使用するデータ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクへ1対1同期送信を行う手段を備え、
    前記タスクセットを構成する複数のタスクのうち、少なくとも二つのタスクの間にイタレーション間データ依存関係が存在し、
    前記順序番号を前記各タスクに付与する前記手段は、前記イタレーション間データ依存関係を無視して得られる非循環有向グラフをトポロジカルソートすることによって、前記順序番号を得て、前記タスクに付与する動作を行い、
    さらに、前記データ供給タスクから1対1同期受信を行う前記手段は、前記タスクに関し、当該タスクへ入力データを供給するデータ供給タスクを、イタレーション間データ依存関係をもつ第一グループと、それ以外の第二グループとに分け、まず第一グループの前記データ供給タスクから、次に第二グループの前記データ供給タスクから、そしてグループ内では前記データ供給タスクに付与された前記順序番号にしたがって、前記データ供給タスクから1対1同期受信を行わせ、
    かつ、前記データ使用タスクへ1対1同期送信を行う前記手段は、前記タスクに関し、当該タスクの出力データを使用するデータ使用タスクを、イタレーション間データ依存関係をもつ第三グループと、それ以外の第四グループとに分け、まず第三グループの前記データ使用タスクへ、次に第四グループの前記データ使用タスクへ、そしてグループ内では前記データ使用タスクに付与された前記順序番号にしたがって、前記データ使用タスクへ1対1同期送信を行わせる
    ことを特徴とする情報処理装置。
  3. 複数のタスクが相互に通信しながら同時に動作するように構成したタスクセットにおいてタスク間の通信を行うタスク通信方法をコンピュータによって実行可能なプログラムとして実施するタスク通信プログラムであって、
    前記タスクが受信処理の後に送信処理を行うように構成し、
    なおかつ、前記タスクセットを表す非循環有向グラフをトポロジカルソートして得られる順序番号を前記タスクに付与するステップを有し、
    前記タスクは、当該タスクへ入力データを供給するデータ供給タスクに付与された前記順序番号の順番にしたがって、前記データ供給タスクから1対1同期受信を行うステップを有し、
    かつ、前記タスクは、当該タスクの出力データを使用するデータ使用タスクに付与された前記順序番号の順番にしたがって、前記データ使用タスクへ1対1同期送信を行うステップを有し
    前記タスクセットを構成する複数のタスクのうち、少なくとも二つのタスクの間にイタレーション間データ依存関係が存在し、
    前記順序番号を前記各タスクに付与する前記ステップは、前記イタレーション間データ依存関係を無視して得られる非循環有向グラフを前記トポロジカルソートすることによって、前記順序番号を得て、前記タスクに付与する動作を行い、
    さらに、前記データ供給タスクから1対1同期受信を行う前記ステップは、前記タスクに関し、当該タスクへ入力データを供給するデータ供給タスクを、イタレーション間データ依存関係をもつ第一グループと、それ以外の第二グループとに分け、まず第一グループの前記データ供給タスクから、次に第二グループの前記データ供給タスクから、そしてグループ内では前記データ供給タスクに付与された前記順序番号にしたがって、前記データ供給タスクから1対1同期受信を行わせ、
    かつ、前記データ使用タスクへ1対1同期送信を行う前記ステップは、前記タスクに関し、当該タスクの出力データを使用するデータ使用タスクを、イタレーション間データ依存関係をもつ第三グループと、それ以外の第四グループとに分け、まず第三グループの前記データ使用タスクへ、次に第四グループの前記データ使用タスクへ、そしてグループ内では前記データ使用タスクに付与された前記順序番号にしたがって、前記データ使用タスクへ1対1同期送信を行わせる
    ことを特徴とするタスク通信プログラム。
JP2012072155A 2012-03-27 2012-03-27 タスク通信方法、情報処理装置およびタスク通信プログラム Active JP5888052B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012072155A JP5888052B2 (ja) 2012-03-27 2012-03-27 タスク通信方法、情報処理装置およびタスク通信プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012072155A JP5888052B2 (ja) 2012-03-27 2012-03-27 タスク通信方法、情報処理装置およびタスク通信プログラム

Publications (2)

Publication Number Publication Date
JP2013205966A JP2013205966A (ja) 2013-10-07
JP5888052B2 true JP5888052B2 (ja) 2016-03-16

Family

ID=49525018

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012072155A Active JP5888052B2 (ja) 2012-03-27 2012-03-27 タスク通信方法、情報処理装置およびタスク通信プログラム

Country Status (1)

Country Link
JP (1) JP5888052B2 (ja)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008276547A (ja) * 2007-04-27 2008-11-13 Toshiba Corp プログラム処理方法及び情報処理装置
JP4577422B2 (ja) * 2008-07-14 2010-11-10 ソニー株式会社 情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラム

Also Published As

Publication number Publication date
JP2013205966A (ja) 2013-10-07

Similar Documents

Publication Publication Date Title
US8572586B2 (en) Optimized scalar promotion with load and splat SIMD instructions
KR20170137061A (ko) 대규모 병렬 실행 가능 객체를 생성하는 방법, 디바이스 및 시스템
JP2012511204A (ja) リソースを最適化するためのタスク再編成方法
JP2007140710A (ja) タスク割り当て方法およびタスク割り当て装置
US20040268335A1 (en) Modulo scheduling of multiple instruction chains
US11507386B2 (en) Booting tiles of processing units
US8028291B2 (en) Method and computer program product for job selection and resource allocation of a massively parallel processor
JP2008146503A5 (ja)
WO2015024432A1 (zh) 一种指令调度方法及装置
US20240036921A1 (en) Cascading of Graph Streaming Processors
US7451132B2 (en) System and method for production planning utilizing on-line state-space planning
Tuncali et al. Automatic parallelization of simulink models for multi-core architectures
JP5888052B2 (ja) タスク通信方法、情報処理装置およびタスク通信プログラム
EP4229507A1 (en) Preemption in a machine learning hardware accelerator
Manolache et al. Optimization of soft real-time systems with deadline miss ratio constraints
US11928468B2 (en) Systems and methods for improved mapping of computational loops on reconfigurable architectures
JP7424137B2 (ja) 動作のスケジューリング
JP2023544911A (ja) 並列量子コンピューティングのための方法及び装置
Simon et al. Design of real-time periodic control systems through synchronization and fixed priorities
Frieb et al. Employing MPI collectives for timing analysis on embedded multi-cores
EP3495960A1 (en) Program, apparatus, and method for communicating data between parallel processor cores
Mehiaoui et al. Optimizing the deployment of tree-shaped functional graphs of real-time system on distributed architectures
Wang et al. Scheduling Fork-Join Task Graphs to Heterogeneous Processors
Haggarty et al. Distributed response time analysis of GSPN models with MapReduce
JP5033745B2 (ja) ジョブ管理システム及びジョブ管理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150212

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150824

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150929

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151127

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160119

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160201

R150 Certificate of patent or registration of utility model

Ref document number: 5888052

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150