JP2013122633A - タスク並列処理方法、その装置及びそのプログラム、並びにプログラム生成方法、その装置及びそのプログラム - Google Patents

タスク並列処理方法、その装置及びそのプログラム、並びにプログラム生成方法、その装置及びそのプログラム Download PDF

Info

Publication number
JP2013122633A
JP2013122633A JP2011270063A JP2011270063A JP2013122633A JP 2013122633 A JP2013122633 A JP 2013122633A JP 2011270063 A JP2011270063 A JP 2011270063A JP 2011270063 A JP2011270063 A JP 2011270063A JP 2013122633 A JP2013122633 A JP 2013122633A
Authority
JP
Japan
Prior art keywords
task
data
synchronization
thread
executed
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.)
Granted
Application number
JP2011270063A
Other languages
English (en)
Other versions
JP5857698B2 (ja
Inventor
Takahiro Hisamura
孝寛 久村
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 JP2011270063A priority Critical patent/JP5857698B2/ja
Publication of JP2013122633A publication Critical patent/JP2013122633A/ja
Application granted granted Critical
Publication of JP5857698B2 publication Critical patent/JP5857698B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】パイプライン的な並列データ処理に関して、同期通信の数を削減すること。
【解決手段】本発明にかかるタスク並列処理方法は、データの計算を表すタスクをひとつ以上含むグループがひとつずつ割り当てられた複数のスレッドを実行する際に、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、データ使用タスクが実行される前に、データ供給タスクからの同期待ち処理を行うとともに、第1スレッドにおいて、データ供給タスクが実行された後に、データ使用タスクへの同期通知処理を行い、各スレッドにおいて最初に実行されるデータ使用タスクに関する同期待ち処理及び同期通知処理をハンドシェイク付きで行うとともに、データ使用タスク以外のタスクに関する同期待ち処理及び同期通知処理をハンドシェイク無しで行う。
【選択図】図9

Description

本発明は、いくつかのグループに分けられた複数のタスクを、同時並行的に処理するタスク並列処理方法、タスク並列処理装置及びタスク並列処理プログラム、並びに、プログラム生成方法、プログラム生成装置及びプログラム生成プログラムに関する。
本願出願人は、複数のタスクそれぞれを同時並行的に実行する方法として、特願2010−229784における方法を提案した。この方法は、タスクそれぞれを同時並行的に動作させ、データの供給側と使用側というデータ依存関係にもとづいて、タスクがハンドシェイク型の同期通信をすることにより、タスク内の計算を実行する、というパイプライン的な並列データ処理方法である。より具体的には、データ供給側タスクにおけるデータの計算後に、データ供給側タスクが割り当てられたスレッドと、データ使用側タスクが割り当てられたスレッド間でハンドシェイク型の同期通信を行うことによって、ロック/アンロックをすることなく、排他的なデータアクセスが行えるようにしている。
この並列データ処理方法では、タスクそれぞれを同時並行的に動作する小規模プログラムとする。この小規模プログラムは、Linux(登録商標)におけるスレッド、あるいはRTOS(Realtime Operating System)におけるタスク、である。仮に、タスクの数が多くなり、タスク内の計算量が小さくなると、小規模プログラムの管理コストが大きくなり、同期通信の回数も増加し、タスク処理システム全体の実行時間が増加する。同期通信はプロセッサへの負荷が大きいため、できるだけ回数が少ない方がよい。
本願出願人は、小規模プログラムの管理コスト増大を抑制するには、複数のタスクをグループ化して、グループ化された複数のタスクを1つの小規模プログラムとすることが効果的であることを見い出した。タスクをグループ化する技術は、例えば特許文献1に公開されている。特許文献1においては、それぞれが小ループとなる複数のマクロタスクを、データローカライザブルグループとしてグループ化し、同一のデータローカライザブルグループに属する小ループ同士を、可能な限り同一のプロセッサ上で連続して実行されるようにスケジューリングする技術が公開されている。本願出願人は、さらにグループ化したタスクを1つの小規模プログラムとすることにより、小規模プログラムの個数はクループの数だけになるため、小規模プログラムの管理コストが低減し、小規模プログラムの切替の頻度を低減できることを見い出した。
タスクのグループ化は、小規模プログラムの切替を少なくする良い手段であるが、特願2010−229784に対してタスクのグループ化を単純に導入するだけでは、異なるグループに属するタスク間の依存関係を表す同期通信はそのまま残ることになる。タスクのグループ化に合わせて、負荷の大きい同期通信の回数を減らすことが可能な、グループ化や同期の方法が必要である。
特許第4177681号公報
複数のタスクのデータ依存関係にもとづいてタスクどうしが同期通信することによりデータを処理するパイプライン的な並列データ処理方法において、タスクそれぞれを同時並行的に動作する小規模プログラムにすると、タスク増加にともなって小規模プログラムの管理コスト(プログラム管理データ、スタック)が増え、タスクのデータ依存関係を表す同期通信の回数も増えてしまう。
それに対して、複数のタスクをいくつかのグループに分けることによって、小規模プログラムの数を低減することができるが、異なるグループに属するタスク間のデータ依存関係を表す同期通信はそのままである。したがって、特願2010−229784のパイプライン的な並列データ処理方法と単純なタスクのグループ化を組み合わせただけでは、同期通信の数を削減しにくい、という課題がある。
本発明の目的は、上述した課題を解決するために、パイプライン的な並列データ処理に関して、同期通信の数を削減可能な、タスク並列処理方法、タスク並列処理装置及びタスク並列処理プログラム、並びに、プログラム生成方法、プログラム生成装置及びプログラム生成プログラムを提供することにある。
本発明の第1の態様にかかるタスク並列処理方法は、データの計算を表すタスクをひとつ以上含むグループがひとつずつ割り当てられた複数のスレッドを実行する際に、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を行うとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を行い、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで行うとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで行う、ことを特徴とする。
本発明の第2の態様にかかるタスク並列処理装置は、データの計算を表すタスクをひとつ以上含むグループがひとつずつ割り当てられた複数のスレッドを実行する実行部を備え、前記実行部は、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を行うとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を行い、前記実行部は、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで行うとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで行う、ことを特徴とする。
本発明の第3の態様にかかるタスク並列処理プログラムは、データの計算を表すタスクをひとつ以上含むグループがひとつずつ割り当てられた複数のスレッドを実行する際に、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に実行される、前記データ供給タスクからの同期待ち処理と、第1スレッドにおいて、前記データ供給タスクが実行された後に実行される、前記データ使用タスクへの同期通知処理と、をコンピュータに実行させ、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで実行させるとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで実行させる、ことを特徴とする。
本発明の第4の態様にかかるプログラム生成方法は、複数のスレッドを含むプログラムを生成するプログラム生成方法であって、データの計算を表すタスクをひとつ以上含むグループをスレッドに割当て、前記タスク間のデータ依存関係にもとづいて各グループに属するタスクの実行順序を決定し、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を設定するとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を設定し、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで設定するとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで設定する、ことを特徴とする。
本発明の第5の態様にかかるプログラム生成装置は、複数のスレッドを含むプログラムを生成するプログラム生成装置であって、データの計算を表すタスクをひとつ以上含むグループをスレッドに割当てるグループ割当て部と、前記タスク間のデータ依存関係にもとづいて各グループに属するタスクの実行順序を決定する実行順序決定部と、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を設定するとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を設定する同期処理設定部と、を備え、前記同期処理設定部は、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで設定するとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで設定する、ことを特徴とする。
本発明の第6の態様にかかるプログラム生成プログラムは、複数のスレッドを含むプログラムを生成するプログラム生成プログラムであって、データの計算を表すタスクをひとつ以上含むグループをスレッドに割当てる割当て処理と、前記タスク間のデータ依存関係にもとづいて各グループに属するタスクの実行順序を決定する実行順序決定処理と、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を設定するとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を設定する同期処理設定処理と、をコンピュータに実行させ、前記同期処理設定処理では、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで設定するとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで設定する、ことを特徴とする。
上述した本発明の各態様によれば、パイプライン的な並列データ処理に関して、同期通信の数を削減可能なタスク並列処理方法、タスク並列処理装置及びタスク並列処理プログラム、並びに、プログラム生成方法、プログラム生成装置及びプログラム生成プログラムを提供することができる。
本発明の模範的な実施形態にもとづいて、グループに分けられた複数のタスクからなるデータ依存関係グラフから、タスク並列処理ソフトウェアの構成を得るためのフローチャートである。 いくつかのグループに分けられかつデータ依存関係をもつ複数のタスクを並列処理する 本発明の模範的な概念を表す図である。 本発明の模範的な本実施形態において、データ依存関係グラフから抽出したタスク並列処理と実際のコードとの関係を表す図である。 図3スレッドA、B、Cが繰返し動作する様子を表す図である。 ハンドシェイク付き同期処理をハンドシェイク無し同期処理に置換えて、図3スレッドA、B、Cを繰返し動作させる様子を表す図である。 あるひとつのタスクに対して別スレッドの複数のタスクから同期処理がある場合において、冗長なハンドシェイク無し同期処理の例を表す図である。 あるひとつのタスクから別スレッドの複数のタスクへ同期処理がある場合において、冗長なハンドシェイク無し同期処理の例を表す図である。 本実施の形態にかかるタスク並列処理システムの構成例を示す図である。 本実施の形態にかかるタスク並列処理システムの概略構成を示す図である。
本発明の実施の形態について図面を参照して説明する。本発明の模範的な実施形態における並列処理の概念を説明する。本実施形態は、いくつかのグループに分けられた複数のタスクを並列処理の対象とし、ひとつのグループに属するタスクをひとつのプログラム実行単位であるスレッドに割当て、グループ数分のスレッドを並列実行する。複数のタスクをグループに分ける方法については、本発明の対象範囲ではないので、記載しない。以降では、なんからの方法を用いて複数のタスクをいくつかのグループに分けたとして、説明する。
本実施形態は、タスクが使用するデータにもとづいてタスクの依存関係を決定する。 例えば、タスクT1の計算結果R1をタスクT2が使用するなら、タスクT1からタスクT2に対してデータ依存関係が存在する。この場合、データR1に関して、タスクT1はデータ供給側タスクであり、タスクT2はデータ使用側タスクである。タスクT1からタスクT2に対してデータ依存関係が存在するなら、タスクT2はタスクT1の後で実行されなければならない。このようなデータ依存関係にもとづいて、タスクの実行順序を決定することができる。
本明細書においては、ハンドシェイク付き同期通知処理とハンドシェイク付き同期待ち処理とを合わせたものを、ハンドシェイク付き同期処理と呼ぶことにする。そして、ハンドシェイク無し同期通知処理は、ハンドシェイクを行わずにフラグをセットする処理を意味し、ハンドシェイク付き同期通知処理よりも負荷は非常に軽い。同様に、ハンドシェイク無し同期待ち処理は、フラグがセットされているか否か確認しつつフラグがセットされるまで待つという処理を意味し、ハンドシェイク付き同期待ち処理よりも負荷は若干軽い。ハンドシェイク無し同期通知処理とハンドシェイク無し同期待ち処理とを合わせたものを、本明細書では、ハンドシェイク無し同期処理と呼ぶことにする。なお、ハンドシェイク付き同期処理と、ハンドシェイク無し同期処理の詳細については、後述する。
<タスクのデータ依存関係グラフにもとづいたタスク並列処理のためのソフトウェア構成抽出>
図1は、本発明の模範的な実施形態にもとづいて、グループに分けられた複数のタスクからなるデータ依存関係グラフから、タスク並列処理ソフトウェアの構成を得るためのフローチャートである。まず、ステップS1において、本実施形態は、タスクをグループごとにスレッドに割り当てる。ステップS2において、本実施形態は、タスクのデータ依存関係にもとづいてスレッド内での タスクの実行順序を決定する。ステップS3において、異なるグループのタスク間のデータ依存関係に対応する同期処理を追加する。ステップS4において、同期処理の中で、各スレッドの中で最初に実行されるタスクへの同期処理をハンドシェイク付き同期処理にする。このような手順により、タスクを並列処理するためのソフトウェア構成が得られる。
図2を用いて、図1の手順を具体的に説明する。図2は、いくつかのグループに分けられかつデータ依存関係をもつ複数のタスクを並列処理する本発明の模範的な概念を表す図である。図2(1)は、並列処理対象となるタスクのデータ依存関係グラフである。図2(2)は、本発明の模範的な実施形態にもとづいたタスク間の同期処理の概念を表すスレッド依存関係グラフである。
本実施形態においては、図2(1)における三つのグループA、B、Cに属するタスクを、それぞれスレッドA、B、Cに割り当てる(図1ステップS1)。そして、本実施形態は、各スレッドにおいて、タスクのデータ依存間係にもとづいて、スレッド内でのタスク実行順序を決定する(図1ステップS2)。例えば、グループAでは、タスク1からタスク2、タスク2からタスク5、というデータ依存関係が存在する。したがって、スレッドAにおけるタスクの実行順序は、(1)タスク1、(2)タスク2、(3)タスク5、である。また、グループBでは、タスク3からタスク7、タスク7からタスク8、というデータ依存関係が存在する。したがって、スレッドBにおけるタスクの実行順序は、(1)タスク3、(2)タスク7、(3)タスク8、である。また、グループCでは、タスク4からタスク6、というデータ依存関係が存在する。したがって、スレッドCにおけるタスクの実行順序は、(1)タスク4、(2)タスク6、である。つまり、本実施形態は、同一のグループに属するタスクどおしのデータ依存関係を、スレッド内部のタスクの実行順序に置換える。スレッドB、Cにおいても同様にスレッド内のタスク実行順序を定める。
つづいて、異なるグループに属するタスク間のデータ依存関係の扱い方を説明する。 本実施形態では、異なるグループに属するタスク間のデータ依存関係を、ハンドシェイク無し同期処理に置換える(図1ステップS3)。例えば、図2(1)において、グループAのタスク1からグループBのタスク3、グループCのタスク6からグループBのタスク7、などにデータ依存関係が存在する。これらは異なるグループ間のデータ依存関係なので、本実施形態は、このデータ依存関係をハンドシェイク無し同期処理に置換える。さらに、異なるグループ間のデータ依存関係であって、なおかつグループ内の実行順序が1番のタスクへのデータ依存関係については、そのハンドシェイク無し同期処理をハンドシェイク付き同期処理に置換える(図1ステップS4)。以上のようにして、データ依存関係をもつ複数のタスクを、複数のスレッドに配置する。
その結果、図2(2)に示すように、ハンドシェイク無し同期処理及びハンドシェイク付き同期処理が実行されるスレッドが生成される。すなわち、スレッドAには、タスク1の実行終了(タスク1によるデータの計算終了)をタスク3に通知するハンドシェイク付き同期通知処理と、タスク1の実行終了(タスク1によるデータの計算終了)をタスク4に通知するハンドシェイク付き同期通知処理と、タスク5の実行終了(タスク5によるデータの計算終了)をタスク7に通知するハンドシェイク無し同期通知処理が追加され、スレッドCには、タスク6の実行終了(タスク6によるデータの計算終了)をタスク7に通知するハンドシェイク無し同期通知処理が追加される。また、スレッドBには、タスク3の実行終了(タスク3によるデータの計算終了)を待ち合わせるハンドシェイク付き同期待ち処理と、タスク5の実行終了(タスク5によるデータの計算終了)を待ち合わせるハンドシェイク無し同期待ち処理と、タスク6の実行終了(タスク6によるデータの計算終了)を待ち合わせるハンドシェイク無し同期待ち処理が追加され、スレッドCには、タスク1の実行終了(タスク1によるデータの計算終了)を待ち合わせるハンドシェイク無し同期待ち処理が追加される。
<タスク並列処理のためのソフトウェア構成と実際のコードとの関係>
本実施形態において、データ依存関係グラフから抽出したタスク並列処理のためのソフトウェア構成が、実際のコードとどのような関係にあるかを説明する。図3は、この関係を表す図である。図3(1)はスレッド依存関係グラフであり、図3(2)はこれに対応する各スレッドの抽象化コードを示すリスト(A)、(B)、(C)である。なお、スレッド依存関係グラフとは、スレッドへのタスク割当と同期処理の構成を表すグラフ構造を示すものである。また、リストは、スレッド内のタスクと同期処理の実行順序を示す。図3(2)において、Set()は、ハンドシェイク無し同期処理の送信側処理(ハンドシェイク無し同期通知処理)を示し、Wait()は、ハンドシェイク無し同期処理の受信側処理(ハンドシェイク無し同期待ち処理)を示し、HsSet()は、ハンドシェイク付き同期処理の送信側処理(ハンドシェイク付き同期通知処理)を示し、HsWait()は、ハンドシェイク付き同期処理の受信側処理(ハンドシェイク付き同期待ち処理)を示す。
図3リスト(A)はスレッドAの抽象化コードである。スレッドAは、タスク1、2、5を含んでおり、図3リスト(A)では、これらのタスクが図3(1)のデータ依存関係にもとづいて順番に実行される。タスク1は、スレッドBのタスク3へのデータ依存関係をもつので、タスク1の実行後にタスク1からタスク3へ同期処理(送信処理)を行う。 タスク3はスレッドBの先頭タスク(各スレッドにおいて最初に実行されるタスク)であるので、タスク1からタスク3への同期処理(送信処理)はハンドシェイク付きである。 さらに、タスク1は、スレッドCのタスク4へのデータ依存関係をもつので、タスク1の実行後にタスク1からタスク4へ同期処理(送信処理)を行う。タスク4はスレッドCにおいて最初に実行されるタスクであるので、タスク1からタスク4への同期処理(送信処理)もハンドシェイク付きとなる。タスク5は、スレッドBのタスク7へのデータ依存関係をもつので、タスク5の実行後にタスク5からタスク7へ同期処理(送信処理)を行う。タスク7はスレッドBの先頭タスクではないので、タスク5からタスク7への同期処理(送信処理)はハンドシェイク無しである。
図3リスト(B)はスレッドBの抽象化コードである。スレッドBはタスク3、7、8を含んでおり、図3リスト(B)では、これらのタスクが図3(1)の依存関係にもとづいて順番に実行される。タスク3はスレッドAのタスク1からデータ依存関係をもつので、タスク3の実行前にタスク1からタスク3へ同期処理(受信処理)を行う。タスク3はスレッドBの先頭タスクであるので、タスク1からタスク3への同期処理(受信処理)はハンドシェイク付きである。そして、タスク7は、スレッドAのタスク5およびスレッドCのタスク6からのデータ依存関係をもつので、タスク7の実行前にタスク5からタスク7へ、およびタスク6からタスク7へ、同期処理(受信処理)を行う。タスク7はスレッドBの先頭タスクではないので、タスク5からタスク7、およびタスク6からタスク7、 のどちらの同期処理(受信処理)もハンドシェイク無しである。
図3リスト(C)はスレッドCの抽象化コードである。スレッドCはタスク4、6を含んでおり、図3リスト(C)では、これらのタスクが図3(1)のデータ依存関係にもとづいて順番に実行される。タスク4はスレッドAのタスク1からデータ依存関係をもつので、タスク4の実行前にタスク1からタスク4へ同期処理(受信処理)を行う。タスク4はスレッドCの先頭タスクであるので、タスク1からタスク4への同期処理(受信処理)はハンドシェイク付きである。そして、タスク6は、スレッドBのタスク7へデータ依存関係をもつので、タスク6の実行後にタスク6からタスク7へ同期処理(送信処理)を行う。タスク7はスレッドBの先頭タスクではないので、タスク6からタスク7への同期処理(送信処理)はハンドシェイク無しである。
図3リスト(A)、(B)、(C)において、ハンドシェイク付き同期処理を行う際に,特願2010−229784に記載されているデータ領域切替方法を使ってもよい。このデータ領域切替方法は、ハンドシェイク付き同期処理を行う際に、データ領域番号を送信側スレッドから受信側スレッドへ通知し、受信側スレッドはその番号に対応するデータ領域のデータを使用する、というものである。データ領域番号とは、データを格納した領域を一意に識別する番号である。送信側スレッドは、前回に計算したデータと、今回に計算したデータとを、それぞれ異なる領域に格納して、同期処理でそれに応じたデータ領域番号を受信側スレッドに通知することで、より排他的なデータアクセスを保障することができる。
<ハンドシェイク付き同期処理の効果>
図3スレッドA、B、Cは、ハンドシェイク付き同期処理を行っているため、なんども繰り返して実行することが可能である。すなわち、スレッドAはリスト(A)で示す処理を繰り返し、スレッドBはリスト(B)で示す処理を繰り返し、スレッドCはリスト(C)で示す処理を繰り返す。
図4は、図3スレッドA、B、Cが繰返し動作する様子を表す図である。スレッドBとCは、それぞれの先頭タスクを実行する前に、スレッドAからのハンドシェイク付き同期処理を行う。したがって、図4では、スレッドAの動作開始後(厳密にはスレッドAのタスク1の実行後)に、ハンドシェイク付き同期処理を行ってから、スレッドBとスレッドCが動作開始する。スレッドB及びスレッドCは、その実行を終えた後に、次回のスレッドAとのハンドシェイク付き同期処理を行うまで、待機することになる。また、スレッドAは、その実行開始後に、スレッドB及びスレッドCが前回の実行を終了してハンドシェイク付き同期処理を行うまで、待機することになる。そのため、以上のように、ハンドシェイク付き同期処理を行うことで、スレッドA、B、Cを繰返し実行しても、各スレッドの動作タイミングをそろえることができる。
一方、図5は、ハンドシェイク付き同期処理をハンドシェイク無し同期処理に置換えて、 図3スレッドA、B、Cを繰返し動作させる様子を表す図である。スレッドAからスレッドBとCに対してハンドシェイク無し同期処理が毎回行われるが、スレッドAはスレッドBとCとハンドシェイクせずに、次の動作をはじめる。すなわち、ハンドシェイク無し同期処理は、ハンドシェイク付き同期処理のように受信側(スレッドBとC)が同期処理を行うまで待機することなく、その処理を終了する。言い換えると、ハンドシェイク無し同期処理は、受信側(スレッドBとC)のみが、送信側(スレッドA)が同期処理を行うまで、待機することになる。
これを繰り返していくと、スレッドAとスレッドBの実行開始時刻の間隔が徐々にずれていく。このズレが蓄積すると、スレッドAからスレッドBへのハンドシェイク無し同期をスレッドBが取りこぼす可能性がある。すなわち、スレッドAとスレッドBの実行開始時刻の間隔が徐々に大きくなり、やがて、スレッドBの実行開始が間に合わなくなってしまう。したがって、ハンドシェイクを全く行わずに、図3スレッドA、B、Cを実行すると、同期ズレが発生する可能性がある。本実施形態におけるハンドシェイク付き同期処理は、このような同期ズレを防ぐ効果がある。
<冗長なハンドシェイク無し同期処理の判定>
つづいて、異なるスレッドに属するタスク間でのハンドシェイク無し同期処理のなかから、冗長なものを見つける方法について説明する。本実施形態は、図2のようにして、タスクのデータ依存関係グラフからスレッド依存関係グラフを導く。この過程で、冗長なハンドシェイク無し同期処理が発生する可能性がある。以降の説明では、ハンドシェイク無し同期処理を単に同期処理と記述する。
図6を使って、冗長な同期処理について説明する。図6(1)のグラフ構造では、タスク4からタスク7へ、タスク6からタスク7へ、それぞれ同期処理がある。タスク4とタスク6はどちらもスレッドCに属しており、スレッドC内での実行順序は、タスク4、タスク6、の順番である。この場合、図6(1)に示すように、タスク4からタスク7への同期処理が冗長であり不要である。なぜなら、タスク4を実行した後にタスク6が実行され、その後にタスク6からタスク7への同期処理が行われるからである。タスク6の実行後には既にタスク4は実行完了しているため、タスク4からタスク7への同期処理をあえて行う必要はない。図6(2)は、タスク4からタスク7への同期処理を削除した後のグラフ構造である。このように、上述したステップS3では、このようにして冗長となる同期処理を削除した後のグラフ構造に従って、同期処理を追加するようにしてもよい。図6の冗長な同期処理の例を一般的に表現すると、あるデータ使用側タスクに対して、同じスレッドに属する複数のデータ供給側タスクからの同期処理がある場合には、当該複数データ供給側タスクのなかで最も後で実行されるデータ供給側タスクからの同期処理だけを残し、それ以外の当該複数データ供給側タスクからの同期処理を冗長と見なしてよい。
つづいて、図7を使って、別の冗長な同期処理について説明する。図7(1)のグラフ構造では、タスク6からタスク7へ、タスク6からタスク8へ、それぞれ同期処理がある。 タスク7とタスク8はどちらもスレッドBに属しており、スレッドB内での実行順序は、タスク7、タスク8、の順番である。この場合、図7(1)に示すように、タスク6からタスク7への同期処理が冗長であり不要である。なぜなら、タスク6の実行後に、タスク6からタスク7へ同期処理が行われ、タスク8は必ずタスク7の後で実行されるからである。タスク8の実行前には、タスク6からタスク7への同期処理が行われているため、タスク6の実行完了を確認できおり、タスク6からタスク8への同期処理をあえて行う必要はない。図7(2)は、タスク6からタスク7への同期処理を削除した後のグラフ構造である。このように、上述したステップS3では、このようにして冗長となる同期処理を削除した後のグラフ構造に従って、同期処理を追加するようにしてもよい。図7の冗長な同期処理の例を一般的に表現すると、あるデータ供給側タスクから、同じスレッドに属する複数のデータ使用側タスクへの同期処理がある場合には、当該複数データ使用側タスクの中で最も先に実行されるデータ使用側タスクへの同期処理だけを残し、それ以外の当該複数データ使用側タスクへの同期処理を冗長と見なして良い。
<ハンドシェイク付き同期処理の実施形態>
本実施形態では、ハンドシェイク付き同期処理は、ハンドシェイク付き同期通知処理と、ハンドシェイク付き同期待ち処理の二つで構成される、と説明した。送信側タスクがハンドシェイク付き同期通知処理を、受信側タスクがハンドシェイク付き同期待ち処理を、それぞれ行う。送信側タスクは、ハンドシェイク付き同期通知処理において、同期することを示す信号(同期信号)を受信側タスクへ伝える。そして、受信側タスクは、ハンドシェイク付き同期待ち処理において、その同期信号が伝えられるまで待合せ、読取る。同期信号を受け取った受信側タスクは、ハンドシェイク付き同期待ち処理において、同期信号を受け取ったことを示す信号(確認信号)を送信側タスクへ伝える。最後に、送信側タスクは、ハンドシェイク付き同期通知処理において、その確認信号が伝えられるまで待合せ、読取る。このように、ハンドシェイク付き同期処理は、送信側から受信側へ同期信号を送り、受信側から送信側へ確認信号を送る。送信側と受信側との間でこのようなやり取りを行えば、それはハンドシェイク付き同期処理のひとつの実施形態となる。
ハンドシェイク付き同期処理を何度も繰り返す場合には、送信側における同期信号送信と確認信号受信の順番を逆にするような実施形態も可能である。つまり、送信側タスクにおいて、まず、前回受信側タスクが送信した確認信号を待合せて読取り、つづいて、同期信号を受信側タスクへ伝える。このようにすることにより、送信側タスクは、同期信号を受信側タスクへ伝えた後、すぐに、ハンドシェイク付き同期通知処理を終えることができるとともに、受信側タスクが同期信号を読取ってから確認信号を送信側タスクへ伝えるまでの時間に 送信側タスクが確認信号を待合せないので、送信側タスクが受信側タスクを待ち合わせる時間が減少すると考えられる。このように、送信側での確認信号の確認タイミングをずらした実装形態も可能である。
なお、ここでは、送信側タスク及び受信側タスクとして説明したが、厳密には、信号の送受信は、送信側タスクが割り当てられたスレッドと、受信側タスクが割り当てられたスレッドとの間で行われる。
上記で述べたハンドシェイク付き同期処理のいずれの実施形態であっても、本発明のタスク並列処理方法の実施形態に適用可能である。
<ハンドシェイク無し同期処理の実施形態>
本実施形態では、ハンドシェイク無し同期処理は、ハンドシェイク無し同期通知処理と、ハンドシェイク無し同期待ち処理の二つで構成される、と説明した。送信側タスクがハンドシェイク無し同期通知処理を、受信側タスクがハンドシェイク無し同期待ち処理を、それぞれ行う。ハンドシェイク無し同期通知処理は、送信側タスクと受信側タスクがハンドシェイクを行なわずに、送信側タスクが単に変数に値をセットするような処理である。ハンドシェイク無し同期待ち処理は、当該変数に値がセットされるまで受信側タスクが待つ、という処理である。
変数への値のセットのやり方にはいくつか方法がある。変数の値を0(リセット)と1(セット)とで表す方法、変数をカウンタとして使用することにより前回変数値との違いを認識し易くする方法、などがある。変数の値を0と1で表現する場合には、1にした変数を0に戻すリセット処理が必ず必要になる。一方、変数をカウンタとして使用する場合には、変数を0に戻すリセット処理が不要である。なぜなら、同期待ち処理において、前回の変数と今回の変数の値を計算し、変化していれば、当該変数に値がセットされた、と判断できるからである。つまり、変数をカウンタとして使う方が、リセット処理が不要な分だけ、負荷が小さいと考えられる。
上記で述べたハンドシェイク無し同期処理のいずれの実施形態であっても、本発明のタスク並列処理方法の実施形態に適用可能である。
以上に説明したように、ハンドシェイク無し同期処理では、ハンドシェイク付き同期処理と比較して、受信側から送信側への同期通信が不要となる。それに対して、本実施の形態では、グループ内で最初に実行されるデータ使用側タスクのみに関して、同期待ち処理及び同期通知処理をハンドシェイク付きで行い、その他のデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク無しで行うようにしている。そのため、同期通信の数を削減することが可能となる。
<タスク並列処理のためのシステム構成例>
続いて、図8を参照して、上述した本発明の実施の形態のシステム構成例について説明する。図8は、本実施の形態にかかるタスク並列処理システム1の構成例を示す図である。
タスク並列処理システム1は、プログラム生成装置10及びタスク並列処理装置20を有する。プログラム生成装置10は、プロセッサ11、記憶装置12、及びメモリ13を有する。タスク並列処理装置20は、プロセッサ21〜23、記憶装置24、及びメモリ25を有する。
プロセッサ11は、コンパイラ101を実行する。記憶装置12は、ソースプログラム301が格納される。メモリ13は、プロセッサ11がコンパイラ101を実行するために使用される。すなわち、メモリ13には、コンパイラ101がロードされて、プロセッサ11がそれを実行する。
コンパイラ101は、ソースプログラム301からコンパイルして目的プログラム302を生成するためのコードを含んだプログラムである。また、コンパイラ101は、図1を参照して説明したステップS1〜S4を実行するためのコードを含む。すなわち、プロセッサ11は、コンパイラ101を実行することによって、上述したステップS1〜S4を実行して、ソースプログラム301から目的プログラム302(タスク並列ソフトウェア)を生成する。これによって、図3のリスト(A)〜(C)で示す処理を実行するスレッドを含んだソフトウェア構成の目的プログラム302が生成される。
ソースプログラム301は、グループに分けられた複数のタスクにおける処理が記述されている。ここで、ソースプログラム301には、図2で示すタスク1〜8が記述されているものとする。すなわち、プロセッサ11は、コンパイラ101を実行することによって、これら複数のタスク1〜8をそれぞれのグループ毎にスレッドに割り当てる。これによって、図3に示すように、タスク1、2、5が割り当てられたスレッドAと、タスク3、7、8が割り当てられたスレッドBと、タスク4、6が割り当てられたスレッドCとを含む目的プログラム302が生成される。また、これらのスレッドA〜Cには、図3のリスト(A)〜(C)で示すように、ハンドシェイク無し同期処理とハンドシェイク有り同期処理が設定される。
ここで、プロセッサ11は、タスク間のデータ依存関係に従って、同期処理を設定することになるが、プロセッサ11がタスク間のデータ依存関係を認識する方法は、どのようにして実現するようにしてもよい。例えば、記憶装置12にデータ依存関係グラフを示す情報を予め格納しておき、プロセッサ11がその情報を参照することによってタスク間のデータ依存関係を認識可能としてもよい。
このようにして生成された目的プログラム302は、タスク並列処理装置20の記憶装置24に格納される。これは、どのようにして実現してもよい。例えば、プログラム生成装置10とタスク並列処理装置20とを、インターネット、イントラネット、電話回線網等の任意の通信手段によって接続して、プロセッサ11が通信手段を介してプログラム生成装置10からタスク並列処理装置20に目的プログラム302を送信して記憶装置24に格納するようにしてもよい。また、プロセッサ11がプログラム生成装置10において、フロッピー(登録商標)ディスク、CD−R、CD−R/W、及びUSBメモリ等の任意の記録媒体に格納して、ユーザがその記録媒体をプログラム生成装置10から取り出してタスク並列処理装置20に挿入し、プロセッサ21〜23のいずれかがその記録媒体から目的プログラム302を取得して記憶装置24に格納するようにしてもよい。
プロセッサ21〜23は、記憶装置24に格納された目的プログラム302を実行する。これによって、図3のリスト(A)〜(C)で示す処理がプロセッサ21〜23によって実行される。なお、図8では、プロセッサ21がスレッドAを実行し、プロセッサ22がスレッドBを実行し、プロセッサ23がスレッドCを実行する場合について例示しているが、1つのプロセッサが実行するスレッドの数は、これに限られない。すなわち、1つのプロセッサが複数のスレッドを実行するようにしてもよい。例えば、タスク並列処理装置20が1つのプロセッサを有するようにし、その1つのプロセッサでスレッドA〜Cを時分割で切り替えて並列的に実行するようにしてもよい。
記憶装置24は、目的プログラム302が格納される。ここで、記憶装置12、24は、ハードディスク又はフラッシュメモリ等の任意の記憶装置である。メモリ25は、プロセッサ21〜23が目的プログラム302を実行するために使用される。すなわち、メモリ25には、目的プログラム302がロードされて、プロセッサ11がそれを実行する。また、メモリ25には、各タスク1〜9で、計算されたデータも格納される。すなわち、メモリ25を介して、データ供給側タスクからデータ使用側タスクへのデータの受け渡しが行われる。
また、メモリ25には、ハンドシェイク付き同期処理における同期信号の値及び確認信号の値、並びに、ハンドシェイク無し同期処理における変数が格納される。すなわち、上述した同期信号及び確認信号は、メモリ25を介して、スレッド間で受け渡される。
<タスク並列処理のためのシステムの概略構成>
続いて、図9を参照して、上述したタスク並列処理システム1の概略構成について説明する。図9は、本実施の形態にかかるタスク並列処理システム1の概略構成を示す図である。
タスク並列処理システム9は、プログラム生成装置91及びタスク並列処理装置92を有する。プログラム生成装置91は、グループ割当て部911、実行順序決定部912、及び、同期処理設定部913を有する。実行順序決定部912、及び、同期処理設定部913は、プロセッサ11に対応する。タスク並列処理装置92は、実行部921を有する。実行部921は、プロセッサ21〜23に対応する。
プログラム生成装置91は、複数のスレッドを含むプログラム900を生成する。プログラム900は、目的プログラム302に対応する。グループ割当て部911は、データの計算を表す複数のタスクが分けられたいくつかのグループのうち、ひとつのグループをひとつのスレッドに割当てる。実行順序決定部912は、タスク間のデータ依存関係にもとづいて各グループに属するタスクの実行順序を決定する。
同期処理設定部913は、他グループのデータ供給側タスクからのデータ依存関係をもつデータ使用タスクが割当てられたスレッドにおいて、そのデータ使用タスクを実行する前に、他グループのデータ供給側タスクからの同期待ち処理を設定するとともに、他グループのデータ使用側タスクへのデータ依存関係をもつデータ供給側タスクが割当てられたスレッドにおいて、そのデータ供給側タスクを実行した後に、他グループのデータ使用側タスクへの同期通知処理を設定する。ここで、同期処理設定部913は、少なくともグループ内で最初に実行されるデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク付きで設定するとともに、その他のデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク無しで設定する。
タスク並列処理装置92は、プログラム生成装置91によって生成されたプログラム900を実行する。すなわち、実行部921は、それぞれ、データの計算を表す複数のタスクが分けられたいくつかのグループのうち、ひとつのグループが割当てられ、その割当てられたグループに属するタスクをタスク間のデータ依存関係にもとづいた実行順序で実行する複数のスレッドを実行する。また、実行部921は、他グループのデータ供給側タスクからのデータ依存関係をもつデータ使用タスクが割当てられたスレッドにおいて、そのデータ使用タスクを実行する前に、他グループのデータ供給側タスクからの同期待ち処理を行うとともに、他グループのデータ使用側タスクへのデータ依存関係をもつデータ供給側タスクが割当てられたスレッドにおいて、そのデータ供給側を実行した後に、他グループのデータ使用側タスクへの同期通知処理を行う。また、実行部921は、少なくともグループ内で最初に実行されるデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク付きで行うとともに、その他のデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク無しで行う。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
本実施の形態では、グループ内で最初に実行されるデータ使用側タスクのみに関して、同期待ち処理及び同期通知処理をハンドシェイク付きで行い、その他のデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク無しで行うようにしているが、これに限られない。少なくともグループ内で最初に実行されるデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク付きで行い、その他のデータ使用側タスクに関する同期待ち処理及び同期通知処理をハンドシェイク無しで行うようにしてもよい。例えば、1グループ内に、ハンドシェイク付きで同期待ち処理又は同期通知処理を行うタスクが複数含まれていてもよい。そのようにしても、それ以外にハンドシェイク無しで同期待ち処理又は同期通知処理を行うタスクがあれば、その分、同期通信の数を削減することができるからである。
本実施の形態では、ステップS3でハンドシェイク無し同期処理を設定してから、ステップS4でグループ内で最初に実行されるタスクに関するハンドシェイク無し同期処理をハンドシェイク付き同期処理に置き換えるようにしているが、これに限られない。例えば、ステップS3でハンドシェイク付き同期処理を設定してから、ステップS4でグループ内で最初に実行されるタスク以外のタスクに関するハンドシェイク付き同期処理をハンドシェイク無し同期処理に置き換えるようにしてもよい。また、ステップS3でグループ内で最初に実行されるタスク以外のタスクに関してハンドシェイク無し同期処理を設定してから、ステップS4でグループ内で最初に実行されるタスクに関してハンドシェイク付き同期処理を設定するようにしてもよい。この場合、このステップS4と、このステップS3の順序を逆にして実行するようにしてもよい。
本実施の形態では、プログラム生成装置10とタスク並列処理装置20が異なる装置である場合について例示したが、これに限られない。すなわち、タスク並列処理ソフトウェアの生成及び実行を同一の装置で行うようにしてもよい。
本発明の実施の形態にかかるプログラム生成装置10及びタスク並列処理装置20は、上述したように本実施の形態の機能を実現するプログラム(コンパイラ101、目的プログラム302)を、コンピュータ(プログラム生成装置、タスク並列処理装置)が実行することによって、構成することが可能である。
また、このプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
また、コンピュータが上述の実施の形態の機能を実現するプログラムを実行することにより、上述の実施の形態の機能が実現される場合だけでなく、このプログラムが、コンピュータ上で稼動しているOS(Operating System)もしくはアプリケーションソフトウェアと共同して、上述の実施の形態の機能を実現する場合も、本発明の実施の形態に含まれる。さらに、このプログラムの処理の全てもしくは一部がコンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットによって行われて、上述の実施の形態の機能が実現される場合も、本発明の実施の形態に含まれる。
以上説明したように,本発明を使用すれば、いくつかのグループに分かれた複数のタスクで構成されるデータ依存関係グラフにもとづいて、グループごとにタスクを並列処理する際に、異なるグループに属するタスク間の高負荷な同期通信の数を減らすことができる。本発明は、組込み向けのマルチプロセッサから汎用のマルチコアPC(Personal Computer)など、複数のスレッドが動作するような計算機で幅広く応用可能である。
1、9 タスク並列処理システム
10、91 プログラム生成装置
11、21、22、23 プロセッサ
12、24 記憶装置
13、25 メモリ
20、92 タスク並列処理装置
101 コンパイラ
201、202、203 スレッド
301 ソースプログラム
302 目的プログラム
900 プログラム
911 グループ割当て部
912 実行順序決定部
913 同期処理設定部
921 実行部

Claims (10)

  1. データの計算を表すタスクをひとつ以上含むグループがひとつずつ割り当てられた複数のスレッドを実行する際に、
    二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を行うとともに、
    第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を行い、
    各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで行うとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで行う、
    ことを特徴とする、タスク並列処理方法。
  2. 前記同期待ち処理及び前記同期通知処理は、あるデータ使用側タスクに対して、同じスレッドに属する複数のデータ供給側タスクからのデータ依存関係がある場合、当該複数のデータ供給側タスクのなかで最も後で実行されるデータ供給側タスクのみに関して行われる、
    ことを特徴とする、請求項1に記載のタスク並列処理方法。
  3. 前記同期待ち処理及び前記同期通知処理は、あるデータ供給側タスクから、同じスレッドに属する複数のデータ使用側タスクへのデータ依存関係がある場合、当該複数のデータ使用側タスクのなかで最も先に実行されるデータ使用側タスクのみに関して行われる、
    ことを特徴とする、請求項1に記載のタスク並列処理方法。
  4. 前記同期待ち処理及び前記同期通知処理は、
    あるデータ使用側タスクに対して、同じスレッドに属する複数のデータ供給側タスクからのデータ依存関係がある場合、当該複数のデータ供給側タスクのなかで最も後で実行されるデータ供給側タスクのみに関して行われるとともに、
    あるデータ供給側タスクから、同じスレッドに属する複数のデータ使用側タスクへのデータ依存関係がある場合、当該複数のデータ使用側タスクのなかで最も先に実行されるデータ使用側タスクのみに関して行われる、
    ことを特徴とする、請求項1に記載のタスク並列処理方法。
  5. 前記同期待ち処理及び前記同期通知処理は、前記グループ内で最初に実行されるデータ使用側タスクのみに関して、ハンドシェイク付きで行われる、
    ことを特徴とする、請求項1乃至4のいずれか1項に記載のタスク並列処理方法。
  6. データの計算を表すタスクをひとつ以上含むグループがひとつずつ割り当てられた複数のスレッドを実行する実行部を備え、
    前記実行部は、二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を行うとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を行い、
    前記実行部は、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで行うとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで行う、
    ことを特徴とする、タスク並列処理装置。
  7. データの計算を表すタスクをひとつ以上含むグループがひとつずつ割り当てられた複数のスレッドを実行する際に、
    二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に実行される、前記データ供給タスクからの同期待ち処理と、
    第1スレッドにおいて、前記データ供給タスクが実行された後に実行される、前記データ使用タスクへの同期通知処理と、をコンピュータに実行させ、
    各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで実行させるとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで実行させる、
    ことを特徴とする、タスク並列処理プログラム。
  8. 複数のスレッドを含むプログラムを生成するプログラム生成方法であって、
    データの計算を表すタスクをひとつ以上含むグループをスレッドに割当て、
    前記タスク間のデータ依存関係にもとづいて各グループに属するタスクの実行順序を決定し、
    二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を設定するとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を設定し、
    各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで設定するとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで設定する、
    ことを特徴とする、プログラム生成方法。
  9. 複数のスレッドを含むプログラムを生成するプログラム生成装置であって、
    データの計算を表すタスクをひとつ以上含むグループをスレッドに割当てるグループ割当て部と、
    前記タスク間のデータ依存関係にもとづいて各グループに属するタスクの実行順序を決定する実行順序決定部と、
    二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を設定するとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を設定する同期処理設定部と、を備え、
    前記同期処理設定部は、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで設定するとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで設定する、
    ことを特徴とする、プログラム生成装置。
  10. 複数のスレッドを含むプログラムを生成するプログラム生成プログラムであって、
    データの計算を表すタスクをひとつ以上含むグループをスレッドに割当てる割当て処理と、
    前記タスク間のデータ依存関係にもとづいて各グループに属するタスクの実行順序を決定する実行順序決定処理と、
    二つのスレッドの一方である第1スレッドのデータ供給タスクからのデータ依存関係をもつデータ使用タスクが割り当てられたもう一方のスレッドである第2スレッドにおいて、前記データ使用タスクが実行される前に、前記データ供給タスクからの同期待ち処理を設定するとともに、第1スレッドにおいて、前記データ供給タスクが実行された後に、前記データ使用タスクへの同期通知処理を設定する同期処理設定処理と、をコンピュータに実行させ、
    前記同期処理設定処理では、各スレッドにおいて最初に実行されるデータ使用タスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク付きで設定するとともに、当該データ使用タスク以外のタスクに関する前記同期待ち処理及び前記同期通知処理をハンドシェイク無しで設定する、
    ことを特徴とする、プログラム生成プログラム。
JP2011270063A 2011-12-09 2011-12-09 タスク並列処理方法、その装置及びそのプログラム、並びにプログラム生成方法、その装置及びそのプログラム Active JP5857698B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011270063A JP5857698B2 (ja) 2011-12-09 2011-12-09 タスク並列処理方法、その装置及びそのプログラム、並びにプログラム生成方法、その装置及びそのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011270063A JP5857698B2 (ja) 2011-12-09 2011-12-09 タスク並列処理方法、その装置及びそのプログラム、並びにプログラム生成方法、その装置及びそのプログラム

Publications (2)

Publication Number Publication Date
JP2013122633A true JP2013122633A (ja) 2013-06-20
JP5857698B2 JP5857698B2 (ja) 2016-02-10

Family

ID=48774575

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011270063A Active JP5857698B2 (ja) 2011-12-09 2011-12-09 タスク並列処理方法、その装置及びそのプログラム、並びにプログラム生成方法、その装置及びそのプログラム

Country Status (1)

Country Link
JP (1) JP5857698B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016192153A (ja) * 2015-03-31 2016-11-10 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、及び車載装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0329049A (ja) * 1989-06-27 1991-02-07 Nec Corp マルチプロセッサシステム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0329049A (ja) * 1989-06-27 1991-02-07 Nec Corp マルチプロセッサシステム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016192153A (ja) * 2015-03-31 2016-11-10 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、及び車載装置

Also Published As

Publication number Publication date
JP5857698B2 (ja) 2016-02-10

Similar Documents

Publication Publication Date Title
Tang et al. A self-adaptive scheduling algorithm for reduce start time
JP5245722B2 (ja) スケジューラ、プロセッサシステム、プログラム生成装置およびプログラム生成用プログラム
KR101332840B1 (ko) 병렬 컴퓨팅 프레임워크 기반의 클러스터 시스템, 호스트 노드, 계산 노드 및 어플리케이션 실행 방법
JP5402226B2 (ja) 管理装置、情報処理システム、情報処理システムの制御プログラムおよび情報処理システムの制御方法
JP2010079622A (ja) マルチコアプロセッサシステム、および、そのタスク制御方法
JP2012181852A (ja) タスク処理のスケジューリング方法及びこの方法を適用するための装置
JP2007041720A (ja) ジョブステップ実行プログラムおよびジョブステップ実行方法
JP2012533808A (ja) 最適ネットワーク・トポロジの識別を用いた分散データ処理システム内のジョブ・スケジューリングのための方法及びシステム
JP2011065645A (ja) マルチコアプロセッサシステム
WO2012120654A1 (ja) タスクスケジューリング方法およびマルチコアシステム
JP5660149B2 (ja) 情報処理装置、ジョブスケジューリング方法およびジョブスケジューリングプログラム
JP2012133682A (ja) コンピュータ、コア割り当て方法およびプログラム
JP5462529B2 (ja) タスク割当装置、および、タスク割当方法
JP2007018268A (ja) タスクスケジューリング方法、タスクスケジューリング装置、及びタスクスケジューリングプログラム
JP2019083009A5 (ja)
KR101065436B1 (ko) 불확실한 계산량을 가진 실시간 병렬 작업을 위한 멀티코어 프로세서의 확률적 스케줄링 방법
US10162679B2 (en) Method and system for assigning a computational block of a software program to cores of a multi-processor system
CN111061485A (zh) 任务处理方法、编译器、调度服务器和介质
WO2013005322A1 (ja) 制御端末、および制御方法
JP5857698B2 (ja) タスク並列処理方法、その装置及びそのプログラム、並びにプログラム生成方法、その装置及びそのプログラム
JP7122299B2 (ja) 処理タスクを実行するための方法、装置、デバイス、および記憶媒体
JP2010191567A (ja) 情報管理装置及び情報管理方法等
CN108628639B (zh) 处理器和指令调度方法
CN114416311A (zh) 一种基于Go语言管理消息队列的方法和装置
US9710311B2 (en) Information processing system, method of controlling information processing system, and recording medium

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150616

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150804

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151002

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: 20151117

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151130

R150 Certificate of patent or registration of utility model

Ref document number: 5857698

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150