【文献】
z/Architecture解説書,[online],日本,日本アイ・ビー・エム株式会社,2004年 3月,第1版,7-112頁〜7-127頁,[平成27年1月22日検索]、インターネットURL:http://publibfp.dhe.ibm.com/epubs/pdf/a8887730.pdf
【文献】
木村 啓二 他,「マルチコアにおけるソフトウェア」,情報処理,日本,社団法人情報処理学会,2006年 1月15日,第47巻 第1号,17頁〜23頁
【文献】
二木 厚吉 他,CafeOBJ入門(1),コンピュータソフトウェア,日本,日本ソフトウェア科学会,2008年 4月24日, VOL.25 NO.2,1頁〜13頁
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0019】
図1を参照すると、単一のアトミック単位として複数の命令を実行するよう動作可能な装置の特定の例示的な実施形態が示され、全体的に100と称される。装置100は、図示するように、命令キャッシュ110、シーケンサ114、メモリ102、第1のロード/ストアユニット118、第2のロード/ストアユニット120、実行ユニット122、試験論理回路124、および汎用レジスタ(複数可)(たとえば、レジスタファイル)126を含む。
【0020】
装置100は、バスインターフェース108およびデータキャッシュ112をさらに含む。メモリ102は、バスインターフェース108に結合される。加えて、データキャッシュ112は、バスインターフェース108に結合される。データキャッシュ112またはメモリ102にデータを提供することができる。データキャッシュ112内に記憶されたデータは、バスインターフェース108を介してメモリ102に提供され得る。したがって、メモリ102は、バスインターフェース108を介してデータキャッシュ112からデータを取り出すことができる。
【0021】
装置100は、スーパーバイザ制御レジスタ132およびグローバル制御レジスタ134をさらに含む。シーケンサ114は、スーパーバイザ制御レジスタ132およびグローバル制御レジスタ134に記憶されたデータに応答することが可能である。たとえば、スーパーバイザ制御レジスタ132およびグローバル制御レジスタ134は、汎用割込み116などの割込みを受け入れるかどうかを決定し、命令の実行を制御するためにシーケンサ114内の制御論理回路によってアクセスされ得るビットを記憶することができる。
【0022】
特定の実施形態では、装置100は、インターリーブ型マルチスレッドプロセッサである。命令キャッシュ110は、インターリーブ型マルチスレッドプロセッサの特定のスレッドに関連し得る複数の現行命令レジスタを介してシーケンサ114に結合され得る。
【0023】
メモリ102、汎用レジスタ(複数可)126、およびデータキャッシュ112のうちの1つまたは複数は、複数の要求元、たとえばマルチスレッドプロセッサの複数のスレッドまたはマルチプロセッサシステムの複数のプロセッサの間で共有される可能性がある。特定の実施形態では、メモリ102、汎用レジスタ(複数可)126、およびデータキャッシュ112のうちの1つまたは複数は、
図3を参照してさらに後述するように、先入れ先出し(FIFO)バッファ、およびFIFOバッファの次の利用可能なデータエントリを指すように構成された書込みインデックスを含む。
【0024】
動作中、図示されたVLIW命令パケット101などの超長命令語(VLIW)命令パケットは、メモリ102から取り出され、命令キャッシュ110に提供され得る。
図1に示すように、VLIW命令パケット101は、条件付きストア命令103およびロードまたはストア命令104を含む。VLIW命令パケット101は、命令キャッシュ110内に記憶することができ、たとえば入力111を介して、シーケンサ114によって取り出し可能である可能性がある。
【0025】
シーケンサ114は、VLIW命令パケット101を取り出すことに加えて、汎用割込み116および他の入力に応答する可能性がある。シーケンサ114は、命令103および104などの、VLIW命令または個々の命令を実行ユニットにルーティングすることができる。特定の例示的な実施形態によれば、VLIW命令パケット101は、パラレルまたはシリアルの実行のためにVLIW命令パケット101内の各命令をルーティングすべきかどうかをシーケンサ114に指示するデータを含み得る。
【0026】
たとえば、
図1に示すように、VLIW命令パケット101内の条件付きストア命令103は、シーケンサ114によって第1のロード/ストアユニット118にルーティングされ、ロードまたはストア命令104は、シーケンサ114によって第2のロード/ストア実行ユニット120にルーティングされる。2つのロード/ストア実行ユニット118および120が
図1に示されるが、装置100は、追加のロード/ストアユニット、および算術論理ユニットなどの他のタイプの実行ユニット、または実行ユニット122などの他の代表的な実行ユニットを含み得ることを理解されたい。
【0027】
第1のロード/ストアユニット118および第2のロード/ストアユニット120による実行の後、実行された命令の出力は、試験論理回路124に提供される。たとえば、第1のロード/ストアユニット118の出力は、試験論理回路124の第1の入力に提供され、第2のロード/ストアユニット120の出力は、試験論理回路124の第2の入力に提供される。加えて、図示された実行ユニット122などの他の実行ユニットの出力は、追加の入力として受け取られる実行ユニット出力128として汎用レジスタ(複数可)126に提供され得る。
【0028】
試験論理回路124は、条件付きストア命令103に関連する条件が成功したかどうかを判定するための論理回路を含む。たとえば、試験論理回路124は、条件付きストア命令103が成功したか、または失敗したかどうかを判定するための組込み型論理回路を含み得る。加えて、条件付きストア命令103の成功または失敗の判定に基づいて、ロードまたはストア命令104の出力は、選択的に処分され得るか、または汎用レジスタ(複数可)126への出力として提供され得る。したがって、試験論理回路124は、VLIWパケット101内の複数の命令103および104のアトミックな実行を可能にすることができる。
【0029】
命令103および104をアトミックに実行することは、両命令を完全に実行するか、または命令をまったく実行しないかのいずれかを含む可能性がある。たとえば、第1のメモリ動作(たとえば、条件付きストア命令103)と第2のメモリ動作(たとえばロードまたはストア命令104)の両方が成功するか、または第1および第2のメモリ動作の両方が失敗するかのいずれかである。加えて、命令をアトミックに実行することは、条件付きストア命令103に関連する成功または失敗を示す少なくとも1つの出力を生成するステップを含み得る。たとえば、試験論理回路124は、試験された条件付きストア命令103の成功または失敗を示す少なくとも1つの出力を生成することができる。特定の例示的な実施形態では、成功または失敗を示す少なくとも1つの出力は、単一ビットである。
【0030】
条件付きストア命令103の実行が成功すると、試験論理回路124は第1のメモリ命令103と第2のメモリ命令104の両方を実行した結果を示す出力を汎用レジスタ(複数可)126に提供し得る。特定の例示的な実施形態では、マルチスレッド動作の書込みステージの間、汎用レジスタ(複数可)126に書き込まれる。動作の実行の結果は、汎用レジスタ(複数可)126内に記憶され、要求時にメモリ102に提供され得る。したがって、VLIW命令パケット101内の複数の命令は、単一のアトミック単位として、および単一のメモリトランザクションの一部としてアトミックに実行され得る(たとえば、複数の命令の実行は、単一の成功または単一の失敗に関連付けられ得る)。
【0031】
装置100は、VLIW命令を実行するよう動作可能なVLIWプロセッサを含み得る。たとえば、VLIWプロセッサは、シーケンサ114、実行ユニット118〜122のうちの1つまたは複数、および場合によっては試験論理回路124などの、複数の実行要素を含み得る。加えて、VLIWプロセッサは、実行前に複数のVLIW命令パケットを記憶するように構成された命令キャッシュ110を含み得る。特定の実施形態では、VLIW命令のうちの少なくとも1つは、第1のロードまたはストア命令(たとえば、条件付きストア命令103)および第2のロードまたはストア命令(たとえば、ロード命令またはストア命令104)を含む。第1の命令および第2の命令は、単一のアトミック単位として実行されることが可能であり、第1および第2の命令のうちの少なくとも1つは、条件付きストア命令である。たとえば、
図1を参照すると、第1の命令103は、条件付きストア命令である。第1の命令103は、条件付きストア命令として示されているが、第1の命令は、代わりに、ロードまたはストア命令(たとえば、ロード命令、ストア命令、ロードロック命令、または条件付きストア命令)である可能性がある一方、第2の命令は条件付きストア命令であることを理解されたい。
【0032】
装置100は、VLIW命令を実行するための手段と、VLIW命令を実行するための手段に応答する、データを記憶するための手段とを提供する。たとえば、VLIW命令を実行するための手段は、説明されたVLIWプロセッサを含むことができ、データを記憶するための手段は、汎用レジスタ(複数可)126、メモリ102、およびデータキャッシュ112などの、説明されたメモリ要素のうちの1つまたは複数を含むことができる。
【0033】
諒解されるように、
図1の装置100は、命令に対応するメモリ位置をロックすることなく、条件付きストア命令103およびロードまたはストア命令104などの命令のアトミックな実行を可能にすることができる。具体的には、命令は、単一のアトミック単位として実行され得る。命令を単一のアトミック単位として実行することにより、資源(たとえば、データキャッシュ112によってキャッシュされ得る、メモリ102内の共有されるデータ構造)の複数の要求元(たとえば、マルチスレッドプロセッサのスレッド)は、ロックが解除されるか、またはアクセスが許可される1つまたは複数プロセッササイクルの間、待機することなく、資源を効率的に共有することができる。
【0034】
図2を参照すると、装置100の第1のロード/ストアユニット118の特定の例示的な実施形態が示されている。ロード/ストアユニット118は、第1のスレッドまたはプロセッサに割り当てられた第1のアドレス予約レジスタ(ARR)204を含む。ロード/ストアユニット118は、追加のARRを含み得る。たとえば、第1のロード/ストアユニット118は、代表的な第2のARR232を含む。
【0035】
特定のスレッドまたはプロセッサに割り当てられた各ARR(たとえば、第1のARR204)は、1つまたは複数の予約済みアドレスレジスタを含み得る。たとえば、第1のARR204は、代表的な第1の予約済みアドレスレジスタ208および第2の予約済みアドレスレジスタ220を含む。第1の予約済みアドレスレジスタ208は、第1の値212および第1の代表的な有効ビット216を含み得る。同様に、第2の予約済みアドレスレジスタ220は、第2の代表的な値224および第2の代表的な有効ビット228を含み得る。
【0036】
同様に、第2のARR232は、第1の値240および第1の有効ビット244を含む第1の予約済みアドレスレジスタ236を含み得る。第2のARR232は、第2の値250および第2の有効ビット254を含む第2の予約済みアドレスレジスタ246をさらに含み得る。したがって、特定のスレッドまたはプロセッサに割り当てられたARRの各々は、複数の予約済みアドレスレジスタを含み得る。加えて、予約済みアドレスレジスタの各々は、データ値(たとえば、監視されるメモリ位置のアドレス)と、アドレスレジスタ内に記憶され、データ値に関連する有効ビットとを含み得る。
【0037】
特定の実施形態では、装置は、ロード/ストアユニットを含むマルチスレッドプロセッサを含む。たとえば、
図1に示されるように、装置100は、代表的なロード/ストアユニット118を有するマルチスレッドプロセッサを含む。ロード/ストアユニット118は、各スレッドに割り当てられた複数のアドレス予約レジスタを含む。たとえば、予約済みアドレスレジスタ208および220は、第1のARR204を介して第1の代表的なスレッドに割り当てられる。
【0038】
各予約済みアドレスレジスタは、ロードロックされた条件付きストア動作の対に関連する予約済みアドレスを記憶するよう動作可能であり得る。たとえば、第1の予約済みアドレスレジスタ208内の値212は、(たとえば、装置100内の)VLIWプロセッサによって実行されるべきロードロックされた条件付きストア動作の対に関連する予約済みアドレスを表す可能性がある。具体的な例として、ロードロックされた条件付きストア動作の対の第1の命令は、条件付き命令である可能性があり、ロードロックされた条件付きストア動作の対の第2の命令は、ロードロックされた命令である可能性がある。動作の対の命令の各々は、第1の命令に関連する値が要求元(たとえば、スレッドまたはプロセッサ)によって予約されるようにロードロックされ得る。
【0039】
ロードロック動作を実施するために、予約済みアドレスレジスタ208は、値212内に含まれるアドレスによって識別される記憶されたデータ値(たとえば、メモリアドレス)を変化させる前に要求元(たとえば、プロセッサ)によってチェックされ得る第1の有効ビット216を含む。有効ビット216は、値212が第1の予約済みアドレスレジスタ208に設定されてから(たとえば、値212に対応するメモリ位置が要求元によって予約された際)、値212によって識別されるアドレスが書込み動作に使用されてきたか否かを示し得る。
【0040】
別の特定の実施形態では、プロセッサは、複数のプロセッサアーキテクチャに含まれ、複数のプロセッサの各々は、複数のアドレス予約レジスタを含む。本実施形態では、ARR204、232の各々は、マルチプロセッサアーキテクチャの別個で独立したプロセッサに割り当てられる。そうでない場合、説明するように、ARR204、232の各々は、マルチスレッドアーキテクチャの特定のスレッドに割り当てられ得る。
【0041】
ARRのチェックは、ロードロックされた条件付きストア動作の対を完了する前に実行され得る。チェックプロセスは、(たとえば、有効ビットの値を判定することによって)ARRのうちの1つに対応するデータが変化したかどうかを判定するステップを含み得る。加えて、ロードロックされた条件付きストア動作の対は、ARRのうちの1つだけに対応するデータが変化したと判定することに応答して失敗となる可能性がある(たとえば、ARRのうちの1つに対応するデータが変化したと判定することは、ロードロックされた条件付きストア動作の対が失敗したと判定するのに十分である可能性がある)。
【0042】
特定の実施形態では、VLIWプロセッサの少なくとも1つのメモリ位置は、実行成功の指示に応答して、条件付きストア命令に対応するデータにより更新される。VLIWプロセッサの少なくとも1つのメモリ位置は、実行失敗の指示に応答して、条件付きストア命令に対応するデータによっては更新されない。たとえば、試験論理回路124によって出力されたデータを受け入れる書込みステージは、条件付きストア命令の実行に関連する結果をレジスタファイルに選択的に書き込むことができる。実行成功を示すと、汎用レジスタ(複数可)126内の少なくとも1つのメモリ位置を更新することができるが、故障を示すと、汎用レジスタ(複数可)126内のメモリ位置を更新することができない。したがって、試験論理回路124は、条件付きストア命令103の試験論理評価の結果に応じて様々な命令を実行した結果を選択的に書き込むことができる。したがって、試験論理回路124は、汎用レジスタ(複数可)126とともに、単一のVLIW命令パケットによって発された複数のメモリ動作をアトミックに実行するために使用することができ、単一のVLIW命令パケット内の複数のメモリ動作のアトミックな実行は、VLIWマルチスレッドプロセッサアーキテクチャまたはマルチプロセッサアーキテクチャの実行単位のコンテキスト内で行われ得る。
【0043】
図2のロード/ストアユニット118により、資源の各要求元は、別の要求元が資源を変更したかどうかを判定することができる可能性があることが諒解されよう。具体的には、予約済みアドレスおよび対応する有効ビットは、各要求元に割り当てられたARRに記憶され得る。(たとえば、ARRの値としてメモリ位置のアドレスを記憶することによって)メモリ位置を予約する要求元は、有効ビットを参照することにより別の要求元がメモリ位置を変更した(たとえば、上書きした)か否かを判定することができる。たとえば、メモリ位置が変更された場合、メモリ位置を予約した要求元は、予約済みのメモリ位置が更新済みデータを含み、前のデータがこれ以上有効でないと判定する可能性がある。具体的には、メモリ位置が変化した場合、動作の実行は、失敗したと見なされる可能性があり、後に再試行される可能性がある。したがって、複数の要求元は、資源へのアクセスを制限することなく(たとえば、資源をロックすることなく)、資源へのアクセスを共有することができる。
【0044】
図3を参照すると、マルチスレッドプロセッサまたはマルチプロセッサアーキテクチャを含む装置300の特定の例示的な実施形態が示されている。装置300は、1つまたは複数の超長命令語(VLIW)プロセッサ、先入れ先出し(FIFO)バッファ370、書込みインデックス360、および少なくとも1つのロード/ストアユニット118を含む。装置300は、図示された第1のロード/ストアユニット118および第2のロード/ストアユニット120などの複数のロード/ストアユニットを含み得る。3つ以上のロード/ストアユニットを装置300内に組み込むことができることを理解されたい。加えて、FIFOバッファ370および書込みインデックス360は、複数の要求元(たとえばマルチスレッドプロセッサのスレッドまたはマルチプロセッサアーキテクチャのプロセッサ)の間で共有されるメモリ資源(たとえば、
図1の汎用レジスタ(複数可)126、データキャッシュ112、およびメモリ102のうちの1つまたは複数)に対応する可能性がある。
【0045】
FIFOバッファ370は、第1のデータエントリ372および第2のデータエントリ374などの複数のデータエントリを含む。書込みインデックス360は、複数のデータエントリの各々を選択的に指すよう動作可能である。たとえば、書込みインデックス値364(図示)は、最初、第2のデータエントリ374を指す(たとえば、関連するアドレスを記憶する)が、第3のデータエントリ376または第4のデータエントリ378などの、FIFOバッファ370の他のデータエントリを選択的に指す可能性がある。特定の例示的な実施形態では、書込みインデックス値364は、FIFOバッファ370の次の利用可能なデータエントリを示す。
【0046】
図1のロード/ストアユニット118に対応するロード/ストアユニット118は、ロードロックされた動作の対を単一のアトミック単位として実行するよう動作可能であり、条件付きストア動作の対を単一のアトミック単位として実行するようさらに動作可能である。たとえば、ロードロックされた動作の代表的な第1の対381は、第1のスレッドまたはプロセッサ301の実行可能プログラム303内の、ロードロックされた書込みインデックス命令およびロードロックされたデータ命令(すなわち、
図3に示されるLL(WriteIndex)命令およびLL(data)命令)を含むものとして示されている。さらなる例として、実行可能プログラム303の条件付きデータストア命令および条件付き書込みインデックスストア命令(すなわち、
図3に示されるSC(data)命令およびSC(WriteIndex+1)命令)は、条件付きストア動作の代表的な第1の対382を形成する。
【0047】
動作時、第1のスレッドまたはプロセッサ301は、ロードロックされた動作の第1の対381を含む実行可能プログラム303を受け取る可能性がある。たとえば、第1のスレッドまたはプロセッサ301は、
図1の装置100のメモリ102から実行可能プログラム303を受け取る可能性がある。第1のスレッドまたはプロセッサ301は、応答して、書込みインデックス360をロードロックし、次の利用可能なデータエントリ(たとえば、第2のデータエントリ374)をロードロックすることができる。すなわち、第1のスレッドまたはプロセッサ301に対応し、第1のスレッドまたはプロセッサ301に応答するメモリアドレスを予約することができる第1のARR204および第3のARR304は、第2のデータエントリ374に対応するアドレス、および書込みインデックス360に対応するアドレスを予約することができる(
図3に点線で示される)。
【0048】
ロードロックされた動作の第1の対に関連する有効ビットは、次の利用可能なデータエントリを予約する第1のスレッドまたはプロセッサ301に応答して生成され得る。たとえば、有効ビット216および有効ビット328が、最初は、設定され得る。特定の例示的な実施形態では、
図3に示されるように、有効ビットは、最初は、図示するように「1」に設定される。別の特定の例示的な実施形態では、有効ビットは、最初は、「0」に設定される。したがって、
図3の特定の例示的な実施形態では、第1のスレッドまたはプロセッサ301は、第1のARR204および第3のARR304を介して次の利用可能なデータエントリを予約することができることが諒解されよう。
【0049】
特定の例示的な実施形態では、第2のスレッドまたはプロセッサ302は、ロードロックされた動作の第2の対383を含む実行可能プログラム305を受け取ることが可能である。第2のスレッドまたはプロセッサ302は、応答して、書込みインデックス360をロードロックし、次の利用可能なデータエントリ(たとえば、第2のデータエントリ374)をロードロックすることができる。第2のスレッドまたはプロセッサ302に対応し、第2のスレッドまたはプロセッサ302に応答するメモリアドレスを予約することができる第2のARR232および第4のARR332は、第2のデータエントリ374に対応するアドレス、および書込みインデックス360に対応するアドレスを予約することができる。
【0050】
ロードロックされた動作の第2の対に関連する有効ビットは、(依然として第2のデータエントリ374である可能性がある)次の利用可能なデータエントリを予約する第2のスレッドまたはプロセッサ302に応答して生成され得る。たとえば、有効ビット244および有効ビット354が、最初は、「1」に設定され得る。したがって、第1のスレッドまたはプロセッサ301および第2のスレッドまたはプロセッサ302は各々、FIFOバッファ370の次の利用可能なデータエントリを予約したことが諒解されよう。以下でさらに説明されるように、同じ資源(たとえば、FIFOバッファ370および書込みインデックス360)にアクセスしようとする複数の要求元(たとえば、第1のスレッドまたはプロセッサ301および第2のスレッドまたはプロセッサ302)によってもたらされる潜在的なコンフリクトを回避することができる。
【0051】
第1のスレッドまたはプロセッサ301は、ロードロックされた動作の第1の対381を実行した後、条件付きストア動作の第1の対382を実行しようとする可能性がある。第1のスレッドまたはプロセッサ301は、条件付きストア動作の第1の対を正常に完了することができるかどうかを判定するために有効ビット216、328を参照することができる。たとえば、ロードロックされた動作の第1の対381が実行されてから、有効ビット216、328のいずれかが値を変更した場合、条件付きストア動作の第1の対は、失敗の可能性があり、応答して、ストア動作の第1の対382の失敗を示す出力が生成され得る。
【0052】
ロードロックされた動作の第1の対381が実行されてから、有効ビット216、328のどちらも変化しなかった場合、条件付きストア動作の第1の対382は、正常にコミットされる。たとえば、第2のデータエントリ374は、(たとえば
図3に示されるData2と書かれた)データで占有される可能性があり、書込みインデックス値364は、FIFOバッファ370の次の利用可能なデータエントリを指すために(たとえば、
図3の点線で示される第3のデータエントリ376に)増加する可能性がある。条件付きストア命令の第1の対382の成功を示す出力が生成され得る。特定の例示的な実施形態では、出力は、第1のスレッドまたはプロセッサ301が条件付きストア命令の第1の対382の成功または失敗を判定することができるように第1のスレッドまたはプロセッサ301に提供される単一ビットである。
【0053】
第2のデータエントリ374を占有し、書込みインデックス値364を更新することに応答して、要求元(すなわち、第1のスレッドまたはプロセッサ301)が第2のデータエントリ374に書き込み、書込みインデックス値364を更新したことを反映するために、有効ビット244、354が変更される可能性がある。たとえば、第1のスレッドまたはプロセッサ301は、ロードロックされた動作の第1の対381に応答して設定されたいずれかの有効ビットをクリアする(たとえば、「0」にリセットする)よう動作可能な回路を含み得る。したがって、有効ビット244、354は、
図3に示されるように、「0」値に変更され得る。たとえば、第1のスレッドまたはプロセッサ301は、第2のデータエントリ374に書き込み、FIFOバッファ370の新規の次の利用可能なデータエントリを指すために書込みインデックス値364を更新したことを反映するために有効ビット244、354を「0」値に変更する可能性がある。
【0054】
装置300の例示的な動作を続けると、第2のスレッドまたはプロセッサ302は、ロードロックされた動作の第2の対383を実行し、第1のスレッドまたはプロセッサ301が条件付きストア動作の第1の対382を実行した後、条件付きストア動作の第2の対384を実行しようとする可能性がある。第2のスレッドまたはプロセッサ302は、条件付きストア動作の第2の対384を正常に完了することができるかどうかを判定するために有効ビット244、354を参照することができる。説明された例示的な動作を参照すると、第2のスレッドまたはプロセッサ302は、ロードロックされた動作の第2の対383を完了してから、有効ビット244、354のうちの1つまたは複数が変化するので、条件付きストア動作の第2の対384が失敗したと判定してよい。
【0055】
第2のスレッドまたはプロセッサ302は、条件付きストア動作の第2の対384の失敗に応答して、後に、実行可能プログラム305の実行を再試行することができる。たとえば、第2のスレッドまたはプロセッサ302は、後に、ロードロックされた動作の第2の対383および条件付きストア動作の第2の対384を再実行する可能性がある。実行可能プログラム305の後続の実行により、第2のスレッドまたはプロセッサ302は、第1のスレッドまたはプロセッサ301によってFIFOバッファ370に書き込まれたデータ(すなわち、第2のデータエントリ374に書き込まれたData2)を上書きすることなく、FIFOバッファ370にデータを書き込むことができる。
【0056】
諒解されるように、
図3の装置300は、複数の要求元(たとえば、第1のスレッドまたはプロセッサ301および第2のスレッドまたはプロセッサ302)による資源(たとえば、FIFOバッファ370および書込みインデックス360)の共有を容易にすることができる。資源は、別の資源がアクセスされたか否か、または資源を変更したか否かを各要求元が判定することができるので、資源をロックすることなく共有され得る。したがって、装置300は、資源にアクセスするために待機する要求元の事例(たとえば、ボトルネック)を低減することができる。
図3の装置300は、(たとえば、キャッシュ、バス、またはメモリサポートなどの外部回路なしに)コアチップ内でサポートされるトランザクションメモリを実現することができることをさらに諒解されたい。
【0057】
図4を参照すると、コンピュータで実施される方法400の特定の実施形態が示されている。コンピュータで実施される方法400は、404においてロードロックされた命令の対を含む第1のVLIWパケットを受け取るステップと、408においてアドレス予約レジスタの対を使用してロードロックされた命令の対を実行するステップとを含む。たとえば、
図1を参照すると、第1のVLIWパケット101は、実行されるべきロードロックされた命令の対を含み得る。さらなる例として、ロードロックされた命令の対は、ロード/ストアユニット118および120内のアドレス予約レジスタ204および304の対を使用して実行され得る。必要とされないが、ロードロックされた命令の対は、自動的にリンクされ得る(たとえば、パラレルまたは実質的にパラレルに実行される)。
【0058】
方法400は、自動的に実行されるべき命令の第2の対を含む第2のVLIWパケットを受け取るステップをさらに含み、命令の第2の対のうちの少なくとも1つは、412において、条件付きストア命令である。一例として、条件付きストア命令の第2の対は、303および305で示されるスレッドまたはプロセッサのうちの1つによって実行されるSC(Data)およびSC(WriteIndex+1)命令である可能性がある。
【0059】
方法400は、416において、アドレス予約レジスタが有効であるかどうかを判定するステップをさらに含む。たとえば、少なくとも1つの条件付きストア命令に対応するアドレス予約レジスタ内の状態ビットは、
図1の装置100の試験論理モジュール124によって評価され得る。
【0060】
アドレス予約レジスタが有効でないと判定される場合、422において、条件付きストア命令の実行失敗の指示を提供することができ、(たとえば、実行ステップ408に戻ることによって)ロードロックされた命令の対の実行が再試行され得る。たとえば、命令の第2の対のいずれかの命令が失敗したと判定された場合、命令の第2の対の命令の両方が、失敗したと見なされる(たとえば、命令の第2の対のどちらの命令もコミットされない)。
【0061】
アドレス予約レジスタが有効であると判定される場合、418において、条件付きストア命令の実行成功の指示を提供することができ、420に示されるように、少なくとも1つのメモリ位置は、条件付きストア命令に対応するデータにより更新され得る。たとえば、試験論理回路124は、動作が成功したと判定することができ、条件付きストア動作の出力を
図1の汎用レジスタ(複数可)126に書き込むことができる。さらなる例として、条件付きストア命令を実行した結果は、
図3に示されるように、FIFOバッファ370に書き込まれ得る。特定の実施形態によれば、命令の第2の対は、第2の条件付きストア命令をさらに含み、少なくとも1つのメモリ位置を更新することは、第2の条件付きストア命令に対応するメモリ位置を更新する(たとえば、条件付きストア命令の両方が、条件付きストア命令の両方の成功を判定することに応答してコミットされる)ステップをさらに含む。
【0062】
コンピュータで実施される方法400は、トランザクションメモリ動作を含むプログラムを実行するステップを含む。トランザクションメモリ動作は、自動的に実行されるべき命令を含み得る(たとえば、命令は、単一のアトミック単位として成功するか、または失敗するかのいずれかである)。たとえば、アトミックに実行されるトランザクションメモリ動作は、
図3を参照しながら本明細書で説明したように、ロード・モディファイ・ストアシーケンスを含み得る。すなわち、ロード・モディファイ・ストアシーケンスが自動的に実行される場合、ロード・モディファイ・ストアシーケンス全体が失敗するか、またはロード・モディファイ・ストアシーケンス全体が成功するかのいずれかである。ロード・モディファイ・ストアシーケンス全体は、ロード・モディファイ・ストアシーケンス全体の失敗に応答して再試行され得る。
【0063】
トランザクションメモリ動作は、自動的にリンクされる(たとえば、パラレルまたは実質的にパラレルに実行される)動作を含み得る。自動的にリンクされる第1および第2のメモリ動作は、ともにパケット化されるか、または共有のパケット内でグルーピングされ得る。自動的にリンクされる第1および第2のメモリ動作は、ロードロックされた動作の対または条件付きストア動作の対である可能性がある。条件付きストア動作の自動的にリンクされた対の一例は、
図3の実行可能プログラム303の条件付きストア動作の対382によって示されている。
【0064】
特定の実施形態では第1のロード・モディファイ・ストアシーケンスおよび第2のロード・モディファイ・ストアシーケンスが自動的に実行される(たとえば、シーケンスのいずれかが失敗した場合、両シーケンスが失敗したと見なされる)。自動的に実行されるロード・モディファイ・ストア動作の対の一例は、
図3の実行可能プログラム303(すなわち、FIFOバッファ370に対応するロード・モディファイ・ストアシーケンス、および書込みインデックス360に対応するロード・モディファイ・ストアシーケンス)の実行によって示されている。
【0065】
第1および第2のメモリ動作は、単一の超長命令語(VLIW)パケットによってVLIWプロセッサにおいて自動的に実行され得る。たとえば、装置100内のプロセッサは、本明細書で説明したように、
図1のVLIW命令パケット101内の条件付きストア命令103およびロードまたはストア命令104を実行することができる。VLIWプロセッサは、第1および第2のメモリ動作に対応する第1および第2のメモリ位置が自動的に更新されるべきである(たとえば、
図3のFIFOバッファ370のデータエントリおよび書込みインデックス値364が自動的に更新されるべきである)と判定するように構成され得る。
【0066】
特定の例示的な実施形態では、第1のメモリ動作は、VLIWプロセッサの第1のメモリ位置でデータを読み込むことを含み、第2のメモリ動作は、VLIWプロセッサの第2メモリ位置でデータを読み込むことを含む。さらなる一例では、FIFOバッファ内のデータ要素を読み込むことができ、書込みインデックスの書込みインデックス値を読み込むことができる。別の例示的な実施形態では、第1のメモリ動作は、VLIWプロセッサの第1のメモリ位置に対応するストア動作を含み、第2のメモリ動作は、VLIWプロセッサの第2メモリ位置に対応するストア動作を含む。特定の例示的な実施形態では、第1のメモリ位置は、FIFOバッファ370内の位置であり、第2のメモリ位置は、
図3の書込みインデックス値364である。特定の例示的な実施形態では、ストア動作の1つまたは複数は、条件付きストア動作である。
【0067】
特定の例示的な実施形態では、第1のメモリ位置における動作は、条件付きストア動作であり、第2のメモリ位置における動作は、条件なしストア命令である。したがって、条件付きストア命令と条件なしストア命令の両方は、実行することができ、メモリを更新することができる。
【0068】
図5を参照すると、
図1の装置100の第1のロード/ストアユニット118および第2のロード/ストアユニット120を含むプロセッサ510を含む電子デバイスの特定の例示的な実施形態のブロック図が示され、全体的に500と称される。電子デバイス500は、
図1〜
図3を参照しながら説明した要素を含むことができ、
図4の方法またはそれらの任意の組合せに従って動作することができる。
【0069】
第1のロード/ストアユニット118は、第1のアドレス予約レジスタ(ARR)204および第2のARR232を含み得る。第2のロード/ストアユニット120は、第3のARR304および第4のARR332を含み得る。3つ以上のロード/ストアユニットを提供することができる。
【0070】
プロセッサ510は、メモリ532に結合され得る。メモリ532は、プロセッサ510によって実行されるべき命令533を含み得る。たとえば、命令533は、
図1の条件付きストア命令103およびロードまたはストア命令104を含むVLIW命令パケット101を含み得る。
【0071】
図5は、プロセッサ510およびディスプレイ528に結合されたディスプレイコントローラ526も示している。コーダ/デコーダ(コーデック)534も、プロセッサ510に結合され得る。
スピーカ536およびマイクロフォン538がコーデック534に結合され得る。
【0072】
図5は、ワイヤレスコントローラ540が、プロセッサ510およびワイヤレスアンテナ542に結合され得ることも示している。特定の実施形態では、プロセッサ510、ディスプレイコントローラ526、メモリ532、コーデック534、およびワイヤレスコントローラ540は、システムインパッケージデバイスすなわちシステムオンチップデバイス522に含まれる。特定の実施形態では、入力デバイス530および電源544が、システムオンチップデバイス522に結合される。さらに、特定の実施形態では、
図5に示すように、ディスプレイ528、入力デバイス530、スピーカ536、マイクロフォン538、ワイヤレスアンテナ542、および電源544は、システムオンチップデバイス522の外部にある。しかしながら、ディスプレイ528、入力デバイス530、スピーカ536、マイクロフォン538、ワイヤレスアンテナ542、および電源544の各々は、インターフェースまたはコントローラなどの、システムオンチップデバイス522の構成要素に結合され得る。
【0073】
さらに、本明細書で開示された実施形態に関して説明された様々な例示的な論理ブロック、構成、モジュール、回路、およびアルゴリズムのステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得ることを、当業者は諒解されよう。上記に、様々な例示的な構成要素、ブロック、構成、モジュール、回路、およびステップについて、それらの機能に関して概略的に説明した。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を生じるものと解釈すべきではない。
【0074】
本明細書で開示した実施形態に関連して説明した方法またはアルゴリズムのステップは、直接ハードウェアで具体化されるか、プロセッサによって実行されるソフトウェアモジュールで具体化されるか、またはその2つの組合せで具体化され得る。ソフトウェアモジュールは、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、プログラマブル読取り専用メモリ(PROM)、消去可能プログラマブル読取り専用メモリ(EPROM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、コンパクトディスク読取り専用メモリ(CD-ROM)、または当技術分野で知られている任意の他の形態の記憶媒体中に存在し得る。例示的な非一時的(たとえば、有形)記憶媒体は、プロセッサが記憶媒体から情報を読み込み、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替として、記憶媒体はプロセッサと一体であり得る。プロセッサおよび記憶媒体は、特定用途向け集積回路(ASIC)に存在し得る。ASICは、コンピューティングデバイスまたはユーザ端末内に存在し得る。代替として、プロセッサおよび記憶媒体は、コンピューティングデバイスまたはユーザ端末の中に、個別の構成要素として存在し得る。
【0075】
開示された実施形態の上記の説明は、当業者が、開示された実施形態を作成または使用することができるように与えられる。これらの実施形態に対する様々な修正が、当業者には容易に明らかとなり、本明細書で定義される原理は、本開示の範囲から逸脱することなく、他の実施形態に適用され得る。したがって、本開示は、本明細書に示す実施形態に限定されることは意図されず、以下の特許請求の範囲によって定義されるような、原理および新規の特徴と矛盾しない、可能な最大の範囲を認められるべきである。