JPH08292932A - マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法 - Google Patents

マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法

Info

Publication number
JPH08292932A
JPH08292932A JP3696496A JP3696496A JPH08292932A JP H08292932 A JPH08292932 A JP H08292932A JP 3696496 A JP3696496 A JP 3696496A JP 3696496 A JP3696496 A JP 3696496A JP H08292932 A JPH08292932 A JP H08292932A
Authority
JP
Japan
Prior art keywords
processor
state
task
execution
processors
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.)
Pending
Application number
JP3696496A
Other languages
English (en)
Inventor
Tetsuya Tanaka
哲也 田中
Akira Fukuda
晃 福田
Hitoshi Tanuma
仁 田沼
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP3696496A priority Critical patent/JPH08292932A/ja
Publication of JPH08292932A publication Critical patent/JPH08292932A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Multi Processors (AREA)

Abstract

(57)【要約】 【課題】 細粒度のタスクに適したタスクの実行方法を
提供する。 【解決手段】 プロセッサ30〜32を含むマルチプロ
セッサシステム1においてタスクを実行する方法であっ
て、プロセッサ30〜32のうちタスクT1を実行中の
プロセッサが新たなタスクT2を生成した場合におい
て、プロセッサ30〜32のうち「空き状態」を有する
プロセッサがあるか否かを検出するステップと、「空き
状態」を有するプロセッサが検出された場合には、タス
クT2をそのプロセッサに割り当てることにより、その
プロセッサによるタスクT2の実行を開始し、そのプロ
セッサの状態を「空き状態」から「実行状態」に変更
し、タスクT1の実行が中断されていないことを示す第
1の値を有するフラグを格納するステップと、「空き状
態」を有するプロセッサが検出されない場合には、タス
クT1の実行を中断し、中断したプロセッサによるタス
クT2の実行を開始し、タスクT1の実行が中断された
ことを示す第2の値を有するフラグを格納するステップ
とを包含する方法。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、複数のタスクを並
列に実行する複数のプロセッサを含むマルチプロセッサ
システムおよびそのマルチプロセッサシステムにおいて
タスクを実行する方法に関する。
【0002】
【従来の技術】近年、マルチプロセッサシステムは汎用
計算機の並列処理による高性能化のアプローチの一つと
して注目されている。マルチプロセッサシステムにおい
ては複数のプロセッサを一つのバスに接続し、主記憶装
置を共有する共有メモリ型のマルチプロセッサシステム
が主に採用されている。
【0003】このようなマルチプロセッサシステムは通
常、複数のプロセッサチップをプリント基板上に実装す
るため、各プロセッサの処理速度に対し、プロセッサ間
のバスを用いる通信や同期の処理速度は遅い。そのた
め、処理単位であるタスクの処理時間がプロセッサ間の
通信や同期の時間に対し十分大きい場合に用いられる。
この場合のタスクの大きさは中粒度〜粗粒度と呼ばれ実
行命令数で数1000命令程度以上とされている。この
ように、処理単位を大きくする(粒度を粗くする)こと
でタスクの実行時間に対して相対的にプロセッサ通信や
同期の時間を小さくしている。
【0004】さらに、近年半導体の集積化技術は急速に
発展している。そのため、チップ内に多くの機能ユニッ
トやメモリを搭載することができるようになってきてい
る。マルチプロセッサシステムにおいても今後複数のプ
ロセッサをワンチップに搭載することが可能になると思
われる。その場合、プロセッサが接続されるバスもチッ
プ内に入ることになりプロセッサ間の通信や同期の高速
化はそこで実行するタスクの粒度の選択肢を広げる。即
ち、タスクの大きさが細粒度、命令数で数10〜数10
0命令程度の並列処理が可能になりつつある。今後、こ
のような細粒度のタスクを並列処理することが主流にな
ると予想される。近年注目されているオブジェクト指向
プログラミングや関数型言語を用いたプログラミング
は、いずれも「細粒度のタスクを並列処理する」ことに
合致したものであるからである。
【0005】一方、マルチプロセッサシステムでは、複
数のタスクを物理的に限られたプロセッサ数に割り当て
ることになるため、タスクの実行順序を決定し、どのプ
ロセッサに対しどのタスクを割り当てるかを適切に選択
することが行われる。この処理を動的に行うため、まず
実行待ちタスクを一次記憶などのタスク管理装置に格納
しておき、次に空きプロセッサを検出し、空きプロセッ
サがある場合は、実行待ちタスクの中から実行すべきタ
スクを選択し、選択したタスクを空きプロセッサに割り
当てることが行われる。このときのタスク選択は仕事全
体の実行時間を最小にするなどの目的で行われる。こう
いったタスクの実行順序を決定し、タスクをどのプロセ
ッサに割り当てるかを決定する処理をスケジューリング
といい、決定方法の異なるさまざまなアルゴリズムがあ
る。また、タスク生成によって実行すべきタスクが生じ
た場合、タスク管理装置に実行待ちタスクとして登録す
る処理もある。
【0006】図12にマルチプロセッサシステムにおけ
る、従来のプロセッサ割当方法の動作説明図を示す。図
12において、プロセッサ2はタスクを生成し、実行待
ちのタスクとしてタスク管理装置にタスク4を登録して
いる。プロセッサ0はプロセッサ1が「空き状態」であ
ることを検出すると、タスク管理装置の実行待ちのタス
クをスケジューリングアルゴリズムにしたがって一つを
選択し、選択されたタスクはプロセッサ0によりプロセ
ッサ1に割り当てられる。このとき、プロセッサ0はス
ケジューリングの処理を、プロセッサ2はタスク登録の
処理をそれぞれ行っている。
【0007】これは、例えば特開昭63−208948
号公報に示すように空きプロセッサ(図12ではプロセ
ッサ1)がタスクレディーキュー(図12ではタスク管
理装置)の監視を行い、実行待ちのタスクを自動的に取
り出し処理する場合でも、「空き状態」のプロセッサが
スケジューリングの処理を行っている。
【0008】また、例えば特開昭62−190548号
公報に示されるように、タスクを依頼した依頼プロセッ
サが、依頼された被依頼プロセッサでのタスクの状態を
監視しておき、被依頼プロセッサがタスクの終了を検出
した場合、空きプロセッサとなった被依頼プロセッサに
ほかのタスクを適切に選択し割り当てる方法がある。こ
の方法においては、依頼プロセッサが被依頼プロセッサ
の状態を監視する処理を行っている。
【0009】前記したスケジューリング処理やタスクの
登録処理、もしくは被依頼プロセッサを監視する処理は
それぞれ内容は異なるもののタスクをプロセッサに割り
当て実行するまでのオーバヘッド即ちタスク処理に付随
するオーバヘッドと考えることができる。図13はタス
クの処理時間と前記したオーバヘッドの処理時間のタイ
ムチャートを示している。図13に示すようにタスクの
粒度が中〜粗粒度の場合はタスクの処理時間に対してオ
ーバヘッドの処理時間が相対的に小さいため、オーバヘ
ッドの処理時間を無視できるレベルにある。
【0010】
【発明が解決しようとする課題】しかしながら、上記の
ようなタスク処理に付随するオーバヘッドを持つマルチ
プロセッサシステムにおいて、プロセッサ間の通信や同
期を高速化することで細粒度の並列処理を行う場合は、
タスクの処理時間に対して相対的にオーバヘッドの処理
時間が大きくなる。
【0011】図14は細粒度の場合のタスクの処理時間
とオーバヘッドの処理時間のタイムチャートを示してい
る。図14に示すようにオーバヘッドの処理時間はタス
クの処理時間に比べて相対的に大きくなり、オーバヘッ
ドの処理時間が無視できず仕事全体としての処理時間が
大きくなるという問題を有する。
【0012】本発明は上記問題点に鑑み、細粒度の並列
処理をプロセッサ間の通信や同期が高速なマルチプロセ
ッサにおいて、タスク管理やスケジューリング、タスク
状態の監視を行わないことで、前記したオーバヘッドを
なくし、その代わりのプロセッサに対する動的なタスク
割当を一元的、単純かつ高速に行う方法を提供すること
にある。
【0013】
【課題を解決するための手段】本発明の方法は、「空き
状態」と「実行状態」とを有する複数のプロセッサを含
むマルチプロセッサシステムにおいてタスクを実行する
方法であって、該複数のプロセッサのうち第1タスクを
実行中の第1プロセッサが新たな第2タスクを生成した
場合において、該複数のプロセッサのうち「空き状態」
を有する第2プロセッサがあるか否かを検出するステッ
プと、「空き状態」を有する第2プロセッサが検出され
た場合には、該第2タスクを該第2プロセッサに割り当
てることにより、該第2プロセッサによる該第2タスク
の実行を開始し、該第2プロセッサの状態を「空き状
態」から「実行状態」に変更し、該第1タスクの実行が
中断されていないことを示す第1の値を有するフラグを
格納するステップと、「空き状態」を有する第2プロセ
ッサが検出されない場合には、該第1プロセッサによる
該第1タスクの実行を中断し、該第1プロセッサによる
該第2タスクの実行を開始し、該第1タスクの実行が中
断されたことを示す第2の値を有するフラグを格納する
ステップとを包含しており、これにより上記目的が達成
される。
【0014】前記方法は、前記第2タスクの実行が終了
した後、前記フラグが前記第1の値と前記第2の値のう
ちのいずれを有するかを判定するステップと、前記フラ
グが前記第1の値を有すると判定された場合には、前記
第2プロセッサの状態を「実行状態」から「空き状態」
に変更するステップと、前記フラグが前記第2の値を有
すると判定された場合には、前記第1タスクの実行が中
断されたところから前記第1プロセッサによる前記第1
タスクの実行を再開するステップとをさらに包含しても
よい。
【0015】前記複数のプロセッサのそれぞれは、前記
複数のプロセッサを互いに識別する識別子を有してお
り、前記「空き状態」を有する第2プロセッサの検出
は、該識別子を用いて行われてもよい。
【0016】前記複数のプロセッサのそれぞれは、タス
クを割り当てる優先順位を決定する優先度を有してお
り、前記第2プロセッサへの前記第2タスクの割り当て
は、該優先度に基づいて行われてもよい。
【0017】本発明の他の方法は、「空き状態」と「実
行状態」とを有する複数のプロセッサを含むマルチプロ
セッサシステムにおいて、「停止状態」と「第1実行状
態」と「第2実行状態」とを有するタスクを実行する方
法であって、該複数のプロセッサのうち第1タスクを実
行中の第1プロセッサが新たな第2タスクを生成した場
合において、該複数のプロセッサのうち「空き状態」を
有する第2プロセッサがあるか否かを検出するステップ
と、「空き状態」を有する第2プロセッサが検出された
場合には、該第2タスクを該第2プロセッサに割り当て
ることにより、該第2プロセッサによる該第2タスクの
実行を開始し、該第2プロセッサの状態を「空き状態」
から「実行状態」に変更し、該第2タスクの状態を「停
止状態」から「第1実行状態」に変更するステップと、
「空き状態」を有する第2プロセッサが検出されない場
合には、該第1プロセッサによる該第1タスクの実行を
中断し、該第1プロセッサによる該第2タスクの実行を
開始し、該第2タスクの状態を「停止状態」から「第2
実行状態」に変更するステップとを包含しており、これ
により上記目的が達成される。
【0018】前記方法は、前記第2タスクの実行が終了
した後、前記第2タスクの状態を判定するステップと、
前記第2タスクが「第1実行状態」を有すると判定され
た場合には、前記第2プロセッサの状態を「実行状態」
から「空き状態」に変更し、前記第2タスクの状態を
「第1実行状態」から「停止状態」に変更するステップ
と、前記第2タスクが「第2実行状態」を有すると判定
された場合には、前記第2タスクの状態を「第2実行状
態」から「停止状態」に変更するステップとをさらに包
含してもよい。
【0019】前記複数のプロセッサのそれぞれは、前記
複数のプロセッサを互いに識別する識別子を有してお
り、前記「空き状態」を有する第2プロセッサの検出
は、該識別子を用いて行われてもよい。
【0020】前記複数のプロセッサのそれぞれは、タス
クを割り当てる優先順位を決定する優先度を有してお
り、前記第2プロセッサへの前記第2タスクの割り当て
は、該優先度に基づいて行われてもよい。
【0021】本発明のマルチプロセッサシステムは、複
数のタスクを並列に実行する複数のプロセッサと、該複
数のプロセッサの状態を管理し、該複数のプロセッサの
それぞれからの問い合わせに応じて「空き状態」のプロ
セッサの識別子を返す状態管理手段とを備えており、該
複数のプロセッサのそれぞれは、新たなタスクが発生し
た時点で、該状態管理手段に対して「空き状態」のプロ
セッサがあるか否かを問い合わる。これにより上記目的
が達成される。
【0022】前記状態管理手段は、該プロセッサからの
問い合わせに応答して、現在の状態を次の状態に遷移さ
せる手段と、該次の状態に基づいて該問い合わせに対す
る応答を出力する手段とを備えていてもよい。
【0023】前記マルチプロセッサシステムは、該複数
のプロセッサのそれぞれについて、命令キャッシュメモ
リとデータキャッシュメモリとをさらに備えていてもよ
い。
【0024】前記マルチプロセッサシステムは、前記複
数のプロセッサ間で命令アドレスおよびパケットアドレ
スを転送するためのネットワークをさらに備えていても
よい。
【0025】該複数のタスクのそれぞれは、細粒度であ
ってもよい。
【0026】
【発明の実施の形態】以下、図面を参照しながら、本発
明の実施の形態を説明する。
【0027】図1は、本発明のマルチプロセッサシステ
ム1の構成を示す。マルチプロセッサシステム1は、集
積回路上にインプリメントされる。マルチプロセッサシ
ステム1は、バスを介して主記憶装置2に接続される。
【0028】マルチプロセッサシステム1は、要素プロ
セッサユニット10〜12を含む。要素プロセッサユニ
ット10〜12のそれぞれは、同一の構成を有してい
る。マルチプロセッサシステム1に含まれる要素プロセ
ッサユニットの数は、3に限定されるわけではない。マ
ルチプロセッサシステム1は、任意の個数の要素プロセ
ッサユニットを含み得る。
【0029】要素プロセッサユニット10〜12は、そ
れぞれ、プロセッサ30〜32と命令キャッシュ(I
C)33〜35とデータキャッシュ(DC)36〜38
とを有している。命令キャッシュ(IC)は、命令を格
納するためのキャッシュメモリであり、読み出し専用で
ある。データキャッシュ(DC)は、データを格納する
ためのキャッシュメモリであり、読み出しと書き込みが
できる。
【0030】共有キャッシュ20は、要素プロセッサユ
ニット10〜12によって共有されている。命令セット
やデータセットは、通常、主記憶装置2に格納されてい
る。データセットは、必要に応じてバスインタフェース
23を介して共有キャッシュ20にロードされる。共有
キャッシュ20は、主記憶装置2と比較して非常に高速
に動作することが好ましい。データキャッシュ(DC)
と共有キャッシュ20とは、アドレスに応じて使い分け
られる。例えば、アドレスが0x00000000〜0
x7fffffffの範囲内である場合には、データキ
ャッシュ(DC)がアクセスされ、アドレスが0x80
000000〜0xffffffffの範囲内である場
合には、共有キャッシュ20がアクセスされる。
【0031】要素プロセッサユニット10〜12は、ネ
ットワーク21を介して相互に接続される。ネットワー
ク21は、要素プロセッサユニット10〜12の相互間
で命令アドレスやパケットアドレスを転送するために使
用される。ネットワーク21は、例えば、3×3のクロ
スバースイッチを用いて実現することができる。
【0032】プロセッサ状態管理装置22は、プロセッ
サ30〜32の状態を管理する。プロセッサ30〜32
のそれぞれは、「実行状態」および「空き状態」のいず
れか一方の状態を有する。
【0033】プロセッサ30〜32のそれぞれには固定
された優先度が予め割り当てられている。ここでは、プ
ロセッサ30〜33は、この順番に高い優先度を有して
いると仮定する。優先度は、複数のプロセッサがプロセ
ッサ状態管理装置22を同時にアクセスする場合におい
て、その複数のプロセッサのうちのどのプロセッサにプ
ロセッサ状態管理装置22に優先的にアクセスすること
を許すかを決定するために使用される。
【0034】プロセッサ30〜32のそれぞれは、プロ
セッサ30〜32を互いに識別するための識別子(I
D)を有している。典型的には、識別子(ID)は、番
号によって表現される。
【0035】プロセッサ30〜32のそれぞれは、それ
の内部にパケットのアドレスを保持する。パケットのア
ドレスは、例えば、プロセッサ30〜32の内部のレジ
スタ(図示せず)に保持される。これにより、プロセッ
サ30〜32は、パケットを参照することができる。パ
ケットの詳細は、図6を参照して後述される。
【0036】マルチプロセッサシステム1は、複数のタ
スクを並列に実行する機能を有する。例えば、プロセッ
サ30がタスクT1を実行しているのと並行して、プロ
セッサ31はタスクT2を実行することができる。
【0037】本明細書では、「タスク」とは、命令セッ
トとデータセットとの組であると定義する。命令セット
とデータセットとは、いずれも主記憶装置2に格納され
る。プロセッサ30〜32のそれぞれは、命令セットか
ら命令を逐次読み出し、読み出された命令を解釈実行す
る。データセットは、プロセッサ30〜32が命令セッ
トから読み出された命令を解釈実行する際、必要に応じ
て参照される。また、後述されるパケットは、データセ
ットの少なくとも一部である。
【0038】図2は、タスクの概念を模式的に示す。こ
の例では、タスク1は、命令セット1とデータセット1
の組によって定義され、タスク2は、命令セット1とデ
ータセット2の組によって定義され、タスク3は、命令
セット2とデータセット3の組によって定義される。命
令セット1〜2とデータセット1〜3は、それぞれ、主
記憶装置2に格納されている。
【0039】図3は、プロセッサ30〜32の状態を管
理するプロセッサ状態管理装置22の構成例を示す。プ
ロセッサ状態管理装置22は、入力(REQ0〜REQ
2、RESET0〜RESET2)に応答して出力(I
D0〜ID2、NMP0〜NMP2)を提供する組み合
わせ回路を含んでいる。その組み合わせ回路は、現在の
状態(S)と入力(REQ0〜REQ2、RESET0
〜RESET2)とに応じて次の状態(nextS)を
決定し、次の状態に対応する出力(ID0〜ID2、N
MP0〜NMP2)を提供する。現在の状態(S)から
次の状態(nextS)への遷移は、例えば、表1に示
される状態遷移表に従って決定される。
【0040】
【表1】
【0041】図3において、Sは現在の状態、Next
Sは次の状態を示す。これらの状態は、プロセッサ30
〜32の状態を示す。例えば、S=001は、プロセッ
サ30の状態が「実行状態」であり、プロセッサ31と
プロセッサ32の状態が「空き状態」であることを示し
ている。NextSについても同様である。
【0042】図3において、REQ0〜REQ2は、プ
ロセッサ30〜32からプロセッサ状態管理装置22に
入力されるリクエストを表す。これらのリクエストは、
「空き状態」のプロセッサの識別子を得ることをプロセ
ッサ状態管理装置22に依頼するものである。表1で
は、REQ0〜REQ2をまとめてREQと表記してい
る。例えば、REQ=101は、REQ0が1(アサー
ト)であり、REQ1が0(ネゲート)であり、REQ
2が1(アサート)であることを示している。
【0043】図3において、RESET0〜RESET
2は、プロセッサ30〜32からプロセッサ状態管理装
置22に入力されるリセットを表す。これらのリセット
は、プロセッサ状態管理装置22内に保持されているプ
ロセッサ30〜32の状態を「実行状態」から「空き状
態」に変更することをプロセッサ状態管理装置22に依
頼するものである。表1では、RESET0〜RESE
T2をまとめてRESETと表記している。例えば、R
ESET=010は、RESET0が0(ネゲート)で
あり、RESET1が1(アサート)であり、RESE
T2が0(ネゲート)であることを示している。
【0044】図3において、ID0〜ID2は、プロセ
ッサ30〜32からのリクエストに対して「空き状態」
のプロセッサの識別子を通知する信号を表す。これらの
信号は、プロセッサ30〜32からのリクエストに応答
してプロセッサ状態管理装置22から出力される。ID
0〜ID2の値の意味は、以下のとおりである。
【0045】00:プロセッサ30が「空き状態」であ
る。
【0046】01:プロセッサ31が「空き状態」であ
る。
【0047】10:プロセッサ32が「空き状態」であ
る。
【0048】図3において、NMP0〜NMP2は、プ
ロセッサ30〜32からのリクエストに対して「空き状
態のプロセッサが存在しない」旨を通知する信号を表
す。これらの信号は、プロセッサ30〜32からのリク
エストに応答してプロセッサ状態管理装置22から出力
される。NMP0〜NMP2の値の意味は、以下のとお
りである。
【0049】0:「空き状態」のプロセッサが存在す
る。「空き状態」のプロセッサの識別子は、ID0〜I
D02の値によって示される。
【0050】1:「空き状態」のプロセッサが存在しな
い。この場合、ID0〜ID2の値は、don’t c
areである。
【0051】以下、図4と図5とを参照して、プロセッ
サ状態管理装置22の機能および動作を説明する。プロ
セッサ状態管理装置22は、マルチプロセッサシステム
に含まれるすべてのプロセッサの状態を管理する。具体
的には、プロセッサ状態管理装置22は、プロセッサの
識別子とプロセッサの状態とを一対にしてプロセッサ状
態管理装置22内に保持する。プロセッサの識別子は、
複数のプロセッサを互いに識別するために使用される。
典型的には、プロセッサの識別子は整数で表現される。
プロセッサの状態は、「実行状態」か「空き状態」かの
いずれかである。
【0052】プロセッサ状態管理装置22は、あるプロ
セッサからのリクエストに応答して、「空き状態」のプ
ロセッサが存在するか否かを判定する。「空き状態」の
プロセッサが存在した場合には、プロセッサ状態管理装
置22は、その「空き状態」のプロセッサの識別子をそ
のリクエストを発したプロセッサに返す。「空き状態」
のプロセッサが存在しなかった場合には、プロセッサ状
態管理装置22は、「空き状態のプロセッサが存在しな
い」旨のメッセージをそのリクエストを発したプロセッ
サに返す。
【0053】「空き状態」のプロセッサが複数個存在す
る場合には、プロセッサ状態管理装置22は、「空き状
態」の複数のプロセッサのうち優先度の最も高いプロセ
ッサの識別子をそのリクエストを発したプロセッサに返
す。また、複数のプロセッサからのリクエストが同時に
プロセッサ状態管理装置22に到達した場合には、その
リクエストを発した複数のプロセッサのうち優先度の高
いものから順に上述した処理が行われる。
【0054】図4(a)および(b)は、プロセッサ状
態管理装置22の動作の一例を示す。プロセッサ状態管
理装置22は、4つのプロセッサ0〜3の状態を管理し
ている。図4(a)に示す例では、プロセッサ0とプロ
セッサ1の状態は「実行状態」であり、プロセッサ2と
プロセッサ3の状態は「空き状態」である。プロセッサ
0からのリクエストとプロセッサ1からのリクエストが
プロセッサ状態管理装置22に入力される。
【0055】プロセッサ状態管理装置22は、プロセッ
サ0からのリクエストに応答して、「空き状態」のプロ
セッサ2の識別子をプロセッサ0に返し、プロセッサ1
からのリクエストに応答して、「空き状態」のプロセッ
サ3の識別子をプロセッサ1に返す(図4(b)参
照)。「空き状態」のプロセッサの識別子は、プロセッ
サの優先度に従って返される。また、プロセッサ状態管
理装置22は、プロセッサ状態管理装置22内に保持さ
れているプロセッサ2の状態を「空き状態」から「実行
状態」に変更し、プロセッサ3の状態を「空き状態」か
ら「実行状態」に変更する。
【0056】図5(a)および(b)は、プロセッサ状
態管理装置22の動作の他の一例を示す。プロセッサ状
態管理装置22は、4つのプロセッサ0〜3の状態を管
理している。図5(a)に示す例では、プロセッサ0と
プロセッサ1とプロセッサ2の状態は「実行状態」であ
り、プロセッサ3の状態は「空き状態」である。プロセ
ッサ0からのリクエストとプロセッサ1からのリクエス
トがプロセッサ状態管理装置22に入力される。
【0057】プロセッサ状態管理装置22は、プロセッ
サ0からのリクエストに応答して、「空き状態」のプロ
セッサ3の識別子をプロセッサ0に返し、プロセッサ1
からのリクエストに応答して、「空き状態のプロセッサ
が存在しない」旨のメッセージをプロセッサ1に返す
(図5(b)参照)。「空き状態のプロセッサが存在し
ない」旨のメッセージは、例えば、プロセッサ状態管理
装置22から出力されるリターンコードの値によって表
される。「空き状態」のプロセッサの識別子は、プロセ
ッサの優先度に従って返される。また、プロセッサ状態
管理装置22は、プロセッサ状態管理装置22内に保持
されているプロセッサ3の状態を「空き状態」から「実
行状態」に変更する。
【0058】図4と図5に示される例では、プロセッサ
状態管理装置22によって管理されるプロセッサの数は
4である。しかし、これは、説明の便宜上のためであ
り、本発明が4つのプロセッサを有するマルチプロセッ
サシステムに限定されるわけではない。本発明は、任意
の数のプロセッサを含むマルチプロセッサシステムに適
用され得る。
【0059】図6は、パケット50の構成を示す。パケ
ット50は、ロックビットを格納するロックビット領域
51と、リターンビットを格納するためのリターンビッ
ト領域52と、リターンアドレスを格納するためのリタ
ーンアドレス領域53と、引数を格納するための引数領
域54と、戻り値を格納するための戻り値領域55とを
有している。パケット50は、タスク毎に共有メモリ2
0上に確保され、タスクに所有される。これ以降、「タ
スクに所有されたパケット」を単に「タスクのパケッ
ト」と呼ぶ。パケット50は、タスク間のデータの受け
渡しやタスクの情報を保持するために使用される。
【0060】パケット50のロックビット領域51に
は、ロックビットが格納される。ロックビットは、パケ
ット50を所有するタスクが実行中である間、他のタス
クからその実行中のタスクへのアクセスを禁止するか否
かを示す。ロックビットが”1”であることは、アクセ
スを禁止していることを示す。ロックビットが”0”で
あることは、アクセスを禁止していないことを示す。
【0061】パケット50のリターンビット領域52に
は、リターンビットが格納される。リターンビットは、
パケット50を所有するタスクを実行する前に、他のタ
スクを中断したか否かを示す。リターンビットが”0”
であることは、「パケット50を所有するタスクを実行
する前に、他のタスクを中断していない」ことを示す。
これは、「空き状態」のプロセッサにパケット50を所
有するタスクが割り当てられた場合に相当する。リター
ンビットが”1”であることは、「パケット50を所有
するタスクを実行する前に、他のタスクを中断した」こ
とを示す。これは、「空き状態」のプロセッサが存在し
なかったため、タスクを実行中のプロセッサがそのタス
クの実行を中断して、パケット50を所有する別のタス
クを実行する場合に相当する。
【0062】パケット50のリターンアドレス領域53
には、リターンアドレスが格納される。リターンアドレ
スは、リターンビットが”1”である場合にのみ参照さ
れる。リターンアドレスは、中断されたタスクへの戻り
アドレスを示す。
【0063】パケット50の引数領域54には、パケッ
ト50を所有するタスクへの引数が格納される。
【0064】パケット50の戻り値領域55には、パケ
ット50を所有するタスクの実行結果である戻り値が格
納される。
【0065】図7は、プロセッサ30〜32がfork
命令を解釈実行する手順を示す。プロセッサ30〜32
は、主記憶装置2に格納されている命令セットから命令
を読み出す。読み出された命令がfork命令である場
合には、プロセッサ30〜32は、図7に示す処理を実
行する。
【0066】以下、図7を参照して、プロセッサ30が
fork命令を解釈実行する手順をステップごとに詳細
に説明する。他のプロセッサ31および32がfork
命令を解釈実行する場合も同様である。なお、fork
命令は、オペランドとして、新たなタスクの処理内容を
示す命令列の先頭アドレス(以降、単に命令アドレスと
いう)と新たなタスクのパケット50のアドレス(以
降、単にパケットアドレスという)とをとる。
【0067】ステップ(a):プロセッサ30は、「空
き状態」のプロセッサが存在するか否かをプロセッサ状
態管理装置22に問い合わせる。このような問い合わせ
は、例えば、プロセッサ30がプロセッサ状態管理装置
22にリクエスト(REQ0=1)を送ることにより達
成される。プロセッサ状態管理装置22は、そのリクエ
ストに応答して「空き状態」のプロセッサが存在するか
否かを判定する。
【0068】「空き状態」のプロセッサが存在する場合
には、プロセッサ状態管理装置22は、その「空き状
態」のプロセッサの識別子をプロセッサ30に返す。
「空き状態」のプロセッサの識別子は、例えば、プロセ
ッサ30がプロセッサ状態管理装置22から出力される
ID0の値を参照することによって得られる。「空き状
態」のプロセッサが複数個存在する場合には、優先度の
最も高いプロセッサの識別子が得られる。また、複数の
プロセッサが同時にfork命令を解釈実行する場合に
は、優先度の高いプロセッサから順にfork命令を解
釈実行する。このようにして、プロセッサ30は、「空
き状態」のプロセッサの識別子を取得する。
【0069】「空き状態」のプロセッサが存在しない場
合には、プロセッサ状態管理装置22は、「空き状態の
プロセッサが存在しない」旨のメッセージをプロセッサ
30に返す。「空き状態のプロセッサが存在しない」旨
のメッセージは、例えば、プロセッサ30がプロセッサ
状態管理装置22から出力されるNMP0の値を参照す
ることによって得られる。
【0070】ステップ(b):「空き状態」のプロセッ
サが存在した場合には、プロセッサ30は、ステップ
(c)〜(e)の処理を行う。「空き状態」のプロセッ
サが存在しない場合には、プロセッサ30は、ステップ
(f)〜(g)の処理を行う。
【0071】ステップ(c):ここでは、「空き状態」
のプロセッサは、プロセッサ31であると仮定する。こ
の場合、プロセッサ30は、fork命令のオペランド
として与えられたタスクの命令アドレスとタスクのパケ
ットアドレスとをネットワーク21を介してプロセッサ
31に転送する。
【0072】ステップ(d):プロセッサ30は、fo
rk命令のオペランドとして与えられたタスクのパケッ
トアドレスによって指定されるパケット50のロックビ
ット領域51に”1”を書き込み、リターンビット領域
52に”0”を書き込む。その後、プロセッサ30は、
fork命令の処理を完了し、次の命令の処理を行う。
【0073】ステップ(e):プロセッサ31は、ネッ
トワーク21を介してプロセッサ30からタスクの命令
アドレスとタスクのパケットアドレスとを受け取る。プ
ロセッサ31は、受け取ったパケットアドレスによって
指定されるパケット50を参照しながら、受け取った命
令アドレスによって指定される命令から処理を開始す
る。
【0074】以上のステップ(a)〜(e)により、プ
ロセッサ30は、プロセッサ31によって実行される処
理とは異なる処理を独立に実行することとなる。すなわ
ち、プロセッサ30とプロセッサ31とによって並列処
理が開始される。fork命令の処理はここで終了す
る。
【0075】ステップ(f):プロセッサ30は、fo
rk命令のオペランドとして与えられたタスクのパケッ
トアドレスによって指定されるパケット50のロックビ
ット領域51に”1”を書き込み、リターンビット領域
52に”1”を書き込む。また、fork命令の次の命
令のアドレスをリターンアドレス領域53に書き込む。
プロセッサ30は、実行中のタスクを中断する。
【0076】ステップ(g):プロセッサ30は、fo
rk命令のオペランドとして与えられたタスクのパケッ
トアドレスによって指定されるパケット50を参照しな
がら、fork命令のオペランドとして与えられたタス
クの命令アドレスによって指定される命令から処理を開
始する。fork命令の処理はここで終了する。
【0077】以下、図8を参照して、プロセッサ30が
unlock命令を解釈実行する手順をステップごとに
詳細に説明する。他のプロセッサ31および32がun
lock命令を解釈実行する場合も同様である。
【0078】ステップ(h):プロセッサ30は、実行
中のタスクが所有するパケット50のリターンビット領
域52の値が”0”であるか否かを判定する。リターン
ビット領域52の値が”0”であることは、プロセッサ
30が処理を中断したタスクが存在しないことを示す。
従って、リターンビット領域52の値が”0”である場
合には、プロセッサ30は、ステップ(i)の処理を行
う。リターンビット領域52の値が”1”であること
は、プロセッサ30が処理を中断したタスクが存在する
ことを示す。従って、リターンビット領域52の値が”
1”である場合には、プロセッサ30は、ステップ
(j)の処理を行う。
【0079】ステップ(i):プロセッサ30は、実行
中のタスクが所有するパケット50のロックビット領域
51に”0”を書き込み、プロセッサ30の状態を「空
き状態」にする。「空き状態」となったプロセッサ30
は、これ以降の処理を行わない。unlock命令の処
理はここで終了する。
【0080】ステップ(j):プロセッサ30は、実行
中のタスクが所有するパケット50のロックビット領域
51に”0”を書き込む。さらに、プロセッサ30は、
リターンアドレス領域53に格納されているアドレスか
らの命令を処理することにより、中断されたタスクを復
帰させる。unlock命令の処理はここで終了する。
【0081】表2は、fork命令およびunlock
命令の解釈実行に応答して、マルチプロセッサシステム
の状態がどのように遷移するかを示す。表2に示される
例では、マルチプロセッサシステムは、プロセッサP1
とプロセッサP2とを有していると仮定する。
【0082】
【表2】
【0083】図9に示されるように、マルチプロセッサ
システムの状態は、プロセッサの状態とタスクの状態と
に区分される。
【0084】プロセッサは、2つの状態を有する。一方
の状態は「空き状態(IDLE)」であり、他方の状態
は「実行状態(RUN)」である。これらの状態は、プ
ロセッサ状態管理装置22によって管理されている状態
と同じものである。プロセッサの状態が「実行状態(R
UN)」である場合には、そのプロセッサはいずれかの
タスクを実行中である。
【0085】タスクは、3つの状態を有する。1つ目の
状態は「停止状態(STOP)」であり、2つ目の状態
は「第1実行状態(EX1)」であり、3つ目の状態は
「第2実行状態(EX2)」である。「停止状態(ST
OP)」は、プロセッサがタスクの実行を待っている状
態であるかタスクの実行を終了した状態である。「第1
実行状態(EX1)」は、他のタスクの実行を中断する
ことなく現在のタスクが実行されている状態である。
「第2実行状態(EX2)」は、他のタスクの実行を中
断してその後現在のタスクが実行されている状態であ
る。プロセッサの状態が「実行状態(RUN)」である
場合には、そのプロセッサに実行されているタスクの状
態は、「第1実行状態(EX1)」と「第2実行状態
(EX2)」のうちのいずれかである。
【0086】表2を再び参照して、マルチプロセッサシ
ステムの状態がどのように遷移するかを説明する。マル
チプロセッサシステムの状態は、イベントの発生に応答
して、そのイベントと現在の状態に基づいて次の状態に
遷移する。ここで、「Px.fork」という表記は、
「プロセッサPxがfork命令を実行した」というイ
ベントが発生したことを表し、「Px.unlock」
という表記は、「プロセッサPxがunlock命令を
実行した」というイベントが発生したことを表す。
【0087】表2の第1行は、プロセッサP1が「実行
状態」(タスクT1を実行中)であり、プロセッサP2
が「空き状態」であり、タスクT1が「第1実行状態」
であり、タスクT2が「停止状態」である場合におい
て、「プロセッサP1がfork命令を実行した」とい
うイベントに応答して、プロセッサP2の状態が「空き
状態」から「実行状態」(タスクT2を実行中)に変更
され、タスクT2の状態が「停止状態」から「第1実行
状態」に変更されることを示す。このように状態が遷移
するのは、新たなタスクT2が生成された時点でタスク
T2が「空き状態」のプロセッサP2に割り当てられる
からである。
【0088】表2の第2行は、表2の第1行における次
の状態が現在の状態である場合において、「プロセッサ
P2がunlock命令を実行した」というイベントに
応答して、プロセッサP2の状態が「実行状態」(タス
クT2を実行中)から「空き状態」に変更され、タスク
T2の状態が「第1実行状態」から「停止状態」に変更
されることを示す。
【0089】表2の第3行は、プロセッサP1が「実行
状態」(タスクT1を実行中)であり、プロセッサP2
が「実行状態」(他のタスクを実行中)であり、タスク
T1が「第1実行状態」であり、タスクT2が「停止状
態」である場合において、「プロセッサP1がfork
命令を実行した」というイベントに応答して、プロセッ
サP1の状態が「実行状態」(タスクT1を実行中)か
ら「実行状態」(タスクT2を実行中)に変更され、タ
スクT2の状態が「停止状態」から「第2実行状態」に
変更されることを示す。このように状態が遷移するの
は、新たなタスクT2が生成された時点で「空き状態」
のプロセッサが存在しないため、プロセッサP1がタス
クT1の実行を中断してタスクT2の実行を開始するか
らである。
【0090】表2の第4行は、表2の第3行における次
の状態が現在の状態である場合において、「プロセッサ
P1がunlock命令を実行した」というイベントに
応答して、プロセッサP1の状態が「実行状態」(タス
クT2を実行中)から「実行状態」(タスクT1を実行
中)に変更され、タスクT2の状態が「第2実行状態」
から「停止状態」に変更されることを示す。
【0091】以下、fork命令とunlock命令を
含むプログラムを並列処理する場合におけるマルチプロ
セッサシステム1の動作を説明する。
【0092】図10は、1から4までの和(1+2+3
+4)を二分木に基づいて計算するプログラムの手順を
示す。このプログラムは、mainとsumの2つの部
分に分かれており、mainは主プログラム、sumは
再帰呼び出し可能でかつ並列処理可能なサブルーチンで
ある。sumはnとmの2つの引数をとり、n+1から
mまでの和を求めるものである。mainはn=0、m
=4を引数としてsumを呼び出すものである。
【0093】まず、初期状態として、プロセッサ30は
mainを実行していると仮定する。プロセッサ30の
状態は「実行状態」である。また、プロセッサ31およ
びプロセッサ32の状態は「空き状態」であると仮定す
る。
【0094】以下、プログラムの各ステップ(A)〜
(H)について、マルチプロセッサシステム1がどのよ
うに動作するかを詳細に説明する。
【0095】ステップ(A):プロセッサ30は、n=
0、m=4を引数としてsumサブルーチンを実行す
る。具体的には、プロセッサ30は、共有キャッシュメ
モリ20上にパケット50(Pk1)を確保し、そのパ
ケット50(Pk1)の引数領域54に値0と値4とを
格納する。次に、プロセッサ30は、sumの命令の先
頭アドレスとパケット50(Pk1)の先頭アドレスと
をオペランドとして、exec命令を実行する。exe
c命令とは、図7に示すfork命令の処理手順のうち
ステップ(f)と(g)のみに対応する命令である。e
xec命令は、fork命令と同様にして、オペランド
としてタスクの命令アドレスとタスクのパケットアドレ
スとをとる。
【0096】プロセッサ30は、パケット50(Pk
1)のロックビット領域51に”1”を書き込み、パケ
ット50(Pk1)のリターンビット領域52に”1”
を書き込み、リターンアドレス領域53にexec命令
の次の命令のアドレスを格納する(図7のステップ
(f)を参照)。また、プロセッサ30は、パケット5
0(Pk1)を参照しながらsumの命令の実行を開始
する(図7のステップ(g)を参照)。
【0097】ステップ(B):プロセッサ30は、パケ
ット50(Pk1)から引数nと引数mとを読み出し、
(n+1)とmとを比較する。(n+1)とmが等しい
場合には、処理はステップ(G)に進み、その他の場合
には、処理はステップ(C)に進む。sumサブルーチ
ンがmainから最初に呼ばれた場合には、n=0、m
=4であるから、(n+1)とmとは等しくない。従っ
て、処理は、ステップ(C)に進む。
【0098】ステップ(C):プロセッサ30は、k=
(n+m)div2を計算する。ここで、(n+m)=
4であるから、k=2となる。
【0099】ステップ(D):プロセッサ30は、nと
kとを引数としてsumサブルーチンを実行する。具体
的には、プロセッサ30は、共有キャッシュメモリ20
上にパケット50(Pk2)を確保し、そのパケット5
0(Pk2)の引数領域54に値n(=0)と値k(=
2)とを格納する。次に、プロセッサ30は、sumの
命令の先頭アドレスとパケット50(Pk2)の先頭ア
ドレスとをオペランドとして、fork命令を実行す
る。
【0100】プロセッサ31とプロセッサ32はいずれ
も「空き状態」である。プロセッサ30は、優先度に従
って「空き状態」のプロセッサ31の識別子を得る(図
7のステップ(a)を参照)。プロセッサ30は、タス
クの命令アドレスとタスクのパケットアドレスとをプロ
セッサ31に転送する(図7のステップ(b)を参
照)。プロセッサ30は、パケット50(Pk2)のロ
ックビット領域51に”1”を書き込み、パケット50
(Pk2)のリターンビット領域52に”0”を書き込
む(図7のステップ(d)を参照)。さらに、プロセッ
サ31は、パケット50(Pk2)を参照しながらsu
mの命令の実行を開始する(図7のステップ(e)を参
照)。このようにして、プロセッサ30とプロセッサ3
1とはsumサブルーチンを並列に実行する。
【0101】ステップ(E):プロセッサ30は、kと
mとを引数としてsumサブルーチンを実行する。具体
的には、プロセッサ30は、共有キャッシュメモリ20
上にパケット50(Pk3)を確保し、そのパケット5
0(Pk3)の引数領域54に値k(=2)と値m(=
4)とを格納する。次に、プロセッサ30は、sumの
命令の先頭アドレスとパケット50(Pk3)の先頭ア
ドレスとをオペランドとして、exec命令を実行す
る。プロセッサ30がexec命令の実行を開始する前
に、パケット50(Pk1)はスタック領域に退避され
る。
【0102】プロセッサ30は、パケット50(Pk
3)のロックビット領域51に”1”を書き込み、パケ
ット50(Pk3)のリターンビット領域52に”1”
を書き込み、リターンアドレス領域53にexec命令
の次の命令のアドレスを格納する(図7のステップ
(f)を参照)。また、プロセッサ30は、パケット5
0(Pk3)を参照しながらsumの命令の実行を開始
する(図7のステップ(g)を参照)。
【0103】ステップ(F):プロセッサ30は、ステ
ップ(E)において呼び出したsumサブルーチンの実
行を終了した後、スタック領域に退避したパケット50
(Pk1)を復帰させる。その後、プロセッサ30は、
s1とs2とを加算する。ここで、s1は、ステップ
(D)において実行されたsumサブルーチンの結果を
示す。従って、s1は、パケット50(Pk2)の戻り
値領域55に格納される。s2は、ステップ(E)にお
いて実行されたsumサブルーチンの結果を示す。従っ
て、s2は、パケット50(Pk3)の戻り値領域55
に格納される。プロセッサ30がステップ(E)におい
て呼び出したsumサブルーチンの実行を終了した時点
では、パケット50(Pk2)を所有するタスクはまだ
実行中である可能性がある。プロセッサ30は、パケッ
ト50(Pk2)を所有するタスクの実行が終了した
後、パケット50(Pk2)の戻り値領域55に格納さ
れている値を読み出し、その値をs1とする。ここで
は、s1=3である。パケット50(Pk2)を所有す
るタスクの実行が終了したか否かは、パケット50(P
k2)のロックビット領域51の値を参照することによ
り判定される。パケット50(Pk2)のロックビット
領域51の値が”0”であることは、パケット50(P
k2)を所有するタスクの実行が終了したことを示す。
【0104】同様にして、プロセッサ30は、パケット
50(Pk3)を所有するタスクの実行が終了した後、
パケット50(Pk3)の戻り値領域55に格納されて
いる値を読み出し、その値をs2とする。ここでは、s
2=7である。プロセッサ30は、s1+s2を計算す
る。その結果、s=10が得られる。
【0105】ステップ(H):プロセッサ30は、sの
値をパケット50(Pk1)の戻り値領域55に格納す
る。その後、プロセッサ30は、unlock命令を実
行する。
【0106】プロセッサ30は、パケット50(Pk
1)のリターンビット領域52に格納されている値が”
1”であるか否かを判定する(図8のステップ(h)を
参照)。は、”1”である。従って、プロセッサ30
は、パケット50(Pk1)のロックビット領域51
に”0”を格納し、リターンアドレス領域53に格納さ
れているアドレスからの命令を実行する(図8のステッ
プ(j)を参照)。この場合、mainのステップ
(A)の次の命令から処理が再開される。
【0107】ステップ(G):ステップ(B)におい
て、n+1=mであると判定された場合は、処理はステ
ップ(G)に進む。プロセッサ30は、sに引数mの値
を代入する。その後、処理はステップ(H)に進む。
【0108】ここで、ステップ(D)において呼び出さ
れたsumサブルーチンやステップ(E)において呼び
出されたsumサブルーチンにおいても、上述したステ
ップ(B)〜(H)が実行されることに注意されたい。
sumサブルーチンは、再帰呼び出し可能なサブルーチ
ンだからである。
【0109】このように、sumサブルーチンを再帰的
に呼び出すことにより、1から4の和(1+2+3+
4)を並列に計算することが達成される。この例では、
ステップ(D)におけるfork命令とステップ(E)
におけるexec命令によって2つのタスクが生成され
ている。fork命令は「空き状態」のプロセッサがあ
る限りそのプロセッサにタスクを割り当てるために使用
される命令であり、exec命令は、あくまで自プロセ
ッサにタスクを割り当てるために使用される命令であ
る。
【0110】図11は、上述した処理の内容を模式的に
示したものである。図11に示されるように、タスクs
um(0,4)からfork命令とexec命令とによ
り2つのタスクsum(0,2)とタスクsum(2,
4)とが生成される。タスクsum(0,2)はプロセ
ッサ31に割り当てられ、タスクsum(2,4)はプ
ロセッサ30に割り当てられる。同様に、2つのタスク
のそれぞれからさらに2つのタスクが生成される。「空
き状態」のプロセッサが存在する限り他のプロセッサに
タスクが割り当てられる。
【0111】タスクsum(2,4)からタスクsum
(2,3)とタスクsum(3,4)とが生成される。
しかし、いずれのタスクもプロセッサ30に割り当てら
れる。タスク(2,3)の割り当て時に「空き状態」の
プロセッサがすでに存在しなくなっているからである。
【0112】このように、本発明のマルチプロセッサシ
ステム1におけるプロセッサ30〜32のそれぞれは、
fork命令を解釈実行することにより、「空き状態」
のプロセッサが存在する場合にはそのプロセッサにタス
クを割り当て、「空き状態」のプロセッサが存在しない
場合には実行中のタスクの実行を中断して、そのプロセ
ッサにタスクを割り当てる。このようにして、処理すべ
きタスクが生成されると同時に「空き状態」のプロセッ
サか、あるいはタスクを生成したプロセッサのいずれか
にその生成されたタスクが割り当てられる。その結果、
生成さたタスクは即時に実行される。これにより、従来
のマルチプロセッサシステムでは必要とされた処理すべ
きタスクを保存する機構や、タスクの実行順序をスケジ
ューリングする機構は不要となる。また、「空き状態」
のプロセッサが存在する場合には、必ずそのプロセッサ
にタスクが割り当てられるため、プロセッサの利用効率
も高い。
【0113】さらに、fork命令やunlock命令
は簡単なハードウェアで実現することができ、高速な処
理も実現することができる。
【0114】従って、集積回路上に実装されたマルチプ
ロセッサシステム1において、例示した0から4までの
和を求めるプログラムのような、タスクの処理時間がス
ケジューリング処理時間や実行待ちタスクの管理処理に
要する時間に比べて小さいプログラムを並列処理する場
合には、本発明のタスク実行方法は非常に有用である。
【0115】なお、集積回路の外部から割り込みが入っ
た場合には、プロセッサ状態管理装置22を用いて「空
き状態」のプロセッサを検出し、「空き状態」のプロセ
ッサのうち最も優先度の低いプロセッサに割り込み処理
を行わせることにより、割り込み処理による性能低下を
低減できる。
【0116】なお、集積回路のプロセッサがすべて「空
き状態」になったことは、プロセッサ状態管理装置22
を用いて検出することができる。従って、この場合に
は、いずれかのプロセッサで例外処理を行うことにより
デッドロックを回避することができる。
【0117】
【発明の効果】以上のように、本発明によれば、あるプ
ロセッサで新たなタスクを生成したときにそのタスクの
実行を他あるいは自プロセッサによりただちに開始する
ことができる。このことは、タスクを保持しておく機構
やタスクの実行順序をスケジューリングする機構を不要
にする。また、実行待ちのタスクを選択し、その選択さ
れたタスクを「空き状態」のプロセッサに割り当てる処
理も不要となる。
【0118】その結果、タスクの処理時間に比較してプ
ロセッサ割り当てに要する時間が少なくてすむ。これに
より、マルチプロセッサシステムにおいて、粒度の細か
い並列処理の高速化を図ることができる。
【図面の簡単な説明】
【図1】本発明のマルチプロセッサシステム1の構成を
示す図である。
【図2】タスクの概念を模式的に示す図である。
【図3】マルチプロセッサシステム1におけるプロセッ
サ状態管理装置22の構成例を示す図である。
【図4】(a)および(b)は、プロセッサ状態管理装
置22の動作の一例を説明する図である。
【図5】(a)および(b)は、プロセッサ状態管理装
置22の動作の他の一例を説明する図である。
【図6】パケット50の構成を示す図である。
【図7】プロセッサ30〜32がfork命令を解釈実
行する手順を示す図である。
【図8】プロセッサ30〜32がunlock命令を解
釈実行する手順を示す図である。
【図9】プロセッサの状態とタスクの状態とを説明する
図である。
【図10】1から4までの和を二分木に基づいて計算す
るプログラムの手順を示す図である。
【図11】図10に示すプログラムの処理の内容を模式
的に示した図である。
【図12】従来のプロセッサ割当方法の動作を説明する
図である。
【図13】タスクが中粒度〜粗粒度である場合におけ
る、タスクの処理時間とオーバヘッドの処理時間とを示
すタイムチャートである。
【図14】タスクが細粒度である場合における、タスク
の処理時間とオーバヘッドの処理時間とを示すタイムチ
ャートである。
【符号の説明】
1 マルチプロセッサシステム 2 主記憶装置 10〜12 要素プロセッサユニット 20 共有キャッシュ 21 ネットワーク 22 プロセッサ状態管理装置 23 バスインターフェース 30〜32 プロセッサ 33〜35 命令キャッシュ(IC) 36〜38 データキャッシュ(DC)

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 「空き状態」と「実行状態」とを有する
    複数のプロセッサを含むマルチプロセッサシステムにお
    いてタスクを実行する方法であって、 該複数のプロセッサのうち第1タスクを実行中の第1プ
    ロセッサが新たな第2タスクを生成した場合において、
    該複数のプロセッサのうち「空き状態」を有する第2プ
    ロセッサがあるか否かを検出するステップと、 「空き状態」を有する第2プロセッサが検出された場合
    には、該第2タスクを該第2プロセッサに割り当てるこ
    とにより、該第2プロセッサによる該第2タスクの実行
    を開始し、該第2プロセッサの状態を「空き状態」から
    「実行状態」に変更し、該第1タスクの実行が中断され
    ていないことを示す第1の値を有するフラグを格納する
    ステップと、 「空き状態」を有する第2プロセッサが検出されない場
    合には、該第1プロセッサによる該第1タスクの実行を
    中断し、該第1プロセッサによる該第2タスクの実行を
    開始し、該第1タスクの実行が中断されたことを示す第
    2の値を有するフラグを格納するステップとを包含する
    方法。
  2. 【請求項2】 前記方法は、 前記第2タスクの実行が終了した後、前記フラグが前記
    第1の値と前記第2の値のうちのいずれを有するかを判
    定するステップと、 前記フラグが前記第1の値を有すると判定された場合に
    は、前記第2プロセッサの状態を「実行状態」から「空
    き状態」に変更するステップと、 前記フラグが前記第2の値を有すると判定された場合に
    は、前記第1タスクの実行が中断されたところから前記
    第1プロセッサによる前記第1タスクの実行を再開する
    ステップとをさらに包含する、請求項1に記載の方法。
  3. 【請求項3】 前記複数のプロセッサのそれぞれは、前
    記複数のプロセッサを互いに識別する識別子を有してお
    り、前記「空き状態」を有する第2プロセッサの検出
    は、該識別子を用いて行われる、請求項1に記載の方
    法。
  4. 【請求項4】 前記複数のプロセッサのそれぞれは、タ
    スクを割り当てる優先順位を決定する優先度を有してお
    り、前記第2プロセッサへの前記第2タスクの割り当て
    は、該優先度に基づいて行われる、請求項1に記載の方
    法。
  5. 【請求項5】 「空き状態」と「実行状態」とを有する
    複数のプロセッサを含むマルチプロセッサシステムにお
    いて、「停止状態」と「第1実行状態」と「第2実行状
    態」とを有するタスクを実行する方法であって、 該複数のプロセッサのうち第1タスクを実行中の第1プ
    ロセッサが新たな第2タスクを生成した場合において、
    該複数のプロセッサのうち「空き状態」を有する第2プ
    ロセッサがあるか否かを検出するステップと、 「空き状態」を有する第2プロセッサが検出された場合
    には、該第2タスクを該第2プロセッサに割り当てるこ
    とにより、該第2プロセッサによる該第2タスクの実行
    を開始し、該第2プロセッサの状態を「空き状態」から
    「実行状態」に変更し、該第2タスクの状態を「停止状
    態」から「第1実行状態」に変更するステップと、 「空き状態」を有する第2プロセッサが検出されない場
    合には、該第1プロセッサによる該第1タスクの実行を
    中断し、該第1プロセッサによる該第2タスクの実行を
    開始し、該第2タスクの状態を「停止状態」から「第2
    実行状態」に変更するステップとを包含する方法。
  6. 【請求項6】 前記方法は、 前記第2タスクの実行が終了した後、前記第2タスクの
    状態を判定するステップと、 前記第2タスクが「第1実行状態」を有すると判定され
    た場合には、前記第2プロセッサの状態を「実行状態」
    から「空き状態」に変更し、前記第2タスクの状態を
    「第1実行状態」から「停止状態」に変更するステップ
    と、 前記第2タスクが「第2実行状態」を有すると判定され
    た場合には、前記第2タスクの状態を「第2実行状態」
    から「停止状態」に変更するステップとをさらに包含す
    る、請求項5に記載の方法。
  7. 【請求項7】 前記複数のプロセッサのそれぞれは、前
    記複数のプロセッサを互いに識別する識別子を有してお
    り、前記「空き状態」を有する第2プロセッサの検出
    は、該識別子を用いて行われる、請求項5に記載の方
    法。
  8. 【請求項8】 前記複数のプロセッサのそれぞれは、タ
    スクを割り当てる優先順位を決定する優先度を有してお
    り、前記第2プロセッサへの前記第2タスクの割り当て
    は、該優先度に基づいて行われる、請求項5に記載の方
    法。
  9. 【請求項9】 複数のタスクを並列に実行する複数のプ
    ロセッサと、 該複数のプロセッサの状態を管理し、該複数のプロセッ
    サのそれぞれからの問い合わせに応じて「空き状態」の
    プロセッサの識別子を返す状態管理手段とを備えたマル
    チプロセッサシステムであって、 該複数のプロセッサのそれぞれは、新たなタスクが発生
    した時点で、該状態管理手段に対して「空き状態」のプ
    ロセッサがあるか否かを問い合わる、マルチプロセッサ
    システム。
  10. 【請求項10】 前記状態管理手段は、該プロセッサか
    らの問い合わせに応答して、現在の状態を次の状態に遷
    移させる手段と、該次の状態に基づいて該問い合わせに
    対する応答を出力する手段とを備えている、請求項9に
    記載のマルチプロセッサシステム。
  11. 【請求項11】 前記マルチプロセッサシステムは、該
    複数のプロセッサのそれぞれについて、命令キャッシュ
    メモリとデータキャッシュメモリとをさらに備えてい
    る、請求項9に記載のマルチプロセッサシステム。
  12. 【請求項12】 前記マルチプロセッサシステムは、前
    記複数のプロセッサ間で命令アドレスおよびパケットア
    ドレスを転送するためのネットワークをさらに備えてい
    る、請求項9に記載のマルチプロセッサシステム。
  13. 【請求項13】 該複数のタスクのそれぞれは、細粒度
    である、請求項9に記載のマルチプロセッサシステム。
JP3696496A 1995-02-24 1996-02-23 マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法 Pending JPH08292932A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3696496A JPH08292932A (ja) 1995-02-24 1996-02-23 マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP3683695 1995-02-24
JP7-36836 1995-02-24
JP3696496A JPH08292932A (ja) 1995-02-24 1996-02-23 マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2003363920A Division JP2004086921A (ja) 1995-02-24 2003-10-23 マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法

Publications (1)

Publication Number Publication Date
JPH08292932A true JPH08292932A (ja) 1996-11-05

Family

ID=26375946

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3696496A Pending JPH08292932A (ja) 1995-02-24 1996-02-23 マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法

Country Status (1)

Country Link
JP (1) JPH08292932A (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002306705A (ja) * 2001-04-11 2002-10-22 Heiwa Corp 遊技機および遊技機の動作制御方法
JP2003241980A (ja) * 2002-02-06 2003-08-29 Internatl Business Mach Corp <Ibm> マルチプロセッサ・コンピュータ・システムのためのスレッド・ディスパッチ機構及び方法
JP2007328822A (ja) * 2007-09-10 2007-12-20 Matsushita Electric Ind Co Ltd マルチタスクプロセッサ
JPWO2006013857A1 (ja) * 2004-08-05 2008-05-01 松下電器産業株式会社 情報処理装置
US7412588B2 (en) 2003-07-25 2008-08-12 International Business Machines Corporation Network processor system on chip with bridge coupling protocol converting multiprocessor macro core local bus to peripheral interfaces coupled system bus
JP2009086789A (ja) * 2007-09-28 2009-04-23 Hitachi Ltd 並列型画像処理装置
WO2011142227A1 (ja) * 2010-05-14 2011-11-17 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ・システム、方法及びプログラム
US9798696B2 (en) 2010-05-14 2017-10-24 International Business Machines Corporation Computer system, method, and program

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002306705A (ja) * 2001-04-11 2002-10-22 Heiwa Corp 遊技機および遊技機の動作制御方法
JP2003241980A (ja) * 2002-02-06 2003-08-29 Internatl Business Mach Corp <Ibm> マルチプロセッサ・コンピュータ・システムのためのスレッド・ディスパッチ機構及び方法
US7487504B2 (en) 2002-02-06 2009-02-03 International Business Machines Corporation Thread dispatch for multiprocessor computer systems
US8811422B2 (en) 2003-07-25 2014-08-19 Microsoft Corporation Single chip protocol converter
US7412588B2 (en) 2003-07-25 2008-08-12 International Business Machines Corporation Network processor system on chip with bridge coupling protocol converting multiprocessor macro core local bus to peripheral interfaces coupled system bus
US8036243B2 (en) 2003-07-25 2011-10-11 International Business Machines Corporation Single chip protocol converter
JPWO2006013857A1 (ja) * 2004-08-05 2008-05-01 松下電器産業株式会社 情報処理装置
JP4607884B2 (ja) * 2004-08-05 2011-01-05 パナソニック株式会社 情報処理装置
JP2007328822A (ja) * 2007-09-10 2007-12-20 Matsushita Electric Ind Co Ltd マルチタスクプロセッサ
JP2009086789A (ja) * 2007-09-28 2009-04-23 Hitachi Ltd 並列型画像処理装置
WO2011142227A1 (ja) * 2010-05-14 2011-11-17 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ・システム、方法及びプログラム
US9794138B2 (en) 2010-05-14 2017-10-17 International Business Machines Corporation Computer system, method, and program
US9798696B2 (en) 2010-05-14 2017-10-24 International Business Machines Corporation Computer system, method, and program
GB2495417B (en) * 2010-05-14 2017-11-29 Ibm A method for dynamically changing the configuration of a system

Similar Documents

Publication Publication Date Title
US5867704A (en) Multiprocessor system shaving processor based idle state detection and method of executing tasks in such a multiprocessor system
US6389446B1 (en) Multi-processor system executing a plurality of threads simultaneously and an execution method therefor
US7546406B2 (en) Virtualization of a global interrupt queue
JP5366552B2 (ja) 集中特化したマルチタスク及びマルチフロー処理をリアルタイム実行する手法及びシステム
US5155854A (en) System for arbitrating communication requests using multi-pass control unit based on availability of system resources
US7650605B2 (en) Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors
US7926062B2 (en) Interrupt and exception handling for multi-streaming digital processors
US8572626B2 (en) Symmetric multi-processor system
JPH0250753A (ja) コンピュータにおける割込処理装置およびその方法
US20120271952A1 (en) Microprocessor with software control over allocation of shared resources among multiple virtual servers
US7661115B2 (en) Method, apparatus and program storage device for preserving locked pages in memory when in user mode
US20080168465A1 (en) Data processing system and semiconductor integrated circuit
US7103631B1 (en) Symmetric multi-processor system
US7398378B2 (en) Allocating lower priority interrupt for processing to slave processor via master processor currently processing higher priority interrupt through special interrupt among processors
CN107729267B (zh) 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构
US20110265093A1 (en) Computer System and Program Product
JPH08292932A (ja) マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法
CN113946445A (zh) 一种基于asic的多线程模块及多线程控制方法
JP4489958B2 (ja) イベントベースシステムの同時処理
JP2000227872A (ja) 複数メモリ要求の動的スロット割当および追跡
WO2000033175A2 (en) Method for increasing efficiency of multiprocessing systems
JP2004086921A (ja) マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法
JPH11232247A (ja) データフロー計算機およびデータフロー制御方法
JP2580525B2 (ja) 並列計算機における負荷分散方法
JPH11249917A (ja) 並列型計算機及びそのバッチ処理方法及び記録媒体

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20000823