JP2005284749A - 並列処理コンピュータ - Google Patents
並列処理コンピュータ Download PDFInfo
- Publication number
- JP2005284749A JP2005284749A JP2004098213A JP2004098213A JP2005284749A JP 2005284749 A JP2005284749 A JP 2005284749A JP 2004098213 A JP2004098213 A JP 2004098213A JP 2004098213 A JP2004098213 A JP 2004098213A JP 2005284749 A JP2005284749 A JP 2005284749A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- execution
- parallel processing
- processing computer
- instance
- 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
Links
- 230000004913 activation Effects 0.000 claims abstract description 47
- 238000012545 processing Methods 0.000 claims description 133
- 230000007246 mechanism Effects 0.000 claims description 12
- 230000007423 decrease Effects 0.000 claims description 6
- 230000001360 synchronised effect Effects 0.000 claims description 6
- 230000008878 coupling Effects 0.000 claims description 2
- 238000010168 coupling process Methods 0.000 claims description 2
- 238000005859 coupling reaction Methods 0.000 claims description 2
- 230000003213 activating effect Effects 0.000 claims 1
- 230000036316 preload Effects 0.000 abstract description 4
- 238000000034 method Methods 0.000 description 70
- 230000006870 function Effects 0.000 description 38
- 238000010586 diagram Methods 0.000 description 24
- 230000008569 process Effects 0.000 description 15
- 238000012546 transfer Methods 0.000 description 14
- 238000007726 management method Methods 0.000 description 13
- 230000008901 benefit Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000002716 delivery method Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Multi Processors (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】実行環境切換の負荷の発生しない並列処理コンピュータを提供する。
【解決手段】排他的に実行可能なスレッドを実行待ちキューに入れるスレッド起動制御部、及び、複数のスレッド実行ユニットと、複数のレジスタを持つ複数のレジスタファイルと、前記実行待ちキューの実行待ちスレッドが実行される前に、空きレジスタファイルを割り付ける先行ロードユニットと、前記スレッド演算ユニットのうちアイドル状態のものがある場合、前記実行待ちスレッドを取り出し、前記アイドル状態のスレッド演算ユニットに割り付け、前記レジスタファイルを前記アイドル状態のスレッド演算ユニットに結合して並列に実行させるスレッド演算ユニット割り付け・起動ユニットとを含むスレッド実行制御部を備える。
【選択図】図1
【解決手段】排他的に実行可能なスレッドを実行待ちキューに入れるスレッド起動制御部、及び、複数のスレッド実行ユニットと、複数のレジスタを持つ複数のレジスタファイルと、前記実行待ちキューの実行待ちスレッドが実行される前に、空きレジスタファイルを割り付ける先行ロードユニットと、前記スレッド演算ユニットのうちアイドル状態のものがある場合、前記実行待ちスレッドを取り出し、前記アイドル状態のスレッド演算ユニットに割り付け、前記レジスタファイルを前記アイドル状態のスレッド演算ユニットに結合して並列に実行させるスレッド演算ユニット割り付け・起動ユニットとを含むスレッド実行制御部を備える。
【選択図】図1
Description
本発明は、並列処理コンピュータに関するものであり、より詳細には、複数のスレッドを同時並列に実行する並列処理コンピュータに関するものである。
従来のオンチップ・マルチプロセッサでは、ノイマン型の逐次処理がその主体であるため、複数のプロセッサを内蔵したマルチプロセッサであってもプロセッサ資源数を超えた複数の内部演算処理や外部割り込み(イベント)処理を非同期に行うためには、現在走行中のプログラムの実行を中断(プリエンプト)させてプロセッサの実行環境を切り替えるということが頻発する。この実行環境は、例えば、各プロセスごとに生成されたプロセス制御ブロック(PCB)などの制御ブロックとしてメモリに格納され、実行時にレジスターなどの非常に高速なメモリにロードされるものであるが、この制御ブロックは、各プロセスで使用されるべき、各レジスタの値、再開時に実行すべき命令のアドレス、メモリ管理用情報、及び入出力関連情報など多くの情報を含むものである。従って、このための制御が複雑となり、オーバーヘッドが大きく、プロセッサの稼働率を高く保つことが困難である。また。非同期並列処理を記述するプログラムの構成が複雑となり、効果的な並列処理プログラムの記述が一般に困難である。
現在、このような問題を解決しようとする方式として、複数のスレッドを同時実行させるマルチスレッド実行方式が種々考案されている。その中で、複数のスレッドを命令レベルで混在させて同時に実行させる複数スレッド混在実行(Simultaneous Multithreading;SMT)方式によるマルチプロセッサが提案されている。SMT方式は従来のスーパースカラー・プロセッサ構成法を生かすことができるので開発コストが安くすむという利点がある。しかし、SMTにおけるスレッドのコードは従来の一般的なコードであり、本願発明のような「走りきり排他実行」タイプのスレッドではく、実行中断を回避する仕組みがないため、一般に実行中断が生じる。スレッドの実行中にI/Oやメモリアクセスなどにおいてレイテンシ即ち待ち時間が生じ、そのために後続命令の実行が遅れるような場合にはそのスレッドの実行が中断される。実行中断されたスレッドは、プロセッサ資源が空いた時点で実行が再開(レジューム)される。このとき、実行中断されたスレッドの実行状態を退避し、実行再開するスレッドの状態を回復するという処理が必要となり、基本的にはノイマン型逐次実行プロセッサの場合と同様にスレッド間の実行環境切り替えという問題が避けられない。
実行中断はメモリアクセスや外部との交信などでプロセッサをアイドル状態にしているスレッドに対して行われので、いつ実行が中断されるかはスレッドにとっては見えない(即ち、不意打ちを食らう構造である)。このため、スレッド切り替えの予測が不可能である。アイドル状態のプロセッサに実行待ちスレッドを割り付けるのはスケジューラ(即ちディスパッチャー)の仕事であり、アイドル状態の検出はハードウェア機構に依存する。
また、従来のコンピュータにおいて、割り込み処理の効率化を目指した多くの割り込み処理技術が開示されている。例えば、本発明者の雨宮他による割り込み処理技術が開示されている(特許文献1を参照されたい。)。この従来技術は割り込みを所定数保持しておき一括して割り込み処理する技術であるが、このような割り込み処理技術は、既存のプログラムコードをそのままで稼動できるという利点はがあるが、その構成上、重要な優先度の高い割り込み処理もある程度の時間待たされてしまったり、ハードウェア構成が複雑化したりするなどのデメリットがある。
特開2002−342093(段落0006−0008。図1)
上述したように、従来のコンピュータでは、実行中断の際にプロセッサ環境を切り替えるという操作が避けられないため、以下のようなスレッド切り替えのオーバヘッドが問題となり、プロセッサの稼働率を高く保つことが困難である。
1.いつの実行時点でプリエンプション即ち制御を横取りされるか予測できないので、現実行環境の情報をすべて退避する必要があり、無駄なデータまで退避及び回復の対象となる。
2.演算器とレジスタが固定化されているため、実行中のスレッドが用いているレジスタは実行中断が起こるまでは、他のスレッドで使用することができない。即ち、予測不可能なので実行環境の切り替えを前もってやっておくことができない。
1.いつの実行時点でプリエンプション即ち制御を横取りされるか予測できないので、現実行環境の情報をすべて退避する必要があり、無駄なデータまで退避及び回復の対象となる。
2.演算器とレジスタが固定化されているため、実行中のスレッドが用いているレジスタは実行中断が起こるまでは、他のスレッドで使用することができない。即ち、予測不可能なので実行環境の切り替えを前もってやっておくことができない。
本発明による並列処理コンピュータは、複数のスレッドを同時並列に実行する並列処理コンピュータであって、
排他的に実行可能(即ち、一旦、スレッドが実行を開始すると途中で他のスレッドの処理を待ったり、割り込み処理などで演算器の制御権を失ったりすることなく最後まで走りきることが可能、換言すれば、他の干渉を受けることなく排他的に最後まで完了することが可能)なプログラム断片であるスレッドのそれぞれが実行可能か否かを判定し、実行可能であると判定されたスレッドを実行待ちスレッドとして実行待ちキューに入れる(即ちエンキューする)スレッド起動制御部(TAC)と、
先行ロードユニット、スレッド演算ユニット割り付け・起動ユニット、複数のスレッド演算実行ユニット、及び、複数のレジスタを持つ複数のレジスタファイルを含む、スレッド実行制御部(TEC)と、
を具える並列処理コンピュータであり、
前記先行ロードユニットが、前記実行待ちキューに収容されている前記実行待ちスレッドが実行される前(好適にはキューの先頭部分にスレッドが配置されたとき、或いは先頭の近くに配置されたとき)に、この実行待ちスレッドに対して、前記複数のレジスタファイルのうちの空きレジスタファイルを割り付け、この実行待ちスレッド用の初期データ(即ち、実行環境であり、当該スレッドが開始から終了まで走り切ることができるデータである。)をメモリから前記割り付けたレジスタファイルにロードし、
前記スレッド演算ユニット割り付け・起動ユニットが、前記複数のスレッド演算ユニットのうちアイドル状態のものがある場合、前記実行待ちキューの先頭から前記実行待ちスレッドを取り出し、この実行待ちスレッドを前記アイドル状態の前記スレッド演算ユニットに割り付け、この割り付けられた実行待ちスレッド用の初期データがロードされている前記レジスタファイルを前記アイドル状態の前記スレッド演算ユニットに結合して、この実行待ちスレッドを起動し、前記複数のスレッド演算実行ユニットが、前記起動されたスレッドを同時並列に実行する、
ことを特徴とする。
本発明によれば、演算ユニットの制御を得て実行を開始した各スレッドは、制御を失うことなく最後まで走り切ることができるようになり、そのため途中で実行環境切替の負荷が全く発生しないことになり、コンピュータ全体としての処理能力が顕著に向上する。即ち、各スレッドが排他的に実行可能になるように、各演算ユニットに大容量かつ高速アクセス可能なレジスタファイルをそれぞれ設けて当該スレッドに必要なデータを全てレジスタにロードし、スレッド実行中はレジスタ内のデータのみを使用することによって、実行環境切替の発生を伴うI/O待ちやメモリアクセスを回避することか可能となる。
排他的に実行可能(即ち、一旦、スレッドが実行を開始すると途中で他のスレッドの処理を待ったり、割り込み処理などで演算器の制御権を失ったりすることなく最後まで走りきることが可能、換言すれば、他の干渉を受けることなく排他的に最後まで完了することが可能)なプログラム断片であるスレッドのそれぞれが実行可能か否かを判定し、実行可能であると判定されたスレッドを実行待ちスレッドとして実行待ちキューに入れる(即ちエンキューする)スレッド起動制御部(TAC)と、
先行ロードユニット、スレッド演算ユニット割り付け・起動ユニット、複数のスレッド演算実行ユニット、及び、複数のレジスタを持つ複数のレジスタファイルを含む、スレッド実行制御部(TEC)と、
を具える並列処理コンピュータであり、
前記先行ロードユニットが、前記実行待ちキューに収容されている前記実行待ちスレッドが実行される前(好適にはキューの先頭部分にスレッドが配置されたとき、或いは先頭の近くに配置されたとき)に、この実行待ちスレッドに対して、前記複数のレジスタファイルのうちの空きレジスタファイルを割り付け、この実行待ちスレッド用の初期データ(即ち、実行環境であり、当該スレッドが開始から終了まで走り切ることができるデータである。)をメモリから前記割り付けたレジスタファイルにロードし、
前記スレッド演算ユニット割り付け・起動ユニットが、前記複数のスレッド演算ユニットのうちアイドル状態のものがある場合、前記実行待ちキューの先頭から前記実行待ちスレッドを取り出し、この実行待ちスレッドを前記アイドル状態の前記スレッド演算ユニットに割り付け、この割り付けられた実行待ちスレッド用の初期データがロードされている前記レジスタファイルを前記アイドル状態の前記スレッド演算ユニットに結合して、この実行待ちスレッドを起動し、前記複数のスレッド演算実行ユニットが、前記起動されたスレッドを同時並列に実行する、
ことを特徴とする。
本発明によれば、演算ユニットの制御を得て実行を開始した各スレッドは、制御を失うことなく最後まで走り切ることができるようになり、そのため途中で実行環境切替の負荷が全く発生しないことになり、コンピュータ全体としての処理能力が顕著に向上する。即ち、各スレッドが排他的に実行可能になるように、各演算ユニットに大容量かつ高速アクセス可能なレジスタファイルをそれぞれ設けて当該スレッドに必要なデータを全てレジスタにロードし、スレッド実行中はレジスタ内のデータのみを使用することによって、実行環境切替の発生を伴うI/O待ちやメモリアクセスを回避することか可能となる。
また、本発明による並列処理コンピュータは、
前記複数のスレッド演算ユニットは、それぞれ専用の命令キャッシュに結合され、
前記並列処理コンピュータは、前記実行待ちスレッドが起動される前に当該スレッドのコードを前記メモリから前記命令キャッシュにロードする第1のメモリ管理部をも具える、
ことを特徴とする。
本発明によれば、スレッド起動前に命令コードが必ずキャッシュにロードされているたため、メモリから命令コードを取り出す時間の節約になり、コンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
前記複数のスレッド演算ユニットは、それぞれ専用の命令キャッシュに結合され、
前記並列処理コンピュータは、前記実行待ちスレッドが起動される前に当該スレッドのコードを前記メモリから前記命令キャッシュにロードする第1のメモリ管理部をも具える、
ことを特徴とする。
本発明によれば、スレッド起動前に命令コードが必ずキャッシュにロードされているたため、メモリから命令コードを取り出す時間の節約になり、コンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
さらにまた、本発明による並列処理コンピュータは、
前記並列処理コンピュータがデータキャッシュをも具え、
前記先行ロードユニットは、前記メモリへのアクセスの前に、前記データキャッシュへアクセスし、ヒットした場合はそのデータキャッシュから前記実行用データをロードする、
ことを特徴とする。
本発明によれば、データキャッシュを設けたことによって、先行ロードユニットの処理の円滑化を図ることができ、コンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
前記並列処理コンピュータがデータキャッシュをも具え、
前記先行ロードユニットは、前記メモリへのアクセスの前に、前記データキャッシュへアクセスし、ヒットした場合はそのデータキャッシュから前記実行用データをロードする、
ことを特徴とする。
本発明によれば、データキャッシュを設けたことによって、先行ロードユニットの処理の円滑化を図ることができ、コンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
さらにまた、本発明による並列処理コンピュータは、
前記データキャッシュは複数のバンクを含み、
前記並列処理コンピュータは、
各スレッドを実行するときに、各スレッドに先行するスレッドによって使用された前記データキャッシュのバンクがある場合は、そのバンクを使用するよう制御する第2のメモリ管理部をも具える、
ことを特徴とする。
本発明によれば、実行の局所性を反映したデータキャッシュアクセスが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
前記データキャッシュは複数のバンクを含み、
前記並列処理コンピュータは、
各スレッドを実行するときに、各スレッドに先行するスレッドによって使用された前記データキャッシュのバンクがある場合は、そのバンクを使用するよう制御する第2のメモリ管理部をも具える、
ことを特徴とする。
本発明によれば、実行の局所性を反映したデータキャッシュアクセスが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
さらにまた、本発明による並列処理コンピュータは、
前記スレッド起動制御部は、同期制御メモリを含み、
前記同期制御メモリは各インスタンスごとにブロックを持ち、この各ブロックには各スレッドごとにスレッド起動同期用カウントフィールド及び先行スレッド数が予め収容されている先行スレッド数フィールド(fan-in)が設けられ、
前記スレッド起動制御部は、前記スレッド起動同期用カウントに初期値として先行スレッド数フィールドにセットされた先行スレッド数をセットし、その値を当該スレッドに対する起動通知を受けるたびに1ずつ減少させゼロになったときに実行可能になったと判定する、
ことを特徴とする。
本発明によれば、スレッドの実行順序の制御を簡易かつ効率的に行うことが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
前記スレッド起動制御部は、同期制御メモリを含み、
前記同期制御メモリは各インスタンスごとにブロックを持ち、この各ブロックには各スレッドごとにスレッド起動同期用カウントフィールド及び先行スレッド数が予め収容されている先行スレッド数フィールド(fan-in)が設けられ、
前記スレッド起動制御部は、前記スレッド起動同期用カウントに初期値として先行スレッド数フィールドにセットされた先行スレッド数をセットし、その値を当該スレッドに対する起動通知を受けるたびに1ずつ減少させゼロになったときに実行可能になったと判定する、
ことを特徴とする。
本発明によれば、スレッドの実行順序の制御を簡易かつ効率的に行うことが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
さらにまた、本発明による並列処理コンピュータは、
前記同期制御メモリの各ブロックは、ロック用フラグをも持ち、
前記複数のスレッド演算実行ユニットは、前記ロック用フラグをロックする命令及び前記ロック用フラグをアンロックする命令をサポートする、
ことを特徴とする。
本発明によれば、後述するようなTest-and-lock命令やUnlock命令によって、各スレッドの排他継続を制御し、排他制御を簡易かつ効率的に行うことが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
前記同期制御メモリの各ブロックは、ロック用フラグをも持ち、
前記複数のスレッド演算実行ユニットは、前記ロック用フラグをロックする命令及び前記ロック用フラグをアンロックする命令をサポートする、
ことを特徴とする。
本発明によれば、後述するようなTest-and-lock命令やUnlock命令によって、各スレッドの排他継続を制御し、排他制御を簡易かつ効率的に行うことが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
さらにまた、本発明による並列処理コンピュータは、
さらに、共有資源にアクセスできる排他制御スレッドと、
前記排他制御スレッドへの排他継続を制御する排他継続制御機構と、
前記共有資源への排他アクセスを制御する排他アクセス制御手段と、
を具える、ことを特徴とする。
本発明によれば、I/Oアクセスや外部イベントの処理を伴うような共有資源への排他アクセスを簡易かつ効率的に行うことが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
さらに、共有資源にアクセスできる排他制御スレッドと、
前記排他制御スレッドへの排他継続を制御する排他継続制御機構と、
前記共有資源への排他アクセスを制御する排他アクセス制御手段と、
を具える、ことを特徴とする。
本発明によれば、I/Oアクセスや外部イベントの処理を伴うような共有資源への排他アクセスを簡易かつ効率的に行うことが可能となり、最終的にはコンピュータ全体の処理速度即ちスループットをさらに向上させることができるようになる。
本発明は、従来のプロセスをスレッドとよぶ排他的に実行可能なプログラム断片に細分化し、複数のスレッドを同時並列に走行させて並列処理する並列処理コンピュータの方式である。本方式では、スレッド間の実行の同期を継続概念によって制御し、スレッドレベルで並列実行するプロセッサを1チップで実現する。内部演算処理と割り込みなどの外部イベント処理を全てスレッドで統一し、スレッドレベルの非同期並列実行を可能とする。
本発明は、上記のような従来のオンチップ・マルチプロセッサのもつ問題点を解決し、プロセッサの稼働率を高く保ち、かつ内部演算処理と外部割込み処理を統一的に行う並列処理コンピュータをオンチップで実現する方式に関するものである。
本発明の方式では、スレッドとは他からの干渉を受けずに走りきるプログラム片と定義する。ひとつのプログラムは複数のスレッドで構成される。スレッドの間には実行の順序(半順序)関係が与えられ、この順序に従ってスレッドの実行が制御される。あるスレッドの次に実行されるスレッドをそのスレッドの継続スレッドと、よぶ。またあるスレッドの前に実行されるスレッドを先行スレッドとよぶ。先行スレッドの数をFan−inとよび、継続スレッドの数をFan-outとよぶ。あるスレッドの実行終了時(あるいは実行途中において)継続スレッドを起動するとき、その継続スレッドに対して起動通知が発行される(起動通知はFan-out分だけ発行される)。あるスレッド実行は、そのすべての先行スレッドから起動通知を受け取ったとき(Fan-in分だけの起動通知を受け取ったとき)に可能となる。スレッド間の実行順序は半順序なので、そのすべての先行スレッドからの起動通知を受け取り実行可能となるスレッドは複数個存在し得る。したがって、十分な数の演算ユニットがあればその実行可能なスレッドは同時並列に実行することができる。これをマルチスレッド実行とよぶ。
本発明は、上記のような従来のオンチップ・マルチプロセッサのもつ問題点を解決し、プロセッサの稼働率を高く保ち、かつ内部演算処理と外部割込み処理を統一的に行う並列処理コンピュータをオンチップで実現する方式に関するものである。
本発明の方式では、スレッドとは他からの干渉を受けずに走りきるプログラム片と定義する。ひとつのプログラムは複数のスレッドで構成される。スレッドの間には実行の順序(半順序)関係が与えられ、この順序に従ってスレッドの実行が制御される。あるスレッドの次に実行されるスレッドをそのスレッドの継続スレッドと、よぶ。またあるスレッドの前に実行されるスレッドを先行スレッドとよぶ。先行スレッドの数をFan−inとよび、継続スレッドの数をFan-outとよぶ。あるスレッドの実行終了時(あるいは実行途中において)継続スレッドを起動するとき、その継続スレッドに対して起動通知が発行される(起動通知はFan-out分だけ発行される)。あるスレッド実行は、そのすべての先行スレッドから起動通知を受け取ったとき(Fan-in分だけの起動通知を受け取ったとき)に可能となる。スレッド間の実行順序は半順序なので、そのすべての先行スレッドからの起動通知を受け取り実行可能となるスレッドは複数個存在し得る。したがって、十分な数の演算ユニットがあればその実行可能なスレッドは同時並列に実行することができる。これをマルチスレッド実行とよぶ。
ユーザ記述のプログラムのみならず、外部割込み処理プログラムや通信処理プログラム、OSカーネル・プログラムもすべてスレッドの集合体として与えられる。高級言語で書かれたプログラムはコンパイラによってスレッドに分割され、スレッドの集合体(マルチスレッドとよぶ)として与えられる。
本発明の並列処理コンピュータ(以下、単にプロセッサと称することもある。)は複数個のスレッド演算ユニットと複数個のレジスタファイルを持ち、スレッド集合体として与えられるプログラムをマルチスレッド実行する。個々の演算ユニットには実行可能なスレッドが割り当てられ、割り当てられたスレッドを他からの攪乱を受けずに排他的に逐次実行する。スレッド実行の際にはメモリアクセスは起こさず、すべてレジスタ・アクセスの演算である。このことによりスレッドを高速かつ排他的に実行することができる。スレッドの実行に必要な初期データ(実行環境)はスレッドの実行に先立って使用するレジスタにメモリからあらかじめ読み込んでおく。継続スレッドヘ引き継ぐべきデータ(すなわち実行環境)は継続スレッドヘの起動通知を発行する直前にメモリに書き込む。
本発明の並列処理コンピュータ(以下、単にプロセッサと称することもある。)は複数個のスレッド演算ユニットと複数個のレジスタファイルを持ち、スレッド集合体として与えられるプログラムをマルチスレッド実行する。個々の演算ユニットには実行可能なスレッドが割り当てられ、割り当てられたスレッドを他からの攪乱を受けずに排他的に逐次実行する。スレッド実行の際にはメモリアクセスは起こさず、すべてレジスタ・アクセスの演算である。このことによりスレッドを高速かつ排他的に実行することができる。スレッドの実行に必要な初期データ(実行環境)はスレッドの実行に先立って使用するレジスタにメモリからあらかじめ読み込んでおく。継続スレッドヘ引き継ぐべきデータ(すなわち実行環境)は継続スレッドヘの起動通知を発行する直前にメモリに書き込む。
プロセッサは、個々のスレッドに対して実行可能条件(Fan-in分だけの起動通知の到着)をチェックする起動制御ユニット(TAC:Thread Activation Control Unit)を持つ。TAC内にはまだ起動通知を受けていない先行スレッドの個数を保持する高速の起動制御メモリ(ACM:Activation Control Memory)を内蔵する。また、起動条件が整い(起動通知未受信数=0)実行可能となったスレッドを保持する実行待ちスレッド・キュー(Ready Thread Queue)を持つ。
また、プロセッサは個々の演算ユニットの動作とは独立してメモリ・レジスタ間のデータ転送を行うロード/ストア制御ユニット(LSC:Load/Store Control Unit)を持つ。LSCは、実行待ちキューの先頭部分に移動し実行間近となったスレッドに対して空きレジスタファイルを確保し、その実行環境(データ)をロードする。
レジスタファイルの数は演算ユニットの数より多い(1.5倍〜2倍程度)。また個々のレジスタファイルは従来のプロセッサより多くのレジスタを持つ。これはスレッド実行がレジスタ・アクセスのみで行われるため、スレッド実行のステップ数を多くする(粒度を高くする)ことができるようにするためである。
このマルチスレッド実行によって、演算ユニットは現実行中のスレッド実行が終了すると直ちに実行待ちスレッドが新たに割り当てられ、また同時にそのスレッドの実行環境が整っているレジスタファイルも割り当てられるので、間髪を入れずに次のスレッドを実行することができ演算ユニットの稼働率を高く保つことができる。
また、プロセッサは個々の演算ユニットの動作とは独立してメモリ・レジスタ間のデータ転送を行うロード/ストア制御ユニット(LSC:Load/Store Control Unit)を持つ。LSCは、実行待ちキューの先頭部分に移動し実行間近となったスレッドに対して空きレジスタファイルを確保し、その実行環境(データ)をロードする。
レジスタファイルの数は演算ユニットの数より多い(1.5倍〜2倍程度)。また個々のレジスタファイルは従来のプロセッサより多くのレジスタを持つ。これはスレッド実行がレジスタ・アクセスのみで行われるため、スレッド実行のステップ数を多くする(粒度を高くする)ことができるようにするためである。
このマルチスレッド実行によって、演算ユニットは現実行中のスレッド実行が終了すると直ちに実行待ちスレッドが新たに割り当てられ、また同時にそのスレッドの実行環境が整っているレジスタファイルも割り当てられるので、間髪を入れずに次のスレッドを実行することができ演算ユニットの稼働率を高く保つことができる。
以下に本発明の並列処理コンピュータの特徴を整理して示す。
(1) スレッド間の実行の同期を実行継続概念によって内部演算処理ならびに外部割込み処理をすべてスレッド処理で統一し、スレッドレベルの非同期並列実行を行う。
(2) 複数のスレッド演算ユニットと複数の大容量レジスタファイルをもち、複数のスレッドを同時並列に実行する、
(3) スレッド実行において割り付けられたスレッドは、スレッド演算ユニットとレジスタファイルを占有し、途中で実行中断を起こすことなくスレッド実行が完了するまで走りきる。スレッドの演算はレジスタのみを用いメモリヘのアクセスはない。
(4) スレッド実行に際して、スレッド演算ユニットと大容量レジスタファイルとの結合を動的に行い、スレッド実行が終了するとそのスレッド演算ユニットおよびレジスタファイルを解放する。(スレッド演算ユニットおよびレジスタファイルの半固定割り付け)
(5) スレッド間の実行順序制御を行うためのスレッド同期カウンタを内蔵したスレッド起動制御ユニットを持つ。
(6) 起動条件(同期)が整い実行可能となった実行待ちスレッドを保持するキューをもち、スレッド実行が終了し解放されたスレッド演算ユニットに実行待ちスレッドを割り付ける。
(7) ロード/ストア制御ユニットをもち、実行待ちキューの先頭部分にある実行待ちスレッドに対して、その実行に先立って。空きレジスタファイルを割り付けて実行環境(初期データ)をメインメモリからそのレジスタファイルに読み込む(実行環境の先行設定)。またスレッド実行終了後必要なデータをメインメモリへ書き込む。
(8) 外部割込み処理などにおいて生ずる共有資源への排他アクセス制御機能(臨界領域制御機能)を持つ。
(9) 複数モジュールからなるデータキャッシュをもち、種々のデータキャッシュ・モジュールヘのアクセスをスレッド環境(実行インスタンス)ごとに行う。このことによって、実行の局所性を反映したデータキャッシュアクセスを可能とする。
(10)以上の機能を持つプロセッサを1チップ上に構成する。
(1) スレッド間の実行の同期を実行継続概念によって内部演算処理ならびに外部割込み処理をすべてスレッド処理で統一し、スレッドレベルの非同期並列実行を行う。
(2) 複数のスレッド演算ユニットと複数の大容量レジスタファイルをもち、複数のスレッドを同時並列に実行する、
(3) スレッド実行において割り付けられたスレッドは、スレッド演算ユニットとレジスタファイルを占有し、途中で実行中断を起こすことなくスレッド実行が完了するまで走りきる。スレッドの演算はレジスタのみを用いメモリヘのアクセスはない。
(4) スレッド実行に際して、スレッド演算ユニットと大容量レジスタファイルとの結合を動的に行い、スレッド実行が終了するとそのスレッド演算ユニットおよびレジスタファイルを解放する。(スレッド演算ユニットおよびレジスタファイルの半固定割り付け)
(5) スレッド間の実行順序制御を行うためのスレッド同期カウンタを内蔵したスレッド起動制御ユニットを持つ。
(6) 起動条件(同期)が整い実行可能となった実行待ちスレッドを保持するキューをもち、スレッド実行が終了し解放されたスレッド演算ユニットに実行待ちスレッドを割り付ける。
(7) ロード/ストア制御ユニットをもち、実行待ちキューの先頭部分にある実行待ちスレッドに対して、その実行に先立って。空きレジスタファイルを割り付けて実行環境(初期データ)をメインメモリからそのレジスタファイルに読み込む(実行環境の先行設定)。またスレッド実行終了後必要なデータをメインメモリへ書き込む。
(8) 外部割込み処理などにおいて生ずる共有資源への排他アクセス制御機能(臨界領域制御機能)を持つ。
(9) 複数モジュールからなるデータキャッシュをもち、種々のデータキャッシュ・モジュールヘのアクセスをスレッド環境(実行インスタンス)ごとに行う。このことによって、実行の局所性を反映したデータキャッシュアクセスを可能とする。
(10)以上の機能を持つプロセッサを1チップ上に構成する。
以降、諸図面を参照しつつ、本発明の実施態様を詳細に説明する。
図1は、本発明による、細粒度マルチスレッド実行可能な並列処理コンピュータの一実施態様を示すブロック図である。
本発明による並列処理コンピュータ10は、スレッド起動制御部12(TAC:Thread Activation Control Unit)、スレッド実行制御部14(TEC;Thread Execution Control Unit)、メモリアクセス制御部16(MAC: Memory Access Controller)、およびメインメモリ18(MEM;Main Memory)、入出力制御部20、及び、通信制御部22を具える。TAC12はスレッド間同期管理用の高速メモリACM12a(Activation Control Memory)を持ち、スレッド実行の起動を制御する。TEC14は複数のスレッド演算実行ユニット14a(EU;Execution Unit)と複数のレジスタファイル14b(Register File)をもち、個々のスレッド実行を並列に行う。TAC12とTEC14の間は実行待ちスレッドキュー13(Ready-Thread Queue)を通してつながれ、TAC12は実行可能となったスレッドコードを実行待ちキュー13の後尾に置く。TEC14はキュー13の先頭にある実行待ちスレッドコードを取りだす。各EU14aはそれぞれ命令キャッシュ14cを持ち、実行中のスレッドコードを保持する。また。レジスタファイル群14bとメインメモリ18の間には複数バンクのデータキャッシュ16aを持ち、データアクセスの高速化を図る。メモリアクセス制御部16はメモリ18からレジスタファイル14bヘのデータの読み込み、およびレジスタファイル14bからメモリ18へのデータの書き出しを制御する。また、MAC16は、メモリ管理部16b、ロード/ストア制御ユニット16c、及びDMA制御部16dをも具える。
図1は、本発明による、細粒度マルチスレッド実行可能な並列処理コンピュータの一実施態様を示すブロック図である。
本発明による並列処理コンピュータ10は、スレッド起動制御部12(TAC:Thread Activation Control Unit)、スレッド実行制御部14(TEC;Thread Execution Control Unit)、メモリアクセス制御部16(MAC: Memory Access Controller)、およびメインメモリ18(MEM;Main Memory)、入出力制御部20、及び、通信制御部22を具える。TAC12はスレッド間同期管理用の高速メモリACM12a(Activation Control Memory)を持ち、スレッド実行の起動を制御する。TEC14は複数のスレッド演算実行ユニット14a(EU;Execution Unit)と複数のレジスタファイル14b(Register File)をもち、個々のスレッド実行を並列に行う。TAC12とTEC14の間は実行待ちスレッドキュー13(Ready-Thread Queue)を通してつながれ、TAC12は実行可能となったスレッドコードを実行待ちキュー13の後尾に置く。TEC14はキュー13の先頭にある実行待ちスレッドコードを取りだす。各EU14aはそれぞれ命令キャッシュ14cを持ち、実行中のスレッドコードを保持する。また。レジスタファイル群14bとメインメモリ18の間には複数バンクのデータキャッシュ16aを持ち、データアクセスの高速化を図る。メモリアクセス制御部16はメモリ18からレジスタファイル14bヘのデータの読み込み、およびレジスタファイル14bからメモリ18へのデータの書き出しを制御する。また、MAC16は、メモリ管理部16b、ロード/ストア制御ユニット16c、及びDMA制御部16dをも具える。
スレッド実行制御部14内の先行ロードユニット14d(Pre−load Unit)は、実行待ちキュー13の実行待ちスレッドコードに対してその実行前にあらかじめ空きレジスタへのデータの読み込みを制御する。また、スレッド実行制御部14は、スレッド演算ユニット(EU)割り付け・起動ユニット14e(これについては後で詳細に述べる。)をも具える。
図2は、マルチスレッドプログラムの構造の一例を示す説明図である。本実施態様では、言語処理系(例えばコンパイラなど)によって既存のプログラムコードが図2のような構造に変換され、プログラムローダによってメモリにロードされているプログラム(これをスレッド化されたプログラム、あるいは単にスレッドプログラム(Threaded-program)であることを前提とする。図2に示すように、プログラムAはスレッドコード(Thread−code)Thread1,…Thread6からなるスレッドプログラム(Thread−program)の例である。このプログラムは実行中のスレッドプログラム・インスタンスから起動され、(このとき、まずこのスレッドプログラム実行のためのインスタンスが生成される。インスタンスについては後で詳細に述べる。)、Thread1が実行される。Thread1の実行中Thread1内の継続命令(continue)が実行されると、起動シグナルがThread1とThread2とThread3に伝わる。Thread2のFan-in値は1なのでThread2は他からの起動シグナルを待つことなく直ちに実行される。Thread2の実行中に継続命令(continue)が実行されその起動シグナルがThread3とThread4に伝わる。Thread3のFan-in値は2なのでThread1とThread3からの起動シグナルの到着によって(同期がとられ)実行が開始される。以下同様にしてThread4とThread5が実行されていく。最後にThread6の実行中に他のスレッドプログラムへの継続命令を発行して、計算がそのスレッドプログラム(のインスタンス)へ引き継がれる。Thread6の実行が終了するとこのスレッドプログラムの実行インスタンスは終了し、このインスタンスは消滅する。ここで、スレッドの起動は起動シグナルによって制御され、並行的な実行となることに注意されたい。
プログラムAは、マッピングされ命令メモリB内に展開されるが、個々のスレッドプログラムのスレッドコードとスレッドコード間のスレッドリンク情報C(先行スレッド・継続スレッド間の関係、Fan-in値、スレッドコードのエントリーアドレス)は、図に示すようにメモリ内では区別して置かれ、個々のスレッドリンク情報はこのプログラム(Treaded-Program)のインスタンス実行が開始されるときにそのインスタンスに対応するACM(Activation Control Memory)ブロックDの各スレッドエントリーフィールドにロードされる。即ち、スレッドリンク情報Cは、インスタンス生成時にACMインスタンスブロックDの各スレッドエントリフィールドに上から順にセットされる。
図3は、本発明による並列処理コンピュータにおけるマルチスレッド実行制御部(TEC)およびメモリアクセス制御部(MAC)の詳細な実施態様を示すブロック図である。TECはn個のスレッド演算実行ユニット30a(EU;Tread Execution Unit)およびm個のレジスタファイル30bからなる。ここで、m>n(たとえばm/n=1.5〜2)である。さらに命令キャッシュ30c(I−Cache)とデータキャッシュ30d(D−Cache)を持つ。I−Cacheは個々のEU毎にもち、D−Cacheは複数ユニットで構成する。実行可能なスレッドコード(具体的にはエントリーアドレス)は実行待ちスレッドキュー32に繋がれている。以下、実行可能なスレッドを実行待ちスレッドとよぶ。EU割り付け・起動ユニット34(EU Allocate and Trigger Unit)はEUのどれかがアイドルになったときキュー32の先頭からスレッドを取り出し、アイドル状態のEU30aをこのスレッドに割り付けて起動する。このとき後述するようにこのスレッドの実行環境(実行に必要なデータ)はすでにいずれかのレジスタファイル30bにロードされているので、そのレジスタファイル30bとEU30aを結合して起動する。
EU30aでのスレッド実行が終了し使用されていたレジスタファイル30bが解放されたとき、先行ロードユニット36(Pre−Load unit)はキュー32中の先頭に近づいている実行待ちスレッドに対応する実行環境データをその開放されたレジスタファイル20bにロードし、いつでもそのスレッドの実行が開始できるように準備する。この先行ロード操作により、アイドルEUが生じたときに即座にそのEUにキュー32先頭の実行待ちスレッドを割り付けて実行を開始することができる。
先行ロードユニット36によるデータのロードおよびスレッド実行後のデータのストアに際しては直接メモリへの読み書きを行う前にデータキャッシュ30d(D−Cache)へのアクセスが行われる(これは通常のメモリへの読み書きにおけるデータキャシュアクセス制御と同じである)。命令キャッシュ30c(I−Cache)へのアクセスについては、実行待ちスレッドのコードがメモリからI−Cacheヘロードされ、以後そのスレッド実行中は命令キャッシュ30cに対して命令コードの読み出しを行う。データキャッシュ30d、命令キャッシュ30c及びメモリへのアクセス制御はロード/ストア制御ユニット38(Load/Store Control Unit)がメモリ管理ユニットMMU40を介して行う。
先行ロードユニット36によるデータのロードおよびスレッド実行後のデータのストアに際しては直接メモリへの読み書きを行う前にデータキャッシュ30d(D−Cache)へのアクセスが行われる(これは通常のメモリへの読み書きにおけるデータキャシュアクセス制御と同じである)。命令キャッシュ30c(I−Cache)へのアクセスについては、実行待ちスレッドのコードがメモリからI−Cacheヘロードされ、以後そのスレッド実行中は命令キャッシュ30cに対して命令コードの読み出しを行う。データキャッシュ30d、命令キャッシュ30c及びメモリへのアクセス制御はロード/ストア制御ユニット38(Load/Store Control Unit)がメモリ管理ユニットMMU40を介して行う。
図4は、本発明による並列処理コンピュータにおける先行スレッドから継続スレッドへの制御移行およびデータ引渡しの機構を示す説明図でる。図に示すように、先行スレッドから継続スレッドヘの制御移行には次の2つの場合がある。
(1)継続スレッドのFan-inが1の場合
この場合は。先行スレッドAで継続命令(continue)が実行され。継続スレッドBへの起動シグナルが発行されたとき、その制御は直ちに継続スレッドBに移行する。具体的には、継続スレッドBのコードエントリー・ポインタを実行待ちキュー(Ready−Thread Queue)に繋ぎこむ。
(2)継続スレッドのFain-inが2以上の場合
図ではFain-inが2の場合について示しているが3以上の場合も同じである。図は、先行スレッドAでの継続命令の実行および外部からのイベントによって、あるいはスレッドAの継続命令実行およびBの継続命令実行によって、スレッドBへの起動シグナルが到着したときにスレッドBの起動条件(同期)が整いスレッドBは実行可能となることを示している。起動条件(同期)のチェックはスレッド起動制御部(TAC)で行われる。
(1)継続スレッドのFan-inが1の場合
この場合は。先行スレッドAで継続命令(continue)が実行され。継続スレッドBへの起動シグナルが発行されたとき、その制御は直ちに継続スレッドBに移行する。具体的には、継続スレッドBのコードエントリー・ポインタを実行待ちキュー(Ready−Thread Queue)に繋ぎこむ。
(2)継続スレッドのFain-inが2以上の場合
図ではFain-inが2の場合について示しているが3以上の場合も同じである。図は、先行スレッドAでの継続命令の実行および外部からのイベントによって、あるいはスレッドAの継続命令実行およびBの継続命令実行によって、スレッドBへの起動シグナルが到着したときにスレッドBの起動条件(同期)が整いスレッドBは実行可能となることを示している。起動条件(同期)のチェックはスレッド起動制御部(TAC)で行われる。
TACに同期制御メモリ(ACM)を設ける。図5は、本発明による並列処理コンピュータにおけるACMの構成例を示すメモリマップ図である。ACMは多数のブロックで構成される。ACMブロックは前述したようにインスタンスが生成されるごとに割り付けられ、そのインスタンスの実行が終了すると解放される。インスタンス割り付けに際して、ACMブロックにはそのインスタンス実行のスレッドプログラム内各スレッドコードのリンク情報(スレッドコードのエントリーアドレスおよびFain-in値)が初期値としてロードされる。
ACMブロックヘのアクセスは[インスタンス+スレッドエントリー]によって行われる。ここで、[インスタンス+スレッドエントリー]はインスタンス番号とスレッド番号を上位・下位フィールドに連結した値を表し、インスタンス番号をACMブロックの先頭アドレス、スレッド番号をそのACMブロック内局所エントリーアドレスとする。ACM内のスレッドエントリーはスレッド番号に対応してACMブロック内の局所アドレスとして与えられる。(スレッド番号はコンパイル時に当該スレッドプログラムを生成するときに決定されていることに注意されたい。)各スレッドエントリーは、排他制御用のロックビット(ロック用フラグ)、スレッド起動のための同期カウント(Sync−count),Fain-in値、スレッドコードエントリー(Code-entry)の各フィールドで構成される。なお、各ACMブロック先頭のBase addressは仮想メモリ管理のためのベースアドレスとして用いられ、当該インスタンス実行時のデータ領域の先頭アドレス(物理アドレス)を保持する。
ACMブロックヘのアクセスは[インスタンス+スレッドエントリー]によって行われる。ここで、[インスタンス+スレッドエントリー]はインスタンス番号とスレッド番号を上位・下位フィールドに連結した値を表し、インスタンス番号をACMブロックの先頭アドレス、スレッド番号をそのACMブロック内局所エントリーアドレスとする。ACM内のスレッドエントリーはスレッド番号に対応してACMブロック内の局所アドレスとして与えられる。(スレッド番号はコンパイル時に当該スレッドプログラムを生成するときに決定されていることに注意されたい。)各スレッドエントリーは、排他制御用のロックビット(ロック用フラグ)、スレッド起動のための同期カウント(Sync−count),Fain-in値、スレッドコードエントリー(Code-entry)の各フィールドで構成される。なお、各ACMブロック先頭のBase addressは仮想メモリ管理のためのベースアドレスとして用いられ、当該インスタンス実行時のデータ領域の先頭アドレス(物理アドレス)を保持する。
図6は、本発明による並列処理コンピュータにおけるTACの動作の一例を示す説明図である。同期カウントは初期値としてスレッドのFan-in値(先行スレッド数)がセットされ、当該スレッドヘの起動シグナルが到着するごとに1減じられる。1減じた際に同期カウント=0となれば、当該スレッドの起動条件が整ったことになり、このスレッドを実行可能スレッドとして実行待ちキュー(Ready-Thread-Queue)につなぎ込む。当核スレッドヘの起動シグナルの発行は、他の(あるいは自)スレッド実行中に継続命令(continue)が実行されたときであり、このときこの継続命令のオペランドとして与えられている継続スレッド(すなわち当惑スレッド)の番号および現実行中のインスタンス番号[Instance + Thread-entry]が(EUからTACに対して)発行される(インスタンス番号は他インスタンスの番号を指定することもできる。)。他インスタンス番号を指定した場合は、処理がそのインスタンスヘ継続することになる。これを受け取ったTACは[Instance + Thread-entry]によってACM内の当該スレッドエントリーの同期カウントを1減じる。なお、自スレッドへ継続するときは当該スレッドの実行を排他制御する必要が生じる場合があるが、このときはロックビットを用いて排他制御する(詳細については後述する)。
図7Aは、本発明による並列処理コンピュータがサポートする継続命令の機能を示す説明図である。
(1)Direct-Continue(直接継続)命令
この命令は継続スレッドのFan-inが1の場合に用いる命令である。
この命令の実行では、継続スレッドに対応するACMブロック内スレッドエントリーから(同期カウントの値は変更せずに)直ちにスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。あるいは、Direct−Continueのオペランドに継続スレッドのコードエントリーを直接埋め込んでおき、ACMブロックへのアクセスを行わずに実行待ちスレッドキューにつなぎこむ(図4ではこの場合を示している)。
(2)Continue(継続)命令
この命令はFan-inが2以上の通常の継続スレッドへ制御移行する場合に用いる命令である。この命令の動作ステップは次のとおりである。
1. 継続スレッドに対応するACMブロック内スレッドエントリーの同期カウントを1減じる。
2. もし同期カウント=0ならば、そのスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。
(1)Direct-Continue(直接継続)命令
この命令は継続スレッドのFan-inが1の場合に用いる命令である。
この命令の実行では、継続スレッドに対応するACMブロック内スレッドエントリーから(同期カウントの値は変更せずに)直ちにスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。あるいは、Direct−Continueのオペランドに継続スレッドのコードエントリーを直接埋め込んでおき、ACMブロックへのアクセスを行わずに実行待ちスレッドキューにつなぎこむ(図4ではこの場合を示している)。
(2)Continue(継続)命令
この命令はFan-inが2以上の通常の継続スレッドへ制御移行する場合に用いる命令である。この命令の動作ステップは次のとおりである。
1. 継続スレッドに対応するACMブロック内スレッドエントリーの同期カウントを1減じる。
2. もし同期カウント=0ならば、そのスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。
図7Bは、本発明による並列処理コンピュータがサポートする継続命令の機能を示す説明図である。
(3)Wait-and-Continue命令
この命令は、排他制御等で臨界領域(Critical Region)やセマフオーの管理に用いる命令である(排他制御の詳細は実施例6で述べる)。この命令の動作ステップは次のとおり。
1.もし、継続スレッドに対応するACMブロック内スレッドエントリーの同期カウント=0ならば同期カウントがfan-in値にリセットされるまでウェイトする(busy wait)
2.同期カウントを1減じる。
3.もし同期カウント=0ならば、そのスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。
(4)Reset-and−Continue命令
この命令も臨界領域(Critical Region)やセマフオーの管理に用いる命令である(排他制御の詳細は後述する)。この命令の動作ステップは次のとおりである。
1.継続スレッドに対応するACMブロック内スレッドエントリーの1ock−bitを0ff(unlocked)にし、同期カウントをfan-in値にリセットする。
2.継続スレッドの同期カウントを1減じる。
3.もし同期カウント=0ならば、そのスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。
(3)Wait-and-Continue命令
この命令は、排他制御等で臨界領域(Critical Region)やセマフオーの管理に用いる命令である(排他制御の詳細は実施例6で述べる)。この命令の動作ステップは次のとおり。
1.もし、継続スレッドに対応するACMブロック内スレッドエントリーの同期カウント=0ならば同期カウントがfan-in値にリセットされるまでウェイトする(busy wait)
2.同期カウントを1減じる。
3.もし同期カウント=0ならば、そのスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。
(4)Reset-and−Continue命令
この命令も臨界領域(Critical Region)やセマフオーの管理に用いる命令である(排他制御の詳細は後述する)。この命令の動作ステップは次のとおりである。
1.継続スレッドに対応するACMブロック内スレッドエントリーの1ock−bitを0ff(unlocked)にし、同期カウントをfan-in値にリセットする。
2.継続スレッドの同期カウントを1減じる。
3.もし同期カウント=0ならば、そのスレッドコードエントリーを実行待ちスレッドキューにつなぎこむ。
図8は、本発明による並列処理コンピュータにおけるスレッド間の制御移行及びデータ引渡しの動作を示す説明図である。これば、ふたつのスレッドThread1およびThread2からThread3へ継続する場合にThread1内のレジスタr5、r7のデータ、およびThread2内のレジスタr5、r6のデータをThread3へ引き渡す例を示している。これらのスレッドはいまインスタンスiで実行されているとすると、インスタンスiに割り付けられているデータ領域にアクセスすることができる。なぜなら、このデータ領域はインスタンス生成時にこのインスタンス実行に必要な領域が確保され、ACMブロックiのベースアドレス値として与えられているからである。Thread1では、レジスタr5およびr7の値をインスタンスiのデータ領域中のxおよびx+1番地にストアする。また、Thread1では、レジスタr5およびr6の値をインスタンスiのデータ領域中のyおよびy+1番地にストアする。Thread3では、同じくインスタンスiのデータ領域中のx、x+1、y、y+1番地からレジスタr1、r2、r3、r4にそれぞれロードする。かくして、Thread1およびThread2からThread3へのデータ引渡しが行なわれる。
次に、本発明における並列処理コンピュータにおける並行プロセス処理機構の一実施態様を示す。これは、複数プロセス(あるいはサブルーチンや関数)を動的に並列処理する機構である。サブルーチンや関数などあるまとまった単位のプログラムコードの実行は一般にプロセスとよばれ、実行される個々のプロセスは特にインスタンスとよばれている。並列処理環境ではプロセス実行の概念は不可欠なものである。たとえば、オペレーティングシステムなど一般の並列処理を実現するためには、同一のプログラムコードを共有しつつ異なる処理データや資源に対して同時並行的な処理ができなければならない、この処理概念は一般に並行プロセスの処理とよばれる。
本発明では、あるまとまったプログラム単位はスレッドプログラムとして扱うので、動的に起動されたプロセス(あるいは関数)をインスタンスとよび、そのプログラム実行のことをインスタンスの実行とよぶ。本方式ではサブルーチンや関数も並列処理の対象とするので、これらの実行も含めて統一してインスタンスとよぶことにする。
あるインスタンスの実行中にそのインスタンスは他のインスタンスを起動する。起動するインスタンスを親インスタンス(あるいはcaller)とよび、起動されたインスタンスを子インスタンス(あるいはcallee)とよぶ、並行インスタンスの処理では、複数のインスタンスが起動され、並行して実行される。このとき実行中のインスタンスは互いに干渉を起こさず独立に実行できなければならない。このため個々のインスタンスの実行環境を区別し、独立に管理することが必要である。実行中のインスタンスは子インスタンスを起動する際、その子インスタンスの実行に先立って、実行環境(作業用のデータエリアなど)を動的に生成し、実行が終了するとその実行環境は消滅する。
あるインスタンスの実行中にそのインスタンスは他のインスタンスを起動する。起動するインスタンスを親インスタンス(あるいはcaller)とよび、起動されたインスタンスを子インスタンス(あるいはcallee)とよぶ、並行インスタンスの処理では、複数のインスタンスが起動され、並行して実行される。このとき実行中のインスタンスは互いに干渉を起こさず独立に実行できなければならない。このため個々のインスタンスの実行環境を区別し、独立に管理することが必要である。実行中のインスタンスは子インスタンスを起動する際、その子インスタンスの実行に先立って、実行環境(作業用のデータエリアなど)を動的に生成し、実行が終了するとその実行環境は消滅する。
このような並行インスタンスの実行を以下のようにして制御する。
ルーチン(あるいは関数)呼び出しの制御
図9は、本発明における並列処理コンピュータがサポートするルーチン(関数)起動のマクロ及び引数の引渡し法を示す説明図である。
まずマクロ命令callを用いて呼び出し制御の概略を説明する。以下では、呼び出すルーチン(あるいは関数)をcaller、呼び出されるルーチン(あるいは関数)をcalleeとよぶ。マクロ命令callはつぎのように与えられる。
Call func,param,curins,cont,retval
パラメータは
func:callee instance + callee function name(注:+記号は連結演算)
param:パラメータスロットアドレス
curins:callerインスタンス
cont:caller側継続スレッド
retval:caller側の戻り値受け取りスロットへのポインタ
ルーチン(あるいは関数)呼び出しの制御
図9は、本発明における並列処理コンピュータがサポートするルーチン(関数)起動のマクロ及び引数の引渡し法を示す説明図である。
まずマクロ命令callを用いて呼び出し制御の概略を説明する。以下では、呼び出すルーチン(あるいは関数)をcaller、呼び出されるルーチン(あるいは関数)をcalleeとよぶ。マクロ命令callはつぎのように与えられる。
Call func,param,curins,cont,retval
パラメータは
func:callee instance + callee function name(注:+記号は連結演算)
param:パラメータスロットアドレス
curins:callerインスタンス
cont:caller側継続スレッド
retval:caller側の戻り値受け取りスロットへのポインタ
(1)callee function nameはcalleeの先頭スレッドのコードアドレスとしてあたえられる。
Funcにはcalleeインスタンスとcallee function nameがパックされている。calleeの実行はこの先頭スレッドより開始される。
(2)引数データはcallee側のデータエリアに書き込まれている。そのアドレスはparameter−slot addressとして与えられ、calleeに引き渡される。
(3)curinsはcallerのインスタンスで、これはcalleeからcallerへの戻りのために用いられる。
(4)Contはcalleeから戻ったときに起動されるスレッドコードのエントリーである。
(5)Retvalはcaller側に用意された戻り値受け取りスロットのアドレス。callee側で戻り値をこのスロットに書き込む。
Funcにはcalleeインスタンスとcallee function nameがパックされている。calleeの実行はこの先頭スレッドより開始される。
(2)引数データはcallee側のデータエリアに書き込まれている。そのアドレスはparameter−slot addressとして与えられ、calleeに引き渡される。
(3)curinsはcallerのインスタンスで、これはcalleeからcallerへの戻りのために用いられる。
(4)Contはcalleeから戻ったときに起動されるスレッドコードのエントリーである。
(5)Retvalはcaller側に用意された戻り値受け取りスロットのアドレス。callee側で戻り値をこのスロットに書き込む。
call命令の動作は次のとおりである。
1.呼ばれ側スレッドプログラムの実行に際して子インスタンスが生成される。インスタンスの生成では、ACMブロックを割り付け、そのスレッドプログラムを構成するスレッドコードの初期値がACMブロックの各スレッドエントリーにロードされる。(各スレッドコードの初期値は実施例1に述べたように、プログラムローダーによってスレッドテーブルに設定されている。)
ハードウェア実現上は、次の操作を行うnew-instance命令(newins)を用意する。
A. ACMの空きブロックを確保し、確保したACMブロックの番号を戻り値として返す(ブロック番号=インスタンス番号)以後、ACMブロックへのアクセスは、その値を利用して行われる。
B. 確保したACMブロックに次の値をセットする。
-Base addressをACMブロックの先頭にセットする。
-各スレッド毎のリンク情報(Fan-in値、スレッドコードエントリーアドレス)を各スレッドエントリーにセットする。
1.呼ばれ側スレッドプログラムの実行に際して子インスタンスが生成される。インスタンスの生成では、ACMブロックを割り付け、そのスレッドプログラムを構成するスレッドコードの初期値がACMブロックの各スレッドエントリーにロードされる。(各スレッドコードの初期値は実施例1に述べたように、プログラムローダーによってスレッドテーブルに設定されている。)
ハードウェア実現上は、次の操作を行うnew-instance命令(newins)を用意する。
A. ACMの空きブロックを確保し、確保したACMブロックの番号を戻り値として返す(ブロック番号=インスタンス番号)以後、ACMブロックへのアクセスは、その値を利用して行われる。
B. 確保したACMブロックに次の値をセットする。
-Base addressをACMブロックの先頭にセットする。
-各スレッド毎のリンク情報(Fan-in値、スレッドコードエントリーアドレス)を各スレッドエントリーにセットする。
2.継続命令(continue)を用いて、現実行インスタンスから生成された子インスタンスへ制御移行する。このとき継続命令のオペランドは新たに生成された子インスタンスのインスタンス番号(callee instance)と子インスタンスが実行するスレッドプログラムの先頭スレッドコードのエントリー(callee function name)によって与えられる(ユーザはこれらをパックしたデータ[callee-instannce + callee-function-name]として任意のレジスタにセットしておく。)なお、子インスタンスに引き渡す引数データは親インスタンス内のプログラム中でストア命令を用いて子インスタンス用のデータエリア(この領域をパラメータスロットアドレスと呼ぶ。)に書き込んでおく。
3.子インスタンス(callee instance)内でスレッドプログラムを実行する。子インスタンス内スレッドコードの実行において、現実行スレッドから継続スレッドへの制御移行は継続命令(continue)によって行う。このときのインスタンスはすべて子インスタンス(callee instance )である。
4.子インスタンスから親インスタンス(caller instance)への制御移行(リターン処理)も継続命令(continue)によって行う。このときインスタンスは子インスタンス(callee instance)から親インスタンス(caller instance)へ変換される。継続スレッドはCall時に引き渡された親インスタンス内の戻り先スレッド(caller side continuation thread)として与えられている。
5.子インスタンスの実行が完了するときに、delete-instance命令(deliens)によって、そのインスタンス(ACMブロック)を解放する。
3.子インスタンス(callee instance)内でスレッドプログラムを実行する。子インスタンス内スレッドコードの実行において、現実行スレッドから継続スレッドへの制御移行は継続命令(continue)によって行う。このときのインスタンスはすべて子インスタンス(callee instance )である。
4.子インスタンスから親インスタンス(caller instance)への制御移行(リターン処理)も継続命令(continue)によって行う。このときインスタンスは子インスタンス(callee instance)から親インスタンス(caller instance)へ変換される。継続スレッドはCall時に引き渡された親インスタンス内の戻り先スレッド(caller side continuation thread)として与えられている。
5.子インスタンスの実行が完了するときに、delete-instance命令(deliens)によって、そのインスタンス(ACMブロック)を解放する。
マクロ命令Callは次のプリミティブ命令を実行することによって実現される。
1.Newins命令の実行
インスタンスを生成する(インスタンス用のACMブロックの割り付け)。
割り付けられたACMブロック番号が指定したレジスタに返される。
2.New−data−area命令の実行
インスタンス用のデータ領域(New instance data area)を割り付ける。
メモリ管理部が新たなデータ領域を確保し、確保されたデータ領域のbase addressが指定したレジスタに返される。
3.Store処理
calleeに引き渡される情報は[caller-instance + caller-side-continuation-thread]とparametersおよびreturn-value-slotのアドレス(retval)である。
[caller-instance + caller-side-continuation-thread]とparametersは割り付けられたデータ領域のparameters slotに書き込まれる。
・retvalのアドレスをparameters slotに書き込む。
・これらの引数情報はあらかじめparameters slotに書き込んでおく。
4.Contiune命令を実行
New instance data areaのparameters addressを引数として、
[callee-instance + callee-function-name(thread name)]に制御を渡す。
1.Newins命令の実行
インスタンスを生成する(インスタンス用のACMブロックの割り付け)。
割り付けられたACMブロック番号が指定したレジスタに返される。
2.New−data−area命令の実行
インスタンス用のデータ領域(New instance data area)を割り付ける。
メモリ管理部が新たなデータ領域を確保し、確保されたデータ領域のbase addressが指定したレジスタに返される。
3.Store処理
calleeに引き渡される情報は[caller-instance + caller-side-continuation-thread]とparametersおよびreturn-value-slotのアドレス(retval)である。
[caller-instance + caller-side-continuation-thread]とparametersは割り付けられたデータ領域のparameters slotに書き込まれる。
・retvalのアドレスをparameters slotに書き込む。
・これらの引数情報はあらかじめparameters slotに書き込んでおく。
4.Contiune命令を実行
New instance data areaのparameters addressを引数として、
[callee-instance + callee-function-name(thread name)]に制御を渡す。
ルーチンあるいは関数からの戻り制御
図10は、本発明における並列処理コンピュータにおけるルーチン(関数)からの戻り制御を示す説明図である。
マクロ命令Returnを用いてcalleeからcallerへの戻りの制御の概略を以下に示す。
マクロ命令: Return retins cont-thread,retval
オペランドは、
retins:caller instance
cont-theread:return thread
retval:return value slot
(1)retins はcallerインスタンスである。呼び側のインスタンス環境へ戻る。
(2)cont−threadは戻り先(caller side)のスレッドのコードエントリーである。
戻り先ではcontで指定されたスレッドが駆動される。
(3)retvalは戻り値を保持する戻り値スロット(return value slot)のアドレスである。
戻り値はcaller側のデータ領域に用意された戻り値スロットに書き込まれる
図10は、本発明における並列処理コンピュータにおけるルーチン(関数)からの戻り制御を示す説明図である。
マクロ命令Returnを用いてcalleeからcallerへの戻りの制御の概略を以下に示す。
マクロ命令: Return retins cont-thread,retval
オペランドは、
retins:caller instance
cont-theread:return thread
retval:return value slot
(1)retins はcallerインスタンスである。呼び側のインスタンス環境へ戻る。
(2)cont−threadは戻り先(caller side)のスレッドのコードエントリーである。
戻り先ではcontで指定されたスレッドが駆動される。
(3)retvalは戻り値を保持する戻り値スロット(return value slot)のアドレスである。
戻り値はcaller側のデータ領域に用意された戻り値スロットに書き込まれる
Return処理は下記のプリミティブ命令で実行する。
I Store命令の実行
戻り値の書き込み処理:ストア命令を用いて、戻り値をcaller側のデータ領域中のreturn value slotに書き込む。
II Continue命令の実行
[caller instance + return thread]に制御移行する。
III Delins命令の実行
Current instanceを解放する。
I Store命令の実行
戻り値の書き込み処理:ストア命令を用いて、戻り値をcaller側のデータ領域中のreturn value slotに書き込む。
II Continue命令の実行
[caller instance + return thread]に制御移行する。
III Delins命令の実行
Current instanceを解放する。
以下に繰り返し実行のプログラム構造とその実行機構の一実施態様を示す。繰り返し実行の操作には次の3通りの方法がある。
1. 関数インスタンスレベル
2. インスタンス内スレッドレベル
3. スレッド内ループ
図11は、本発明による並列処理コンピュータにおける繰り返し実行のプログラムの概念図である。以下、これらの方法について本発明における実現法を説明する。
1.関数インスタンスレベル
これは再帰関数の実行である。本発明の方式では、通常の再帰関数の実行は上述した方法によって、再帰ごとに新たに関数インスタンスを生成して実行することで可能である。しかし、このままでは再帰ごとにインスタンスの生成が必要であり、膨大なインスタンスを消費することになる。(再帰関数の実行では既存のプロセッサにおいてはインスタンスの代わりにスタックが使用されるが、膨大なスタックメモリを消費とするという点で同様の問題が生じる。)
一般に、関数ボディの末尾において再帰呼び出しを起こす末尾再帰関数についてはコンパイラによってループ実行のプログラム構造に変換できることが知られている。ここでは、本発明によって、特にコンパイラによるループ実行プログラム構造に変換することなく、末尾再帰関数を直接ループ実行制御する方法を示す。
図12は、本発明による並列処理コンピュータにおける権限委譲(delegation)実行及びループ実行を示す説明図である。
図の(a)では、はじめにインスタンスiのスレッドth1より再帰関数の起動(そのボディはth0)を行っている。このとき、[i+th2]を引数としてこの関数に引き渡す。(これは、再帰関数からの戻り先をインスタンスiの継続スレッド(th2)とすることを意味している。)関数はインスタンスi1で実行され、関数ボディth0でその末尾において[i+th2]を引数として再帰(自分自身を再度起動)する。このとき、インスタンスi1はもはや不要となるので、直ちに解放される。同様にして、戻り先[i+th2]を順次引き渡しつつ必要な分だけ再帰実行が進み、最後に実行が戻り先[i+th2]に継続する。(このことが権限委譲と名づける所以である。)再帰ごとに生成されたインスタンスはその再帰起動が起こるごとに解放され再利用可能となる。
1. 関数インスタンスレベル
2. インスタンス内スレッドレベル
3. スレッド内ループ
図11は、本発明による並列処理コンピュータにおける繰り返し実行のプログラムの概念図である。以下、これらの方法について本発明における実現法を説明する。
1.関数インスタンスレベル
これは再帰関数の実行である。本発明の方式では、通常の再帰関数の実行は上述した方法によって、再帰ごとに新たに関数インスタンスを生成して実行することで可能である。しかし、このままでは再帰ごとにインスタンスの生成が必要であり、膨大なインスタンスを消費することになる。(再帰関数の実行では既存のプロセッサにおいてはインスタンスの代わりにスタックが使用されるが、膨大なスタックメモリを消費とするという点で同様の問題が生じる。)
一般に、関数ボディの末尾において再帰呼び出しを起こす末尾再帰関数についてはコンパイラによってループ実行のプログラム構造に変換できることが知られている。ここでは、本発明によって、特にコンパイラによるループ実行プログラム構造に変換することなく、末尾再帰関数を直接ループ実行制御する方法を示す。
図12は、本発明による並列処理コンピュータにおける権限委譲(delegation)実行及びループ実行を示す説明図である。
図の(a)では、はじめにインスタンスiのスレッドth1より再帰関数の起動(そのボディはth0)を行っている。このとき、[i+th2]を引数としてこの関数に引き渡す。(これは、再帰関数からの戻り先をインスタンスiの継続スレッド(th2)とすることを意味している。)関数はインスタンスi1で実行され、関数ボディth0でその末尾において[i+th2]を引数として再帰(自分自身を再度起動)する。このとき、インスタンスi1はもはや不要となるので、直ちに解放される。同様にして、戻り先[i+th2]を順次引き渡しつつ必要な分だけ再帰実行が進み、最後に実行が戻り先[i+th2]に継続する。(このことが権限委譲と名づける所以である。)再帰ごとに生成されたインスタンスはその再帰起動が起こるごとに解放され再利用可能となる。
2.インスタンス内スレッドレベル
関数インスタンスレベルにおける権限委譲法は、図12に示すように、最適化を施すことができる。権限委譲法では再起起動ごとに新たにインスタンスを生成していたが、新たなインスタンスを生成する代わりに、起動側のインスタンスiをそのまま使いまわすことにより、新たなインスタンスを生成する必要がなくなる。これは、同一インスタンス内での継続スレッドへの制御移行という構造であり、インスタンス内でのスレッドレベル・ループ実行法である。
関数インスタンスレベルにおける権限委譲法は、図12に示すように、最適化を施すことができる。権限委譲法では再起起動ごとに新たにインスタンスを生成していたが、新たなインスタンスを生成する代わりに、起動側のインスタンスiをそのまま使いまわすことにより、新たなインスタンスを生成する必要がなくなる。これは、同一インスタンス内での継続スレッドへの制御移行という構造であり、インスタンス内でのスレッドレベル・ループ実行法である。
3.スレッド内ループ
図12の(b)に示すように、スレッド内ループはスレッド内にジャンプ命令を置き、ループを実行することである。これは、従来プログラムと同様のループ実行法である。
図12の(b)に示すように、スレッド内ループはスレッド内にジャンプ命令を置き、ループを実行することである。これは、従来プログラムと同様のループ実行法である。
次に、スレッド問の非同期排他実行制御の制御機構の一実施態様を説明する。即ち、オペレーティングシステムなどにおける共有資源の排他制御を実現する機構について説明する。この機構は、実用的な並行処理システムを実現するために不可欠なものである。
前述したインスタンス内スレッドレベルのループ実行ではこのスレッドレベル・ループが、(シングルプロセス内処理のように)ただひとつのインスタンスから起動され他との干渉を起こさないような単純なループ実行の場合は問題ないが、オペレーティングシステムなどにおける共有資源の排他制御(これはいわゆる臨界領域(Critical Region)問題とよばれている)を実現しようとする場合、このスレッドレベル・ループ実行を行うスレッド自体が共有されることになり、このスレッドの排他制御が必要となる。
前述したインスタンス内スレッドレベルのループ実行ではこのスレッドレベル・ループが、(シングルプロセス内処理のように)ただひとつのインスタンスから起動され他との干渉を起こさないような単純なループ実行の場合は問題ないが、オペレーティングシステムなどにおける共有資源の排他制御(これはいわゆる臨界領域(Critical Region)問題とよばれている)を実現しようとする場合、このスレッドレベル・ループ実行を行うスレッド自体が共有されることになり、このスレッドの排他制御が必要となる。
図13は、本発明による並列処理コンピュータにおける排他制御の一実施態様を示す概念図である。スレッドthrad0スレッドレべル・ループを実行する。このインスタンスはシステムの起動時に生成され、以後システムが処理終了するまで、永続的(persistent)に存在し続ける。Thread OのFan-inが2であるとし、ひとつは自分自身からの継続であり、他の一つは並行に実行している複数のインスタンス(中のスレッド)Thread1、Thread2、…、Thread nからの継続であるとする。このとき、Thread1、…、Thread nは排他的にどれかひとつだけにThread Oへの継続を許し、他はThreadOの実行が終わり再帰するまで待たせることになる。このようなことは、例えば、共有メモリヘの読み書き動作(readres−writers)問題、や生産者・消費者(producer−consumer)問題、キュー管理など多くの並行プロセス管理において生じる。
この排他制御を3通りの方法によって実現する。
第1の方法は、実施例3で説明した継続スレッドヘの制御移行の命令(継続命令)のうち、(3)Wait-and−Continue命令と(4)Reset-and-Continue命令を用いる方法である。
第2の方法は、前述したロックビット(Lock−bit)を操作するTest-and-1ock命令およびReset-and-Continue命令を用いる方法である。
第3の方法は、第1の方法と第2の方法を組み合わせる方法である。この方法によりlock区間をできるだけ小さく設定することができる。
第1の方法は、実施例3で説明した継続スレッドヘの制御移行の命令(継続命令)のうち、(3)Wait-and−Continue命令と(4)Reset-and-Continue命令を用いる方法である。
第2の方法は、前述したロックビット(Lock−bit)を操作するTest-and-1ock命令およびReset-and-Continue命令を用いる方法である。
第3の方法は、第1の方法と第2の方法を組み合わせる方法である。この方法によりlock区間をできるだけ小さく設定することができる。
以下3つの方法の詳細を説明するが、その前に、まず、本発明による並列処理コンピュータで実行可能な、即ち本コンピュータでサポートされるTest-and-1ock命令とun1ock命令について説明する。
図14は、本発明による並列処理コンピュータでサポートされるTest-and-1ock命令とun1ock命令の仕様例を示す説明図である。
(1)Test-and-1ock命令
オペランドで指定された継続スレッドに対応するACMブロック内スレッドエントリー[instance + thread-name])のLock-bit(ロック用フラグ)をチェックし、1ock-bitがon(locked)なら1ockが解かれるまで待つ。Lock−bitがoffなら(unlockedなら)直ちに1ock-bitをonにして動作を終了する。
Test-and-1ock命令の仕様として、別の仕様を定めることもできる。別法では、オペランドに任意のregisterを与え、Test-and-1ock命令の動作において、1ock-bitがon(1ocked)のときには待つ代わりに、registerに値0をセットして動作を終了する。Lock−bitがoffのときは直ちに1ock−bitをonにし、registerに1をセットして終了する。この方法では、Test-and-1ock命令の動作中にbusy-waitすることがない。
代わりにプログラム側で、registerの値をチェックすることによってbusy*wait制御をすることになる。
複数のインスタンス・スレッドから排他実行をするスレッドへ継続する場合、それぞれのインスタンス・スレッド中でTest-and-1ock命令を用いることにより、それらの継続要求は排他制御される。
図14は、本発明による並列処理コンピュータでサポートされるTest-and-1ock命令とun1ock命令の仕様例を示す説明図である。
(1)Test-and-1ock命令
オペランドで指定された継続スレッドに対応するACMブロック内スレッドエントリー[instance + thread-name])のLock-bit(ロック用フラグ)をチェックし、1ock-bitがon(locked)なら1ockが解かれるまで待つ。Lock−bitがoffなら(unlockedなら)直ちに1ock-bitをonにして動作を終了する。
Test-and-1ock命令の仕様として、別の仕様を定めることもできる。別法では、オペランドに任意のregisterを与え、Test-and-1ock命令の動作において、1ock-bitがon(1ocked)のときには待つ代わりに、registerに値0をセットして動作を終了する。Lock−bitがoffのときは直ちに1ock−bitをonにし、registerに1をセットして終了する。この方法では、Test-and-1ock命令の動作中にbusy-waitすることがない。
代わりにプログラム側で、registerの値をチェックすることによってbusy*wait制御をすることになる。
複数のインスタンス・スレッドから排他実行をするスレッドへ継続する場合、それぞれのインスタンス・スレッド中でTest-and-1ock命令を用いることにより、それらの継続要求は排他制御される。
(2)unlock命令
オペランドで指定された継続スレッドに対応するACMブロック内スレッドエントリー([instance + thread-name])のLock-bitをoff(unlocked)にする。
なお、Reset-and−Continue命令もLock-bitをoffにすることに注意されたい。
オペランドで指定された継続スレッドに対応するACMブロック内スレッドエントリー([instance + thread-name])のLock-bitをoff(unlocked)にする。
なお、Reset-and−Continue命令もLock-bitをoffにすることに注意されたい。
次に、本発明による並列処理コンピュータでサポートされる上述した諸命令を用いて排他制御を行う具体的な方法を3つ挙げる。
図15は、本発明における並列処理コンピュータにおける第1及び第2の排他制御方法を示す説明図であり、図16は、本発明における並列処理コンピュータにおける第3の排他制御方法を示す説明図である。
第1の排他制御方法
図15の(a)は、インスタンスi、j、kが並行して動作しており(iは永続インスタンスである)、インスタンスjとkがそれぞれthread l、thread2からインスタンスiのthread Oへ継続する状況を示している。このとき、インスタンスiは排他的にしか動作できない臨界領域なので排他制御が必要となる、今jとkがほとんど同時にiに継続しようとし、それぞれWait-and−Continue命令を実行したとする。この命令の実行自体排他的(Atomic操作)なので、どちらかが先に(たとえばjが)ACMブロックにアクセスしその同期カウントを1ずつ減らす。その結果同期カウント=0となれば、スレッドは実行を開始する。このときkは〈すでに同期カウントが0となってしまっているので同期カウントの値がfain-in値にリセットされるまでTAC内で待たされることになる。iのthreadOの実行が終わりReset-and-Continue命令を実行するときに同期カウントの値をfain−inn値にリセットするので、この段階でkの待ちが解かれ、iのthreadOに継続できることになる。
図15は、本発明における並列処理コンピュータにおける第1及び第2の排他制御方法を示す説明図であり、図16は、本発明における並列処理コンピュータにおける第3の排他制御方法を示す説明図である。
第1の排他制御方法
図15の(a)は、インスタンスi、j、kが並行して動作しており(iは永続インスタンスである)、インスタンスjとkがそれぞれthread l、thread2からインスタンスiのthread Oへ継続する状況を示している。このとき、インスタンスiは排他的にしか動作できない臨界領域なので排他制御が必要となる、今jとkがほとんど同時にiに継続しようとし、それぞれWait-and−Continue命令を実行したとする。この命令の実行自体排他的(Atomic操作)なので、どちらかが先に(たとえばjが)ACMブロックにアクセスしその同期カウントを1ずつ減らす。その結果同期カウント=0となれば、スレッドは実行を開始する。このときkは〈すでに同期カウントが0となってしまっているので同期カウントの値がfain-in値にリセットされるまでTAC内で待たされることになる。iのthreadOの実行が終わりReset-and-Continue命令を実行するときに同期カウントの値をfain−inn値にリセットするので、この段階でkの待ちが解かれ、iのthreadOに継続できることになる。
第2の排他制御方法
図15の(b)は、第1の方法の場合と同様、インスタンスi、j、kが並行して動作しており、インスタンスjとkがそれぞれthread l、thread 2からインスタンスiのthread Oへ継続する状況を示している。この図では、Data areaが共有資源として用いられており、インスタンスj、kがそれぞれ処理した結果をxにストアし、インスタンスiのthread 0がxからロードしてそれぞれの結果に処理を施すという状況を表している。このとき、xへのストア操作は排他的でなければならない。そこで、第2の方法ではLock−bit操作によってストアおよびロード操作が行われる領域を臨界領域にしてLockを掛ける。インスタンスjおよびkは、xにストアする前にTest-and−lock命令によって1ock−bitをチェックし、unlockなら直ちに1ockし、Store命令を実行してデータをxにストアし、Continue命令の実行を行ってインスタンスiのthread Oに継続する。いまjのthread1が先に命令をTest-and-1ock命令を実行したとすると、続いてstore r8、xも実行できてr8のデータがxにストアされ、実行がインスタンスiに継続する。一方、インスタンスkのthread 2はTest-and-1ock命令実行において1ock-bitがlockされているので、これがunlockされるまで待たされstore命令も先延ばしとなる。実行がインスタンスjからiに継続するとthread Oは1oad r4、xを実行してxからデータをロードしてインスタンスjの結果を処理する。thread OがRest-and-Continue命令を実行すると、Lock−bitがunlockされる。この結果インスタンスkでの1ock解除待ちが解かれ、Store r5、xの実行によってインスタンスkの結果がxにストアされた後、実行がインスタンスiに継続する。
図15の(b)は、第1の方法の場合と同様、インスタンスi、j、kが並行して動作しており、インスタンスjとkがそれぞれthread l、thread 2からインスタンスiのthread Oへ継続する状況を示している。この図では、Data areaが共有資源として用いられており、インスタンスj、kがそれぞれ処理した結果をxにストアし、インスタンスiのthread 0がxからロードしてそれぞれの結果に処理を施すという状況を表している。このとき、xへのストア操作は排他的でなければならない。そこで、第2の方法ではLock−bit操作によってストアおよびロード操作が行われる領域を臨界領域にしてLockを掛ける。インスタンスjおよびkは、xにストアする前にTest-and−lock命令によって1ock−bitをチェックし、unlockなら直ちに1ockし、Store命令を実行してデータをxにストアし、Continue命令の実行を行ってインスタンスiのthread Oに継続する。いまjのthread1が先に命令をTest-and-1ock命令を実行したとすると、続いてstore r8、xも実行できてr8のデータがxにストアされ、実行がインスタンスiに継続する。一方、インスタンスkのthread 2はTest-and-1ock命令実行において1ock-bitがlockされているので、これがunlockされるまで待たされstore命令も先延ばしとなる。実行がインスタンスjからiに継続するとthread Oは1oad r4、xを実行してxからデータをロードしてインスタンスjの結果を処理する。thread OがRest-and-Continue命令を実行すると、Lock−bitがunlockされる。この結果インスタンスkでの1ock解除待ちが解かれ、Store r5、xの実行によってインスタンスkの結果がxにストアされた後、実行がインスタンスiに継続する。
第3の排他制御方法
第2の方法では臨界領域がTest-and-1ockで1ockされReset-and-Continueで1ockが解かれるまでの区間となる、この方法では1ock区間が長すぎて並列処理の効果がうまく生かされないという場合が生じる。
第3の方法は1ock区間を必要最小限にとどめるという方法である。図16の(c)に示すように、この方法では共有資源へのアクセスを排他制御するのにTest-and-1ock 命令とUnlock命令による1ock-bit操作を用い、インスタンスiへの継続を排他制御するのにWait-and-Continue命令とReset-and-Continue命令を用いる。インスタンスj、k、1では、共有メモリxへのstore命令実行の直前にTest-and-1ock命令を実行して1ockを掛け、インスタンスiでは1ock命令実行直後にUnlock命令を実行して、lockを解除している。またインスタンスj、k、1ではインスタンスiのthreadOへの継続を排他的に行うためにWait-and-Continue命令を実行し、thread Oは自分自身へ継続する際にReset-and-Continue命令を実行して、待ち状態にある継続要求を受けいれる。
第3の方法では共有資源へのlock区間がTest-and-1ock命令とUnkock命令の間に狭められ、臨界領域を必要最小限に押さえることができる、
第2の方法では臨界領域がTest-and-1ockで1ockされReset-and-Continueで1ockが解かれるまでの区間となる、この方法では1ock区間が長すぎて並列処理の効果がうまく生かされないという場合が生じる。
第3の方法は1ock区間を必要最小限にとどめるという方法である。図16の(c)に示すように、この方法では共有資源へのアクセスを排他制御するのにTest-and-1ock 命令とUnlock命令による1ock-bit操作を用い、インスタンスiへの継続を排他制御するのにWait-and-Continue命令とReset-and-Continue命令を用いる。インスタンスj、k、1では、共有メモリxへのstore命令実行の直前にTest-and-1ock命令を実行して1ockを掛け、インスタンスiでは1ock命令実行直後にUnlock命令を実行して、lockを解除している。またインスタンスj、k、1ではインスタンスiのthreadOへの継続を排他的に行うためにWait-and-Continue命令を実行し、thread Oは自分自身へ継続する際にReset-and-Continue命令を実行して、待ち状態にある継続要求を受けいれる。
第3の方法では共有資源へのlock区間がTest-and-1ock命令とUnkock命令の間に狭められ、臨界領域を必要最小限に押さえることができる、
次に、本発明における並列処理コンピュータがサポートするデータキャッシュ方式を説明する。図11は、本発明における並列処理コンピュータがサポートするデータキャッシュ(D-Cache)制御の概念を示す概念図である。図ではD−Cacheが4バンク構成の場合で下3ビットによってバンク・アクセスする状況を示している。
D−Cache制御においては、
(1) 各スレッド演算ユニット(EU)内に、先行スレッドのインスタンスIDおよび現走行インスタンスIDの下(あるいは上nビット)を保持する内部レジスタInSID1、InSID2を設ける。
(2) D−Cacheは複数バンク(2n個)で構成し、それぞれのEUにおけるメモリアクセスに際してInSID1あるいはInSID2の値によって、アクセスすべきD−Cacheバンクを決定する。
D−Cache制御においては、
(1) 各スレッド演算ユニット(EU)内に、先行スレッドのインスタンスIDおよび現走行インスタンスIDの下(あるいは上nビット)を保持する内部レジスタInSID1、InSID2を設ける。
(2) D−Cacheは複数バンク(2n個)で構成し、それぞれのEUにおけるメモリアクセスに際してInSID1あるいはInSID2の値によって、アクセスすべきD−Cacheバンクを決定する。
上述したデータキャッシュ制御をさらに詳細に説明する。
1. 継続スレッドへ制御移行する際に現行のスレッドのインスタンス番号の下(あるいは上)nビットの値(すなわちD−Cashのバンク番号;以下Cache-bank Numberとよぶ)を継続スレッドに渡す。
2. 先き読み制御部(Pre-1oad Unitt)では実行待ちスレッドキュー中の継続スレッドからCache-bank Numberを取り出してそのD−Cacheバンクヘアクセスする。
3. 継続スレッドの実行開始時にCache−bank Numberおよび現実行スレッドのインスタンス番号の下(あるいは上)nビット分をそれぞれInSID1およびInSID2にセットする。
4. スレッド実行において、ロード(読み込み)の際のメモリアクセスにはD−Cache バンク番号をロード/ストア制御ユニット(LSC)に渡す。LSCは渡されたD−Cacheバンク番号によってそのD−Cacheバンクにアクセスする。
5. 2.および4.でのキャッシュ制御の手順は通常の(たとえばMSCマシン)方法と同様の方法をとる。
6. ストア(書き出し)の際のメモリアクセスには、現走行スレッドのインスタンス番号を保持しているInSID2を用いて3.と同様のことを行う。
本方法の利点は、スレッド間に渡る実行においてインスタンス番号を引き継ぐことによってデータアクセスの局所性を保持することができるという本発明方式の特徴を生かし、先行スレッドでストアされたデータを継続スレッドがロードする場合に先行スレッドのインスタンスに対応するキャッシュ・バンクを用いることによってキャッシュのヒット率を向上させることにある。
1. 継続スレッドへ制御移行する際に現行のスレッドのインスタンス番号の下(あるいは上)nビットの値(すなわちD−Cashのバンク番号;以下Cache-bank Numberとよぶ)を継続スレッドに渡す。
2. 先き読み制御部(Pre-1oad Unitt)では実行待ちスレッドキュー中の継続スレッドからCache-bank Numberを取り出してそのD−Cacheバンクヘアクセスする。
3. 継続スレッドの実行開始時にCache−bank Numberおよび現実行スレッドのインスタンス番号の下(あるいは上)nビット分をそれぞれInSID1およびInSID2にセットする。
4. スレッド実行において、ロード(読み込み)の際のメモリアクセスにはD−Cache バンク番号をロード/ストア制御ユニット(LSC)に渡す。LSCは渡されたD−Cacheバンク番号によってそのD−Cacheバンクにアクセスする。
5. 2.および4.でのキャッシュ制御の手順は通常の(たとえばMSCマシン)方法と同様の方法をとる。
6. ストア(書き出し)の際のメモリアクセスには、現走行スレッドのインスタンス番号を保持しているInSID2を用いて3.と同様のことを行う。
本方法の利点は、スレッド間に渡る実行においてインスタンス番号を引き継ぐことによってデータアクセスの局所性を保持することができるという本発明方式の特徴を生かし、先行スレッドでストアされたデータを継続スレッドがロードする場合に先行スレッドのインスタンスに対応するキャッシュ・バンクを用いることによってキャッシュのヒット率を向上させることにある。
本発明は、マルチスレッド処理の原理を通用した新規な概念に基づいて多重並行処理する並列処理コンピュータの方式とその構成法に関する基本的な技術であり、各種の並列分散処理のための並列処理コンピュータの基本方式として一般的に適用可能である。例えば、ネットワークノードに設置してメッセージ処理・転送などの各種トランザクション処理を行う並列処理コンピュータやネットワークの端末コンピュータとして各種の並列・分散処理応用に利用されるものである。また、本発明を諸図面や実施例に基づき説明してきたが、当業者であれば本開示に基づき種々の変形や修正を行うことが容易であることに注意されたい。従って、これらの変形や修正は本発明の範囲に含まれることを留意されたい。
10 並列処理コンピュータ
12 スレッド起動制御部(TAC)
12a スレッド間同期管理用の高速メモリACM
13 実行待ちスレッドキュー
14 スレッド実行制御部(TEC)
14a 複数のスレッド演算実行ユニット(EU)
14b 複数のレジスタファイル
14c 命令キャッシュ
14d 先行ロードユニット
14e スレッド演算ユニット(EU)割り付け・起動ユニット
16 メモリアクセス制御部(MAC)
16a 複数バンクのデータキャッシュ
16b メモリ管理部
16c ロード/ストア制御ユニット
16d DMA制御部
18 メインメモリ
20 入出力制御部
22 通信制御部
30a スレッド演算実行ユニット
30b レジスタファイル
30c 命令キャッシュ(I−Cache)
30d データキャッシュ(D−Cache)
32 実行待ちスレッドキュー
34 EU割り付け・起動ユニット
36 先行ロードユニット
38 ロード/ストア制御ユニット
40 メモリ管理ユニット
12 スレッド起動制御部(TAC)
12a スレッド間同期管理用の高速メモリACM
13 実行待ちスレッドキュー
14 スレッド実行制御部(TEC)
14a 複数のスレッド演算実行ユニット(EU)
14b 複数のレジスタファイル
14c 命令キャッシュ
14d 先行ロードユニット
14e スレッド演算ユニット(EU)割り付け・起動ユニット
16 メモリアクセス制御部(MAC)
16a 複数バンクのデータキャッシュ
16b メモリ管理部
16c ロード/ストア制御ユニット
16d DMA制御部
18 メインメモリ
20 入出力制御部
22 通信制御部
30a スレッド演算実行ユニット
30b レジスタファイル
30c 命令キャッシュ(I−Cache)
30d データキャッシュ(D−Cache)
32 実行待ちスレッドキュー
34 EU割り付け・起動ユニット
36 先行ロードユニット
38 ロード/ストア制御ユニット
40 メモリ管理ユニット
Claims (7)
- 複数のスレッドを同時並列に実行する並列処理コンピュータであって、
排他的に実行可能なプログラム断片であるスレッドのそれぞれが実行可能か否かを判定し、実行可能であると判定されたスレッドを実行待ちスレッドとして実行待ちキューに入れるスレッド起動制御部と、
先行ロードユニット、スレッド演算ユニット割り付け・起動ユニット、複数のスレッド演算実行ユニット、及び、複数のレジスタを持つ複数のレジスタファイルを含む、スレッド実行制御部と、
を具える並列処理コンピュータであり、
前記先行ロードユニットが、前記実行待ちキューに収容されている前記実行待ちスレッドが実行される前に、この実行待ちスレッドに対して、前記複数のレジスタファイルのうちの空きレジスタファイルを割り付け、この実行待ちスレッド用の初期データをメモリから前記割り付けたレジスタファイルにロードし、
前記スレッド演算ユニット割り付け・起動ユニットが、前記複数のスレッド演算ユニットのうちアイドル状態のものがある場合、前記実行待ちキューの先頭から前記実行待ちスレッドを取り出し、この実行待ちスレッドを前記アイドル状態の前記スレッド演算ユニットに割り付け、この割り付けられた実行待ちスレッド用の初期データがロードされている前記レジスタファイルを前記アイドル状態の前記スレッド演算ユニットに結合して、この実行待ちスレッドを起動し、
前記複数のスレッド演算実行ユニットが、前記起動されたスレッドを同時並列に実行する、
並列処理コンピュータ。 - 請求項1に記載の並列処理コンピュータにおいて、
前記複数のスレッド演算ユニットは、それぞれ専用の命令キャッシュに結合され、
前記並列処理コンピュータは、前記実行待ちスレッドが起動される前に当該スレッドのコードを前記メモリから前記命令キャッシュにロードする第1のメモリ管理部をも具える、
ことを特徴とする並列処理コンピュータ。 - 請求項1または2に記載の並列処理コンピュータにおいて、
前記並列処理コンピュータはデータキャッシュをも具え、
前記先行ロードユニットは、前記メモリへのアクセスの前に、前記データキャッシュへアクセスし、ヒットした場合はそのデータキャッシュから前記実行用データをロードする、
ことを特徴とする並列処理コンピュータ。 - 請求項3に記載の並列処理コンピュータにおいて、
前記データキャッシュは複数のバンクを含み、
前記並列処理コンピュータは、
各スレッドを実行するときに、各スレッドに先行するスレッドによって使用された前記データキャッシュのバンクがある場合は、そのバンクを使用するよう制御する第2のメモリ管理部をも具える、
ことを特徴とする並列処理コンピュータ。 - 請求項1〜4のいずれか1項に記載の並列処理コンピュータにおいて、
前記スレッド起動制御部は、同期制御メモリを含み、
前記同期制御メモリは各インスタンスごとにブロックを持ち、この各ブロックには各スレッドごとにスレッド起動同期用カウントフィールド及び先行スレッド数が予め収容されている先行スレッド数フィールドが設けられ、
前記スレッド起動制御部は、前記スレッド起動同期用カウントに初期値として先行スレッド数フィールドにセットされた先行スレッド数をセットし、その値を当該スレッドに対する起動通知を受けるたびに1ずつ減少させゼロになったときに実行可能になったと判定する、
ことを特徴とする並列処理コンピュータ。 - 請求項5に記載の並列処理コンピュータにおいて、
前記同期制御メモリの各ブロックは、ロック用フラグをも持ち、
前記複数のスレッド演算実行ユニットは、前記ロック用フラグをロックする命令及び前記ロック用フラグをアンロックする命令をサポートする、
ことを特徴とする並列処理コンピュータ。 - 請求項1〜6のいずれか1項に記載の並列処理コンピュータにおいて、
さらに、共有資源にアクセスできる排他制御スレッドと、
前記排他制御スレッドへの排他継続を制御する排他継続制御機構と、
前記共有資源への排他アクセスを制御する排他アクセス制御手段と、
を具える、ことを特徴とする並列処理コンピュータ。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004098213A JP2005284749A (ja) | 2004-03-30 | 2004-03-30 | 並列処理コンピュータ |
US10/992,675 US7650602B2 (en) | 2004-03-30 | 2004-11-22 | Parallel processing computer |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004098213A JP2005284749A (ja) | 2004-03-30 | 2004-03-30 | 並列処理コンピュータ |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005284749A true JP2005284749A (ja) | 2005-10-13 |
Family
ID=35137950
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004098213A Pending JP2005284749A (ja) | 2004-03-30 | 2004-03-30 | 並列処理コンピュータ |
Country Status (2)
Country | Link |
---|---|
US (1) | US7650602B2 (ja) |
JP (1) | JP2005284749A (ja) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012038328A (ja) * | 2011-09-27 | 2012-02-23 | Intel Corp | プロセッサ内のマルチスレッド間通信 |
JP2014513343A (ja) * | 2011-04-07 | 2014-05-29 | ゼットティーイー コーポレイション | レジスタファイル間におけるデータ伝送の実現方法及び実現装置 |
JP2014225089A (ja) * | 2013-05-15 | 2014-12-04 | オリンパス株式会社 | 演算装置 |
JP2014225088A (ja) * | 2013-05-15 | 2014-12-04 | オリンパス株式会社 | 演算装置 |
JP2019505039A (ja) * | 2015-12-11 | 2019-02-21 | ビバンテ コーポレーション | マルチスレッド処理を調整するためのハードウェアアクセスカウンタとイベント生成 |
CN111193558A (zh) * | 2019-12-28 | 2020-05-22 | 惠州Tcl移动通信有限公司 | 射频参数的校准方法及装置、存储介质、移动终端 |
WO2020213396A1 (ja) * | 2019-04-17 | 2020-10-22 | 株式会社エヌエスアイテクス | プロセッサおよびプログラム |
JP2020173870A (ja) * | 2014-12-18 | 2020-10-22 | インテル コーポレイション | 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7769715B2 (en) * | 2006-03-17 | 2010-08-03 | International Business Machines Corporation | Synchronization of access permissions in a database network |
US8001549B2 (en) * | 2006-04-27 | 2011-08-16 | Panasonic Corporation | Multithreaded computer system and multithread execution control method |
US8458724B2 (en) * | 2007-06-15 | 2013-06-04 | Microsoft Corporation | Automatic mutual exclusion |
EP2453350B1 (en) * | 2007-06-20 | 2016-04-27 | Fujitsu Limited | Processing device |
JP5136553B2 (ja) * | 2007-06-20 | 2013-02-06 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
EP2159692A4 (en) * | 2007-06-20 | 2010-09-15 | Fujitsu Ltd | Information processor and load cancellation control method |
US8261249B2 (en) * | 2008-01-08 | 2012-09-04 | International Business Machines Corporation | Distributed schemes for deploying an application in a large parallel system |
KR100939917B1 (ko) | 2008-03-07 | 2010-02-03 | 에스케이 텔레콤주식회사 | 움직임 예측을 통한 부호화 시스템 및 움직임 예측을 통한부호화 방법 |
US8639913B2 (en) * | 2008-05-21 | 2014-01-28 | Qualcomm Incorporated | Multi-mode register file for use in branch prediction |
US9021485B2 (en) * | 2008-08-20 | 2015-04-28 | Wal-Mart Stores, Inc. | Automatically restarting a first child process based on presence of SQL code in a list |
US9152427B2 (en) | 2008-10-15 | 2015-10-06 | Hyperion Core, Inc. | Instruction issue to array of arithmetic cells coupled to load/store cells with associated registers as extended register file |
US20190377580A1 (en) * | 2008-10-15 | 2019-12-12 | Hyperion Core Inc. | Execution of instructions based on processor and data availability |
US8756391B2 (en) * | 2009-05-22 | 2014-06-17 | Raytheon Company | Multi-level security computing system |
US8307368B2 (en) * | 2009-05-26 | 2012-11-06 | Microsoft Corporation | Locality-based scheduling in continuation-based runtimes |
JP5459613B2 (ja) * | 2010-02-26 | 2014-04-02 | 日本電気株式会社 | データ処理システム、データ処理方法およびデータ処理プログラム |
US20110320781A1 (en) * | 2010-06-29 | 2011-12-29 | Wei Liu | Dynamic data synchronization in thread-level speculation |
KR20120017294A (ko) * | 2010-08-18 | 2012-02-28 | 삼성전자주식회사 | 어플리케이션을 효율적으로 처리하는 스케쥴링 시스템 및 스케쥴링 방법 |
GB2501434B (en) | 2011-01-10 | 2013-12-25 | Ibm | Activity recording system for a concurrent software environment |
DE112012002465T5 (de) * | 2011-06-16 | 2014-03-20 | Caustic Graphics, Inc. | Grafikprozessor mit nicht blockierender gleichzeitiger Architektur |
US9250978B2 (en) * | 2011-06-27 | 2016-02-02 | International Business Machines Corporation | Asynchronous grace-period primitives for user-space applications |
US9471458B2 (en) * | 2012-01-05 | 2016-10-18 | International Business Machines Corporation | Synchronization activity recording system for a concurrent software environment |
US9063906B2 (en) * | 2012-09-27 | 2015-06-23 | International Business Machines Corporation | Thread sparing between cores in a multi-threaded processor |
US9122613B2 (en) * | 2013-03-07 | 2015-09-01 | Arm Limited | Prefetching of data and instructions in a data processing apparatus |
JP5803972B2 (ja) | 2013-04-18 | 2015-11-04 | 株式会社デンソー | マルチコアプロセッサ |
JPWO2015125225A1 (ja) * | 2014-02-19 | 2017-03-30 | 株式会社日立製作所 | データ処理システム及びデータ処理方法 |
US9836329B2 (en) * | 2014-05-30 | 2017-12-05 | Netapp, Inc. | Decentralized processing of worker threads |
US9898289B2 (en) | 2014-10-20 | 2018-02-20 | International Business Machines Corporation | Coordinated start interpretive execution exit for a multithreaded processor |
US10318261B2 (en) * | 2014-11-24 | 2019-06-11 | Mentor Graphics Corporation | Execution of complex recursive algorithms |
US10180841B2 (en) | 2014-12-22 | 2019-01-15 | Centipede Semi Ltd. | Early termination of segment monitoring in run-time code parallelization |
US10296350B2 (en) * | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences |
US10296346B2 (en) * | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences based on pre-monitoring |
WO2016199151A2 (en) * | 2015-06-10 | 2016-12-15 | Mobileye Vision Technologies Ltd. | Image processor and methods for processing an image |
US10069766B2 (en) * | 2015-07-07 | 2018-09-04 | TransferSoft, Inc. | Accelerated data transfer using thread pool for parallel operations |
US9778951B2 (en) * | 2015-10-16 | 2017-10-03 | Qualcomm Incorporated | Task signaling off a critical path of execution |
WO2017070900A1 (zh) * | 2015-10-29 | 2017-05-04 | 华为技术有限公司 | 多核数字信号处理系统中处理任务的方法和装置 |
CN106990946A (zh) * | 2016-01-21 | 2017-07-28 | 阿里巴巴集团控股有限公司 | 一种界面处理方法、装置和智能终端 |
US10831537B2 (en) | 2017-02-17 | 2020-11-10 | International Business Machines Corporation | Dynamic update of the number of architected registers assigned to software threads using spill counts |
US10719902B2 (en) * | 2017-04-17 | 2020-07-21 | Intel Corporation | Thread serialization, distributed parallel programming, and runtime extensions of parallel computing platform |
CN116934572B (zh) * | 2023-09-18 | 2024-03-01 | 荣耀终端有限公司 | 图像处理方法和设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6212542B1 (en) * | 1996-12-16 | 2001-04-03 | International Business Machines Corporation | Method and system for executing a program within a multiscalar processor by processing linked thread descriptors |
-
2004
- 2004-03-30 JP JP2004098213A patent/JP2005284749A/ja active Pending
- 2004-11-22 US US10/992,675 patent/US7650602B2/en not_active Expired - Fee Related
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014513343A (ja) * | 2011-04-07 | 2014-05-29 | ゼットティーイー コーポレイション | レジスタファイル間におけるデータ伝送の実現方法及び実現装置 |
US9501278B2 (en) | 2011-04-07 | 2016-11-22 | Zte Corporation | Method and device for data transmission between register files |
JP2012038328A (ja) * | 2011-09-27 | 2012-02-23 | Intel Corp | プロセッサ内のマルチスレッド間通信 |
JP2014225089A (ja) * | 2013-05-15 | 2014-12-04 | オリンパス株式会社 | 演算装置 |
JP2014225088A (ja) * | 2013-05-15 | 2014-12-04 | オリンパス株式会社 | 演算装置 |
JP2020173870A (ja) * | 2014-12-18 | 2020-10-22 | インテル コーポレイション | 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 |
JP7087029B2 (ja) | 2014-12-18 | 2022-06-20 | インテル コーポレイション | 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 |
JP2019505039A (ja) * | 2015-12-11 | 2019-02-21 | ビバンテ コーポレーション | マルチスレッド処理を調整するためのハードウェアアクセスカウンタとイベント生成 |
WO2020213396A1 (ja) * | 2019-04-17 | 2020-10-22 | 株式会社エヌエスアイテクス | プロセッサおよびプログラム |
JPWO2020213396A1 (ja) * | 2019-04-17 | 2020-10-22 | ||
JP7456437B2 (ja) | 2019-04-17 | 2024-03-27 | 株式会社デンソー | プロセッサおよびプログラム |
CN111193558A (zh) * | 2019-12-28 | 2020-05-22 | 惠州Tcl移动通信有限公司 | 射频参数的校准方法及装置、存储介质、移动终端 |
CN111193558B (zh) * | 2019-12-28 | 2022-05-06 | 惠州Tcl移动通信有限公司 | 射频参数的校准方法及装置、存储介质、移动终端 |
Also Published As
Publication number | Publication date |
---|---|
US20050240930A1 (en) | 2005-10-27 |
US7650602B2 (en) | 2010-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005284749A (ja) | 並列処理コンピュータ | |
US9069605B2 (en) | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention | |
US10241831B2 (en) | Dynamic co-scheduling of hardware contexts for parallel runtime systems on shared machines | |
US7257814B1 (en) | Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors | |
US7647483B2 (en) | Multi-threaded parallel processor methods and apparatus | |
US7376954B2 (en) | Mechanisms for assuring quality of service for programs executing on a multithreaded processor | |
US7962923B2 (en) | System and method for generating a lock-free dual queue | |
US20040172631A1 (en) | Concurrent-multitasking processor | |
US20050050305A1 (en) | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor | |
CN112416546A (zh) | 多任务调度方法、电子装置和计算机存储介质 | |
US20050188177A1 (en) | Method and apparatus for real-time multithreading | |
JPH06208552A (ja) | スモール・グレイン機構 | |
EP1880289A1 (en) | Transparent support for operating system services | |
US20110314478A1 (en) | Allocation and Control Unit | |
US20050066149A1 (en) | Method and system for multithreaded processing using errands | |
EP1299801B1 (en) | Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors | |
JP7346649B2 (ja) | 同期制御システムおよび同期制御方法 | |
JP2005521937A (ja) | コンピュータオペレーティングシステムにおけるコンテキスト切り替え方法及び装置 | |
WO2002046887A2 (en) | Concurrent-multitasking processor | |
Rothberg | Interrupt handling in Linux | |
CN114489793A (zh) | 通过应用直接编程的用户定时器 | |
Khushu et al. | Scheduling and Synchronization in Embedded Real-Time Operating Systems | |
Craig | Nanothreads: flexible thread scheduling | |
AG | The Case for Migratory Priority Inheritance in Linux: Bounded Priority Inversions on Multiprocessors | |
JPH01220040A (ja) | タスクスケジューリング方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060314 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060704 |