JP2013534681A - 共有スタックの部分を割り当てるためのシステムおよび方法 - Google Patents

共有スタックの部分を割り当てるためのシステムおよび方法 Download PDF

Info

Publication number
JP2013534681A
JP2013534681A JP2013519842A JP2013519842A JP2013534681A JP 2013534681 A JP2013534681 A JP 2013534681A JP 2013519842 A JP2013519842 A JP 2013519842A JP 2013519842 A JP2013519842 A JP 2013519842A JP 2013534681 A JP2013534681 A JP 2013534681A
Authority
JP
Japan
Prior art keywords
thread
stack
shared
entry
shared stack
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
JP2013519842A
Other languages
English (en)
Other versions
JP5841142B2 (ja
Inventor
スティーブン・アール・シャノン
スレッシュ・ケー・ヴェンクマハンティ
ロバート・エー・レスター
Original Assignee
クアルコム,インコーポレイテッド
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 クアルコム,インコーポレイテッド filed Critical クアルコム,インコーポレイテッド
Publication of JP2013534681A publication Critical patent/JP2013534681A/ja
Application granted granted Critical
Publication of JP5841142B2 publication Critical patent/JP5841142B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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 or 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
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

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)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

プロセッサの複数のスレッドによって共有されるスタックを管理するシステムおよび方法は、共有スタックの第1の部分を第1のスレッドに割り当てるステップと、共有スタックの第2の部分を第2のスレッドに割り当てるステップとを含む。

Description

本開示は全般にデータ処理に関し、より具体的には、メモリスタックの操作に関する。
技術の進歩によって、様々なタスクを実行するのに用いることができる、より高性能なコンピューティングデバイスが生まれてきた。コンピューティングデバイスは通常、少なくとも1つのプロセッサを含む。コンピューティングデバイス内での命令の処理を改善するために、分岐予測がプロセッサによって用いられることがあり、プログラムコード内の分岐を予想する。プログラム実行の間に遭遇するコールタイプ/リターンタイプの分岐のためのリターンアドレスを予測するために、リターンアドレススタック(RAS)がマイクロプロセッサによって用いられ得る。RASは、スタックの特別な実装形態(last in first out (LIFO)データ構造)であり得る。コール命令によって、リターンアドレスはRASにプッシュされ得る。リターン命令によって、RASの最上位に位置するアドレスがスタックからポップし、リターンアドレスを予測するために用いられ得る。分岐予測が成功すると、RASの最上位からポップしたアドレスが、プロセッサの命令フェッチユニットにリダイレクトするために用いられ得る。分岐予測が失敗すると、命令フェッチユニットに正確にリダイレクトするために、正確なリターンアドレスが計算され得る。
マルチスレッド化されたプロセッサの各スレッドは、固有の専用RASを使うことができ、各RASのサイズは一定であり得る。各スレッドは、各スレッドが実行している命令ストリームに応じて、異なる数の一定のサイズのRASのエントリを使うことができる。しかし、複数のリターンアドレススタックを使うと、システムに対する負担が増大する。
ある特定の実施形態は、共有スタックへのマルチスレッド化されたアクセスを可能にし得る。共有スタックへのアクセスは、各スレッドの現在の需要に従って、複数のスレッドに動的に割り当てられ得る。共有スタックのエントリは、スレッドポインタの操作を通じて、スレッドによって割り当てられ上書きされ得る。スタックアドレスのエントリを移動する代わりにスレッドポインタが移動されるので、処理能力および電力に対する要求が低くなり得る。共有スタックのエントリは、複数のスレッドにわたってより効率的に分布し得るので、共有スタックは、従来の静的なマルチスレッド化されたリターンアドレススタックよりも、少ないエントリを含み得る。スタックのエントリが少ないことで、ダイに必要な空間が小さくなるとともに、性能が向上し得る。
別の特定の実施形態では、共有スタックを含む装置が開示される。装置はさらに、共有スタックの第1の部分を第1のスレッドに選択的に割り当て、共有スタックの第2の部分を第2のスレッドに選択的に割り当てるように動作可能な、コントローラを含む。
別の特定の実施形態では、プロセッサの複数のスレッドによって共有されるスタックを管理する方法は、共有スタックの第1の部分を第1のスレッドに割り当てるステップと、共有スタックの第2の部分を第2のスレッドに割り当てるステップとを含む。
別の特定の実施形態では、コンピュータ可読有形媒体が、コンピュータによって実行可能な命令を記憶する。この命令は、共有スタックの第1の部分を第1のスレッドに割り当て、共有スタックの第2の部分を第2のスレッドに割り当てるように、コンピュータによって実行可能な命令を含む。
開示される実施形態の少なくとも1つによって提供される具体的な利点は、共有スタックが、共有されたアクセスのために複数のスレッドによって構成されることに起因し得る。共有スタックは、スレッドが各々別個のスタックにアクセスするシステムによって従来必要とされる全体のエントリよりも、より少ない全体のエントリを含み得る。エントリの全体の数が少ないことで、ダイに必要な空間が小さくなるとともに、複雑さが低減し必要な電力が小さくなり得る。開示される実施形態の1つまたは複数によって容易になる、スタックサイズの低減および他の利点によって、さらに、メモリの配分およびスタックアクセスの効率性が改善され得る。
本開示の他の態様、利点、および特徴は、以下のセクション、すなわち、図面の簡単な説明、発明を実施するための形態、および特許請求の範囲を含む、本出願全体の検討後に明らかになろう。
共有スタックへのマルチスレッド化されたアクセスを調整するように構成されたシステムの、特定の例示的な実施形態のブロック図である。 共有スタックにアクセスするように構成されたアクティブ化されたスレッドを含むシステムの、特定の例示的な実施形態のブロック図である。 共有スタックのエントリにスレッドが動的にアクセスできるようにするように構成されるシステムの、特定の例示的な実施形態のブロック図である。 第2のスレッドがアクティブになり共有スタックにアクセスする時の、共有スタックへのマルチスレッド化されたアクセスを調整するように構成されたシステムの、特定の例示的な実施形態のブロック図である。 第2のスレッドが共有スタックのエントリを取得し、第1のスレッドのエントリを上書きする準備ができた時の、共有スタックへのマルチスレッド化されたアクセスを調整するように構成されたシステムの、特定の例示的な実施形態のブロック図である。 第2のスレッドが第1のスレッドのエントリを上書きする時の、共有スタックへのマルチスレッド化されたアクセスを調整するように構成されたシステムの、特定の例示的な実施形態のブロック図である。 プロセッサの複数のスレッドによって共有されるスタックを管理する方法の、特定の例示的な実施形態の流れ図である。 共有スタックへのマルチスレッド化されたアクセスを可能にする方法の、特定の例示的な実施形態の流れ図である。 複数のスレッドにわたる共有スタックアクセスを含む、ポータブルデバイスのブロック図である。
マルチスレッド化されたプロセッサの複数のスレッドによって共有されるメモリスタックを含む、システムが開示される。共有スタックのエントリは、スタックコントローラによって、所与のスレッドに動的に割り当てられ得る。そのような割り当てによって、各スレッドに対して割り当てられる共有スタックの部分は、スタックが効率的に使用されるような、かつ公平性の方針を考慮した、大きさである。共有スタックは、別々のスレッドに対して各々専用である別個のスタックによって用いられるスタックエントリよりも、少ないスタックエントリを含み得る。
図1を参照すると、複数のスレッドでスタックを共有するためのシステムの特定の実施形態が図示され、全般に100と称される。システム100は、メモリ104に結合されるコントローラ102を含む。コントローラ102は、マルチスレッド化されたプロセッサ160に応答する。メモリ104は、共有スタック105を含む。コントローラ102は、マルチスレッド化されたプロセッサ160からのスタック操作要求に応答して、マルチスレッド化されたプロセッサ160の個々のスレッドに、共有スタック105の部分を割り当てかつ割り当てを解除し、スレッドを要求するために共有スタック105のスタック操作を実行する。
マルチスレッド化されたプロセッサ160は、1つまたは複数のスレッドを実行できる、1つまたは複数のマルチスレッド化されたプロセッサコア106を含み得る。たとえば、マルチスレッド化されたプロセッサ160は、第1のスレッド108(スレッド0)、第2のスレッド110(スレッド1)、第3のスレッド112(スレッド2)、および第nのスレッド114(スレッド(n-1))を実行することができる。マルチスレッド化されたプロセッサ160は、スタック操作要求を、スレッド108〜114の1つまたは複数のためにコントローラ102に送ることができる。たとえば、マルチスレッド化されたプロセッサ160は、プッシュ要求138をコントローラ102に送ることができ、コントローラ102は、プッシュ要求138を生成するスレッドを特定し、さらに、共有スタック105のうちの要求するスレッドの部分にプッシュされるべきデータを特定する。別の例として、マルチスレッド化されたプロセッサ160は、ポップ要求136をコントローラ102に送ることができる。ポップ要求136は、複数のスレッド108〜114のうちの要求するスレッドを特定し、共有スタック105のうちの要求するスレッドの部分に最も新しく追加されたデータのリターンを要求することができる。
コントローラ102は、共有スタック105の部分を個々のスレッドに選択的に割り当てるように動作可能である。たとえば、コントローラ102は、共有スタック105の第1の部分116を第1のスレッド108に、共有スタック105の第2の部分118を第2のスレッド110に、共有スタック105の第3の部分120を第3のスレッド112に、および共有スタック105の第nの部分122を第nのスレッド114に、選択的に割り当てることができる。ある特定の実施形態では、共有スタック105はハードウェアスタックを含み得る。あるいは、共有スタック105は、ランダムアクセスメモリ(RAM)のような他のメモリの中で実装されてもよい。
コントローラ102は、公平性の方針140に従うスレッド要求に応答して、共有スタック105の部分116〜122を動的に割り当て、スタックポインタ142を介して、割り当てを示すデータおよび割り当てられた部分116〜122の使用量を保持する。たとえば、公平性の方針140は、共有スタック105が、スレッドにわたって等しく、各スレッドに対する部分の大きさを一定にして、各々の実行するスレッドに対する部分の大きさを一定にして、各スレッドに対する部分の大きさを可変にして、各々の実行するスレッドに対する部分の大きさを可変にして、スタックの喪失の数に関して部分の大きさを加重平均にして、または何らかの他の方式で割り当てられることを、示し得る。スタックポインタ142は、第1のスレッド108に対応するポインタ162、第2のスレッド110に対応するポインタ164、第3のスレッド112に対応するポインタ166、および第nのスレッド114に対応するポインタ168を含む。たとえば、スレッドポインタ162〜168の各々は、図2〜図6に関して説明されるように、最上位エントリポインタ、スタックの最上位ポインタ、スタックの最下位ポインタ、最下位エントリポインタ、および1つまたは複数の追加のステータスビットを含み得る。コントローラ102は、循環バッファを用いて各スレッドに割り当てられる別個のスタックを管理するために、ポインタ162〜168を用いる。
第1の部分116は、第1のスレッド108に対応するスタック操作のために割り当てられ得る。第1の部分116は、第1のスレッド108の1つまたは複数のデータ要素124を記憶し得る、1つまたは複数のスタックエントリ(図示せず)を含み得る。第2の部分118は、第2のスレッド110のスタック操作のために割り当てられてよく、第2のスレッド110の1つまたは複数のデータ要素126を記憶し得る1つまたは複数のスタックエントリを含み得る。第3の部分120は、第3のスレッド112に対応するスタック操作のために割り当てられてよく、第3のスレッド112の1つまたは複数のデータ要素128を記憶し得る1つまたは複数のスタックエントリを含み得る。第nの部分122は、第nのスレッド114に対応するスタック操作のために割り当てられてよく、第nのスレッド114の1つまたは複数のデータ要素130を記憶し得る1つまたは複数のスタックエントリを含み得る。
動作中、マルチスレッド化されたプロセッサ160の1つまたは複数のスレッドは、プッシュ要求138のようなスタック操作要求を生成することができる。コントローラ102は、プッシュ要求138を受け取り、要求するスレッド(たとえば第1のスレッド108)が、データの追加(たとえば、第1のスレッド108のデータ要素124への)に対応するのに十分な空間を、割り当てられた部分(たとえば第1の部分116)に有するかどうかを、判定することができる。第1の部分116が十分な空間を含まない場合、コントローラ102は、公平性の方針140に従って、追加の空間を第1のスレッド108に動的に割り当てるかどうかを決定することができる。たとえば、他のスレッド110〜114が共有スタック105の残りを使っていない場合、コントローラ102は、第1のスレッド108に対応する追加のプッシュ要求に対応するために、第1の部分116に追加のメモリを動的に割り当てることができる。
あるいは、複数のスレッド110〜114が共有スタック105をアクティブに使っている場合、コントローラ102は、公平性の方針140によって決定されるように、第1のスレッド108に、共有スタック105の公平な持ち分よりも多くを割り当てるのを防ぐことができる。共有スタックの各部分は、循環バッファを用いて実装され得る。プッシュ要求138を満たすことができるとコントローラ102が判定すると、コントローラ102は、第1の部分116内の第1のスレッド108のデータ要素124の1つに対するプッシュ要求138のために受け取られたデータを書き込むことを含み得る、メモリ操作150を開始する。コントローラ102はまた、第1の部分がリサイズされた時に、第1のスレッドポインタ162を更新し、スタックの最上位のエントリの変更を示すことができる。
コントローラ102はまた、スレッドのいずれかから、たとえば、第1のスレッド108から、ポップ要求136を受け取るように構成され得る。ポップ要求136に応答して、コントローラ102は、第1のスレッド108のデータ要素124から最も新しく追加されたデータ要素を読み取り、ポップ要求136に応答して、マルチスレッド化されたプロセッサ160にデータ134を返すための、メモリ操作150を開始するように構成される。たとえば、共有スタック105が機能リターンアドレススタック(RAS)として実装される場合、リターンデータ134は、第1のスレッド108のような要求されるスレッドに対応する、機能リターンアドレスを含む。加えて、コントローラ102は、第1のスレッドポインタ162を更新して、スタックの最上位がポップされたことを示し、ポップ要求136が満たされたことに応答して、第1の部分116内でのスタック空間の使用量の割り当てを減らすことができる。
コントローラ102が第1の命令を介して機能リターンアドレスを予測する特定の実施形態では、予測を誤った機能リターンアドレスが共有スタック105から来ると、訂正された機能リターンアドレスがその後返される。たとえば、マルチスレッド化されたプロセッサ160は、実行されるべき命令(たとえばリターン命令)の形態で、ポップ要求136を受け取ることができる。このリターンの実行は、完了に複数のサイクルを要し得る。リターン命令の実行の開始の時点で、リターンアドレスは共有スタック105からポップされ得る。このポップされたリターンアドレスは、命令フェッチをリダイレクトするために用いられる、推測のアドレスであってよい。リターン命令の実行が続くと(たとえば、マルチスレッド化されたプロセッサ160のパイプラインを進むと)、マルチスレッド化されたプロセッサ160は、「実際の」(たとえば推測ではない)リターンアドレスを計算することができる。リターン命令が実行を完了した時、推測のリターンアドレスと推測ではないリターンアドレスが比較され得る。リターンアドレスが一致しない(たとえば、分岐予測の誤りが発生した)場合、「実際の」リターンアドレスが命令をフェッチするために使われ得る。「不正確に」フェッチされた命令は、フラッシュされ得る。
コントローラ102が、プッシュ動作要求138に応答して共有スタック105の部分を動的に割り当てるために、公平性の方針140を実施した結果として、各スレッド108〜114が、共有スタック105内での全体のスタックのエントリの効率的な利用のために個別のスタックとして動作する共有スタック105の別々の部分を与えられるように、共有スタック105は、複数のスレッド108〜114によって使われ、動的に割り当てられ得る。個々のスレッド108〜114への、共有スタック105の部分116〜122の割り当ておよび割り当て解除は、データ要素124〜130を共有スタック105内で移動しなくてもよいように、コントローラ102の動作を通じて、かつスタックポインタ142の制御によって実行され得る。代わりに、共有スタック105の割り当てられた部分116〜122は、データ要素124〜130の周りで「移動され」てもよい。その結果、共有スタック105を効率的に使うことができ、共有スタック105は、複数のスレッド108〜114からのスタック操作に対応することができ、各スレッド108〜114に別個の専用スタックを含むシステムよりも、使用する全体のスタックエントリを少なくすることができる。
4つのスレッドおよび4つの部分が図1に示されるが、共有スタック105は、2つ以上のスレッドによって用いられる、2つ以上の部分を含み得る。また、メモリ104、コントローラ102、およびプロセッサ160は別個の構成要素として示されるが、そのような構成要素の2つ以上が単一のデバイスに統合されてもよいことを、理解されたい。
図2を参照すると、共有スタックにアクセスするように構成される複数のスレッドの1つの実行を示す、システムの特定の例示的な実施形態のブロック図が図示され、全般に200と称される。より具体的には、スレッド112は、リセット状態からアクティブになることができ、共有スタック105のエントリ222を割り当てられ得る。図2のスレッド108、110、および112は、図1のスレッド108、110、および112と同じであってよく、図2の共有スタック105は、図1の共有スタック105と同じであってよい。スレッド112は、ポインタ252、254、256、および258の使用を通じて、共有スタック105のエントリ222の所有権を得ることができる。
スレッド112(たとえばスレッド2)は、スレッド112の書き込み先であり得る、最上位エントリポインタ(TEP)252を含み得る。最上位エントリポインタ252は、共有スタック105内で再上位のエントリを指すことができる。スレッド112は、スタックの最上位ポインタ(TSP)254も含み得る。スタックの最上位ポインタ254は、スレッド112と関連付けられる共有スタック105内の、最上位の、または最も新しく書き込まれたエントリを指すことができる。最も新しく書き込まれたエントリは、スタックポップ操作があると返されるデータを含み得る。スレッド112内に含まれるスタックの最下位ポインタ(BSP)256は、スレッド112と関連付けられる共有スタック105内の最も古い有効なエントリを指すことができる。スレッド112はさらに、最下位エントリポインタ(BEP)258を含み得る。最下位エントリポインタ258は、スレッド112の書き込み先であり得る、共有スタック105の最下位エントリを指すことができる。スレッド112はさらに、スレッドアクティブステータスビット(TASB)260を含み得る。スレッドアクティブステータスビット260は、スレッド112がプロセスを実行しているかどうかを示すことができる。スレッド112がプロセスを実行していない場合、スレッド112は、共有スタック105のエントリを割り当てられなくてよい。
スレッド112はさらに、ラップトスタックビット(wrapped stack bit(WSB))264を含む。ラップトスタックビット264は、スタックの最上位ポインタ254および/またはスタックの最下位ポインタ256が共通のエントリを指すように進んだことに応答して、共有スタック105がラップしたかどうかを示すことができる。たとえば、ラップトスタックビット264は、スタックポインタ254がラップアラウンドしてスタックの最下位ポインタ256に到達したことを示すために、論理値1に設定され得る。ラップトスタックビット264が論理値1に設定される場合、その後のプッシュによって、スタックの最下位ポインタ256とスタックの最上位ポインタ254の両方がインクリメントされ得る。プッシュ操作によってさらに、共有スタックの中の最も古いエントリ(スタックの最下位ポインタ256によって指される)が上書きされ得る。共有スタック105からのポップ操作が、スレッドのラップトスタックビット264が論理値1を有する時に起きる場合、ラップトスタックビット264は、値0に遷移し得る。
スレッド112はまた、エンプティ/フルビット(EFB)262を含む。エンプティ/フルビット262は、スレッド112と関連付けられる共有スタック105のエントリが使われるかどうかを示すように構成され得る。たとえば、エンプティ/フルビット262は、スレッド112のデータが共有スタック105の中に存在する時、論理値1を含み得る。逆に、エンプティ/フルビット262は、スレッド112のデータが共有スタック105内に記憶されていない時、論理値0を含み得る。エンプティ/フルビット262が論理値0であり、プッシュ操作が行われる場合、エンプティ/フルビット262は論理値1に遷移し得る。スタックの最上位ポインタ254とスタックの最下位ポインタ256の両方が同じエントリを指し、ラップトスタックビット264が論理値0に等しい時に、ポップ操作が起きた場合、エンプティ/フルビット262は論理値0に遷移し得る。
一般に、スレッドは、最上位エントリポインタと最下位エントリポインタとによって境界が示される共有スタック105のエントリを割り当てられてよく、またはそれを「所有」してよい。スレッドは、そのような「所有される」エントリにデータを書き込むことができる。加えて、スレッドは、スタックの最上位ポインタとスタックの最下位ポインタとの間のエントリを「利用する」と考えられ得る。したがって、共有スタック105のエントリは、特定のスレッドによって所有されてよく、特定のスレッドによって所有され利用されてよく、または、特定のスレッドによって所有も利用もされなくてもよい。
スレッド112と同様に、スレッド110(すなわちスレッド1)は、最上位エントリポインタ238と、スタックの最上位ポインタ240とを含み得る。スレッド110はさらに、スタックの最下位ポインタ242と、最下位エントリポインタ244とを含み得る。スレッドアクティブステータスビット246、エンプティ/フルビット248、およびラップトスタックビット250も、スレッド110内に含まれ得る。
スレッド108(すなわちスレッド0)は、最上位エントリポインタ224と、スタックの最上位ポインタ226とを含み得る。スレッド108はさらに、スタックの最下位ポインタ228と、最下位エントリポインタ230とを含み得る。スレッドアクティブステータスビット232、エンプティ/フルビット234、およびラップトスタックビット236も、スレッド108内に含まれ得る。
共有スタック105は、命令のメモリアドレスを記憶する、エントリ210、212、214、216、218、220、および222を含み得る。エントリ210、212、214、216、218、220、および222は、スレッド108、110、および112によって共有されるように構成され得る。シングルスレッド動作の間に、スレッド112はアクティブになり得る(すなわち、プロセスの実行を開始し得る)。最上位エントリポインタ252、スタックの最上位ポインタ254、スタックの最下位ポインタ256、および最下位エントリポインタ258が、点線266によって示されるように、エントリ222を指すように設定され得る。スレッド112は、エントリ222を「所有している」と言われ得る(たとえば、スレッド112はエントリ222にデータを書き込むことができる)。
エンプティ/フルビット262およびラップトスタックビット264は、空の状態(たとえば論理値0)を示すように設定されてよく、スレッドアクティブステータスビット260は、アクティブな状態(たとえば論理値1)を示すように設定されてよい。スレッド112上で実行するプロセスによってコールが行われると、スタックの最上位ポインタ254によって示されるエントリ222に、アドレスが共有スタック105上でプッシュされ得る。アドレスは、リターンアドレスを示し得る。
スレッド112上で実行するプロセスによってその後のコールが行われる場合、スタックの最上位ポインタ254によって示されるエントリ222の上のエントリ220に、別のアドレスが共有スタック105上でプッシュされ得る。このプッシュによって、最上位エントリポインタ252およびスタックの最上位ポインタ254は、新たに書き込まれたエントリ220を指すように動的にインクリメントし得る。したがってこのインクリメントは、共有スタック105の1つまたは複数の追加のエントリを、スレッド112に割り当て得る。スレッド112上で実行するプロセスがリターンを示す場合、共有スタック105からのポップ操作が、予測されるリターンアドレスを取り出すために起こり得る。ポップ操作によって、スレッド112のスタックの最上位ポインタ254はデクリメントし得るが、最上位エントリポインタ252はデクリメントしなくてよい。
誤った分岐予測が、共有スタック105からポップされた不正確なリターンアドレスによって引き起こされ得る。それに応答して、スタック105に記憶され、誤った予測を行うスレッドと関連付けられる、すべてのデータが廃棄されてよく、スレッドのスタックの構築が再び開始され得る。たとえば、スレッド112が誤った予測を行った場合、スタックの最下位ポインタ256と等しくスタックの最上位ポインタ254を設定し、空の状態を示すようにエンプティ/フルビット262の状態を設定し、ラップがないことを示すようにラップトスタックビット264を設定することによって、スレッド112の再構築が開始され得る。エンプティ/フルビット262が値0に等しい間、ポップ要求を避けることができ、これによって処理能力を節減することができる。
図2は、シングルスレッドに関する動作を示す。たとえば、スレッド112は、リセット状態からアクティブになり得る。スレッド112のスレッドポインタは最初、共有スタック105の単一のエントリ(たとえばエントリ222)を指していてよい。したがって、スレッド112は、リセット状態からアクティブになった時に、共有スタック105のエントリ222に自身を「固定した」と考えられてよい。スレッド112によって実行されるプロセスによってコールが行われると、スレッドポインタは更新され得る(たとえば共有スタック105のうちのスレッド112に割り当てられた部分を「成長させる」)が、共有スタック105内に記憶されるアドレスはシフトしなくてよい。共有スタック内でアドレスをシフトするのではなくスレッドポインタを更新することで、消費電力、ハードウェアに対する要求、および全体的な複雑さを下げることができる。
図3は、プロセスを実行し、共有スタック105の複数のエントリ216、218、220、および222に動的にアクセスする、アクティブスレッド112を含む、図2に示されるプロセシング状態とは異なるプロセシング状態の、システム200のブロック図を示す。スレッド108および110は、非アクティブである。スレッド112は、エントリ222に加えて、共有スタック105のエントリ216、218、および220も割り当てられている。エントリ272は使われていなくてよい。
最上位エントリポインタ252は、点線270によって示されるように、エントリ216を指すことができる。点線268によって示されるように、スタックの最上位ポインタ254は、エントリ220を指していてよい。点線266によって示されるように、スタックの最下位ポインタ256と最下位エントリポインタ258の両方が、エントリ222を指すことができる。したがって、スレッド112は、線270(論理的には最上位エントリポインタ252から指す)および線266(論理的には最下位エントリポインタ258から指す)によって境界が示される、エントリ216、218、220、および222を割り当てられてよく、またはそれらを「所有」してもよい。
図3は、共有スタック105からスレッド112への、エントリの動的な割り当てを示す。この割り当ては、共有スタック105の中でエントリをシフトする代わりに、スレッドポインタを再割り当てすることによって起こってよく、このことは、メモリの配分の改善、電力効率の改善、およびハードウェアに対する要求の軽減を支援し得る。
図4は、スレッド110(すなわちスレッド1)がアクティブになり、共有スタック105の使用されていないエントリ272内に割り当てられ、そこに自身を固定した場合の、システム200の特定の例示的な実施形態のブロック図である。エントリ272は、エントリ210、212、214、および274という第1のグループと、スレッド112(すなわちスレッド2)が所有を主張するエントリ216、218、220、および222という第2のグループとの間に位置し得る。
アクティブになると(たとえばプロセスをアクティブに実行すると)、スレッド110は、共有スタック105のエントリ272内に自身を固定することができる。スレッド110は、エントリ272内で共有スタック105にデータ要素をプッシュすることができる。ある特定の実施形態では、エントリ272は、別のスレッドへの割り当てを事前に解除されていてもよく、または別のスレッドによる所有の主張が事前に取り消されていてもよい。別の特定の実施形態では、スレッドを固定するのに用いられるエントリは、別のスレッドに事前に割り当てられていてもよい。図4の点線276によって示されるように、最上位エントリポインタ238、スタックの最上位ポインタ240、スタックの最下位ポインタ242、および最下位エントリポインタ244が、エントリ272を指す。
スレッド110は、別のエントリの所有を主張し、共有スタック105の所有を主張されたエントリへの追加のデータ要素を、エントリ274にプッシュすることができる。
図4は、共有スタック105に動的にアクセスする複数のアクティブスレッドを示す。共有スタック105のエントリは、アクティブスレッドのスレッドポインタを修正することによって、複数のアクティブスレッドに動的に割り当てられ得る。アクティブスレッドは、現在の需要に従って、共有スタック105のエントリを割り当てられてよく、これによって、効率的なスタックの利用が促進され得る。
図5を参照すると、共有スタック105と、図4に示されるものとは異なるプロセシング状態にある3つのスレッド108、110、および112を含む、システム200のある特定の例示的な実施形態が図示される。スレッド110およびスレッド112は、アクティブであり、共有スタック105にアクセスしている。たとえば、スレッド110は、追加のエントリの所有を主張しており、スレッド112のエントリの上書きを準備している。
スレッド112は、点線270(最上位エントリポインタ252から論理的に指す)によって示される214から、点線266(最下位エントリポインタ258から論理的に指す)によって示されるエントリ220まで、共有スタック105のエントリを所有することができる。
同様に、スレッド110は、(最上位エントリポインタ238から論理的に指す線276によって示される)エントリ222と、(最下位エントリポインタ244から論理的に指す線286によって示される)エントリ210および212を含むようにスタック105をラップアラウンドすることとによって、境界が示される、共有スタック105のエントリを所有することができる。スタックの最下位ポインタ242が、スタックの最上位ポインタ240の上にあるので、スレッド110は、共有スタック105内でラップアラウンドされたと言うことができる。したがってスレッド110は、エントリ210、212、および222を所有する。スレッド110が所有する共有スタック105の部分はこうして、スレッド112と連続的になり、プッシュに応じて所有を主張すべき、スレッド110向けのフリーのエントリは存在しない。
スレッド110が共有スタック105へのプッシュを実行し、スタックの最上位ポインタ240が最上位エントリポインタ238と同じエントリを指している場合、データは2つの位置のうちの1つにプッシュされ得る。たとえば、図6で描かれるように、スレッド110は、スタックの最上位ポインタ240と最上位エントリポインタ238との両方をインクリメントすることができ、それによって、新たにプッシュされたデータを記憶するための、新たなエントリおよびより多くのスタック空間の所有を主張する。あるいは、スレッド110は、スタックの最上位ポインタ240をラップアラウンドし(最上位エントリポインタ238はそのままにして)、最下位エントリポインタ244が指すエントリにデータを書き込むことができる。どのプロセスを選択するかは、最上位エントリポインタ238の後続のエントリがすでに所有を主張されたかどうか、および、スレッド110が共有スタック105の公平な持ち分をすでに使っているかどうかに、依存し得る。
最上位エントリポインタ238の指すエントリ222の上のエントリ220が所有を主張されていない場合、スレッド110は、最上位エントリポインタ238を更新することによって、エントリ220の所有を主張することができる。スレッド110はさらに、スタックの最上位ポインタ240を、同じエントリ220を指すように設定することができる。
最上位エントリポインタ238の指すエントリ222の上のエントリ220が、別のスレッドによって所有を主張され、スレッド110がすでに、スタック105の少なくとも公平な持ち分を所有している場合、その後のプッシュによって、スレッド110が追加のスタックエントリ220の所有を主張することはできない。代わりに、スタックの最上位ポインタ240は、最上位エントリポインタ238から最下位エントリポインタ244にラップアラウンドすることができる。
最上位エントリポインタ238の指すエントリ222の上のエントリ220が、別のスレッドによって所有を主張され、スレッド110が共有スタック105の公平な持ち分をまだ所有していない場合、プッシュは、別のスレッド112からのエントリ220の所有を主張することを許可され得る。エントリ220は、スレッド112の最下位エントリポインタ258を更新し、スレッド110の最上位エントリポインタ238を更新することによって、所有を主張され得る。図6を参照して説明されるように、スレッド112のポインタはまた、エントリ220の「喪失」を反映するようにも更新され得る。スレッド110は、共有スタック105の公平な持ち分に達するまで、この方式でエントリの所有の主張を続けることができる。
図5は、複数のスレッドの間の共有スタックアクセスを示す。図5に示されるように、スレッド112は共有スタック105のうちの所有する部分の中でラップアラウンドされる(すなわち、スタックの最上位ポインタ268がスタックの最下位ポインタ280の下になる)ので、スレッド110は、スレッド112が利用するスタックエントリの最下位からではなく、スレッド112が利用するスタックエントリの中央部からの、エントリの所有を主張することができる。これによって、スレッド112は、スタックの最下位からのスタックエントリではなく、スタックの中央部に位置するスタックエントリ220を失い得る。その結果、スレッド112のスタックは、エントリ218よりも下では損なわれ得る。したがって、スタックの最下位ポインタ256は、図6に示されるように、エントリ218に移動され得る。したがって、スレッドは、十分なエントリがある限りは、スレッドの需要に従って、共有スタック105に動的にアクセスすることができる。エントリが乏しくなると、スレッドは、(たとえば、公平性の方針に従って)公平なスタックの利用を実現するために、エントリを喪失し得る。
図5に示されるように、スレッド112は、エントリ214〜220を「所有」し、エントリ216〜220、およびエントリ214〜274を「利用」することができる。したがってエントリ220は、エントリ220がスレッド110によって所有を主張されている時には、スレッド112によって「所有」されかつ「利用」されている。
図6を参照すると、共有スタック105と、図5に示されるものとは異なるプロセシング状態にある3つのスレッド108、110、および112を含む、システム200の別の特定の例示的な実施形態が図示される。たとえば、スレッド110がすでに、スレッド112のエントリの所有を主張しており、スレッド112のエントリを上書きしている。
スレッド112は、点線270(最上位エントリポインタ252から論理的に指す)によって境界が示される214から、点線280(最下位エントリポインタ258から論理的に指す)によって境界が示されるエントリ218まで、共有スタック105のエントリを所有することができる。スレッド112は、スレッド110に対してエントリ220を喪失している可能性がある。したがって、図6に示される特定の実施形態では、スレッド112は、共有スタック105の「利用されている」部分の中央部からの、エントリ220を喪失し得る。スレッド112のスタックの最下位ポインタ256は、(たとえば図5に示されるように)274を指す状態から、新たな最下位エントリ218を指すように、更新され得る。
同様に、スレッド110は、(最上位エントリポインタ238から論理的に指す線276によって示される)エントリ220と、(最下位エントリポインタ244から論理的に指す線286によって示される)エントリ210および212を含むようにスタック105をラップアラウンドすることとによって、境界が示される、共有スタック105のエントリを所有することができる。したがってスレッド110は、エントリ210、212、220、および222を所有する。スレッド112は、スレッド110に対してエントリ220を喪失している。
ある特定の実施形態によれば、有効なエントリ220(たとえば、スタックの最下位ポインタ256とスタックの最上位ポインタ254との間に位置するエントリ)を喪失したスレッド112は、喪失したエントリ220よりも古いすべてのエントリを、無効にすることができる。この目的のために、スレッド112は、スタックの最下位ポインタ256を、新たにインクリメントされた最下位エントリポインタ258と同じエントリを指すように、設定することができる。
図6は、1つのスレッドが別のスレッドの所有するエントリの所有を主張でき、かつそのエントリを上書きできる、複数のスレッドによる共有スタック105のアクセスを示す。エントリは、スレッドポインタを修正することによって、かつ共有スタック105内でエントリを移動することなく、所有を主張され得る。共有スタック105は、現在の需要に従って、複数のスレッドに動的に割り当てられてよく、これによって効率的なスタックの利用が促進され得る。
図7は、プロセッサの複数のスレッドによって共有されるスタックを管理する方法700の、ある特定の例示的な実施形態の流れ図を示す。本明細書で説明されるように、例示的な方法700は、図1のシステム100または図2のシステム200によって実行され得る。
702において、共有スタックの第1の部分が、第1のスレッドに割り当てられ得る。たとえば、図1の共有スタック105の第1の部分116が、第1のスレッド108に割り当てられ得る。さらに例示すると、第1のスレッド108は、共有スタック105の追加の空間を要求する、プロセスを実行することができる。第1のスレッド108のポインタ162は、共有スタック105の第1の部分116(たとえば追加のエントリ)を指し、第1の部分116の制御権を取得することができる。
704において、共有スタックの第2の部分が、第2のスレッドに割り当てられ得る。たとえば、図1の共有スタック105の第2の部分118が、第2のスレッド110に割り当てられ得る。さらに例示すると、第2のスレッド110は、共有スタック105の追加の空間を要求する、プロセスを実行することができる。第2のスレッド110のポインタ164は、共有スタック105の第2の部分118を指し、第2の部分118の制御権を取得することができる。
706において、共有スタックの第3の部分が、第3のスレッドに割り当てられ得る。たとえば、図1の共有スタック105の第3の部分120が、第3のスレッド112に割り当てられ得る。さらに例示すると、第3のスレッド112は、共有スタック105の追加の空間を要求する、プロセスを実行することができる。第3のスレッド112のポインタ166は、共有スタック105の第3の部分120を指し、第3の部分120の制御権を取得することができる。
708において、共有スタックが、リターンアドレスを予測するために使われ得る。たとえば、図1の共有スタック105が、リターンデータ134に含まれる機能リターンアドレスを予測するために、使われ得る。
図7の方法700は、共有スタックのあらゆる使用の前に、共有スタックの一部を複数のスレッドに割り当てるステップを示すが、そのような順序は例示を目的とするものに過ぎず、限定するものと見なされるべきではないことに留意されたい。共有スタックの一部を割り当てられる任意のスレッドは、他のスレッドが共有スタックの他の部分をいつ割り当てられるかに関係なく、割り当てられた部分の使用を開始することができる。
したがって、図7は、プロセッサの複数のスレッドによって共有されるスタックを管理する方法700を示す。ある特定の実施形態によれば、共有スタックのエントリは、スレッド要求に従って動的に割り当てられ得る。動的な割り当ては、スタック効率の向上、ダイに必要な空間の縮小、さらには性能の向上につながるような方式での、分岐予測を容易にし得る。
図8は、共有スタックへのマルチスレッド化されたアクセスを可能にする方法800の、特定の例示的な実施形態の流れ図を示す。本明細書で説明されるように、例示的な方法800は、図1のシステム100または図2のシステム200によって実行され得る。
802において、共有スタックが、メモリの一部の中に形成され得る。たとえば、図1の共有スタック105が、メモリ104の中に形成され得る。
804において、共有スタックの第1の部分および第2の部分が、動的に割り当てられ得る。たとえば、図1の共有スタック105の第1の部分116が、第1のスレッド108に動的に割り当てられ得る。さらに例示すると、第1のスレッド108は、共有スタック105の追加の空間を要求する、プロセスを実行することができる。第1のスレッド108のポインタ162は、共有スタック105の第1の部分116(たとえば追加のエントリ)を指し、第1の部分116の制御権を取得することができる。同様に、図1の共有スタック105の第2の部分118が、第2のスレッド110に割り当てられ得る。さらに例示すると、第2のスレッド110は、共有スタック105の追加の空間を要求する、プロセスを実行することができる。第2のスレッド110のポインタ164は、共有スタック105の第2の部分118を指し、第2の部分118の制御権を取得することができる。
806において、第1の部分、第2の部分、またはこれら両方のサイズが、調整され得る。たとえば、第1の部分116のサイズが、第1のスレッド108の要求に従って、動的に調整され得る。第1のスレッド108のポインタ162は、第1の部分116のエントリを指して、要求を満たすように第1の部分116を小さくしまたは大きくすることができる。同様に、第2の部分118のサイズが、第2のスレッド110の要求に従って、動的に調整され得る。第2のスレッド110のポインタ164は、第2の部分118のエントリを指して、要求を満たすように第2の部分118を小さくしまたは大きくすることができる。
あるいは、808において、第1の部分、第2の部分、またはこれら両方のサイズが、固定され得る。たとえば、図1の第1の部分116、第2の部分118、またはこれら両方のサイズが、固定され得る。さらに例示すると、スレッド108、110、112、および114の1つまたは複数のポインタ162〜168(たとえば、最上位エントリポインタおよび最下位エントリポインタ)が、特定の一定の値に設定され得る。一定の値は、共有スタック105が、スレッド108、110、112、および114の間で等しく区分されるように、選択され得る。
810において、第1のスレッドに割り当てられる第1の部分のサイズが、公平性の方針に従って制限され得る。たとえば、第1のスレッド108に割り当てられる第1の部分116のサイズが、図1の公平性の方針140に従って制限され得る。さらに例示すると、第1の部分116のサイズは、第1の部分116と関連付けられるエントリの最大の数と、共有スタック105の使用率との少なくとも1つに基づいて、制限され得る。たとえば、公平性の方針140は、第1のスレッド108が公平な持ち分の閾値を満たした時、またはそれを超えた時、第1の部分116のサイズと、第1のスレッド106にアクセス可能な関連するエントリの数とを、制限することができる。公平な持ち分の閾値は、共有スタック105のエントリの全体の数を、現在のアクティブスレッド108、110、112、および114の数で割ることによって、求めることができる。
812において、第1のスレッドおよび第2のスレッドが、プロセッサによって実行され得る。たとえば、マルチスレッド化されたプロセッサコア106の1つが、第1のスレッド108および第2のスレッド110を実行することができる。
814において、第1のスレッドは、共有スタックの第1の部分の要素に関して、リターンアドレスをプッシュまたはポップすることが許可され得る。たとえば、第1のスレッド108は、第1の部分116のデータ要素124の1つにおいて、リターンアドレスのポップ(136)またはプッシュ(138)の実行を許可され得る。
816において、第2のスレッドは、共有スタックの第2の部分の要素に関して、リターンアドレスのプッシュまたはポップの実行が許可され得る。たとえば、第2のスレッド110は、第2の部分118の第2のデータ要素126において、リターンアドレスのポップ136またはプッシュ138の実行を許可され得る。
818において、第2の部分の中のデータ要素が、第1のスレッドを用いて上書きされ得る。たとえば、第2の部分118の第2のデータ要素126が、第1のスレッド108を用いて上書きされ得る。例示すると、第1のスレッド108は、第2の部分118の中の最も古いエントリを上書きさせる、プッシュ138を実行することができる。
したがって、図8は、複数のスレッドにわたりスタックアクセスを共有する方法800を示す。この方法は、各スレッドの現在の要求に従って、共有スタックへのアクセスを動的に割り当てるステップを含む。共有スタックのエントリは、スレッドに属するポインタを操作することによって、スレッドによって取得され上書きされ得る。共有スタック内に記憶されるアドレスエントリを移動する代わりに、スレッドポインタが更新されるので、処理能力および電力の消費が低減し得る。また、同等の性能を実現するのに必要なスタックエントリの数が少ないことで、さらに、ダイに必要な空間を小さくすることが容易になり得る。メモリの配分の改善によってさらに、スタックの性能が向上し得る。
図9を参照すると、共有スタック964のマルチスレッド化されたアクセスを実施する論理回路を含む、電子デバイスのある特定の例示的な実施形態のブロック図が示され、全般に900と称される。デバイス900は、メモリ932に結合された、マルチスレッド化されたプロセッサ910などのプロセッサを含む。マルチスレッド化されたプロセッサ910は、リターンスタックのような、複数のスレッドによってアクセス可能な共有スタック964を含む。説明のための例では、マルチスレッド化されたプロセッサ910は、図1〜図6の1つまたは複数に示されるシステムを含み、図7および図8の方法の1つまたは複数またはこれらの任意の組合せを実行することができる。図9に示される実施形態は持ち運び可能な電子デバイスを示すが、本明細書で開示されるような共有スタックの部分の割り当ては、プロセッサを含む任意のデバイスにおいて実施され得ることに留意されたい。たとえば、デバイス900、またはその何らかの一部は、代わりに、セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、固定位置のデータユニット、コンピュータ、サーバ、または、リターンアドレススタックを有する少なくとも1つのプロセッサを有する任意の他のデバイスに、組み込まれてもよい。
メモリ932は、命令950を記憶するコンピュータ可読有形媒体であってよく、命令950のコンピュータによる実行は、共有スタックの第1の部分の第1のスレッドへの割り当てを引き起こす。たとえば、命令950が、マルチスレッド化されたプロセッサ910によって実行されてよく、共有スタック964の第1の部分の第1のスレッドへの割り当てを引き起こす。命令950はさらに、共有スタック964の第2の部分の第2のスレッドへの割り当てを引き起こすように、実行されてよい。
図9はまた、マルチスレッド化されたプロセッサ910およびディスプレイ928に結合されたディスプレイコントローラ926も示す。コーダ/デコーダ(コーデック)934も、マルチスレッド化されたプロセッサ910に結合され得る。スピーカ936およびマイクロフォン938がコーデック934に結合され得る。
図9は、ワイヤレスコントローラ940が、マルチスレッド化されたプロセッサ910およびワイヤレスアンテナ942に結合され得ることも示す。ある特定の実施形態では、マルチスレッド化されたプロセッサ910、ディスプレイコントローラ926、メモリ932、コーデック934、およびワイヤレスコントローラ940は、システムインパッケージデバイスまたはシステムオンチップデバイス922に含まれる。特定の一実施形態では、入力デバイス930および電源944が、システムオンチップデバイス922に結合される。その上、ある特定の実施形態では、図9に示されるように、ディスプレイ928、入力デバイス930、スピーカ936、マイクロフォン938、ワイヤレスアンテナ942、および電源944は、システムオンチップデバイス922の外部にある。ただし、ディスプレイ928、入力デバイス930、スピーカ936、マイクロフォン938、ワイヤレスアンテナ942、および電源944の各々は、インターフェースまたはコントローラなど、システムオンチップデバイス922の構成要素に結合され得る。
さらに、本明細書で開示した実施形態に関して説明した様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得ることが、当業者には諒解されよう。上で、様々な例示的な構成要素、ブロック、構成、モジュール、回路、およびアルゴリズムが、全般にそれらの機能に関して説明されてきた。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、具体的な適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能を具体的な適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を生じるものと解釈すべきではない。
本明細書で開示する実施形態に関して説明する方法またはアルゴリズムのポインタは、直接ハードウェアで具現化されるか、プロセッサによって実行されるソフトウェアモジュールで具現化されるか、またはその2つの組合せで具現化され得る。ソフトウェアモジュールは、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、または当技術分野で知られている他の形態の記憶媒体中に存在し得る。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体はプロセッサと一体であり得る。プロセッサおよび記憶媒体は、特定用途向け集積回路(ASIC)に存在し得る。ASICは、コンピューティングデバイスまたはユーザ端末に存在し得る。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末の中に、個別の構成要素として存在し得る。
開示される実施形態の上記の説明は、当業者が、開示された実施形態を実現または利用するのを可能にするために提供される。これらの実施形態への様々な修正が、当業者には容易に明らかであり、本明細書で定義される原理は、本開示の範囲から逸脱することなく、他の実施形態に適用され得る。したがって、本開示は、本明細書で示される実施形態に限定されることは意図されず、以下の特許請求の範囲で定義されるような原理および新規の特徴と矛盾しない、可能な最大の範囲を認められるべきである。
102 コントローラ
104 メモリ
105 共有スタック
106 マルチスレッド化されたプロセッサコア
108 第1のスレッド
116 第1の部分
124 第1のデータ要素
134 リターンデータ(たとえば機能リターンアドレス)
136 ポップ要求
138 プッシュ要求
140 公平性の方針
142 スタックポインタ
150 メモリ動作
160 マルチスレッド化されたプロセッサ
162 スレッド0ポインタ
224 最上位エントリポインタ
226 スタックポインタの最上位
228 スタックポインタの最下位
230 最下位エントリポインタ
232 スレッドアクティブステータスビット
234 エンプティ/フルビット
236 ラップトスタックビット

Claims (29)

  1. 共有スタックと、
    前記共有スタックの第1の部分を第1のスレッドに選択的に割り当て、前記共有スタックの第2の部分を第2のスレッドに選択的に割り当てるように動作可能な、コントローラと
    を含む、装置。
  2. 前記第1の部分が、前記第2の部分と非連続である、請求項1に記載の装置。
  3. 前記第1の部分が、前記第2の部分と連続である、請求項1に記載の装置。
  4. 前記共有スタックが、ハードウェアスタックおよびランダムアクセスメモリ(RAM)からなる群から選択される、請求項1に記載の装置。
  5. 前記共有スタックと関連付けられるスタック操作要求を生成するように構成される、マルチスレッド化されたプロセッサコアを含む、プロセッサをさらに含む、請求項1に記載の装置。
  6. 前記コントローラが、スタック操作要求に応答するように動作可能である、請求項1に記載の装置。
  7. 前記スタック操作要求が、プッシュとポップの少なくとも1つを含む、請求項6に記載の装置。
  8. 前記スタック操作要求が、機能リターンアドレスを含む、請求項6に記載の装置。
  9. 前記第1のスレッドが、前記第2の部分内でデータ要素を上書きする、請求項1に記載の装置。
  10. 前記第1の部分および前記第2の部分が動的に割り当てられる、請求項1に記載の装置。
  11. 前記コントローラが、
    前記第1のスレッドの書き込み先になるように構成される前記共有スタックの最下位のエントリを、指すように構成される、最下位エントリポインタと、
    前記第1のスレッドの書き込み先になるように構成される前記共有スタックの最上位のエントリを、指すように構成される、最上位エントリポインタと、
    前記第1のスレッドと関連付けられる前記共有スタックの最も新しく書き込まれたエントリを指すように構成される、スタックの最上位ポインタと、
    前記第1のスレッドと関連付けられる前記共有スタックの最も古い有効なエントリを指すように構成される、スタックの最下位ポインタと
    を含む、請求項1に記載の装置。
  12. 前記コントローラが、前記第1のスレッドがプロセスを実行しているかどうかを示すように構成されるスレッドアクティブステータスビットを含む、請求項1に記載の装置。
  13. 前記コントローラが、前記第1のスレッドと関連付けられる前記共有スタックのエントリが使われるかどうかを示すように構成されるエンプティビットを含む、請求項1に記載の装置。
  14. 前記コントローラが、前記第1のスレッドが前記共有スタック内でラップしたかどうかを示すように構成されるラップトスタックビットを含む、請求項1に記載の装置。
  15. 前記コントローラが、機能リターンアドレスを予測するように構成され、第1の命令が前記リターンアドレスを決定し、共有スタックの喪失が、前記機能リターンアドレスを決定するための第2の命令を引き起こす、請求項1に記載の装置。
  16. セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、固定位置のデータユニット、およびコンピュータからなる群から選択されるデバイスをさらに含み、前記コントローラと前記メモリの少なくとも1つが組み込まれる、請求項1に記載の装置。
  17. プロセッサの複数のスレッドによって共有されるスタックを管理する方法であって、
    共有スタックの第1の部分を第1のスレッドに割り当てるステップと、
    前記共有スタックの第2の部分を第2のスレッドに割り当てるステップと
    を含む、方法。
  18. 前記第1のスレッドを用いて、前記第2の部分内でデータ要素を上書きするステップをさらに含む、請求項17に記載の方法。
  19. 前記共有スタックの前記第1の部分の要素に関して、リターンアドレスのプッシュとポップの少なくとも1つを前記第1のスレッドが行うのを可能にするステップをさらに含む、請求項17に記載の方法。
  20. 前記共有スタックの前記第2の部分の要素に関して、リターンアドレスのプッシュとポップの少なくとも1つを前記第2のスレッドが行うのを可能にするステップをさらに含む、請求項19に記載の方法。
  21. メモリの一部の中に前記共有スタックを形成するステップをさらに含む、請求項17に記載の方法。
  22. 前記共有スタックを用いてリターンアドレスを予測するステップをさらに含む、請求項17に記載の方法。
  23. 前記第1の部分および前記第2の部分を動的に割り当てるステップをさらに含む、請求項17に記載の方法。
  24. 前記第1の部分と前記第2の部分のうちの少なくとも1つのサイズを調整するステップをさらに含む、請求項17に記載の方法。
  25. 前記第1の部分と前記第2の部分のうちの少なくとも1つのサイズを固定するステップをさらに含む、請求項17に記載の方法。
  26. 公平性の方針に従って、前記第1のスレッドに割り当てられた前記第1の部分のサイズを制限するステップをさらに含む、請求項17に記載の方法。
  27. 前記公平性の方針に従って前記第1の部分の前記サイズを制限するステップが、前記第1のスレッドと関連付けられるエントリの最大の数と、前記共有スタックの使用率との少なくとも1つに基づいて、前記第1の部分の前記サイズを制限するステップを含む、請求項26に記載の方法。
  28. コンピュータによって実行可能な命令を記憶するコンピュータ可読有形媒体であって、前記命令が、
    共有スタックの第1の部分を第1のスレッドに割り当てるように、前記コンピュータによって実行可能な命令と、
    前記共有スタックの第2の部分を第2のスレッドに割り当てるように、前記コンピュータによって実行可能な命令と
    を含む、コンピュータ可読有形媒体。
  29. 前記命令が、セットトップボックス、音楽プレーヤ、ビデオプレーヤ、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、携帯情報端末(PDA)、固定位置のデータユニット、およびコンピュータからなるグループから選択されたデバイスに組み込まれるプロセッサによって実行可能である、請求項28に記載のコンピュータ可読有形媒体。
JP2013519842A 2010-07-16 2011-07-15 共有スタックの部分を割り当てるためのシステムおよび方法 Expired - Fee Related JP5841142B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/837,572 US20120017214A1 (en) 2010-07-16 2010-07-16 System and method to allocate portions of a shared stack
US12/837,572 2010-07-16
PCT/US2011/044092 WO2012009587A1 (en) 2010-07-16 2011-07-15 System and method to allocate portions of a shared stack

Publications (2)

Publication Number Publication Date
JP2013534681A true JP2013534681A (ja) 2013-09-05
JP5841142B2 JP5841142B2 (ja) 2016-01-13

Family

ID=44583742

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013519842A Expired - Fee Related JP5841142B2 (ja) 2010-07-16 2011-07-15 共有スタックの部分を割り当てるためのシステムおよび方法

Country Status (6)

Country Link
US (1) US20120017214A1 (ja)
EP (1) EP2593861B1 (ja)
JP (1) JP5841142B2 (ja)
KR (1) KR101378390B1 (ja)
CN (1) CN103003791B (ja)
WO (1) WO2012009587A1 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9213551B2 (en) * 2011-03-11 2015-12-15 Oracle International Corporation Return address prediction in multithreaded processors
US9354886B2 (en) 2011-11-28 2016-05-31 Apple Inc. Maintaining the integrity of an execution return address stack
US9405544B2 (en) * 2013-05-14 2016-08-02 Apple Inc. Next fetch predictor return address stack
CN104424032A (zh) * 2013-08-29 2015-03-18 华为技术有限公司 多线程处理器中分支预测资源的调度方法、设备和系统
CN105094750B (zh) * 2014-04-25 2018-08-21 华为技术有限公司 一种多线程处理器的返回地址预测方法和装置
CN104572448A (zh) * 2014-12-23 2015-04-29 大唐移动通信设备有限公司 一种线程堆栈的使用情况的实现方法和装置
US10108423B2 (en) * 2015-03-25 2018-10-23 International Business Machines Corporation History buffer with single snoop tag for multiple-field registers
US9852075B2 (en) 2015-11-20 2017-12-26 International Business Machines Corporation Allocate a segment of a buffer to each of a plurality of threads to use for writing data
US9442674B1 (en) 2015-11-20 2016-09-13 International Business Machines Corporation Using a plurality of sub-buffers and a free segment list to allocate segments to a plurality of threads to use for writing data
US9571578B1 (en) 2015-11-20 2017-02-14 International Business Machines Corporation Utilization based multi-buffer self-calibrated dynamic adjustment management
US9483410B1 (en) 2015-11-20 2016-11-01 International Business Machines Corporation Utilization based multi-buffer dynamic adjustment management
US10747539B1 (en) 2016-11-14 2020-08-18 Apple Inc. Scan-on-fill next fetch target prediction
US10649786B2 (en) * 2016-12-01 2020-05-12 Cisco Technology, Inc. Reduced stack usage in a multithreaded processor
US10099103B2 (en) 2017-01-17 2018-10-16 Acushnet Company Golf club having damping treatments for improved impact acoustics and ball speed
CN107316132A (zh) * 2017-06-09 2017-11-03 浪潮金融信息技术有限公司 流程控制方法及装置、计算机可读存储介质、终端
CN112055853B (zh) * 2018-03-31 2024-04-09 美光科技公司 用于多线程自调度可重新配置计算架构的电路及系统
US11748207B2 (en) 2021-09-27 2023-09-05 Rubrik, Inc. Scalable group backup in relational databases
US20230095814A1 (en) * 2021-09-27 2023-03-30 Rubrik, Inc. Server group fetch in database backup

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6386035A (ja) * 1986-09-30 1988-04-16 Ricoh Co Ltd スタツクのプ−ル管理方式
JP2001043093A (ja) * 1999-07-30 2001-02-16 Kenji Kobayashi スタックを共用するタスク・コンテキスト・スイッチ
JP2003271448A (ja) * 2002-03-18 2003-09-26 Fujitsu Ltd スタック管理方法及び情報処理装置
US20050066305A1 (en) * 2003-09-22 2005-03-24 Lisanke Robert John Method and machine for efficient simulation of digital hardware within a software development environment
US20060095719A1 (en) * 2004-09-17 2006-05-04 Chuei-Liang Tsai Microcontroller having partial-twin structure
US20060230408A1 (en) * 2005-04-07 2006-10-12 Matteo Frigo Multithreaded processor architecture with operational latency hiding
JP2007500886A (ja) * 2003-07-25 2007-01-18 ラザ マイクロエレクトロニクス,インク. 最新型プロセッサ
JP2008003915A (ja) * 2006-06-23 2008-01-10 Denso Corp 電子機器
JP2009251681A (ja) * 2008-04-01 2009-10-29 Canon Inc スタック領域の拡張方法及びプログラム
JP2009540438A (ja) * 2006-06-06 2009-11-19 クゥアルコム・インコーポレイテッド プロセッサコアスタック拡張

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8037224B2 (en) * 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US9021239B2 (en) * 2005-04-22 2015-04-28 Nxp, B.V. Implementation of multi-tasking on a digital signal processor with a hardware stack
US7769962B2 (en) * 2005-12-12 2010-08-03 Jeda Technologies, Inc. System and method for thread creation and memory management in an object-oriented programming environment
WO2008155807A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 情報処理装置と負荷調停制御方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6386035A (ja) * 1986-09-30 1988-04-16 Ricoh Co Ltd スタツクのプ−ル管理方式
JP2001043093A (ja) * 1999-07-30 2001-02-16 Kenji Kobayashi スタックを共用するタスク・コンテキスト・スイッチ
JP2003271448A (ja) * 2002-03-18 2003-09-26 Fujitsu Ltd スタック管理方法及び情報処理装置
JP2007500886A (ja) * 2003-07-25 2007-01-18 ラザ マイクロエレクトロニクス,インク. 最新型プロセッサ
US20050066305A1 (en) * 2003-09-22 2005-03-24 Lisanke Robert John Method and machine for efficient simulation of digital hardware within a software development environment
US20060095719A1 (en) * 2004-09-17 2006-05-04 Chuei-Liang Tsai Microcontroller having partial-twin structure
US20060230408A1 (en) * 2005-04-07 2006-10-12 Matteo Frigo Multithreaded processor architecture with operational latency hiding
JP2009540438A (ja) * 2006-06-06 2009-11-19 クゥアルコム・インコーポレイテッド プロセッサコアスタック拡張
JP2008003915A (ja) * 2006-06-23 2008-01-10 Denso Corp 電子機器
JP2009251681A (ja) * 2008-04-01 2009-10-29 Canon Inc スタック領域の拡張方法及びプログラム

Also Published As

Publication number Publication date
CN103003791B (zh) 2016-04-20
EP2593861B1 (en) 2018-05-02
JP5841142B2 (ja) 2016-01-13
EP2593861A1 (en) 2013-05-22
WO2012009587A1 (en) 2012-01-19
KR101378390B1 (ko) 2014-03-24
CN103003791A (zh) 2013-03-27
US20120017214A1 (en) 2012-01-19
KR20130069727A (ko) 2013-06-26

Similar Documents

Publication Publication Date Title
JP5841142B2 (ja) 共有スタックの部分を割り当てるためのシステムおよび方法
KR101854020B1 (ko) 비휘발성 메모리에서 비동기 다이 동작을 위한 방법 및 시스템
US8799554B1 (en) Methods and system for swapping memory in a virtual machine environment
US9336133B2 (en) Method and system for managing program cycles including maintenance programming operations in a multi-layer memory
US8250332B2 (en) Partitioned replacement for cache memory
KR101068735B1 (ko) 프로세서 코어 스택 익스텐션
US7533237B1 (en) Off-chip memory allocation for a unified shader
US8407443B1 (en) Off-chip out of order memory allocation for a unified shader
US6931497B2 (en) Shared memory management utilizing a free list of buffer indices
US7574562B2 (en) Latency-aware thread scheduling in non-uniform cache architecture systems
US10705986B2 (en) Flash interface controller and operation command processing method
US11698757B2 (en) Memory system and method of controlling nonvolatile memory
US9990299B2 (en) Cache system and method
JP5730126B2 (ja) データ供給装置、キャッシュ装置、データ供給方法、キャッシュ方法およびプログラム
US10534712B1 (en) Service level agreement based management of a pre-cache module
EP2506158A1 (en) Cross-region access method for embedded file system
Min et al. {eZNS}: An elastic zoned namespace for commodity {ZNS}{SSDs}
TW201351276A (zh) 計算工作的排程和執行
JP4409568B2 (ja) 帯域制御プログラム及びマルチプロセッサシステム
CN105612505B (zh) Cpu调度的方法和装置
JP2022076620A (ja) メモリシステムおよび制御方法
US8762647B2 (en) Multicore processor system and multicore processor
JP2023544009A (ja) 複数のopキャッシュパイプラインを有するプロセッサ
JP2016153932A (ja) 書き変え平準化装置、方法、および、プログラム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131225

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140407

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150309

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151019

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151112

R150 Certificate of patent or registration of utility model

Ref document number: 5841142

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees