JPH1027108A - スレッド実行方法 - Google Patents

スレッド実行方法

Info

Publication number
JPH1027108A
JPH1027108A JP8183533A JP18353396A JPH1027108A JP H1027108 A JPH1027108 A JP H1027108A JP 8183533 A JP8183533 A JP 8183533A JP 18353396 A JP18353396 A JP 18353396A JP H1027108 A JPH1027108 A JP H1027108A
Authority
JP
Japan
Prior art keywords
thread
execution
child
parent
unit
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
JP8183533A
Other languages
English (en)
Other versions
JP2882475B2 (ja
Inventor
Atsushi Torii
淳 鳥居
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 JP8183533A priority Critical patent/JP2882475B2/ja
Priority to US08/888,590 priority patent/US6389446B1/en
Publication of JPH1027108A publication Critical patent/JPH1027108A/ja
Application granted granted Critical
Publication of JP2882475B2 publication Critical patent/JP2882475B2/ja
Priority to US10/114,075 priority patent/US6961935B2/en
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Abstract

(57)【要約】 【課題】 マルチスレッドのスレッドスケジューリング
を簡単化することによって、効率的なスレッドスケジュ
ーリングを実現する。 【解決手段】 一つのスレッド実行部は、スレッド#0
のスレッド生成命令2を実行して、新しいスレッド#1
を生成し、その後、スレッド#0のスレッド終了命令3
を実行して、スレッド#0の実行を終了する。もう一つ
のスレッド実行部は、スレッド#1のスレッド生成命令
2を実行して、新しいスレッド#2を生成し、その後、
スレッド#1のスレッド終了命令3を実行して、スレッ
ド#1の実行を終了する。このように親スレッドが子ス
レッドを生成する回数を高々1回と規定し、スレッド生
成、終了順序を一意に規定する。このようなスレッド間
の依存関係4を親スレッドから子スレッド方向のみに限
定することによって、スレッドスケジューリングのコス
トを低減する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、複数のスレッドを
同時に実行する高性能マイクロプロセッサを用いたマル
チスレッド実行方法に関する。
【0002】
【従来の技術】問題の持つ並列性を活用し、単一のプロ
グラムを複数の命令流(スレッド)群に分割して、それ
らを並列に実行することによって、性能を向上させるプ
ログラム実行方法として、マルチスレッド実行方法が数
多く提案されている。このマルチスレッド実行方法によ
れば、スレッドはスレッド生成を意味するフォーク動作
によって生成される。ここでは、フォーク動作を行なっ
たスレッドを親スレッド、生成された新しいスレッドを
子スレッドと呼ぶ。スレッドはマルチスレッド化された
プログラムにおいて、ある規定された動作を行なった後
に消滅する。つまり、プログラム実行過程において、数
々のスレッドの生成と終了が繰り返されることになる。
【0003】このスレッドは、プロセッシングユニット
などのスレッド実行部に割り当てられる。スレッド実行
部が物理的に複数存在するシステムでは、複数のスレッ
ドを同時に実行することが可能となり、逐次処理からの
性能向上が期待できる。また、個々のスレッド実行部に
複数のスレッドを割り当てることによって、同期ミス
や、資源競合、キャッシュミスが生じた際に現在実行し
ているスレッドを待機状態にして、別のスレッドを起動
することによって、これらの要因による遅延を見かけ上
隠蔽し資源の利用効率をあげることが可能になる。
【0004】このようなマルチスレッド実行方法を説明
した代表的な文献としては、R.S.Nikhil等に
よる“A Multithreaded Massiv
ely Parallel Architectur
e”(Proceedingsof the 19th
Annual International Sym
posium on Computer Archit
ecture,ページ156−167,May 199
2)や、D.E.Culler等による“Finegr
ain Parallelism with Mini
mal Hardware Support: A C
ompiler−ControlledThreade
d Abstract Machine”(Proce
edings of the Fourth Inte
rnational Conference on A
rchitectural Support forP
rogramming Languages and
OperatingSystems,ページ164−1
75,April 1991)などがあげられる。
【0005】しかしながら、このスレッド生成、消滅、
待機状態への変更、復帰などの発生頻度が他の処理に対
して多い場合には、スレッド生成、消滅、待機状態への
変更、復帰などのスレッドスケジューリングの効率によ
って並列処理全体の効率を決定することになり、このコ
ストを低減することが、効率的な並列処理を行なう場合
に肝要になる。プログラムの持つ並列性の少ない問題で
は、1スレッドあたりの処理量が小さくなったり、同時
に存在するスレッド数が、スレッド実行部の数を大幅に
上回る状態になると、スレッド実行コストやスレッドス
ケジューリングコストが飛躍的に増大するという欠点が
あった。
【0006】これに対して、処理量の小さな細粒度スレ
ッドを効率的に実行するスレッド実行方法と実行装置が
提案されている。例えば、細粒度スレッドの並列処理プ
ロセッサの例として、Gurinder S.Sohi
等が発表した論文“Multiscalar Proc
essor”(The 22nd Internati
onal Symposium on Compute
r Architecture,IEEE Compu
ter Society Press,1995,ペー
ジ414−425)があげられる。これに開示されたマ
ルチスカラー・プロセッサでは、単一のプログラムをい
くつかの基本ブロックの集合である「タスク」に分割
し、これを並列に実行処理できるプロセッサで処理す
る。
【0007】図23は、このマルチスカラー・プロセッ
サを例示している。マルチスカラー・プロセッサは、シ
ーケンサ73、プロセッシングユニット74、結合ネッ
トワーク75、データバンク76から構成される。プロ
セッシングユニット74は命令キャッシュ77、実行ユ
ニット78、レジスタファイル79から構成され、シス
テムに複数存在する。また、プロセッシングユニット7
4に対応してデータバンク76も複数存在し、データバ
ンク76は、ARB(アドレス・レゾリューション・バ
ッファ:Address Resolution Bu
ffer)80、データキャッシュ81とから構成され
る。複数のタスクの同時実行の管理は制御フロー情報が
記載されたタスク記述子(task descript
or)を用いてシーケンサ73によって動的/静的に行
なわれ、各プロセッシングユニット74にタスクを割り
付ける。シーケンサ73は、タスクをプロセッシングユ
ニット74に割りつけると、次のタスクの割りつけを行
なうべくタスク記述子を調べる。
【0008】また、類似のスレッド実行方法としては、
Pradeep K.Dubey等発表した論文“Si
gnle−Program Speculative
Multithreading(SPSM)Archi
tectire:Compiler−assisted
Fine−Grained Multithread
ing”(Prarllel Architectur
es and Compilation Techni
ques,IFIP 1995)にも示されている。
【0009】図24はSPSMアーキテクチャにおける
スレッド実行方法の概念図である。図24において、シ
ングルプログラム82中に、スレッド生成命令84とス
レッド待ち合わせ命令85が組み込まれている。スレッ
ド生成命令84を実行すると、実行を先回りするフュー
チャースレッド83を生成する。フューチャースレッド
83はスレッド待ち合わせ命令85まで実行して、本来
の実行が追いつくのを待ち合わせて結果をマージする。
フューチャースレッド83は本来の実行と並列に動作す
ることによって、速度向上を図るというものである。
【0010】
【発明が解決しようとする課題】しかしながら、前記の
スレッド実行方法では、フォーク命令を実行したり、タ
スク記述子によってスレッドを起動する際に、待機状態
のスレッド実行部が存在しない場合には、スレッドが生
成できずプログラムが期待する振舞いができない現象が
生じる可能性があった。また、スレッド生成をスレッド
実行部が確保できるまで保留にした場合でも、その後の
スレッド生成が継続されるため、スレッド数が増加する
などの欠点があった。また、スレッド間の対応関係を保
持しておく必要や、スレッド管理は並列システム中で集
中的に行なわなくてはならないので、スレッド管理部の
制約によってスレッド実行部数が制限されてしまった
り、スレッド管理方法自身が複雑になり、スレッド管理
部のハードウェア化が簡単にはできないという欠点があ
った。
【0011】本発明の課題は、スレッドスケジューリン
グコストを低減しつつ、前述の欠点を除去したスレッド
実行方法を提供することにある。
【0012】
【課題を解決するための手段】本発明によれば、複数の
スレッドを並列に実行する複数のスレッド実行部を用意
し、前記複数のスレッド実行部の一つに、スレッド生成
手続き及びスレッド終了手続きを含む親スレッドを供給
し、前記複数のスレッド実行部の前記一つに前記親スレ
ッドの前記スレッド生成手続きを実行させて、スレッド
生成手続き及びスレッド終了手続きを含む子スレッドを
生成させ、その後、前記複数のスレッド実行部の前記一
つに、前記親スレッドの前記スレッド終了手続きを実行
させて、前記親スレッドを終了させ、前記子スレッドを
前記複数のスレッド実行部の異なる一つに供給し、前記
複数のスレッド実行部の前記異なる一つに前記子スレッ
ドを前記親スレッドとして実行させるスレッド実行方法
であって、前記複数のスレッド実行部の各々に前記スレ
ッド生成手続きを実行させる回数を、前記親スレッド及
び前記子スレッドの各々に対して高々1回に規定する規
定と、前記子スレッドは前記親スレッドが生存中の間は
終了できないという規定とを設けることによって、スレ
ッドの生成順序及び消滅順序を一意に定め、前記親スレ
ッド及び前記子スレッド間のデータ依存関係を親スレッ
ドから子スレッド方向へ限定することを特徴とするスレ
ッド実行方法が得られる。
【0013】このように、本発明では、スレッド生成を
1スレッドで高々1回と規定し、スレッドの生成順序及
び終了順序を静的に一意に定める。これらスレッドの生
成、終了は特殊命令を用いることによって行なう。ま
た、スレッド間の依存関係を親スレッドから子スレッド
方向に限定することにより、スレッド実行部が確保でき
ない場合に実行が保留となる子スレッドの数は高々1ス
レッドに限定される。
【0014】本スレッド実行方法に従えば、スレッド間
の直接の関係は、一対一に限定されるため、スレッドの
スケジューリング管理が容易になる。さらに、このスレ
ッド実行方法に基づいたスレッド管理部を用意する。ス
レッド管理部は並列システム中に集中型と分散型が構築
できる。分散型の場合は隣接するスレッド管理部とのみ
交信を行なうことによってスレッド管理が実現できるた
め、スレッド実行部数が増えた場合も現実的に対応でき
る。
【0015】
【発明の実施の形態】次に本発明の実施例について図面
を参照して説明する。
【0016】以下に述べる本発明の実施例のすべてにつ
いて特殊手続きを命令セットとして定義した特殊命令と
して示している。また、本発明は以下に述べる本発明の
実施例に限定されるものではなく、当業者が種々の他の
方法で本発明を容易に実施可能である。
【0017】図1は、本発明の第1の実施例によるマル
チスレッドの実行方法を説明するための図である。この
本発明の第1の実施例は請求項1の発明を実施するため
のものである。
【0018】図1において、スレッド生成命令2は、一
つのスレッドから新しいスレッドを生成するためのもの
である。また、スレッド終了命令3は、当該スレッドの
実行を終了するためのものである。
【0019】例えば、スレッド生成命令2は、スレッド
#0(1a)からスレッド#1(1b)を生成する。ス
レッド終了命令3は、スレッド#0(1a)の実行を終
了する。別のスレッド生成命令2は、スレッド#1(1
b)からスレッド#2(1c)を生成する。別のスレッ
ド終了命令3は、スレッド#1(1b)の実行を終了す
る。更に別のスレッド生成命令2は、スレッド#2(1
c)からスレッド#3(1d)を生成する。更に別のス
レッド終了命令3は、スレッド#2(1c)の実行を終
了する。同様に、スレッド#3(1d)からスレッド#
4(1e)が生成された後、スレッド#3(1d)の実
行は終了される。スレッド#4(1e)からスレッド#
5(1f)が生成された後、スレッド#4(1e)の実
行は終了される。
【0020】このように、スレッド#1(1b)に対す
る親スレッドはスレッド#0(1a)となり、スレッド
#1(1b)に対する子スレッドはスレッド#2(1
c)となる。スレッド間にデータ依存関係4がある場
合、この依存は親スレッドから子スレッド方向に限定さ
れ、必要に応じて同期をとることによって、依存するデ
ータの生産と消費のタイミングをとる。また、親スレッ
ドのスレッド終了命令3が子スレッドのスレッド終了命
令3より先に実行される必要があるので、子スレッドの
スレッド終了命令3の実行は、親スレッドのスレッド終
了命令3が実行されて親スレッドが終了されるまで、ウ
エイトされる。
【0021】図2は、このようなマルチスレッドの実行
方法に従って、4個のスレッド実行部#0,#1,#
2,及び#3から構成される並列処理システム上で並列
処理を行なった際のタイミングチャートを示す。図1及
び図2を参照して、スレッド実行部#0がスレッド#0
のスレッド生成命令2を実行すると、スレッド実行部#
0は新しいスレッド#1を生成し、スレッド実行部#1
にスレッド#1を供給する。スレッド実行部#1はスレ
ッド#1のスレッド生成命令2を実行すると、スレッド
#2を生成し、スレッド実行部#2にスレッド#2を供
給する。また、スレッド#1はスレッド#0が終了され
るまで、終了されない。同様に、スレッド#2はスレッ
ド#1が終了されるまで終了されない。
【0022】このように、スレッド生成命令2の実行
を、1スレッド中で高々1回に制限し、スレッドの生成
順序と同様に終了させることによって、スレッド実行部
#0〜#3に割り付けられるスレッドが静的に確定でき
る。なお、あるスレッド実行部がスレッド生成命令2を
実行する際に、スレッドを実行していない他のスレッド
実行部(すなわち、フリー状態であるスレッド実行部)
が存在しない場合には、フリー状態であるスレッド実行
部が生じるまで、前述のスレッド実行部はスレッド生成
命令の実行をウェイトすることになる。
【0023】このマルチスレッド実行方法に従ったスレ
ッドの生成例についての例を述べる。以下のようなルー
プ処理について考える。このコードは米国MIPS T
echnology INC.社のRISCプロセッサ
R3000シリーズの命令セットから簡単化のために分
岐遅延スロットを取り除いたものである。このループで
は、レジスタr1が0になるまでループをして、0x4
0f044番地に示されるサブルーチンをコールするも
のである。
【0024】 40f040: addu r4,r14,r18 40f044: jal 0x40e99c <0x40e99c> 40f048: addiu r17,r17,0x8 40f04c: slti r1,r17,0x40 40f050: sll r14,r17,1 40f054: bne r1,r0,-0x18 <0x40f040> このループの1反復を1スレッドとして定義して、マル
チスレッド化したコード例を以下に示す。
【0025】 40f040: fork 0x10 <0x40f050> 40f044: addu r4,R14,R18 40f048: jal 0x40e99c <0x40e99c> 40f04c: term 40f050: addiu r17,r17,0x8 40f054: slti r1,r17,0x40 40f058: sll r14,r17,1 40f05c: bne r1,r0,-0x20 <0x40f040> この例ではスレッド生成命令をfork命令、スレッド
終了命令をterm命令と定義しており、サブルーチン
内によるメモリの書き替えアドレスは競合せず、また、
サブルーチン内ではスレッド生成を行なっていないこと
を前提としている。
【0026】本発明によって、スレッド間のスケジュー
リングを容易に静的に割り付けるこが可能となり、また
同時に存在するスレッド数がスレッド実行部を上回るこ
とがなくなるため、常にスレッド数の上限が保証され、
効率的なスレッド管理が可能となる。
【0027】図3は、本発明の第2の実施例によるマル
チスレッドの実行方法を実施するための実行装置のブロ
ック図である。この本発明の第2の実施例は請求項2の
発明を実施するためのものである。
【0028】図3の実行装置は、4スレッド並列実行型
プロセッサである。図3において、スレッド実行部#0
(6a)、#1(6b)、#2(6c)、及び#3(6
d)はスレッド管理部5と接続され、スレッド実行部6
(添字削除)間はスレッド実行部間交信バス7と接続さ
れている。
【0029】図4はスレッド管理部5の詳細なブロック
図である。スレッド管理部5はスレッド管理シーケンサ
8とスレッド状態テーブル9から構成されており、スレ
ッド状態テーブル9ではスレッド実行部6の個数分のエ
ントリが用意されている。各エントリはスレッド状態エ
ントリ10、親スレッド実行部番号エントリ11、子ス
レッド実行部番号エントリ12から構成される。スレッ
ド状態エントリ10は対応するスレッド実行部6のビジ
ー状態/フリー状態を識別するために用いられ、親スレ
ッド実行部番号エントリ11及び子スレッド実行部番号
エントリ12は該当スレッド実行部6で実行されている
スレッドの親スレッド及び子スレッドが実行されている
スレッド実行部6の番号を示す。
【0030】以下、スレッド生成時およびスレッド終了
時のスレッド管理ユニット5の動作アルゴリズムを説明
する。これらのアルゴリズムは主としてスレッド管理シ
ーケンサ8の状態遷移で行なわれる。
【0031】図5はスレッド管理シーケンサ8のスレッ
ド生成時のアルゴリズムを示したフローチャートであ
る。
【0032】図3〜図5を参照して、スレッド実行部6
が、スレッド生成命令2を実行すると、スレッド管理部
5に対して子スレッド生成要求を行なう。スレッド管理
部5が子スレッド生成要求を受け付けると、そのスレッ
ド実行部6で実行しているスレッドが、既に子スレッド
を生成したか否かを調べる。これは、子スレッド実行部
エントリ番号12の内容を調べることによって行なわれ
る。ここで、スレッドを既に生成していれば、スレッド
生成を行うことなく、エラーを表すエラー信号をスレッ
ド実行部6に返信する。スレッドを生成していない場合
には、次に、フリー状態のスレッド実行部6が存在する
か否かを調べる。これは、スレッド状態エントリ10の
内容を調べることによって行なわれる。ここで、フリー
状態のスレッド実行部6が存在しない場合には、現時点
でのスレッド生成は物理的に不可能となるので、スレッ
ド生成不可能を表す情報を、スレッド生成を要求したス
レッド実行部6に返す。このスレッド実行部6は、他の
スレッド実行部6がフリー状態になるまで待たされる
か、OSなどのシステムソフトウェアによってメモリな
どに、子スレッド起動のための情報を退避するなどの処
理が必要である。
【0033】もし、待たされる場合には、他のスレッド
実行部6がフリー状態になることは、スレッド実行部6
から一定間隔で問い合わせたり、スレッド管理部5が、
以前要求のあったスレッド実行部6の番号を記憶してお
き、他のスレッド実行部6がスレッド終了した時に、要
求したスレッド実行部6に対してその情報を伝えるなど
の方法によって行なうことが可能である。また、メモリ
上に子スレッド起動情報を退避した場合は、フリー状態
のスレッド実行部6が生じた際に、その情報からシステ
ムソフトウェアによって新たに子スレッドを生成するこ
とになる。
【0034】さて、フリー状態のスレッド実行部6が存
在する場合には、まず、どのスレッド実行部6に子スレ
ッドを実行させるか決定する。次に、スレッド管理テー
ブル9を更新する。まず、新たに子スレッドを実行する
スレッド実行部6のスレッド状態エントリ10をフリー
状態からビジー状態に変更し、親スレッド実行部番号エ
ントリ11をスレッド生成要求を行なったスレッド実行
部6の番号に設定する。次に、このスレッド生成要求を
行なったスレッド実行部6の子スレッド実行部番号エン
トリ12を設定する。次に、スレッド生成要求を行なっ
たスレッド実行部6に子スレッド実行部6の番号を伝え
る。この情報を受けとったスレッド実行部6は、子スレ
ッド実行部6に対してスレッド実行部間交信バス7を介
して、子スレッドに引き継がれるデータやスレッドの開
始アドレスなどを送信し、これによって子スレッドが実
行されることになる。
【0035】図6は、スレッドを終了する時のスレッド
管理シーケンサ8の動作アルゴリズムのフローチャート
を示す。
【0036】図3、図4、及び図6を参照して、スレッ
ドの終了は、スレッドの生成順序と同じ順序であること
を保証する必要があるので、親スレッドが終了していな
い限り、終了することはできない。親スレッドの終了
は、スレッド状態テーブル9の親スレッド実行部番号エ
ントリ11が、クリアされているか否かで判断し、クリ
アされていない場合には、スレッド実行部6を待ち状態
にさせる。クリアされている場合には、スレッド状態テ
ーブル9の要求スレッド実行部6のスレッド状態テーブ
ル10をフリー状態にし、子スレッド実行部番号エント
リ12に示されるエントリの親スレッド実行部番号エン
トリ11をクリアする。その後、要求スレッド実行部6
に対して、スレッド終了受理信号を返す。スレッド実行
部6はこの受理信号を受けとった時点でスレッドを終了
させる。
【0037】このように、本発明ではマルチスレッドの
管理をソフトウェアによってではなくすべてハードウェ
ア論理によって実現可能のため、スレッド管理オーバヘ
ッドが大幅に低減され、効率的なマルチスレッドの実行
が可能になる。スレッド実行部6の数を上回るスレッド
が生成された場合に、システムソフトウェアによってメ
モリにスレッド起動情報を退避する場合でも、退避され
るスレッドは、上述したように1スレッドでフォーク1
回と規定しているため、1スレッド分のみのメモリ領域
だけ確保すれば十分である。
【0038】なお、図3に示される並列処理システムに
おいて、単一のタスクをマルチスレッドに分割して実行
するだけであれば、スレッド状態テーブル9の親スレッ
ド実行部番号エントリ11と子スレッド実行部番号エン
トリ12を省略して、もっとも古い親スレッドを示すエ
ントリを追加することでも同様の機能をより簡単に実現
できるが、本実施例の場合は、全く依存関係のない複数
のタスクをスレッド実行部6で空間分割して、例えば、
スレッド実行部#0(16a)及び#1(16b)は第
1のタスク用、スレッド実行部#2(6c)及び#3
(16d)は第2のタスク用としてマルチタスク・マル
チスレッドで実行することも可能となる。
【0039】図7は、本発明の第3の実施例によるマル
チスレッドの実行方法を実施するための実行装置のブロ
ック図である。この本発明の第3の実施例は請求項3の
発明を実施するためのものである。
【0040】図7の実行装置は4スレッド並列実行型プ
ロセッサである。図7において、スレッド実行部#0
(14a)、#1(14b)、#2(14c)、及び#
3(14d)はそれぞれスレッド管理部#0(13
a)、#1(13b)、#2(13c)、及び#3(1
3d)と接続されており、隣接するスレッド実行部14
(添字削除)はスレッド実行部間交信バス15によって
単一方向リング状に接続されている。また、隣接するス
レッド管理部13(添字削除)は、スレッド実行部間交
信バス15と同一の単一方向で親スレッド情報伝達線1
6によって接続されると共に、スレッド実行部間交信バ
ス15と逆の単一方向の子スレッド情報伝達線17によ
って接続されている。このように各スレッド実行部14
やスレッド管理部13はリング状に接続されているた
め、生成された新スレッドの供給はスレッド実行部間交
信バス15の方向に隣接するスレッド実行部14のみに
対してのみ可能である。
【0041】図8は、スレッド管理部#1(13b)の
詳細を示す。以下にスレッド管理部#1(13b)の構
造及び動作を説明するが、他のスレッド管理部#0(1
3a)、#2(13c)、及び#3(13d)も構造及
び動作において同様である。スレッド管理部13bは、
スレッド管理シーケンサ18とスレッド状態テーブル1
9とから構成されている。スレッド状態テーブル19は
スレッド状態エントリ20、親スレッド識別エントリ2
1、親スレッド終了判定論理部22から構成される。
【0042】親スレッド情報伝達線16はシステム中に
存在する最も古い親スレッド(最古親スレッド)が他の
スレッド実行部14に存在するか否かを示す信号線であ
り、スレッド管理部#2(13c)への出力は、親スレ
ッド識別エントリ21と親スレッド終了判定論理部22
からの直接出力の論理和によって決定される。
【0043】図9は親スレッド終了判定論理部22の動
作を説明するためのタイミングチャートである。図9に
おいて、(A)はスレッド管理部#0(13a)からの
親スレッド情報伝達線16で、スレッド管理部#1(1
3b)に対して、他のスレッド実行部14に最古親スレ
ッドが存在するか否かの信号を表す。(B)はスレッド
管理シーケンサ18からのスレッド実行部#1(14
b)へのスレッド終了通知信号を表す。(C)は論理和
回路への直接出力信号を表す。(D)はスレッド状態テ
ーブルの親スレッド識別エントリ21への出力を表す。
(E)は論理和回路の出力を表し、この値がスレッド管
理部#2(13c)への親スレッド情報伝達線16の値
となる。
【0044】初期状態は、最古親スレッドはスレッド実
行部#0(14a)で実行されているとする。この時に
は、(A)及び(E)から、親スレッドが他に存在する
(つまり親スレッドがスレッド実行部#1(14b)及
び#2(14c)ではない)ということがスレッド実行
部#1(14b)及び#2(14c)でわかる。サイク
ル1において最古親スレッドに対する実行をスレッド実
行部#0(14a)が終了すると、サイクル2におい
て、スレッド管理部#0(13a)は、(A)に示すよ
うに、スレッド管理部#1(13b)に対して、スレッ
ド実行部#1(14b)が実行しているスレッドより古
い親スレッドは存在しないと通知する。これを受けて、
同時に、(D)に示すように、親スレッド識別エントリ
21を親スレッドであるという状態を書き替える。ま
た、1サイクル遅延のサイクル3において、(C)に示
すように、論理和回路への直接出力をリセットする。こ
れによって、スレッド管理部#2(13c)によって
は、(E)で示される親スレッド状態伝達線16の変化
は生じない。
【0045】次に、スレッド実行部#1(14b)で実
行されていたスレッドが終了する場合について説明す
る。図9では、サイクル5で(B)に示すスレッド終了
通知信号がその情報を伝える。すると、次のサイクル6
で(D)に示す親スレッド識別エントリ21を親スレッ
ドではないという状態に書き替える。すると、(E)に
示す親スレッド状態伝達線16は、(C)及び(D)に
示す論理和なので、スレッド実行部#1(14b)より
前には最古親スレッドが存在しないという情報となって
スレッド管理部#2(13c)に伝えられる。これらに
よって、分散するスレッド管理部13に対してスレッド
管理上必要な情報を提供する。
【0046】図10は図8のスレッド管理シーケンサ1
8のスレッド生成時の動作アルゴリズムを示し、図11
は図8のスレッド管理シーケンサ18のスレッド終了時
の動作アルゴリズムを示す。
【0047】図10及び図11の基本的なアルゴリズム
は図5及び図6の場合と同じである。子スレッドの存
在、及び子スレッド生成方向の隣接スレッドが最古の親
スレッドであるかの情報は子スレッド情報伝達線17
(図7及び図8)によって、スレッド管理シーケンサ1
8に伝えられる。
【0048】図8、図9、及び図10を参照して、スレ
ッド管理部#1(13b)のスレッド管理シーケンサ1
8は、スレッド実行部#1(14b)からの子スレッド
生成要求を受けると、まず子スレッド情報伝達線17の
情報によって既に子にスレッドが生成されているか否か
を調べる。ここで、スレッド管理部#1(13b)のス
レッド管理シーケンサ18は、スレッドを既に生成して
いれば、スレッド生成を行なうことになく、エラーを表
すエラー信号をスレッド実行部14bに返信する。スレ
ッド管理部#1(13b)のスレッド管理シーケンサ1
8は、スレッドを生成していない場合には、隣接スレッ
ド実行部#2(14c)が最古親スレッドを実行してい
ないかを調べる。
【0049】ここで、スレッド管理部#1(13b)の
スレッド管理シーケンサ18は、スレッド実行部#2
(14c)が最古親スレッドを実行している場合には、
現時点でのスレッド生成は物理的に不可能となるので、
図5の場合と同様に、スレッド実行部#1(14b)
に、スレッド生成が可能となるまでウェイトさせたり、
或いはシステムソフトウェアによってメモリに子スレッ
ド起動情報を退避させるために、スレッド生成不可能を
表す情報をスレッド実行部#1(14b)に返し、後ほ
どスレッド実行部#2(14c)が2スレッド終了した
場合に、スレッド実行部#1(14a)に対してその旨
の情報を伝える。
【0050】スレッド管理部#1(13b)のスレッド
管理シーケンサ18は、スレッド実行部#2(14c)
がフリー状態であれば、スレッド管理部#1(13b)
のスレッド状態エントリ20をフリー状態からビジー状
態に変更し、スレッド実行部#1(14b)に要求受理
信号を返す。この情報を受けとったスレッド生成部#1
(14b)は、スレッド実行部#2(14c)に対して
スレッド実行部間交信バス15を介して、子スレッドに
引き継がれるデータやスレッドの開始アドレスなどを送
信し、これによって子スレッドが起動されることにな
る。
【0051】図8、図9、及び図11を参照して、スレ
ッド実行部#1(14b)のスレッド終了時のスレッド
管理部#1(13b)のスレッド管理シーケンサ18の
動作を説明する。スレッドの終了は、スレッドの生成順
序と同じ順序であることを保証する必要があるので、親
スレッドが終了していない限り、終了することはできな
い。親スレッドの終了は、親スレッド情報伝達線16に
よって伝達される。親スレッドが終了していない場合に
は、スレッド終了できるまでスレッド実行部#1(14
b)を待ち状態にさせる。親スレッドが終了している場
合(つまりスレッド実行部#1(14b)が実行してい
るスレッドが最古親スレッドである場合)には、図6と
同様の手順で処理を行ない、スレッド実行部#1(14
b)にスレッド終了許可を表すスレッド終了受理信号を
送信する。スレッド実行部#1(14b)はこれを受け
とった時点でスレッドを終了させる。
【0052】なお、スレッド管理部#1(13b)のス
レッド管理シーケンサ18は、隣接親スレッドが終了す
ると、スレッド状態テーブル(スレッド管理テーブル)
19を更新し、親スレッド終了判定の出力をNoに遷移
させるべく、親スレッド識別エントリ21をNoに変更
する。
【0053】本発明によって、並列システム全体で共有
するスレッド管理機構を用いずに、第1の実施例による
マルチスレッド実行方法が実現され、スレッド実行部の
数を増やした場合にも、スレッド管理部が容易に構成可
能である。
【0054】図12は、本発明の第4の実施例によるマ
ルチスレッド実行方法を実施するための実行装置のブロ
ック図である。この本発明の第4の実施例によるマルチ
スレッド実行方法は請求項4の発明を実施するためのも
のであり、並列処理システムに冗長性持たせ、耐故障性
を持たせたものである。
【0055】図12の実行装置は、図7の実行装置と同
様に、スレッド管理部23a〜23d、スレッド実行部
24a〜24d、スレッド実行部間交信バス25、親ス
レッド情報伝達線26、及び子スレッド情報伝達線27
を有する。ここで、スレッド実行部間交信バス25は各
スレッド実行部24(添字削除)をバイパスする拡張バ
スを有する。親スレッド情報伝達線26も、各スレッド
管理部23(添字削除)をバイパスする拡張伝達線を有
し、子スレッド情報伝達線27も、各スレッド管理部2
3をバイパスする拡張伝達線を有する。
【0056】もし、スレッド実行部24やスレッド管理
部23に故障等の不都合が生じた際には、問題のスレッ
ド実行部24やスレッド管理部23を拡張バスや拡張伝
達線を用いてバイパスすることによって、スレッド実行
部24は減じるものの、同一プログラムの実行が可能で
ある。従って、本発明によって対故障性が必要な場合は
並列処理システムにおいても、第1の実施例によるマル
チスレッド実行方法が実現できる。
【0057】図13は、本発明の第5の実施例によるマ
ルチスレッド実行方法を実施するための実行装置のブロ
ック図である。この本発明の第5の実施例によるマルチ
スレッド実行方法は請求項5の発明を実施するためのも
のである。
【0058】図13の実行装置は、図3の実行装置と同
様に、スレッド管理部28と、スレッド実行部#0(2
9a)〜#3(29d)と、スレッド実行部間交信バス
30とを有する。スレッド管理部28は、スレッド実行
部#0(29a)〜#3(29d)と接続されている。
スレッド実行部#0(29a)〜#3(29d)はスレ
ッド実行部間交信バス30に共通に接続されている。
【0059】この実行装置は、更に、スレッド管理部2
8とスレッド実行部#0(29a)〜#3(29d)と
に接続されたスレッド情報退避バッファ31を有する。
このスレッド情報退避バッファ31は、一つのスレッド
実行部29(添字削除)が、残りのすべてのスレッド実
行部29でスレッドを実行中の時に、最新子スレッドの
生成命令を実行した場合、この子スレッド起動のために
必要になるスレッド開始アドレス情報やデータを蓄えて
おくためのものである。
【0060】図14の実行装置は、図7の実行装置に対
して、同様のスレッド情報退避バッファ37を追加した
ものである。この図14の実行装置は、、図7の実行装
置と同様に、スレッド管理部#0(32a)〜#3(3
2d)と、スレッド実行部#0(33a)〜#3(33
d)と、スレッド実行部間交信バス34と、親スレッド
情報伝達線35と、子スレッド情報伝達線36とを有す
る。スレッド情報退避バッファ37は、一つのスレッド
実行部33(添字削除)が、残りのすべてのスレッド実
行部33でスレッドを実行中の時に、最新子スレッドの
生成命令を実行した場合、この子スレッド起動のために
必要になるスレッド開始アドレス情報やデータを蓄えて
おくためのものである。
【0061】図15は図13及び図14の実行装置の動
作を説明するためのタイミングチャートである。図15
に示した動作は図2に示した動作と基本的には類似して
いる。図15には、(E)で示されるスレッド情報退避
バッファの状態が追加されている。(D)で示されるス
レッド実行部#3がスレッド#3を実行しており、スレ
ッド#3のスレッド生成命令を実行した時には、
(A)、(B)、及び(C)で示されるスレッド実行部
#0、#1、及び#2ではそれぞれスレッド#0、#
1、及び#2を実行中のため、フリー状態のスレッド実
行部が存在しない。したがって、スレッド管理部28
(或いは32)はスレッド退避バッファ31(或いは3
7)に、子スレッド起動情報を記憶させる。(D)のス
レッド実行部#3はそのままスレッド#3の実行を継続
する。
【0062】(A)で示されるスレッド実行部#0がス
レッド#0の実行を終了すると、フリー状態になる。こ
の時に、スレッド管理部28(或いは32)は、スレッ
ド退避バッファ31(或いは37)から子スレッド起動
情報を取り出し、(A)で示されるスレッド実行部#0
にロードして、子スレッド、すなわちスレッド#4を起
動する。
【0063】このように、本発明によってスレッド数が
並列システムが有するスレッド実行部の数を上回る場合
についても、完全にハードウェアによってスレッド管理
が可能になる。第1の実施例による実行方法に従うこと
により、スレッド退避バッファ31(或いは37)は、
1スレッド分のスレッド起動情報を蓄える容量のみでよ
いため、現実的なスレッド管理が可能である。
【0064】図16は、本発明の第6の実施例によるマ
ルチスレッド実行方法を説明するための図である。この
本発明の第6の実施例によるマルチスレッド実行方法は
請求項6の発明を実施するためのものであり、子スレッ
ドの動作に関する属性を親スレッドの手続きによって指
定するものである。
【0065】図16では属性指定の手続きを特殊命令に
よって行なう例を示している。スレッド#0(38a)
は、スレッド生成命令39によって、子スレッド#1
(38b)を生成する。この子スレッド#1(38b)
を生成するスレッド生成命令39を実行する前に、子ス
レッドの属性を属性指定命令41によって例えばAに指
定することによって、子スレッド#1(38b)はこの
属性Aにしたがった動作を行なうことになる。属性の例
としては、 ・特定メモリアドレスへの参照制限 ・特定資源へのアクセスの優先順位の設定 ・特定命令の実行制限 などがあげられる。
【0066】この属性の解除も親スレッド#0が属性解
除命令42を実行することによって行なわれる、なお、
この属性は子スレッドがさらにフォークした時に引き継
がれる/引き継がれないという指定も親スレッド#0か
ら行なう。また、子スレッド#1からも自分の状態を得
る部分(命令や特殊レジスタの参照)を用意することも
可能である。なお図16において、40はスレッド終了
命令である。
【0067】本発明によって、子スレッドの実行を制限
したスレッド生成が可能になり、スレッドの記述性が向
上し、問題の持っている並列をより利用できるようにな
る。
【0068】図17は、本発明の第7の実施例によるマ
ルチスレッド実行方法を説明するための図である。この
本発明の第7の実施例によるマルチスレッド実行方法は
請求項7の発明を実施するためのものであり、親スレッ
ドの実行状況を待たずに、子スレッドが実行を進めるこ
とを場合によって抑止するための発明である。
【0069】例えば、二次元配列の演算を行なう場合に
行方向の処理と列方向の処理を順に行なう必要が生じる
ことがある。この際には、行方向の処理が終った時点で
すべてのスレッドの同期をとった上で列方向の処理を開
始する必要がある。この場合、第1の実施例で示したマ
ルチスレッドの実行方法の場合は、子スレッド側からは
親スレッドすなわちループの本体の演算部分の終了を検
出できない。そこで、本発明では親スレッドの終了を待
ち合わせる手続きを追加する。図17においては、待ち
合わせの手続きを、親スレッド待ち合わせ命令46とい
う特殊命令によって行なう例を示している。なお、図1
7において、43はスレッド、44はスレッド生成命
令、45はスレッド終了命令である。
【0070】図17において、スレッド#3において、
親スレッド待ち合わせ命令46を実行すると、スレッド
#2が終了するまで、スレッド#3は待ち合わせ状態と
なる。このことにより、ループの並列処理などにおいて
同期をとることが可能になる。例えば、第1の実施例の
説明の際に例示したプログラムにおいては、以下に示す
ように、0x40f060行にpwaitという特殊命
令を挿入することによって、このことを実現をしてい
る。
【0071】 40f040: fork 0x10 <0x40f050> 40f044: addu r4,r14,r18 40f048: jal 0x40e99c <0x40e99c> 40f04c: term 40f050: addiu r17,r17,0x8 40f054: slti r1,r17,0x40 40f058: sll r14,r17,1 40f05c: bne r1,r0,-0x20 <0x40f040> 40f060: pwait 本実施例では親スレッドの終了を待ち合わせたが、その
他に親スレッドの数が命令で定めた数以下になるまで待
ち合わせをする手続きや、親スレッドの実行があるアド
レスに到達するまで待ち合わせる手続きを用意すること
も本発明の範囲内である。
【0072】図18及び図19は、本発明の第8の実施
例によるマルチスレッド実行方法を説明するための図で
ある。この本発明の第8の実施例によるマルチスレッド
実行方法は請求項8の発明を実施するためのものであ
り、スレッド生成時機をより早めることによって、より
多くの並列性を見い出すことを目的としている。即ち、
この方法は、親スレッドの処理がある程度確定するまで
子スレッドを確実に生成することがわからない場合に
は、投機的に子スレットを生成して、その後の親スレッ
ドの処理の進み方によって、仮に生成した子スレッドを
確定させたり、取り消しさせたりする方法である。
【0073】図18は投機が成功する場合を、図19は
投機が失敗する場合を示している。図18において、ス
レッド#0(47a)が、投機的スレッド生成命令49
を実行すると、スレッド#1(47b)が生成され、仮
実行状態でスレッド#1(47b)の実行が開始され、
スレッド#0はスレッド仮生成状態となる。スレッド#
1(47b)の仮実行状態でスレッド生成命令48が実
行されると、それによって生成されるスレッド#2(4
7c)も、スレッド#1(47b)の仮実行属性を引き
継ぎ、仮実行状態で実行される。スレッド#0(47
a)が条件分岐命令53を実行後、この条件分岐によっ
てスレッド生成の投機が正しいと確定すると、投機成功
通知命令51を実行する。これによって、スレッド#1
(47b)、スレッド#2(47c)の仮実行状態が解
除され、スレッド#0(47a)はスレッド生成状態と
なる。
【0074】図19においても同様に実行されるが、条
件分岐命令53が逆方向に分岐し、これによってスレッ
ド生成の投機が不正であると確定する。この時、スレッ
ド#0(47a)は投機失敗通知命令52を実行する。
これによって、スレッド#1(47b)及びスレッド#
2(47c)の実行は取り消される。この投機失敗通知
命令52を実行することにより、スレッド#0(47
a)はスレッド仮生成状態からスレッド未生成状態に戻
り、再びスレッド生成命令48を実行することが可能に
なる。
【0075】なお図18及び図19において、50はス
レッド終了命令である。
【0076】図19のように投機的なスレッド生成に失
敗した時には、投機的な実行による副作用が並列システ
ムで生じないようにする必要がある。そのために共有メ
モリなどへの書き込みは抑制する必要がある。従って、
図20に示すようにスレッド実行部54の中に、プロセ
ッシングユニット55、キャッシュメモリ57の他に、
仮実行待機中はキャッシュメモリ57や、共有メモリ5
8の更新を抑止するための仮実行用バッファ装置56が
必要となる。
【0077】このようなマルチスレッドの実行方法は、
例えば、以下のような誤差が収束するまで反復するよう
なループの演算を行なった際などに有効となる。
【0078】 この場合、演算を行なった時点で子スレッドを投機的に
生成し、次の演算を行なわせつつ、誤差計算結果が収束
条件を満たしている場合には、次の演算を実行している
スレッドを取り消すということが、本マルチスレッド実
行方法で実現可能である。
【0079】図21は本発明の第9の実施例によるマル
チスレッド実行方法を説明するための図である。この本
発明の第9の実施例によるマルチスレッド実行方法は請
求項9の発明を実施するためのものであり、上述した第
6の実施例で示したマルチスレッドの実行方法を実現す
べく、上述した第2の実施例のスレッド管理部(図4)
を拡張したものである。第9の実施例では、引き継ぐ属
性を上述した第8の実施例に示した投機属性として、説
明する。
【0080】図21は、スレッド管理部内のスレッド状
態テーブル59のブロック図である。このスレッド状態
テーブル59は、図4のスレッド状態テーブル5と同様
に、スレッド状態エントリ60と、親スレッド実行部番
号エントリ61と、子スレッド実行部番号エントリ62
とを有する。このスレッド状態テーブル59は、更に、
投機的なスレッド生成に対処するために子スレッド実行
状態エントリ63を有する。子スレッド実行状態エント
リ63は、親スレッドから見て子スレッドの状態をどの
ように設定しているかを示している。したがって、図2
1の例では、スレッド実行部#0の子スレッド実行状態
エントリ63が投機状態にセットされているので、スレ
ッド実行部#1、スレッド実行部#2で実行されている
スレッドは仮実行状態で実行される。これは、図18に
示すようにスレッド#0が投機的スレッド生成命令49
を実行し、スレッド#1が通常のスレッド生成命令48
を実行したことを示している。
【0081】この時、スレッド実行部#2の実行状態は
スレッド実行部#0の子スレッド実行状態エントリ63
とスレッド実行部#1の子スレッド実行状態エントリ6
3の論理和によって投機状態となる。スレット実行部#
0が投機成功通知命令51を実行した時点で、スレッド
実行部#0の子スレッド実行状態エントリ63は確定実
行状態となり、スレッド実行部#1及びスレッド実行部
#2で実行しているスレッドは両者とも仮実行状態から
確定実行状態に遷移する。
【0082】このように、本発明によってスレッド状態
テーブル59によって集中的にスレッド管理を行ない、
子スレッド以下は親スレッドの設定状態の論理和をとる
ことによって、子スレッド以下の状態を容易に決定する
ことが可能になる。
【0083】図22は本発明の第10の実施例によるマ
ルチスレッド実行方法を説明するための図である。この
本発明の第10の実施例によるマルチスレッド実行方法
は請求項10の発明を実施するためのものであり、上述
した第6の実施例で示したマルチスレッドの実行方法を
実現すべく、上述した第3の実施例のスレッド管理部
(図7及び図8)を拡張したものである。第10の実施
例では、引き継ぐ属性を上述した第8の実施例に示した
投機属性として、説明する。
【0084】図22は、スレッド管理部#1のブロック
図である。このスレッド管理部#1は、図8のスレッド
管理部#1と同様に、スレッド管理シーケンサ64と、
スレッド状態テーブル65と、親スレッド情報伝達線7
0と、子スレッド情報伝達線71とを有する。スレッド
状態テーブル65は、図8のスレッド状態テーブル19
と同様に、スレッド状態エントリ66と、親スレッド識
別エントリ67と、親スレッド終了判定論理部68とを
有する。
【0085】図22のスレッド管理部#1は、更に、子
スレッド状態設定情報伝達線72を有する。この子スレ
ッド状態設定情報伝達線72は、親スレッド情報伝達線
70と同一の方向の単方向の情報伝達線である。また、
図22のスレッド管理部#1のスレッド状態テーブル6
5は、更に、子スレッド実行状態エントリ69を有す
る。
【0086】スレッド管理部#1において実行されるス
レッドの状態はスレッド管理部#0からの子スレッド状
態設定情報伝達線72の入力によって決定される。ま
た、スレッド管理部#2への子スレッド状態設定情報伝
達線72の出力は、自分が最古親スレッドであること
が、親スレッド識別エントリ67で示されていない場合
には、スレッド管理部#0からの子スレッド状態設定情
報伝達線72の入力と子スレッド実行状態エントリ69
の値の論理和によって生成される。自分が最古親スレッ
ドであることが、親スレッド識別エントリ67で示され
ている場合には、子スレッド実行状態エントリ69の値
がそのまま出力される。
【0087】図18及び図19で説明した投機的スレッ
ド生成命令49で、子スレッドを生成した場合には、そ
のスレッド管理部の子スレッド実行状態エントリ69を
投機状態にセットする。このことによって、本スレッド
以降に生成されるスレッドはすべて仮実行状態になり、
本スレッドが投機成功命令51を実行するまでこの仮状
態が続くことになる。
【0088】本発明によって、第3の実施例の利点を活
かしたまま、第8の実施例で示した投機的なスレッド生
成が実現可能となる。
【0089】なお、上述した第9の実施例及び第10の
実施例において、スレッド実行部にはスレッド実行を取
り消す機能が必要である。また、投機失敗通知命令52
(図19)によってスレッド実行が取り消された場合に
は、スレッド状態エントリ60(図21)及び66(図
22)をフォーク後状態からフォーク前状態に戻す必要
がある。また、本実施例では、第8の実施例の属性を継
承することについて示したが、他の親スレッド属性を子
スレッドに引く継ぐことも同様に可能である。
【0090】
【発明の効果】以上説明したように本発明によれば、ス
レッド生成、終了を順序つけ、スレッド生成を高々1回
に規定することによって、スレッド管理の大幅な簡略化
が可能となり、現実的なハードウェア規模でスレッド管
理部のハードウェア化が可能となった。この結果、スレ
ッド管理のコストが大幅に減少し、細粒度スレッドによ
る並列化に対しても大きな性能向上が期待できる。ま
た、スレッドの生成を投機的に行なうことにより、問題
の持つ並列性が限られる場合にも、性能向上が可能とな
った。
【図面の簡単な説明】
【図1】本発明の第1の実施例によるマルチスレッドの
実行方法を説明するための図である。
【図2】図1のマルチスレッドの実行方法の動作を説明
するためのタイミングチャートである。
【図3】本発明の第2の実施例によるマルチスレッドの
実行方法を実施するための実行装置のブロック図であ
る。
【図4】図3の実行装置のスレッド管理部のブロック図
である。
【図5】図4のスレッド管理部のスレッド管理シーケン
サのスレッド生成時の動作を説明するためのフローチャ
ートである。
【図6】図4のスレッド管理部のスレッド管理シーケン
サのスレッド終了時の動作を説明するためのフローチャ
ートである。
【図7】本発明の第3の実施例によるマルチスレッドの
実行方法を実施するための実行装置のブロック図であ
る。
【図8】図7の実行装置のスレッド管理部のブロック図
である。
【図9】図8のスレッド管理部の親スレッド終了判定論
理部の動作を説明するためのタイミングチャートであ
る。
【図10】図8のスレッド管理シーケンサのスレッド生
成時の動作を説明するためのフローチャートである。
【図11】図8のスレッド管理シーケンサのスレッド終
了時の動作を説明するためのフローチャートである。
【図12】本発明の第4の実施例によるマルチスレッド
の実行方法を実施するための実行装置のブロック図であ
る。
【図13】本発明の第5の実施例によるマルチスレッド
の実行方法を実施するための実行装置のブロック図であ
る。
【図14】本発明の第5の実施例によるマルチスレッド
の実行方法を実施するためのもう一つの実行装置のブロ
ック図である。
【図15】図13及び図14の実行装置の動作を説明す
るためのタイミングチャートである。
【図16】本発明の第6の実施例によるマルチスレッド
の実行方法を説明するための図である。
【図17】本発明の第7の実施例によるマルチスレッド
の実行方法を説明するための図である。
【図18】本発明の第8の実施例によるマルチスレッド
の実行方法の投機成功時の動作を説明するための図であ
る。
【図19】本発明の第8の実施例によるマルチスレッド
の実行方法の投機失敗時の動作を説明するための図であ
る。
【図20】本発明の第8の実施例によるマルチスレッド
の実行方法を実行する実行装置のスレッド実行部のブロ
ック図である。
【図21】本発明の第9の実施例によるマルチスレッド
の実行方法を実行する実行装置ののスレッド状態テーブ
ルのブロック図である。
【図22】本発明の第10の実施例によるマルチスレッ
ドの実行方法を実行する実行装置のスレッド管理部のブ
ロック図である。
【図23】従来のマルチスカラー・プロセッサのブロッ
ク図である。
【図24】従来のSPSMアーキテクチャにおけるスレ
ッド実行方法を説明するための図である。
【符号の説明】
2 スレッド生成命令 3 スレッド終了命令 4 データ依存関係 5 スレッド管理部 6(添字削除) スレッド実行部 7 スレッド実行部間交信バス 8 スレッド管理シーケンサ 9 スレッド状態テーブル 10 スレッド状態エントリ 11 親スレッド実行部番号エントリ 12 子スレッド実行部番号エントリ 13(添字削除) スレッド管理部 14(添字削除) スレッド実行部 15 スレッド実行部間交信バス 16 親スレッド情報伝達線 17 子スレッド情報伝達線 18 スレッド管理シーケンサ 19 スレッド状態テーブル 20 スレッド状態エントリ 21 親スレッド識別エントリ 22 親スレッド終了判定論理部 23(添字削除) スレッド管理部 24(添字削除) スレッド実行部 25 スレッド実行部間交信バス 26 親スレッド情報伝達線 27 子スレッド情報伝達線 28 スレッド管理部 29(添字削除) スレッド実行部 30 スレッド実行部間交信バス 31 スレッド情報退避バッファ 32(添字削除) スレッド管理部 33(添字削除) スレッド実行部 34 スレッド実行部間交信バス 35 親スレッド情報伝達線 36 子スレッド情報伝達線 37 スレッド情報退避バッファ 39 スレッド生成命令 40 スレッド終了命令 41 属性指定命令 42 属性解除命令 44 スレッド生成命令 45 スレッド終了命令 46 親スレッド待ち合わせ命令 48 スレッド生成命令 49 投機的スレッド生成命令 50 スレッド終了命令 51 投機成功通知命令 52 投機失敗通知命令 53 条件分岐命令 59 スレッド状態テーブル 60 スレッド状態エントリ 61 親スレッド実行部番号エントリ 62 子スレッド実行部番号エントリ 63 子スレッド実行状態エントリ 64 スレッド管理シーケンサ 65 スレッド状態テーブル 66 スレッド状態エントリ 67 親スレッド識別エントリ 68 親スレッド終了判定論理部 69 子スレッド実行状態エントリ 70 親スレッド情報伝達線 71 子スレッド情報伝達線 72 子スレッド状態設定情報伝達線

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 複数のスレッドを並列に実行する複数の
    スレッド実行部を用意し、 前記複数のスレッド実行部の一つに、スレッド生成手続
    き及びスレッド終了手続きを含む親スレッドを供給し、
    前記複数のスレッド実行部の前記一つに前記親スレッド
    の前記スレッド生成手続きを実行させて、スレッド生成
    手続き及びスレッド終了手続きを含む子スレッドを生成
    させ、その後、前記複数のスレッド実行部の前記一つ
    に、前記親スレッドの前記スレッド終了手続きを実行さ
    せて、前記親スレッドを終了させ、 前記子スレッドを前記複数のスレッド実行部の異なる一
    つに供給し、前記複数のスレッド実行部の前記異なる一
    つに前記子スレッドを前記親スレッドとして実行させる
    スレッド実行方法であって、 前記複数のスレッド実行部の各々に前記スレッド生成手
    続きを実行させる回数を、前記親スレッド及び前記子ス
    レッドの各々に対して高々1回に規定する規定と、前記
    子スレッドは前記親スレッドが生存中の間は終了できな
    いという規定とを設けることによって、スレッドの生成
    順序及び消滅順序を一意に定め、 前記親スレッド及び前記子スレッド間のデータ依存関係
    を親スレッドから子スレッド方向へ限定することを特徴
    とするスレッド実行方法。
  2. 【請求項2】 前記複数のスレッド実行部に加え、スレ
    ッド実行部の状態を管理する共有のスレッド管理部を用
    意し、そのスレッド管理部において、スレッド実行部の
    状態とスレッドの親子関係情報を保持し、 子スレッドの生成および親スレッドの終了を行なう場合
    に、スレッド実行部から子スレッド生成処理要求および
    スレッド終了処理要求をスレッド管理部に送信し、 スレッド管理部は要求を行なったスレッド実行部が、前
    記規定を満たすことを調べ、 前記規定が満たされている場合には、スレッド生成処理
    もしくは終了処理を要求したスレッド実行部に対して指
    示し、 スレッド管理部の持つ内部情報を更新することを特徴と
    する請求項1に記載のスレッド実行方法。
  3. 【請求項3】 前記複数のスレッド実行部の各々にスレ
    ッド管理部を設け、このスレッド管理部の間をリング状
    に結合する情報伝達線を設け、この情報伝達線によって
    スレッドの親子関係情報及びスレッドの実行状況の情報
    を隣接スレッドに伝達し、 前記複数のスレッド実行部の各々が子スレッドの生成を
    行なう際には、規定の方向の隣接スレッド実行部が、待
    機状態にある場合には、子スレッド生成を隣接スレッド
    実行部に依頼し、実行状態にある場合には、スレッド生
    成を待機状態になるまで遅延し、 前記複数のスレッド実行部の各々がスレッドの終了を行
    なう場合には、自スレッドに対する親スレッド終了を確
    認して後い、スレッドを終了することを特徴とする請求
    項1に記載のスレッド実行方法。
  4. 【請求項4】 スレッド実行部もしくはスレッド管理部
    に処理上の不都合が生じた場合には、情報伝達線をスレ
    ッド管理部を通さずに両隣接スレッド管理部に接続する
    ことによってシステムの冗長性を向上させたことを特徴
    とする請求項3に記載のスレッド実行方法。
  5. 【請求項5】 スレッド生成に必要なプログラムカウン
    タの値や親スレッド番号、親スレッドから継承する情報
    をスレッド情報として蓄えるスレッドバッファ部を一つ
    設け、 スレッドバッファ部はスレッド管理部及びスレッド実行
    部と、情報を交換する手段を具備し、 待機状態であるスレッド実行部がシステム中に存在しな
    い場合には、スレッドバッファに対して必要な情報を送
    り、 スレッド実行部で実行していたスレッドが終了し、待機
    状態になった場合に、スレッドバッファ部にスレッド情
    報が存在する場合には、スレッドバッファ部に格納され
    ていたスレッドを起動することを特徴とする請求項2〜
    4のいづれかに記載のスレッド実行方法。
  6. 【請求項6】 親スレッドが子スレッドを生成する前
    に、親スレッド側の手続きによって子スレッドの実行上
    の属性を設定し、 その後生成された子スレッドは、その属性にしたがった
    動作を行ない、 スレッド生成後に親スレッドは別の手続きによって子ス
    レッドの実行上の属性を変更することを特徴とする請求
    項1に記載のスレッド実行方法。
  7. 【請求項7】 子スレッド側で親スレッドの実行を待ち
    合わせる手続きを用意し、手続き実行後は親スレッドが
    規定の状態に達するまで、子スレッドの実行を中断する
    ことを特徴とする請求項1および請求項6のいづれかに
    記載のスレッド実行方法。
  8. 【請求項8】 親スレッドがプログラム実行上の正当性
    が確定する前に、子スレッド生成の投機的に生成するた
    めの特殊手続きと、正当性が確認された後にその結果を
    子スレッドに伝えるための特殊手続きと、不当な生成で
    ある場合に子スレッドの実行を取り消すための特殊手続
    きを加え、 また、スレッド実行部に、実行に伴う作用を取り消すた
    めの機構を加え、この機構の許容する範囲内でスレッド
    の仮実行を行ない、 親スレッドのスレッド実行部が子スレッドの実行が正当
    であるという特殊手続きを実行すると、その情報が子ス
    レッドを実行しているスレッド実行部に伝えられ、子ス
    レッド実行部は通常の実行状態に遷移し、 親スレッドのスレッド実行部がスレッド実行取消手続き
    を実行すると、その情報が子スレッドを実行しているス
    レッド実行部に伝えられ、子スレッドの実行を取り消す
    機能を備え、 さらに、親スレッドのスレッド実行部がスレッド実行取
    消手続きを実行した場合には、スレッド生成を行なって
    いないという状態に戻すことを特徴とする請求項1、
    6、及び7のいづれかに記載のスレッド実行方法。
  9. 【請求項9】 請求項2に記載のスレッド実行方法にお
    いて、親スレッドで指定した子スレッドの属性を保持し
    ておく手段を備え、子スレッドの状態は本部の値の論理
    和をとることによって決定し、 このスレッド管理部を用いることによって、各スレッド
    実行部の実行状態を遷移させて、請求項6に記載のスレ
    ッド実行方法を実現することを特徴とするスレッド実行
    方法。
  10. 【請求項10】 請求項3に記載のスレッド実行方法に
    おいて、親スレッドが設定する子スレッドの実行情報
    を、リング上に結合する情報伝達線で子スレッドを実行
    するスレッド実行部に伝達し、 親スレッドからの状態と次スレッドによる子スレッドの
    設定の論理和をさらに子スレッドに伝え、 それらの論理和によって自スレッドの状態を決定するこ
    とを特徴とするスレッド実行方法。
JP8183533A 1996-07-12 1996-07-12 スレッド実行方法 Expired - Fee Related JP2882475B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP8183533A JP2882475B2 (ja) 1996-07-12 1996-07-12 スレッド実行方法
US08/888,590 US6389446B1 (en) 1996-07-12 1997-06-30 Multi-processor system executing a plurality of threads simultaneously and an execution method therefor
US10/114,075 US6961935B2 (en) 1996-07-12 2002-04-03 Multi-processor system executing a plurality of threads simultaneously and an execution method therefor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8183533A JP2882475B2 (ja) 1996-07-12 1996-07-12 スレッド実行方法

Publications (2)

Publication Number Publication Date
JPH1027108A true JPH1027108A (ja) 1998-01-27
JP2882475B2 JP2882475B2 (ja) 1999-04-12

Family

ID=16137503

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8183533A Expired - Fee Related JP2882475B2 (ja) 1996-07-12 1996-07-12 スレッド実行方法

Country Status (2)

Country Link
US (2) US6389446B1 (ja)
JP (1) JP2882475B2 (ja)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6907517B2 (en) 2001-07-12 2005-06-14 Nec Corporation Interprocessor register succession method and device therefor
US6950908B2 (en) 2001-07-12 2005-09-27 Nec Corporation Speculative cache memory control method and multi-processor system
US7082601B2 (en) 2001-07-18 2006-07-25 Nec Corporation Multi-thread execution method and parallel processor system
JP2006518077A (ja) * 2003-02-13 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド 臨界領域を投機的に実行することによりロックを回避するための方法および装置
US7134124B2 (en) 2001-07-12 2006-11-07 Nec Corporation Thread ending method and device and parallel processor system
JP2007018521A (ja) * 1998-07-28 2007-01-25 Fujitsu Services Ltd データ処理装置および方法
US7243345B2 (en) 2001-07-12 2007-07-10 Nec Corporation Multi-thread executing method and parallel processing system
US7281250B2 (en) 2001-07-12 2007-10-09 Nec Corporation Multi-thread execution method and parallel processor system
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
US7530069B2 (en) 2004-06-30 2009-05-05 Nec Corporation Program parallelizing apparatus, program parallelizing method, and program parallelizing program
US7533375B2 (en) 2003-03-31 2009-05-12 Nec Corporation Program parallelization device, program parallelization method, and program parallelization program
JPWO2008072334A1 (ja) * 2006-12-14 2010-03-25 富士通株式会社 コンパイル方法及びコンパイラ
CN104011682A (zh) * 2011-10-26 2014-08-27 欧特克公司 应用级推测性处理

Families Citing this family (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2882475B2 (ja) * 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
DE19802364A1 (de) * 1998-01-22 1999-07-29 Siemens Ag Vorrichtung und Verfahren zur Steuerung von Prozessen auf einem Computersystem
US6622155B1 (en) * 1998-11-24 2003-09-16 Sun Microsystems, Inc. Distributed monitor concurrency control
US6999994B1 (en) * 1999-07-01 2006-02-14 International Business Machines Corporation Hardware device for processing the tasks of an algorithm in parallel
US7302430B1 (en) 1999-08-31 2007-11-27 International Business Machines Corporation Workflow management system for generating output material based on customer input
US7028303B2 (en) * 1999-09-17 2006-04-11 International Business Machines Corporation Method, system, and program for processing a job in an event driven workflow environment
US7171373B2 (en) * 1999-10-21 2007-01-30 International Business Machines Corporation Database driven workflow management system for generating output material based on customer input
US7518993B1 (en) * 1999-11-19 2009-04-14 The United States Of America As Represented By The Secretary Of The Navy Prioritizing resource utilization in multi-thread computing system
US7512724B1 (en) * 1999-11-19 2009-03-31 The United States Of America As Represented By The Secretary Of The Navy Multi-thread peripheral processing using dedicated peripheral bus
US7137115B2 (en) * 2000-01-25 2006-11-14 Fujitsu Limited Method for controlling multithreading
US6874027B1 (en) * 2000-04-07 2005-03-29 Network Appliance, Inc. Low-overhead threads in a high-concurrency system
JP2001345863A (ja) * 2000-06-06 2001-12-14 Fujitsu Ltd Ip処理装置
JP3810631B2 (ja) * 2000-11-28 2006-08-16 富士通株式会社 情報処理プログラムを記録した記録媒体
JP3729064B2 (ja) * 2000-11-29 2005-12-21 日本電気株式会社 データ依存関係検出装置
US6928645B2 (en) * 2001-03-30 2005-08-09 Intel Corporation Software-based speculative pre-computation and multithreading
US20020199179A1 (en) * 2001-06-21 2002-12-26 Lavery Daniel M. Method and apparatus for compiler-generated triggering of auxiliary codes
US7496654B2 (en) * 2001-06-29 2009-02-24 Microsoft Corporation Multi-threaded system for activating a process using a script engine and publishing data descriptive of the status of the process
US7383421B2 (en) 2002-12-05 2008-06-03 Brightscale, Inc. Cellular engine for a data processing system
US7243354B1 (en) * 2002-04-08 2007-07-10 3Com Corporation System and method for efficiently processing information in a multithread environment
US7228543B2 (en) * 2003-01-24 2007-06-05 Arm Limited Technique for reaching consistent state in a multi-threaded data processing system
JP2004234123A (ja) * 2003-01-28 2004-08-19 Fujitsu Ltd マルチスレッドコンピュータ
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7472258B2 (en) * 2003-04-21 2008-12-30 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US7373640B1 (en) 2003-07-31 2008-05-13 Network Appliance, Inc. Technique for dynamically restricting thread concurrency without rewriting thread code
US7849297B2 (en) 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7594089B2 (en) * 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7711931B2 (en) * 2003-08-28 2010-05-04 Mips Technologies, Inc. Synchronized storage providing multiple synchronization semantics
US7836450B2 (en) 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7418585B2 (en) * 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
DE602004017879D1 (de) * 2003-08-28 2009-01-02 Mips Tech Inc Integrierter mechanismus zum suspendieren und endznem prozessor
US7376954B2 (en) * 2003-08-28 2008-05-20 Mips Technologies, Inc. Mechanisms for assuring quality of service for programs executing on a multithreaded processor
US7496916B2 (en) * 2003-09-18 2009-02-24 International Business Machines Corporation Service and recovery using multi-flow redundant request processing
US20050198627A1 (en) * 2004-03-08 2005-09-08 Intel Corporation Loop transformation for speculative parallel threads
JP3901182B2 (ja) * 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
JP3901180B2 (ja) * 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
US8166282B2 (en) * 2004-07-21 2012-04-24 Intel Corporation Multi-version register file for multithreading processors with live-in precomputation
US7389297B1 (en) * 2004-09-02 2008-06-17 Sun Microsystems, Inc. Method for exit negotiation with aggregate application descendents
US7937709B2 (en) * 2004-12-29 2011-05-03 Intel Corporation Synchronizing multiple threads efficiently
WO2006074024A2 (en) * 2004-12-30 2006-07-13 Intel Corporation A mechanism for instruction set based thread execution on a plurality of instruction sequencers
US8719819B2 (en) 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
US20060230409A1 (en) * 2005-04-07 2006-10-12 Matteo Frigo Multithreaded processor architecture with implicit granularity adaptation
US8230423B2 (en) * 2005-04-07 2012-07-24 International Business Machines Corporation Multithreaded processor architecture with operational latency hiding
US8332826B2 (en) * 2005-05-26 2012-12-11 United Parcel Service Of America, Inc. Software process monitor
JP5145936B2 (ja) * 2005-06-02 2013-02-20 学校法人慶應義塾 マルチスレッド中央演算装置および同時マルチスレッディング制御方法
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US7546420B1 (en) 2005-09-28 2009-06-09 Sun Microsystems, Inc. Efficient trace cache management during self-modifying code processing
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US8024522B1 (en) * 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US8370576B1 (en) * 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US8051247B1 (en) * 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US8019944B1 (en) * 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US7451293B2 (en) * 2005-10-21 2008-11-11 Brightscale Inc. Array of Boolean logic controlled processing elements with concurrent I/O processing and instruction sequencing
WO2007067562A2 (en) * 2005-12-06 2007-06-14 Boston Circuits, Inc. Methods and apparatus for multi-core processing with dedicated thread management
US8032821B2 (en) * 2006-05-08 2011-10-04 Microsoft Corporation Multi-thread spreadsheet processing with dependency levels
DE112006003917T5 (de) * 2006-05-30 2009-06-04 Intel Corporation, Santa Clara Verfahren, Gerät und System angewendet in einem Cachespeicher-Kohärenzprotokoll
WO2008019528A1 (en) * 2006-08-08 2008-02-21 Intel Corporation Methods and apparatus to optimize computer instruction
US20080059763A1 (en) * 2006-09-01 2008-03-06 Lazar Bivolarski System and method for fine-grain instruction parallelism for increased efficiency of processing compressed multimedia data
US20080055307A1 (en) * 2006-09-01 2008-03-06 Lazar Bivolarski Graphics rendering pipeline
US20080244238A1 (en) * 2006-09-01 2008-10-02 Bogdan Mitu Stream processing accelerator
US20080059467A1 (en) * 2006-09-05 2008-03-06 Lazar Bivolarski Near full motion search algorithm
JP4770664B2 (ja) * 2006-09-20 2011-09-14 株式会社デンソー マイクロプロセッサおよびそれを用いたマイクロコンピュータ
US8010745B1 (en) * 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
JP2008097498A (ja) * 2006-10-16 2008-04-24 Olympus Corp プロセッシング・エレメント、コントロール・ユニット、及びこれらを備える処理システム、分散処理方法
US7975272B2 (en) * 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
JP4957729B2 (ja) * 2007-01-25 2012-06-20 日本電気株式会社 プログラム並列化方法、プログラム並列化装置及びプログラム
CA2677131C (en) 2007-02-06 2014-10-14 Mba Sciences, Inc. A resource tracking method and apparatus
US8621468B2 (en) * 2007-04-26 2013-12-31 Microsoft Corporation Multi core optimizations on a binary using static and run time analysis
JP5088371B2 (ja) * 2007-06-20 2012-12-05 富士通株式会社 情報処理装置と負荷調停制御方法
US10452820B2 (en) * 2007-06-26 2019-10-22 International Business Machines Corporation Thread-based software license management
US20090133022A1 (en) * 2007-11-15 2009-05-21 Karim Faraydon O Multiprocessing apparatus, system and method
US8495636B2 (en) * 2007-12-19 2013-07-23 International Business Machines Corporation Parallelizing single threaded programs by performing look ahead operation on the single threaded program to identify plurality of instruction threads prior to execution
US8544006B2 (en) * 2007-12-19 2013-09-24 International Business Machines Corporation Resolving conflicts by restarting execution of failed discretely executable subcomponent using register and memory values generated by main component after the occurrence of a conflict
JP2010033555A (ja) * 2008-06-30 2010-02-12 Olympus Corp コントロール・ユニット、分散処理システム及び分散処理方法
JP5576605B2 (ja) * 2008-12-25 2014-08-20 パナソニック株式会社 プログラム変換装置およびプログラム変換方法
GB0911099D0 (en) * 2009-06-26 2009-08-12 Codeplay Software Ltd Processing method
US8336056B1 (en) 2009-12-22 2012-12-18 Gadir Omar M A Multi-threaded system for data management
JP5447666B2 (ja) * 2010-06-25 2014-03-19 富士通株式会社 マルチプロセッサシステムおよびスケジューリング方法
JP5354102B2 (ja) * 2010-06-29 2013-11-27 富士通株式会社 マルチコアプロセッサシステム、通信制御方法、および通信制御プログラム
US10228679B2 (en) * 2011-11-11 2019-03-12 Rockwell Automation Technologies, Inc. Control environment command execution
US9229722B2 (en) * 2012-01-31 2016-01-05 International Business Machines Corporation Major branch instructions with transactional memory
US9280398B2 (en) * 2012-01-31 2016-03-08 International Business Machines Corporation Major branch instructions
US9575806B2 (en) 2012-06-29 2017-02-21 Intel Corporation Monitoring accesses of a thread to multiple memory controllers and selecting a thread processor for the thread based on the monitoring
US10599483B1 (en) * 2017-03-01 2020-03-24 Amazon Technologies, Inc. Decentralized task execution bypassing an execution service
US11061681B2 (en) * 2019-07-25 2021-07-13 International Business Machines Corporation Instruction streaming using copy select vector
US11301254B2 (en) * 2019-07-25 2022-04-12 International Business Machines Corporation Instruction streaming using state migration
US11886916B2 (en) 2020-06-30 2024-01-30 Microsoft Technology Licensing, Llc System for adaptive multithreaded recalculation operations

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5729757A (en) * 1985-05-20 1998-03-17 Shekels; Howard D. Super-computer system architectures using status memory to alter program
EP0353819B1 (en) * 1988-08-02 1997-04-09 Koninklijke Philips Electronics N.V. Method and apparatus for synchronizing parallel processors using a fuzzy barrier
US5109486A (en) 1989-01-06 1992-04-28 Motorola, Inc. Distributed computer system with network and resource status monitoring
JPH03156559A (ja) * 1989-11-14 1991-07-04 Nec Corp マルチプロセッサシステムに於ける割込み処理方式
US5404521A (en) 1990-07-31 1995-04-04 Top Level Inc. Opportunistic task threading in a shared-memory, multi-processor computer system
JP2642529B2 (ja) * 1991-04-30 1997-08-20 株式会社東芝 並列プロセッサーの命令分配処理装置
CA2117413C (en) * 1993-07-30 2006-11-21 Neil Geach Herbicidal isoxazole-4-yl-methanone derivatives
JP2684993B2 (ja) * 1994-08-10 1997-12-03 日本電気株式会社 プロセッサシステムとその制御方法
US5812811A (en) * 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
US5867704A (en) * 1995-02-24 1999-02-02 Matsushita Electric Industrial Co., Ltd. Multiprocessor system shaving processor based idle state detection and method of executing tasks in such a multiprocessor system
US5678016A (en) * 1995-08-08 1997-10-14 International Business Machines Corporation Processor and method for managing execution of an instruction which determine subsequent to dispatch if an instruction is subject to serialization
DE19533556C1 (de) * 1995-09-11 1996-12-12 Siemens Ag Dreiphasen-Gleichrichterschaltung
JP2882475B2 (ja) * 1996-07-12 1999-04-12 日本電気株式会社 スレッド実行方法
US5913925A (en) 1996-12-16 1999-06-22 International Business Machines Corporation Method and system for constructing a program including out-of-order threads and processor and method for executing threads out-of-order

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007018521A (ja) * 1998-07-28 2007-01-25 Fujitsu Services Ltd データ処理装置および方法
US7281250B2 (en) 2001-07-12 2007-10-09 Nec Corporation Multi-thread execution method and parallel processor system
US6950908B2 (en) 2001-07-12 2005-09-27 Nec Corporation Speculative cache memory control method and multi-processor system
US6907517B2 (en) 2001-07-12 2005-06-14 Nec Corporation Interprocessor register succession method and device therefor
US7134124B2 (en) 2001-07-12 2006-11-07 Nec Corporation Thread ending method and device and parallel processor system
US7243345B2 (en) 2001-07-12 2007-07-10 Nec Corporation Multi-thread executing method and parallel processing system
US7082601B2 (en) 2001-07-18 2006-07-25 Nec Corporation Multi-thread execution method and parallel processor system
JP2006518077A (ja) * 2003-02-13 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド 臨界領域を投機的に実行することによりロックを回避するための方法および装置
US7533375B2 (en) 2003-03-31 2009-05-12 Nec Corporation Program parallelization device, program parallelization method, and program parallelization program
US7530069B2 (en) 2004-06-30 2009-05-05 Nec Corporation Program parallelizing apparatus, program parallelizing method, and program parallelizing program
JP2008544417A (ja) * 2005-06-29 2008-12-04 インテル コーポレイション キャッシュする方法、装置及びシステム
JPWO2008072334A1 (ja) * 2006-12-14 2010-03-25 富士通株式会社 コンパイル方法及びコンパイラ
CN104011682A (zh) * 2011-10-26 2014-08-27 欧特克公司 应用级推测性处理
CN104011682B (zh) * 2011-10-26 2017-06-09 欧特克公司 对应用事件响应进行推测性处理的方法和计算机系统

Also Published As

Publication number Publication date
JP2882475B2 (ja) 1999-04-12
US6961935B2 (en) 2005-11-01
US6389446B1 (en) 2002-05-14
US20020147760A1 (en) 2002-10-10

Similar Documents

Publication Publication Date Title
JP2882475B2 (ja) スレッド実行方法
JP3139392B2 (ja) 並列処理システム
US8209690B2 (en) System and method for thread handling in multithreaded parallel computing of nested threads
JP3630118B2 (ja) スレッド終了方法及び装置並びに並列プロセッサシステム
JP2866241B2 (ja) コンピュータシステムおよびスケジューリング方法
US6272517B1 (en) Method and apparatus for sharing a time quantum
US7137116B2 (en) Method and system for performing a task on a computer
US20070150895A1 (en) Methods and apparatus for multi-core processing with dedicated thread management
JP2005284749A (ja) 並列処理コンピュータ
JPH1196124A (ja) 並列プロセッサシステム
JP2003030050A (ja) マルチスレッド実行方法及び並列プロセッサシステム
JPH03144847A (ja) マルチプロセッサ・システムおよびそのプロセス同期方法
US5517656A (en) Multicomputer system and method
JP2001142726A (ja) マルチスレッド化コンピュータ環境において、複数のプロセスに渡りコミュニケータを設定する方法およびシステム
JP2009151645A (ja) 並列処理装置及びプログラム並列化装置
Sakai et al. Super-threading: Architectural and software mechanisms for optimizing parallel computation
JP2000047887A (ja) 投機的マルチスレッド処理方法および投機的マルチスレッド処理装置
JP3546694B2 (ja) マルチスレッド計算機システム及びマルチスレッド実行制御方法
Al-Bayati et al. Partitioning and selection of data consistency mechanisms for multicore real-time systems
JP2006085428A (ja) 並列処理システム、インタコネクションネットワーク、ノード及びネットワーク制御プログラム
Michael et al. Relative performance of preemption-safe locking and non-blocking synchronization on multiprogrammed shared memory multiprocessors
JP7346649B2 (ja) 同期制御システムおよび同期制御方法
Liu et al. Lock-free scheduling of logical processes in parallel simulation
Fukuoka et al. An efficient inter-node communication system with lightweight-thread scheduling
Torquati et al. Reducing message latency and CPU utilization in the CAF actor framework

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19990106

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080205

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090205

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100205

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100205

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110205

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110205

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120205

Year of fee payment: 13

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120205

Year of fee payment: 13

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130205

Year of fee payment: 14

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130205

Year of fee payment: 14

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140205

Year of fee payment: 15

LAPS Cancellation because of no payment of annual fees