(57)【要約】マルチスレッドの連想メモリにおける動的な消費電力を低減するための方法及び装置が説明されている。装置は、第１のスレッドに対応する第１の仮想アドレスを受信するように構成された第１の入力と、第２のスレッドに対応する第２の仮想アドレスを受信するように構成された第２の入力と、複数の物理アドレスのうち１つの物理アドレスにマッピングされたバイナリワードをそれぞれ記憶するように構成された複数のレジスタを含むレジスタバンクと、フルアソシアティブ構成で複数のレジスタのうち関連するレジスタにそれぞれ接続された第１の複数のコンパレータを含む第１のコンパレータバンクと、フルアソシアティブ構成で複数のレジスタのうち関連するレジスタにそれぞれ接続された第２の複数のコンパレータを含む第２のコンパレータバンクと、を含む。各コンパレータバンクへの入力仮想アドレスは、対応するスレッドが選択されていない場合に、その以前の値を維持する。【選択図】図５
2019525376.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッドの連想メモリ（ＣＡＭ）デバイスであって、
第１のスレッドに対応する第１の仮想アドレスを受信するように構成された第１の入力と、
第２のスレッドに対応する第２の仮想アドレスを受信するように構成された第２の入力と、
複数の物理アドレスのうち１つの物理アドレスにマッピングされたバイナリワードを記憶するようにそれぞれ構成された複数のレジスタを含むレジスタバンクと、
フルアソシアティブ構成で前記複数のレジスタのうち１つのレジスタにそれぞれ接続された第１の複数のコンパレータを含む第１のコンパレータバンクであって、前記第１の複数のコンパレータの各々が、前記第１のスレッドがアクティブ且つ有効である間に前記第１の仮想アドレスを受信し、前記第１のスレッドが非アクティブ又は無効である間に以前の第１の仮想アドレスを受信するように構成されており、前記以前の第１の仮想アドレスが、前記第１のスレッドが最後にアクティブ且つ有効であったときに前記第１の入力によって受信された前記第１の仮想アドレスである、第１のコンパレータバンクと、
フルアソシアティブ構成で前記複数のレジスタのうち１つのレジスタにそれぞれ接続された第２の複数のコンパレータを含む第２のコンパレータバンクであって、前記第２の複数のコンパレータの各々が、前記第２のスレッドがアクティブ且つ有効である間に前記第２の仮想アドレスを受信し、前記第２のスレッドが非アクティブ又は無効である間に以前の第２の仮想アドレスを受信するように構成されており、前記以前の第２の仮想アドレスが、前記第２のスレッドが最後にアクティブ且つ有効であったときに前記第２の入力によって受信された前記第２の仮想アドレスである、第２のコンパレータバンクと、を備える、
マルチスレッドのＣＡＭデバイス。
【請求項２】
前記第１のコンパレータバンクは、前記第２のコンパレータバンクから分離されており、前記第２のコンパレータバンクと同じである、
請求項１のマルチスレッドのＣＡＭデバイス。
【請求項３】
前記第１の複数のコンパレータの各々は、前記第１のスレッドが非アクティブ又は無効である間に、前記第１のコンパレータバンクへの前記以前の第１の仮想アドレスの入力に対応する第１の入力状態を維持するように構成されており、
前記第２の複数のコンパレータの各々は、前記第２のスレッドが非アクティブ又は無効である間に、前記第２のコンパレータバンクへの前記以前の第２の仮想アドレスの入力に対応する第２の入力状態を維持するように構成されている、
請求項１のマルチスレッドのＣＡＭデバイス。
【請求項４】
前記第１の複数のコンパレータの各々は、第１の一致が存在するかどうかを判別するために、前記第１のスレッドのアクティブ状態に基づいて、前記第１の仮想アドレス及び前記以前の第１の仮想アドレスの一方を、コンパレータに関連するレジスタに記憶されたバイナリワードと比較するように構成されており、前記第１のコンパレータバンクは、前記第１の複数のコンパレータの第１の比較結果を出力するように構成されており、
前記第２の複数のコンパレータの各々は、第２の一致が存在するかどうかを判別するために、前記第２のスレッドのアクティブ状態に基づいて、前記第２の仮想アドレス及び前記以前の第２の仮想アドレスの一方を、コンパレータに関連するレジスタに記憶されたバイナリワードと比較するように構成されており、前記第２のコンパレータバンクは、前記第２の複数のコンパレータの第２の比較結果を出力するように構成されている、
請求項１のマルチスレッドのＣＡＭデバイス。
【請求項５】
前記第１のコンパレータバンクの第１の複数のマッチラインに接続された第１の論理コンポーネントと、
前記第２のコンパレータバンクの第２の複数のマッチラインに接続された第２の論理コンポーネントと、をさらに備え、
前記第１の論理コンポーネントは、前記第１の複数のマッチラインで受信した前記第１の比較結果に基づいて第１のサマリヒット指標を出力するように構成されており、
前記第２の論理コンポーネントは、前記第２の複数のマッチラインで受信した前記第２の比較結果に基づいて第２のサマリヒット指標を出力するように構成されている、
請求項４のマルチスレッドのＣＡＭ。
【請求項６】
前記第１のサマリヒット指標は、前記第１の複数のコンパレータのうち少なくとも１つのコンパレータが、前記第１の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、前記第１の一致が存在することを示しており、
前記第２のサマリヒット指標は、前記第２の複数のコンパレータのうち少なくとも１つのコンパレータが、前記第２の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、前記第２の一致が存在することを示している、
請求項５のマルチスレッドのＣＡＭデバイス。
【請求項７】
前記第１のサマリヒット指標及び前記第２のサマリヒット指標を受信し、最終的な結果を出力するように構成された論理回路をさらに備え、
前記第１のスレッド及び前記第２のスレッドの一方ずつがアクティブであり、前記第１のスレッドがアクティブである状況では、前記最終的な結果が前記第１のサマリヒット指標であり、前記第２のスレッドがアクティブである状況では、前記最終的な結果が前記第２のサマリヒット指標である、
請求項５のマルチスレッドのＣＡＭデバイス。
【請求項８】
前記第１の複数のコンパレータの前記第１の比較結果に基づいて第１のサマリヒット指標を受信し、前記第２の複数のコンパレータの前記第２の比較結果に基づいて第２のサマリヒット指標を受信し、最終的な結果を出力するように構成された論理回路をさらに備え、
前記第１のスレッド及び前記第２のスレッドの一方ずつがアクティブであり、前記第１のスレッドがアクティブである状況では、前記最終的な結果が前記第１のサマリヒット指標であり、前記第２のスレッドがアクティブである状況では、前記最終的な結果が前記第２のサマリヒット指標である、
請求項４のマルチスレッドのＣＡＭデバイス。
【請求項９】
前記第１の複数のコンパレータの各々は、前記第１のスレッドがアクティブ且つ有効である状況で第１のアドレスレジスタから前記第１の仮想アドレスを受信し、
前記第２の複数のコンパレータの各々は、前記第２のスレッドがアクティブ且つ有効である状況で第２のアドレスレジスタから前記第２の仮想アドレスを受信する、
請求項１のマルチスレッドのＣＡＭデバイス。
【請求項１０】
前記第１の仮想アドレスを記憶するように構成された第１のアドレスレジスタであって、前記第１のコンパレータバンクは、前記第１のスレッドがアクティブ且つ有効な状況で前記第１の仮想アドレスを前記第１のアドレスレジスタから受信するように構成されている、第１のアドレスレジスタと、
前記第２の仮想アドレスを記憶するように構成された第２のアドレスレジスタであって、前記第２のコンパレータバンクは、前記第２のスレッドがアクティブ且つ有効な状況で前記第２の仮想アドレスを前記第２のアドレスレジスタから受信するように構成されている、第２のアドレスレジスタと、をさらに備える、
請求項１のマルチスレッドのＣＡＭデバイス。
【請求項１１】
前記第１の仮想アドレスを前記以前の第１の仮想アドレスとして記憶するように構成された第１のアドレスキャプチャ回路であって、前記第１のコンパレータバンクは、前記第１のスレッドが非アクティブ又は無効である状況で、前記以前の第１の仮想アドレスを前記第１のアドレスキャプチャ回路から受信するように構成されている、第１のアドレスキャプチャ回路と、
前記第２の仮想アドレスを前記以前の第１の仮想アドレスとして記憶するように構成された第２のアドレスキャプチャ回路であって、前記第２のコンパレータバンクは、前記第２のスレッドが非アクティブ又は無効である状況で、前記以前の第２の仮想アドレスを前記第２のアドレスキャプチャ回路から受信するように構成されている、第２のアドレスキャプチャ回路と、をさらに備える、
請求項１のマルチスレッドのＣＡＭデバイス。
【請求項１２】
前記以前の第１の仮想アドレスは、前記第１のスレッドが最後にアクティブ且つ有効であったときに第１のアドレスレジスタによって前記第１のアドレスキャプチャ回路に提供された前記第１の仮想アドレスであり、
前記以前の第２の仮想アドレスは、前記第２のスレッドが最後にアクティブ且つ有効であったときに第２のアドレスレジスタによって前記第２のアドレスキャプチャ回路に提供された前記第２の仮想アドレスである、
請求項１１の複数スレッドのＣＡＭデバイス。
【請求項１３】
前記マルチスレッドのＣＡＭデバイスは、命令変換索引バッファＣＡＭである、
請求項１のマルチスレッドのＣＡＭデバイス。
【請求項１４】
マルチスレッドの連想メモリ（ＣＡＭ）方法であって、
第１のコンパレータバンクが、第１のスレッドに対応する第１の仮想アドレスを受信することであって、前記第１のコンパレータバンクは、フルアソシアティブ構成でレジスタバンクの複数のレジスタのうち１つのレジスタにそれぞれ接続された第１の複数のコンパレータを含み、前記第１の仮想アドレスは、前記第１のスレッドがアクティブ且つ有効である間に受信される、ことと、
第２のコンパレータバンクが、第２のスレッドに対応する第２の仮想アドレスを受信することであって、前記第２のコンパレータバンクは、フルアソシアティブ構成で前記レジスタバンクの前記複数のレジスタのうち１つのレジスタにそれぞれ接続された第２の複数のコンパレータを含み、前記第２の仮想アドレスは、前記第２のスレッドがアクティブ且つ有効である間に受信される、ことと、
前記第１のコンパレータバンクが、前記第１のスレッドが非アクティブ又は無効である間に、前記第１のスレッドに対応する以前の第１の仮想アドレスを受信することであって、前記以前の第１の仮想アドレスは、前記第１のスレッドが最後にアクティブ且つ有効であったときに受信された前記第１の仮想アドレスである、ことと、
前記第２のコンパレータバンクが、前記第２のスレッドが非アクティブ又は無効である間に、前記第２のスレッドに対応する以前の第２の仮想アドレスを受信することであって、前記以前の第２の仮想アドレスは、前記第２のスレッドが最後にアクティブ且つ有効であったときに受信された前記第２の仮想アドレスである、ことと、
前記第１の複数のコンパレータの各々が、第１の一致が存在するかどうかを判別するために、前記第１のスレッドのアクティブ状態に基づいて、前記第１の仮想アドレス及び前記以前の第１の仮想アドレスの一方を、コンパレータに関連するレジスタに記憶されたバイナリワードと比較することと、
前記第２の複数のコンパレータの各々が、第２の一致が存在するかどうかを判別するために、前記第２のスレッドのアクティブ状態に基づいて、前記第２の仮想アドレス及び前記以前の第２の仮想アドレスの一方を、コンパレータに関連するレジスタに記憶されたバイナリワードと比較することと、
前記第１のコンパレータバンクが、前記第１の複数のコンパレータからの第１の比較結果を出力することと、
前記第２のコンパレータバンクが、前記第２の複数のコンパレータからの第２の比較結果を出力することと、を含む、
方法。
【請求項１５】
前記第１の複数のコンパレータの各々が、前記第１のスレッドが非アクティブ又は無効である状況で、前記第１のコンパレータバンクに入力された前記以前の第１の仮想アドレスに対応する第１の入力状態を維持することと、
前記第２の複数のコンパレータの各々が、前記第２のスレッドが非アクティブ又は無効である状況で、前記第２のコンパレータバンクに入力された前記以前の第２の仮想アドレスに対応する第２の入力状態を維持することと、をさらに含む、
請求項１４の方法。
【請求項１６】
第１の論理コンポーネントが、前記第１の比較結果に基づいて第１のサマリヒット指標を生成することであって、前記第１のサマリヒット指標は、前記第１の複数のコンパレータのうち少なくとも１つのコンパレータが、前記第１の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、前記第１の一致が存在することを示している、ことと、
第２の論理コンポーネントが、前記第２の比較結果に基づいて第２のサマリヒット指標を生成することであって、前記第２のサマリヒット指標は、前記第２の複数のコンパレータのうち少なくとも１つのコンパレータが、前記第２の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、前記第２の一致が存在することを示している、ことと、をさらに含む、
請求項１４の方法。
【請求項１７】
論理回路が、前記第１のサマリヒット指標及び前記第２のサマリヒット指標を受信することと、
前記論理回路が、前記第１のサマリヒット指標及び前記第２のサマリヒット指標に基づいて、最終的な結果を生成することであって、前記第１のスレッド及び前記第２のスレッドの一方ずつがアクティブであり、前記第１のスレッドがアクティブである状況では、前記最終的な結果が前記第１のサマリヒット指標であり、前記第２のスレッドがアクティブである状況では、前記最終的な結果が前記第２のサマリヒット指標である、ことと、をさらに含む、
請求項１６の方法。
【請求項１８】
前記第１のコンパレータバンクが、前記第１のスレッドがアクティブ且つ有効である状況で、前記第１の仮想アドレスを第１のアドレスレジスタから受信することと、
前記第２のコンパレータバンクが、前記第２のスレッドがアクティブ且つ有効である状況で、前記第２の仮想アドレスを第２のアドレスレジスタから受信することと、をさらに含む、
請求項１４の方法。
【請求項１９】
プロセッサが、前記第１のスレッド及び前記第２のスレッドのうち一方を選択的にアクティブにすることと、
前記プロセッサが、前記第１のスレッド及び前記第２のスレッドのうち他方を選択的に非アクティブにすることと、
前記第１のコンパレータバンクが、前記第１のスレッドが非アクティブ又は無効である状況で、前記以前の第１の仮想アドレスを第１のアドレスキャプチャ回路から受信することであって、前記以前の第１の仮想アドレスは、前記第１のスレッドが最後にアクティブ且つ有効であったときに受信された前記第１の仮想アドレスである、ことと、
前記第２のコンパレータバンクが、前記第２のスレッドが非アクティブ又は無効である状況で、前記以前の第１の仮想アドレスを第２のアドレスキャプチャ回路から受信することであって、前記以前の第２の仮想アドレスは、前記第２のスレッドが最後にアクティブ且つ有効であったときに受信された前記第２の仮想アドレスである、ことと、をさらに含む、
請求項１４の方法。
【請求項２０】
前記第１のコンパレータバンクが、前記第１のスレッドがアクティブ且つ有効である状況で、前記第１の仮想アドレスを第１のアドレスレジスタから受信することと、
前記第２のコンパレータバンクが、前記第２のスレッドがアクティブ且つ有効である状況で、前記第２の仮想アドレスを第２のアドレスレジスタから受信することと、をさらに含む、
請求項１９の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年８月１７日に出願された米国特許出願第１５／２３８，９２０号の利益を主張し、その内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
仮想メモリは、コンピュータシステムによってアクセス可能な実際のメモリを管理するようにコンピュータシステムが限定されている場合よりも、コンピュータシステムがメモリを良好に管理するのを可能にしている。例えば、メモリマッピングメカニズムとしての仮想アドレッシングは、コンピュータシステムが、メモリの１つの連続領域が特定のアプリケーションに割り当てられているような外観を与えながら、不連続領域を当該アプリケーションに割り当てることを可能にする。また、仮想メモリの機能によって、コンピュータシステムは、コンピュータシステムで実際に利用可能な量よりも多くのメモリをアプリケーションに割り当てることができる。仮想メモリを実装するシステム上のメモリアドレス（例えば、仮想アドレス（ＶＡ））をアプリケーションが参照する場合にはいつでも、当該アドレスが、実際のメモリ位置を示す物理アドレス（ＰＡ）に変換される。アプリケーションがメモリと頻繁に相互作用することから、仮想メモリシステム内の非効率性と柔軟性の欠如とによって、パフォーマンスが低下する可能性がある。
【０００３】
プロセッサは、仮想アドレッシングを使用すると、仮想アドレスから物理アドレスへの変換から生成された物理アドレスを用いて、メモリにアクセスすることができる。プロセッサは、仮想アドレスから物理アドレスへの変換のプロセスを高速化するために、仮想アドレスから物理アドレスへの変換をキャッシュする連想メモリ（ＣＡＭ：content addressable memory）とランダムアクセスメモリ（ＲＡＭ）とを合わせた構造である変換索引バッファ（ＴＬＢ）を使用することができる。
【０００４】
したがって、ＴＬＢは、仮想アドレスから物理アドレスへの変換、及び、オペレーティングシステム（ＯＳ）のページ粒度メタデータ（例えば、読み出し／書き込みの許可）をキャッシュするためにコンピュータシステムで使用されるハードウェア構造である。ＴＬＢは、全てのメモリアクセスでルックアップされ、クリティカルパスにあり、各プロセッサコア又はアクセラレータが独自のＴＬＢを有していることから、コンピュータシステムのパフォーマンス、スケーラビリティにとって重要である。
【０００５】
マイクロプロセッサは、マイクロプロセッサ内の「デッド（dead）」サイクルとなる可能性があるものを利用することによって、システム内により多くのプロセッサが存在するように見せてセル数を削減するために、複数のスレッドを実装する。マイクロプロセッサ内の多くの場所において、パイプ状態には、スレッドの識別子（ＩＤ）がタグ付けされており、プロセッサ内の既存のリソースは、スレッド間で共有されている。このリソースの共有によってセル数が削減されるが、特に、１つのスレッドから他のスレッドに変更する際に大量の回路動作がある場合には、電力に関してコストがかかる。
【０００６】
例えば、図１は、ＣＡＭ１０２を実装するマルチスレッドシステム１００のブロック図である。ＣＡＭ１０２は、書き込み及びルックアップ動作を実行するために、コンパレータ１０６の単一のバンクに接続されると共に対応する、単一バンクのレジスタ１０４を含む。マルチスレッドシステム１００は、スレッド０（Ｔ０）と、スレッド１（Ｔ１）と、をさらに含む。スレッド０（Ｔ０）及びスレッド１（Ｔ１）の各々は、ＣＡＭ１０２に入力するためのアドレス又はタグを記憶する独自の検索データレジスタ１１１，１１２を含む。スレッド毎に記憶されたタグは、マルチプレクサ１１４に入力される。マルチプレクサ１１４は、「Ｔ１がアクティブである（T1 active）」ことを示すビットに基づいて、ＣＡＭ１０２に入力するための１つのタグを選択する。次に、入力アドレス１１６（すなわち、選択されたタグ）は、ＣＡＭ１０２に提供される。ＣＡＭ１０２は、入力アドレス１１６を使用してルックアップ動作を実行すると、レジスタ１０４のバンクに記憶されたＣＡＭのエントリに基づいて、一致結果１１７（例えば、「ヒット」又は「ミス」）を出力する。最後に、一致結果１１７は、ＡＮＤゲート１１８によって「何れかのスレッドが有効である（any thread valid）」ことを示すビットとＡＮＤされる。これにより、ＡＮＤゲート１１８は、一致結果１１７を出力１１９として出力する前に、１つのスレッド（例えば、スレッド０又はスレッド１）が有効であることを確実にする。
【０００７】
マルチスレッドシステム１００の通常の動作では、入力アドレス１１６は、スレッド０とスレッド１との間でサイクルが行き来する。各スレッドがコンパレータ１０６の同じバンクを共有することから、検索データレジスタ１１１，１１２によって提供されたアドレス内容に基づいて、サイクル毎に、コンパレータ１０６のバンクの構成においてトグルが発生する場合がある。コンパレータのコンポーネント（例えば、実装に応じて、ＸＯＲゲート、ＸＮＯＲゲート、ＯＲゲート及びＡＮＤゲート）への入力のトグルは、電力を消費する。したがって、より多くの数のコンパレータ又はそのコンポーネントがトグルされると、状態のスラッシング（thrashing）が発生し、結果として、動的な消費電力が増大する。このことは、各スレッドが完全に独立しているために、１つのスレッドからの入力アドレスの多数のビットが第２スレッドからの入力アドレスのビットと異なる場合に、特に生じ得る。サイクル毎にトグルが発生する場合、この電力消費は、コストがかかる。したがって、マルチスレッド構成で実装されたＴＬＢ  ＣＡＭにおける電力消費を低減する必要がある。
【０００８】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００９】
【図１】従来の連想メモリ（ＣＡＭ）を実装するマルチスレッドシステムのブロック図である。
【図２】１つ以上の開示された実施形態を実施することができる例示的なデバイスのブロック図である。
【図３】１つ以上の実施形態による、ＴＬＢ  ＣＡＭに実装されたマルチビットの論理コンパレータの概略図である。
【図４】１つ以上の実施形態による、マルチスレッドのＴＬＢ  ＣＡＭのブロック図である。
【図５】１つ以上の実施形態による、図４のＴＬＢ  ＣＡＭを実施するマルチスレッドのプロセッサのブロック図である。
【図６】１つ以上の実施形態による、マルチスレッドのＣＡＭ方法のフロー図である。
【発明を実施するための形態】
【００１０】
図２は、１つ以上の開示された実施形態を実施することができる例示的なデバイス２００のブロック図である。デバイス２００は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス２００は、プロセッサ２０２と、メモリ２０４と、ストレージ２０６と、１つ以上の入力デバイス２０８と、１つ以上の出力デバイス２１０と、を含む。また、デバイス２００は、入力ドライバ２１２及び出力ドライバ２１４をオプションで含むことができる。デバイス２００は、図２に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【００１１】
プロセッサ２０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含むことができ、各プロセッサコアはＣＰＵ又はＧＰＵであってもよい。メモリ２０４は、プロセッサ２０２と同じダイ上に配置されてもよいし、プロセッサ２０２とは別に配置されてもよい。プロセッサ２０２は、プロセッサ２０２がスレッド間で実行リソースを切り替える変換索引バッファ（ＴＬＢ）連想メモリ（ＣＡＭ）を使用してマルチスレッドプロセスを実行することができ、この結果、実行が同時に行われる、共有メモリマルチプロセッサ環境の同じマルチスレッドプロセスでは、プロセス内の各スレッドは、別々のプロセッサで同時に実行され、この結果、並列して実行されることになる。
【００１２】
メモリ２０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ等の揮発性又は不揮発性メモリを含むことができる。
【００１３】
ストレージ２０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含むことができる。入力デバイス２０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含むことができる。出力デバイス２１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバック装置、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含むことができる。
【００１４】
入力ドライバ２１２は、プロセッサ２０２及び入力デバイス２０８と通信し、プロセッサ２０２が入力デバイス２０８から入力を受信することを可能にする。出力ドライバ２１４は、プロセッサ２０２及び出力デバイス２１０と通信し、プロセッサ２０２が出力デバイス２１０に出力を送信することを可能にする。入力ドライバ２１２及び出力ドライバ２１４は、オプションのコンポーネントであり、デバイス２００は、入力ドライバ２１２及び出力ドライバ２１４が存在しない場合であっても同様に動作することに留意されたい。
【００１５】
「仮想アドレス（virtual address）」、「入力アドレス（input address）」、「検索アドレス（search address）」、「入力検索データ（input search address）」及び「タグ（tag）」という用語は、特に明記しない限り、相互に交換可能に使用され、１つの用語が、１つ以上の態様において別の用語と置き換えられるか組み合わせることができることを理解されたい。本明細書で使用される場合、これらの用語は、ＣＡＭによって検索される任意のバイナリルックアップワードを指し、ページサイズ、スレッドＩＤ（利用可能な場合）及び有効なｙｅｓ／ｎｏビットを含むことができる。
【００１６】
本明細書で説明するシステムメモリは、オペレーティングシステムによって管理され、必要に応じて異なるソフトウェアアプリケーションに割り当てられる。異なるソフトウェアアプリケーションは、１つ以上のパーティションで実行することができ、１つ以上のパーティションは、異なるオペレーティングシステム（ＯＳ）を実行することができる。上述したように、仮想メモリ技術をこのようなコンピュータシステムで使用して、コンピュータシステムの物理メモリを、多くのプロセス及びアプリケーション間で共有することができる。したがって、ソフトウェアアプリケーションは、仮想メモリ空間内の有効なアドレスを扱う。これにより、アプリケーションが、動作が行われている実際の物理メモリの場所に関係なく、必要に応じて１つ以上のプロセス（例えば、読み出し、書き込み及び／又は実行等）を行うことができる。アプリケーションは、アプリケーションによって使用される有効なアドレスからコンピュータメモリ内の物理アドレスへのマッピングを実行するための各アプリケーションの基礎となるオペレーティングシステムに依存している。アドレス変換は、仮想メモリを参照する有効なアドレスを実メモリアドレスに変換するメカニズムである。アドレス変換は、適切に実施されなければ、プロセッサのクロックサイクルを決定するクリティカルパスになる可能性がある複雑な手順である。
【００１７】
マルチスレッドプロセッサでは、各プロセスのコンテキスト内に複数の実行スレッドが存在する。特定のプロセスのスレッドは、各スレッドが同時に実行されているように見えるように、プロセッサが異なるスレッド間を迅速に切り替えるように実行される。単純なタイプのマルチスレッディングでは、長いレイテンシが生じ得るオフチップメモリへのアクセスを必要とするキャッシュミス等のイベントまで１つのスレッドが実行する。プロセッサは、待機するのではなく、実行の準備がされている別のスレッドに切り替わる。前のスレッドのデータが到達すると、前のスレッドは、実行可能なスレッドのリストに戻される。別のタイプのマルチスレッドでは、プロセッサは、ＣＰＵサイクル毎にスレッドを切り替える。
【００１８】
各プロセスには、オペレーティングシステムによって、例えばプロセッサ、レジスタ等のリソースが割り当てられ、このようなリソースは、命令を実行するためにスレッドが用いられるときに使用される当該スレッドのリソースを各スレッドが「所有する」ように、プロセスのスレッドに割り当てられている。プロセスが生成されると、当該プロセスがメインメモリに記憶される。カーネルがプロセスをプロセッサに割り当てると、当該プロセスがプロセッサにロードされ、プロセッサは、スレッドのリソースを使用して当該スレッドの命令を実行する。
【００１９】
スレッドアービタ及び／又はスレッド優先度は、命令を実行するために何れのスレッドを使用するかを決定し、スレッド識別子（ＩＤ）は、様々な実行状況を通して命令に関連付けられ、当該命令に従う。命令は、スレッドＩＤに対応するスレッドのレジスタ等のリソースを使用して実行される。マルチスレッドを処理する場合、スレッドアービタ又はスレッドの優先度は、次に使用するスレッドを決定し、次のスレッドのスレッドＩＤは、様々な実行状況を通して次の命令に関連付けられ、当該次の命令に従う。同様に、命令は、次のスレッドのスレッドＩＤに対応するスレッドのリソースを使用して実行される。
【００２０】
ＴＬＢは、仮想アドレスの変換速度を向上させるためにメモリ管理ハードウェアが使用するキャッシュである。ＴＬＢは、仮想メモリアドレスを物理メモリアドレスにマッピングするアドレス変換データ（エントリ）を含む固定数のスロットを有している。ＴＬＢは、検索キーが仮想メモリアドレスであって、検索結果が物理メモリアドレスである連想メモリである。ＴＬＢは、単一のメモリキャッシュであり、又は、当該技術分野で知られている階層で代替的に構成されている。ＴＬＢがどのように実現されるかに関わらず、要求された仮想アドレスがＴＬＢに存在する場合（すなわち、「ＴＬＢのヒット」）、検索（ルックアップ）が成功とみなされ、検索によって一致がもたらされ、メモリアクセスのために物理メモリアドレスが返される。要求されたアドレスがＴＬＢ内に無い場合（すなわち、「ＴＬＢのミス」）、変換は、一般に「ページウォーク」又は「ページテーブルウォーク」と呼ばれるプロセスにおいてページテーブルを調べることによって進行する。物理メモリアドレスが決定された後に、仮想メモリアドレスから物理メモリアドレスへのマッピングが各ＴＬＢにロードされ（すなわち、何れのプロセッサタイプ（ＣＰＵ又はアクセラレータ）がアドレスマッピングを要求したかに依存する）、欠陥のある仮想アドレスを正確な物理アドレスにマッピングして、プログラムが再開される。
【００２１】
キャッシュと同様に、命令及びデータストリーム用の別々のＴＬＢが多くの最新のプロセッサに提供されている。命令変換索引バッファ（ＩＴＬＢ）は、命令アドレスのみを処理する。ＴＬＢは、複数のレベル（例えば、Ｌ１、Ｌ２等）を有することができる。例えば、非常に高速な小さい「Ｌ１」ＴＬＢ（フルアソシアティブ）や、やや遅いがより大きい「Ｌ２」ＴＬＢ（セットアソシアティブ）である。ＩＴＬＢ及びデータＴＬＢ（ＤＴＬＢ）が使用される場合、ＣＰＵは、３つ又は４つのＴＬＢ（例えば、ＩＴＬＢ１、ＤＴＬＢ１、ＴＬＢ２）を有することができる。Ｌ１ＴＬＢは、通常、小さくて、フルアソシアティブのキャッシュであるため、ロード、ストア及び命令フェッチ等のストレージアクセスが、同じクロックサイクルにおいて全てのページサイズでＬ１ＴＬＢにアクセスすることができる。しかし、Ｌ２ＴＬＢは、サイズが比較的大きいため、フルアソシアティブの構造にならない場合がある。結果として、Ｌ２ＬＴＢは、例えばＲＡＭアレイにアクセスする必要であることに起因して、単一のクロックサイクルにおいて全てのエントリに亘ってアクセス（例えば、検索）されない場合がある。
【００２２】
Ｌ１ＴＬＢの各キャッシュは、単一サイクルの読み出しと、アクセスの連続性に応じた１サイクル又は２サイクルの書き込みと、をサポートする少なくとも１つのフルアソシアティブの２ｎバイトのセグメントを備えている。各キャッシュセグメントは、例えば、６４のＲＡＭラインのうち１つをそれぞれ選択する６４のＣＡＭの行で構成されている。Ｌ１ＴＬＢアクセスの間、入力アドレスは、ＣＡＭ内の６４のタグと比較される。一致が生じた場合（ヒット）、ＣＡＭの一致したラインが有効になり、データにアクセスすることができる。何れのタグもマッチしない場合（ミス）、上位レベルのＴＬＢ又は外部メモリがアクセスされる。キャッシュ可能なメモリ領域からのストレージアクセスがミスした場合、新たなデータが、２ｎバイトのセグメントの６４行のラインのうち１つにロードされる。６４のＣＡＭの行及びＲＡＭのラインの数は例示であり、この数を限定することを意味するものではないことを理解されたい。
【００２３】
上述したように、ＴＬＢは、入力検索データと記憶されたデータのテーブルとを比較し、一致したデータのアドレスを返すＣＡＭを含む。ＣＡＭは、特定の超高速検索アプリケーションで使用される、特別なタイプのコンピュータメモリである。ＣＡＭは、入力検索データ（すなわち、タグ）と記憶されたデータのテーブルとを比較し、一致したデータのアドレス（連想メモリの場合、一致したデータ）を返す。したがって、ＣＡＭは、検索集中型（search-intensive）のアプリケーション用のアルゴリズム的なアプローチよりもかなり高速なハードウェア検索エンジンである。ＣＡＭは、単一のクロックサイクルで検索動作を完了することを可能にする追加の比較回路を有する従来の半導体メモリ（例えば、スタティックＲＡＭ（ＳＲＡＭ））で構成されている。
【００２４】
バイナリＣＡＭは、最もシンプルなタイプのＣＡＭであり、１と０で全体が構成されたデータ検索ワードを使用する。３値ＣＡＭ（ＴＣＡＭ）は、記憶されたデータワード内の１つ以上のビットについて「Ｘ」又は「ドントケア」の第３一致状態を可能にし、これにより、検索に柔軟性を追加する。例えば、３値ＣＡＭは、「１００００」、「１００１０」、「１０１００」又は「１０１１０」の４つの検索ワードの何れにも一致する「１０ＸＸ０」という記憶ワードを有する場合がある。内部メモリセルが、バイナリＣＡＭの２つの状態の代わりに３つの可能な状態を符号化しなければならないので、追加された検索の柔軟性は、バイナリＣＡＭよりも追加のコストがかかる。この追加の状態は、通常、マスクビット（「ケア」又は「ドントケア」ビット）を全てのメモリセルに追加することによって実装される。
【００２５】
上述した態様のうち１つ以上は、以下に説明するさらなる例において実施される。
【００２６】
一例によれば、マルチスレッドのＣＡＭデバイスが提供される。ＣＡＭデバイスは、第１のスレッドに対応する第１の仮想アドレスを受信するように構成された第１の入力と、第２のスレッドに対応する第２の仮想アドレスを受信するように構成された第２の入力と、複数の物理アドレスのうち１つの物理アドレスにマッピングされたバイナリワードをそれぞれ記憶するように構成された複数のレジスタを含むレジスタバンクと、フルアソシアティブ構成で複数のレジスタのうち１つのレジスタにそれぞれ接続された第１の複数のコンパレータを含む第１のコンパレータバンクと、フルアソシアティブ構成で複数のレジスタのうち１つのレジスタにそれぞれ接続された第２の複数のコンパレータを含む第２のコンパレータバンクと、を含む。
【００２７】
特に、第１の複数のコンパレータの各々は、第１の一致が存在するかどうかを判別するために、第１の仮想アドレスを、関連するレジスタに記憶されたバイナリワードと比較するように構成されており、第１のコンパレータバンクは、第１の複数のコンパレータの第１の比較結果を出力するように構成されている。同様に、第２の複数のコンパレータの各々は、第２の一致が存在するかどうかを判別するために、第２の仮想アドレスを、関連するレジスタに記憶されたバイナリワードと比較するように構成されており、第２のコンパレータバンクは、第２の複数のコンパレータの第２の比較結果を出力するように構成されている。
【００２８】
また、第１の複数のコンパレータの各々は、第１のスレッドが非アクティブ又は無効であるという状況において、第１のコンパレータバンクに入力された以前の第１の仮想アドレスに対応する第１の入力状態を維持し、第２の複数のコンパレータの各々は、第２のスレッドが非アクティブ又は無効であるという状況において、第２のコンパレータバンクに入力された以前の第２の仮想アドレスに対応する第２の入力状態を維持する。
【００２９】
別の例によれば、マルチスレッドのＣＡＭ方法が提供される。方法は、第１のコンパレータバンクが、第１のスレッドに対応する第１の仮想アドレスを受信することと、第２のコンパレータバンクが、第２のスレッドに対応する第２の仮想アドレスを受信することと、を含む。第１のコンパレータバンクは、フルアソシアティブ構成でレジスタバンクの複数のレジスタのうち１つのレジスタにそれぞれ接続された第１の複数のコンパレータを含み、第２のコンパレータバンクは、フルアソシアティブ構成でレジスタバンクの複数のレジスタのうち１つのレジスタにそれぞれ接続された第２の複数のコンパレータを含む。
【００３０】
方法は、第１の複数のコンパレータの各々が、第１の一致が存在するかどうかを判別するために、第１の仮想アドレスを、関連するレジスタに記憶されたバイナリワードと比較することと、第１の複数のコンパレータの各々が、第１のスレッドが非アクティブ又は無効であるという状況において、第１のコンパレータバンクに入力された以前の第１の仮想アドレスに対応する第１の入力状態を維持することと、第１のコンパレータバンクが、第１の複数のコンパレータから第１の比較結果を出力することと、をさらに含む。
【００３１】
方法は、第２の複数のコンパレータの各々が、第２の一致が存在するかどうかを判別するために、第２の仮想アドレスを、関連するレジスタに記憶されたバイナリワードと比較することと、第２の複数のコンパレータの各々が、第２のスレッドが非アクティブ又は無効であるという状況において、第２のコンパレータバンクに入力された以前の第２の仮想アドレスに対応する第２の入力状態を維持することと、第２のコンパレータバンクが、第２の複数のコンパレータから第２の比較結果を出力することと、をさらに含む。
【００３２】
図３は、１つ以上の実施形態による、ＣＡＭに実装されたマルチビットの論理コンパレータ３００の概略図である。コンパレータ３００は、２つのバイナリワードを比較し、これらが等しいかどうかを示す。この例では、コンパレータ３００は、４つの並列のＸＯＲゲート３０２ａ，３０２ｂ，３０２ｃ，３０２ｄと、ＯＲゲート３０４と、を含む４ビットの等価コンパレータである。コンパレータ３００は、ＴＬＢエントリに対応するＴＬＢレジスタ３０８に記憶されたバイナリワードと比較され、アドレスレジスタ３０６によって提供される４ビットのバイナリワードＡＤＤＲ（例えば、入力アドレス又はタグ）を受信する。
【００３３】
アドレスレジスタ３０６は、マルチスレッドの実装における１つのスレッド（例えば、スレッド０又はスレッド１）に対応するストレージユニット（例えば、検索データレジスタ又はロードストアユニット）である。したがって、マルチスレッドの実装のために複数のアドレスレジスタ３０６が存在する。
【００３４】
ＸＯＲゲート３０２ａ，３０２ｂ，３０２ｃ，３０２ｄの各々は、２つのワード（ＡＤＤＲ及びＴＬＢエントリ）の単一の対応するビットを比較し、ビットが一致する場合には０を出力する。次に、ＸＯＲゲート３０２ａ，３０２ｂ，３０２ｃ，３０２ｄの出力は、ＯＲゲート３０４において結合され、ＯＲゲート３０４の出力３０５は、全てのＸＯＲゲート３０２ａ，３０２ｂ，３０２ｃ，３０２ｄが一致した入力を示す場合にのみ０（ヒット）になる。したがって、（実装設計に基づいて）１になるように反転された出力３０５は、そのコンパレータに関してヒットが存在するか否かを示すＣＡＭの１つのマッチラインである。
【００３５】
マルチビットの論理コンパレータを実装するために他のタイプの論理コンポーネントが使用可能であることを理解されたい。例えば、マルチビットの論理コンパレータは、代替的に、バイナリワードを受信する並列のＸＮＯＲゲートと、全てのビットが一致した場合に１（ヒット）を出力するＡＮＤゲートと、を含む。
【００３６】
１つのコンポーネント（例えば、ＸＯＲゲート又はＯＲゲート）に対する入力状態が変化する（例えば、０から１、又は、１から０）毎に、電力が、コンポーネントによって、そして最終的にはコンパレータ３００によって消費される。多数のコンパレータ又はそのコンポーネントが状態を変更すると、消費電力のコストがかかる場合がある。このことは、１つのスレッドからの入力アドレス又はタグの多数のビットが、第２のスレッドからの入力アドレス又はタグのビットと異なる場合（サイクル毎に変化する場合がある）に発生する場合がある。したがって、スレッド毎に消費電力を最小限に抑える必要がある。
【００３７】
図４は、マルチスレッドのプロセッサのスレッド毎に冗長な（例えば、同一の）コンパレータのセットを有するＴＬＢ  ＣＡＭ構造４００のブロック図である。ＴＬＢ  ＣＡＭ構造４００は、マルチスレッド環境においてプロセッサ（例えば、プロセッサ２０２）によって実装される。プロセッサは、命令を実行する場合に１つ以上の実行スレッドを使用し、ＴＬＢ  ＣＡＭ構造は、Ｌ１ＩＴＬＢとして実装される。例えば、プロセッサは、Ｎ個のスレッドのうち１つのスレッドのみがアクティブであるシングルスレッドモードで実行することができる。別の例では、プロセッサは、２〜Ｎ個のスレッドがアクティブであるマルチスレッドモードで実行することができる。アクティブスレッドは、命令を実行する場合、各々のリソースと、非アクティブなスレッドのリソースと、を使用する。
【００３８】
ＴＬＢ  ＣＡＭ構造４００は、レジスタのセット４０２と、レジスタのセット４０２に接続されたスレッド毎のコンパレータのセット４０４，４０６と、を含む。本明細書で使用される場合、レジスタのセットは、「レジスタのバンク（bank of registers）」又は「レジスタバンク（register bank）」と呼ばれ、コンパレータのセットは、「コンパレータのバンク（bank of comparators）」又は「コンパレータバンク（comparator bank）」と呼ばれる。
【００３９】
レジスタバンク４０２は、ＴＬＢ線形仮想アドレスストレージユニットであるＲＡＭ又は他のメモリロジックである。レジスタバンク４０２は、例えば、スロット又はＣＡＭ行とも呼ぶことができる６４個のレジスタ又はストレージユニットを含む。各レジスタは、物理メモリアドレスにマッピングするアドレス変換データ（すなわち、ＴＬＢエントリ）を含む。
【００４０】
ＴＬＢ  ＣＡＭ構造４００は、レジスタバンク４０２を共有し、レジスタバンク４０２とフルアソシアティブである２つのコンパレータバンク４０４，４０６をさらに含む。すなわち、レジスタバンク４０２内の各レジスタは、１対１でコンパレータバンク４０４のコンパレータに対応しており、１対１でコンパレータバンク４０６のコンパレータに対応している。各コンパレータバンク４０４，４０６は、スレッドのアドレスレジスタから仮想アドレスを受信するための入力（例えば、スレッド０の入力４０５及びスレッド１の入力４０７）を含む。
【００４１】
各コンパレータバンク４０４，４０６は、例えば、６４個のコンパレータ（例えば、コンパレータ３００）を含む。レジスタバンク４０２に記憶されたＴＬＢエントリの各々は、（何れのスレッドがアクティブであるかに応じて）コンパレータバンク４０４又は４０６内の関連するコンパレータによって、（何れのスレッドがアクティブであるかに応じて）スレッド０又はスレッド１によって入力された仮想アドレスの入力と比較される。マッチライン４０８，４０９は、対応するコンパレータ番号のうち１つのコンパレータ番号に一致が存在するか否かを示しており、それぞれ論理ユニット４１１，４１２（例えば、実装に応じてＯＲゲート又はＮＯＲゲート）に接続されている。論理ユニット４１１，４１２は、マッチライン４０８，４０９からの１つの入力の１つが一致又はヒットを示すか否かを示すサマリヒット指標（summary hit indication）４１３，４１４をそれぞれ出力する。
【００４２】
図５は、図４のＴＬＢ  ＣＡＭ構造４００を実装するマルチスレッドのプロセッサ５００のブロック図である。２つのスレッドが示されているが、マルチスレッドのプロセッサ５００は、スレッド毎に冗長なコンパレータバンクが存在し、コンパレータバンクは、本明細書で説明するように、単一のレジスタバンクを共有する限り、３つ以上のスレッドを実装することができるのを理解されたい。さらに、図３〜図５に示すＣＡＭの実施態様は単なる例示であり、ＣＡＭは、多種多様な異なる構成及び変形を特徴とすることができる。例えば、ＣＡＭエントリの数は、ＣＡＭ行の数を変更することによって変えることができる。また、バイナルワードの長さを変更することができる（例えば、タグの長さは、異なる数のＲＡＭブロックを使用すること、異なるアドレス空間を有するＲＡＭブロックを使用すること、及び／又は、異なる数の並列のゲートを有するマルチビットのコンパレータを使用すること、によって変更することができる）。
【００４３】
バイナリワードの比較を実行し、一致ヒットを出力し、サマリヒット指標を出力し、及び、最終的な出力結果を出力するために使用される論理コンポーネントのタイプを含む他の多くの変形が可能である。このことは、図面から容易に明らかとなる。さらに、本明細書で説明するメモリ構造と、アドレスのロード及びキャプチャの回路及びロジックと、入力選択回路及びロジック等と、に関して他の変形が可能である。これらも図面から容易に明らかとなる。
【００４４】
図５によれば、ＴＬＢ  ＣＡＭ（例えば、Ｌ１ＩＴＬＢ  ＣＡＭ）内のスレッド０及びスレッド１の各々は、自身のコンパレータバンクを包む。そうすることによって、スレッドが完全に独立しているためにサイクル毎に変化する多数のビットを入力アドレスが有する場合に、同時マルチスレッド（ＳＭＴ）の動作中のコンパレータ状態のスラッシュを減少させる。したがって、各スレッド０，１がコンパレータバンクを共有する代わりに、スレッド毎に専用のコンパレータバンクが存在し、各コンパレータバンクへの入力アドレスは、スレッドが選択されていない場合に、（例えば、スレッド毎のキャプチャレジスタを介して）その以前の値を保持する。このようにして、スレッド毎のコンパレータバンクは、スレッドがメモリ内のあるページから別のページに移動する場合に状態を変更するだけでよくなり、消費電力が低減する。したがって、動的な消費電力が低減する。
【００４５】
スレッド０は、アドレスレジスタ５０１と、アドレスキャプチャ回路５０３（例えば、アドレスキャプチャフリップフロップ）と、コンパレータバンク４０４の入力４０５に接続されたマルチプレクサ５０５と、サマリヒット指標４１３に接続されたＡＮＤゲート５０７と、を含む。スレッド１は、アドレスレジスタ５０２と、アドレスキャプチャ回路５０４（例えば、アドレスキャプチャフリップフロップ）と、コンパレータバンク４０６の入力４０７に接続されたマルチプレクサ５０６と、サマリヒット指標４１４に接続されたＡＮＤゲート５０８と、を含む。ＡＮＤゲート５０７，５０８の出力は、ＯＲゲート５１０の入力に供給され、ＯＲゲート５１０は、「ヒット」又は「ミス」を示す最終的な出力５１１を出力する。図４で説明したように、コンパレータバンク４０４，４０６は、フルアソシアティブでレジスタバンク４０２に接続されている。
【００４６】
仮想アドレスは、同時に又は異なる時間にアドレスレジスタ５０１，５０２にロードされ、アドレスレジスタ５０１，５０２から出力される。仮想アドレスは、アドレスレジスタ５０１，５０２から出力され、アドレスキャプチャ回路５０３，５０４によって取得され、これにより、スレッド（すなわち、スレッド０又は１）が選択されなかった場合に、コンパレータバンク４０４，４０６の各々への入力が以前の値に維持されるようになっている。したがって、コンパレータバンク４０４，４０６の各々に対する入力状態は、対応するアクティブ且つ有効な入力（例えば、Ｔ０のアクティブ且つ有効な入力、又は、Ｔ１のアクティブ且つ有効な入力）によって示されるように、スレッドが非アクティブ及び／又は無効である場合に、その以前の値に維持される。
【００４７】
以下に説明するように、対応するアクティブ且つ有効な入力は単一のビットであるが、これに限定されない。或いは、対応するアクティブ且つ有効な入力は、２つの別々のビットで示され、一方のビットがスレッドのアクティブな状態を示し、他方のビットがスレッドの有効性の状態を示す。これらは、２つの別々の入力として提供される。
【００４８】
したがって、Ｔ０のアクティブ且つ有効な入力が０である場合、スレッド０は非アクティブであり、アドレスキャプチャ回路５０３に記憶された仮想アドレスが、マルチプレクサ５０５によって選択され、コンパレータバンク４０４に入力される。一方、Ｔ０のアクティブ且つ有効な入力が１である場合、アドレスレジスタ５０１に記憶された仮想アドレスが、マルチプレクサ５０５によって選択され、コンパレータバンク４０４に入力される。次に、コンパレータバンク４０４は、マルチプレクサ５０５によって入力された仮想アドレスに基づいて、レジスタバンク４０２によって提供されたＴＬＢエントリ毎に比較を実行する。最後に、サマリヒット指標４１３が出力され、ＡＮＤゲート５０７に供給される。ＡＮＤゲート５０７は、ヒット結果を出力する前に、Ｔ０のアクティブ且つ有効な入力を介して、スレッド０がアクティブ且つ有効であることを確実にする。したがって、サマリヒット指標４１３によってヒットが示されている場合であっても、スレッド０がアクティブ／有効でない場合には、ＡＮＤゲート５０７の出力が０（すなわち、ミス）になる。サマリヒット指標４１３によってヒットが示され、（Ｔ０のアクティブ且つ有効な入力によって示されるように）スレッド０がアクティブ／有効である場合にのみ、ＡＮＤゲート５０７がヒット指標を出力する。
【００４９】
同様に、Ｔ１のアクティブ且つ有効な入力が０である場合、スレッド１は非アクティブであり、アドレスキャプチャ回路５０４に記憶された仮想アドレスが、マルチプレクサ５０６によって選択され、コンパレータバンク４０６に入力される。一方、Ｔ１のアクティブ且つ有効な入力が１である場合、アドレスレジスタ５０２に記憶された仮想アドレスが、マルチプレクサ５０６によって選択され、コンパレータバンク４０６に入力される。次に、コンパレータバンク４０６は、マルチプレクサ５０６によって入力された仮想アドレスに基づいて、レジスタバンク４０２によって提供されたＴＬＢエントリ毎に比較を実行する。最後に、サマリヒット指標４１４が出力され、ＡＮＤゲート５０８に供給される。ＡＮＤゲート５０８は、ヒット結果を出力する前に、Ｔ１のアクティブ且つ有効な入力を介して、スレッド１がアクティブ且つ有効であることを確実にする。したがって、サマリヒット指標４１４によってヒットが示されている場合であっても、スレッド１がアクティブ／有効でない場合には、ＡＮＤゲート５０８の出力が０（すなわち、ミス）になる。サマリヒット指標４１４によってヒットが示され、（Ｔ１のアクティブ且つ有効な入力によって示されるように）スレッド１がアクティブ／有効である場合にのみ、ＡＮＤゲート５０８がヒット指標を出力する。
【００５０】
ＡＮＤゲート５０７，５０８の各々は、結果をＯＲゲート５１０に出力し、ＯＲゲート５１０は、ＡＮＤゲート５０７又はＡＮＤゲート５０８によって示されたアクティブ／有効なヒットが存在するかどうかに基づいて、最終的な出力５１１（すなわち、ヒット又はミス）を出力する。さらに、ＡＮＤゲート５０７，５０８及びＯＲゲート５１０は、ＴＬＢ  ＣＡＭ構造４００に組み込まれてもよいし、その外部に組み込まれてもよいことを理解されたい。
【００５１】
図６は、１つ以上の実施形態による、マルチスレッドのＣＡＭ方法６００のフロー図である。フロー図は、一連のシーケンシャルな動作を示しているが、明確に述べていない限り、特定の実行順序、同時若しくは重複する方法ではなく逐次的に動作若しくはその一部を実行すること、又は、介在若しくは中間の動作が発生することなく排他的に示されている動作の実行に関するこのシーケンスから推論されるものは示されていない。この例に示されているプロセスは、例えば、上述したメモリ管理ハードウェアによって実施される。
【００５２】
マルチスレッドのＣＡＭ方法６００は、ＴＬＢエントリを単一のレジスタバンクに記憶すること（動作６０１）と、第１のスレッド及び第２のスレッドを選択的にアクティブ／非アクティブにして、一方がアクティブで他方が非アクティブになるようにすること（動作６０２）と、を含む。方法６００は、第１のスレッドがアクティブであるかどうかを判別すること（動作６０３）と、第２のスレッドがアクティブであるかどうかを判別すること（動作６０４）と、をさらに含む。動作６０３，６０４及びこれらの後続の動作を実行するタイミングは、動作を同時に実行すること、少なくともある程度重複していること、重複させないこと、又は、互いに前後することを含むことを理解されたい。第１のスレッドが非アクティブである場合、第１のレジスタバンクは、ＴＬＢエントリを以前の第１の仮想アドレス（ＶＡ）と比較し（動作６０５）、第１のスレッドがアクティブである場合、第１のレジスタバンクは、ＴＬＢのエントリを、アクティブな第１のＶＡと比較する（動作６０６）。同様に、第２のスレッドが非アクティブである場合、第２のレジスタバンクは、ＴＬＢエントリを以前の第２の仮想アドレス（ＶＡ）と比較し（動作６０７）、第２のスレッドがアクティブである場合、第２のレジスタバンクは、ＴＬＢのエントリを、アクティブな第２のＶＡと比較する（動作６０８）。第１のコンパレータバンクと第２のコンパレータバンクとは、互いに独立しており、両方とも単一のレジスタバンクとフルアソシアティブである。したがって、対応するスレッドに提供された仮想アドレスをＴＬＢエントリの単一のセットと比較するために、各スレッド専用の冗長なコンパレータバンクがある。さらに、各コンパレータバンクへの入力仮想アドレスは、スレッドが非アクティブである場合に、アドレスキャプチャを介して以前の値を保持する。
【００５３】
方法６００は、第１のコンパレータバンクの比較結果に基づいて第１のサマリヒット指標を生成すること（動作６０９）と、第２のコンパレータバンクの比較結果に基づいて第２のサマリヒット指標を生成すること（動作６１０）と、をさらに含む。最終的な出力（例えば、「ヒット」又は「ミス」）は、第１のサマリヒット指標及び第２のサマリヒット指標に基づいて生成される（動作６１１）。特に、最終的な出力は、アクティブ且つ有効なスレッドに対応する第１のサマリヒット指標又は第２のサマリヒット指標に基づいて、アクティブ且つ有効なスレッドについて生成される。非アクティブ又は無効なスレッドの比較結果（及び、サマリヒット指標）は無視される。
【００５４】
マルチスレッドのＣＡＭデバイスが本明細書に開示されている。マルチスレッドのＣＡＭデバイスは、第１のスレッドに対応する第１の仮想アドレスを受信するように構成された第１の入力と、第２のスレッドに対応する第２の仮想アドレスを受信するように構成された第２の入力と、複数の物理アドレスのうち１つの物理アドレスにマッピングされたバイナリワードを記憶するようにそれぞれ構成された複数のレジスタを含むレジスタバンクと、第１のコンパレータバンクと、第２のコンパレータバンクと、を含む。第１のコンパレータバンクは、フルアソシアティブ構成で複数のレジスタのうち１つのレジスタにそれぞれ接続された第１の複数のコンパレータを含み、これにより、第１の複数のコンパレータの各々は、第１のスレッドがアクティブ且つ有効である間に第１の仮想アドレスを受信し、第１のスレッドが非アクティブ又は無効である間に以前の第１の仮想アドレスを受信するように構成されている。第２のコンパレータバンクは、フルアソシアティブ構成で複数のレジスタのうち１つのレジスタにそれぞれ接続された第２の複数のコンパレータを含み、これにより、第２の複数のコンパレータの各々は、第２のスレッドがアクティブ且つ有効である間に第２の仮想アドレスを受信し、第２のスレッドが非アクティブ又は無効である間に以前の第２の仮想アドレスを受信するように構成されている。以前の第１の仮想アドレスは、第１のスレッドが最後にアクティブ且つ有効であったときに第１の入力によって受信された第１の仮想アドレスであり、以前の第２の仮想アドレスは、第２のスレッドが最後にアクティブ且つ有効であったときに第２の入力によって受信された第２の仮想アドレスである。
【００５５】
いくつかの例では、第１のコンパレータバンクは、第２のコンパレータバンクから分離されており、第２のコンパレータバンクと同じである。
【００５６】
いくつかの例では、第１の複数のコンパレータの各々は、第１のスレッドが非アクティブ又は無効である間に、第１のコンパレータバンクへの以前の第１の仮想アドレスの入力に対応する第１の入力状態を維持するように構成されており、第２の複数のコンパレータの各々は、第２のスレッドが非アクティブ又は無効である間に、第２のコンパレータバンクへの以前の第２の仮想アドレスの入力に対応する第２の入力状態を維持するように構成されている。
【００５７】
いくつかの例では、第１の複数のコンパレータの各々は、第１の一致が存在するかどうかを判別するために、第１のスレッドのアクティブ状態に基づいて、第１の仮想アドレス及び以前の第１の仮想アドレスの一方を、コンパレータに関連するレジスタに記憶されたバイナリワードと比較するように構成されており、第１のコンパレータバンクは、第１の複数のコンパレータの第１の比較結果を出力するように構成されており、第２の複数のコンパレータの各々は、第２の一致が存在するかどうかを判別するために、第２のスレッドのアクティブ状態に基づいて、第２の仮想アドレス及び以前の第２の仮想アドレスの一方を、コンパレータに関連するレジスタに記憶されたバイナリワードと比較するように構成されており、第２のコンパレータバンクは、第２の複数のコンパレータの第２の比較結果を出力するように構成されている。
【００５８】
いくつかの例では、マルチスレッドのＣＡＭデバイスは、第１のコンパレータバンクの第１の複数のマッチラインに接続された第１の論理コンポーネントと、第２のコンパレータバンクの第２の複数のマッチラインに接続された第２の論理コンポーネントと、を含む。第１の論理コンポーネントは、第１の複数のマッチラインで受信した第１の比較結果に基づいて第１のサマリヒット指標を出力するように構成されており、第２の論理コンポーネントは、第２の複数のマッチラインで受信した第２の比較結果に基づいて第２のサマリヒット指標を出力するように構成されている。
【００５９】
いくつかの例では、第１のサマリヒット指標は、第１の複数のコンパレータのうち少なくとも１つのコンパレータが、第１の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、第１の一致が存在することを示しており、第２のサマリヒット指標は、第２の複数のコンパレータのうち少なくとも１つのコンパレータが、第２の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、第２の一致が存在することを示している。
【００６０】
いくつかの例では、マルチスレッドのＣＡＭデバイスは、第１のサマリヒット指標及び第２のサマリヒット指標を受信し、最終的な結果を出力するように構成された論理回路を含む。したがって、第１のスレッド及び第２のスレッドの一方ずつがアクティブであり、第１のスレッドがアクティブである状況では、最終的な結果は第１のサマリヒット指標であり、第２のスレッドがアクティブである状況では、最終的な結果は第２のサマリヒット指標である。
【００６１】
いくつかの例では、第１のコンパレータバンクは、第１の複数のコンパレータが、少なくとも１つの第１の一致が存在するかどうかを判別することに基づいて、第１の比較結果を出力するように構成されており、第２のコンパレータバンクは、第２の複数のコンパレータが、少なくとも１つの第２の一致が存在するかどうかを判別することに基づいて、第２の比較結果を出力するように構成されている。
【００６２】
いくつかの例では、マルチスレッドのＣＡＭは、第１の複数のコンパレータの第１の比較結果に基づいて第１のサマリヒット指標を受信し、第２の複数のコンパレータの第２の比較結果に基づいて第２のサマリヒット指標を受信し、最終的な結果を出力するように構成された論理回路を含む。したがって、第１のスレッド及び第２のスレッドの一方ずつがアクティブであり、第１のスレッドがアクティブである状況では、最終的な結果は第１のサマリヒット指標であり、第２のスレッドがアクティブである状況では、最終的な結果は第２のサマリヒット指標である。
【００６３】
いくつかの例では、以前の第１の仮想アドレスは、第１のスレッドが最後にアクティブ且つ有効であったときに第１のアドレスレジスタによって提供された第１の仮想アドレスであり、以前の第２の仮想アドレスは、第２のスレッドが最後にアクティブ且つ有効であったときに第２のアドレスレジスタによって提供された第２の仮想アドレスである。
【００６４】
いくつかの例では、第１の複数のコンパレータの各々は、第１のスレッドがアクティブ且つ有効である状況で第１のアドレスレジスタから第１の仮想アドレスを受信し、第２の複数のコンパレータの各々は、第２のスレッドがアクティブ且つ有効である状況で第２のアドレスレジスタから第２の仮想アドレスを受信する。
【００６５】
いくつかの例では、マルチスレッドのＣＡＭデバイスは、第１のスレッドがアクティブ且つ有効である状況で第１の仮想アドレスを第１のコンパレータバンクに送信するように構成された第１のアドレスレジスタと、第２のスレッドがアクティブ且つ有効である状況で第２の仮想アドレスを第２のコンパレータバンクに送信するように構成された第２のアドレスレジスタと、を含む。
【００６６】
いくつかの例では、マルチスレッドのＣＡＭデバイスは、第１のアドレスレジスタと、第２のアドレスレジスタと、を含む。第１のアドレスレジスタは、第１の仮想アドレスを記憶するように構成されており、第１のコンパレータバンクは、第１のスレッドがアクティブ且つ有効な状況で、第１の仮想アドレスを第１のアドレスレジスタから受信するように構成されている。第２のアドレスレジスタは、第２の仮想アドレスを記憶するように構成されており、第２のコンパレータバンクは、第２のスレッドがアクティブ且つ有効な状況で、第２の仮想アドレスを第２のアドレスレジスタから受信するように構成されている。
【００６７】
いくつかの例では、マルチスレッドのＣＡＭデバイスは、第１のアドレスキャプチャ回路と、第２のアドレスキャプチャ回路と、を含む。第１のアドレスキャプチャ回路は、第１の仮想アドレスを以前の第１の仮想アドレスとして記憶するように構成されており、第１のコンパレータバンクは、第１のスレッドが非アクティブ又は無効である状況で、以前の第１の仮想アドレスを第１のアドレスキャプチャ回路から受信するように構成されている。第２のアドレスキャプチャ回路は、第２の仮想アドレスを以前の第１の仮想アドレスとして記憶するように構成されており、第２のコンパレータバンクは、第２のスレッドが非アクティブ又は無効である状況で、以前の第２の仮想アドレスを第２のアドレスキャプチャ回路から受信するように構成されている。
【００６８】
いくつかの例では、以前の第１の仮想アドレスは、第１のスレッドが最後にアクティブ且つ有効であったときに第１のアドレスレジスタによって第１のアドレスキャプチャ回路に提供された第１の仮想アドレスであり、以前の第２の仮想アドレスは、第２のスレッドが最後にアクティブ且つ有効であったときに第２のアドレスレジスタによって第２のアドレスキャプチャ回路に提供された第２の仮想アドレスである。
【００６９】
いくつかの例では、マルチスレッドのＣＡＭデバイスは、命令変換索引バッファＣＡＭである。
【００７０】
マルチスレッドのＣＡＭ方法が提供される。第１のスレッドに対応する第１の仮想アドレスが、第１のコンパレータバンクによって受信される。第１のコンパレータバンクは、フルアソシアティブ構成でレジスタバンクの複数のレジスタのうち１つのレジスタにそれぞれ接続された第１の複数のコンパレータを含み、第１の仮想アドレスは、第１のスレッドがアクティブ且つ有効である間に受信される。第２のスレッドに対応する第２の仮想アドレスが、第２のコンパレータバンクによって受信される。第２のコンパレータバンクは、フルアソシアティブ構成でレジスタバンクの複数のレジスタのうち１つのレジスタにそれぞれ接続された第２の複数のコンパレータを含み、第２の仮想アドレスは、第２のスレッドがアクティブ且つ有効である間に受信される。第１のスレッドが非アクティブ又は無効である間に、第１のスレッドに対応する以前の第１の仮想アドレスが第１のコンパレータバンクによって受信される。第２のスレッドが非アクティブ又は無効である間に、第２のスレッドに対応する以前の第２の仮想アドレスが第２のコンパレータバンクによって受信される。以前の第１の仮想アドレスは、第１のスレッドが最後にアクティブ且つ有効であったときに受信された第１の仮想アドレスであり、以前の第２の仮想アドレスは、第２のスレッドが最後にアクティブ且つ有効であったときに受信された第２の仮想アドレスである。
【００７１】
いくつかの例では、第１のコンパレータバンクに入力された以前の第１の仮想アドレスに対応する第１の入力状態は、第１のスレッドが非アクティブ又は無効である状況では、第１の複数のコンパレータの各々によって維持される。さらに、第２のコンパレータバンクに入力された以前の第２の仮想アドレスに対応する第２の入力状態は、第２のスレッドが非アクティブ又は無効である状況では、第２の複数のコンパレータの各々によって維持される。
【００７２】
いくつかの例では、第１のスレッドのアクティブ状態に基づいて、第１の仮想アドレス及び以前の第１の仮想アドレスの一方は、第１の一致が存在するかどうかを判別するために、第１の複数のコンパレータの各々によって、コンパレータに関連するレジスタに記憶されたバイナリワードと比較される。第１の複数のコンパレータからの第１の比較結果は、第１のコンパレータバンクによって出力される。第２のスレッドのアクティブ状態に基づいて、第２の仮想アドレス及び以前の第２の仮想アドレスの一方は、第２の一致が存在するかどうかを判別するために、第２の複数のコンパレータの各々によって、コンパレータに関連するレジスタに記憶されたバイナリワードと比較される。第２の複数のコンパレータからの第２の比較結果は、第２のコンパレータバンクによって出力される。
【００７３】
いくつかの例では、第１のサマリヒット指標は、第１の比較結果に基づいて、第１の論理コンポーネントによって生成される。第１のサマリヒット指標は、第１の複数のコンパレータのうち少なくとも１つのコンパレータが、第１の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、第１の一致が存在することを示している。第２のサマリヒット指標は、第２の比較結果に基づいて、第２の論理コンポーネントによって生成される。第２のサマリヒット指標は、第２の複数のコンパレータのうち少なくとも１つのコンパレータが、第２の仮想アドレスを、関連するレジスタに記憶されたバイナリワードに一致させるという状況で、第２の一致が存在することを示している。
【００７４】
いくつかの例では、第１のサマリヒット指標及び第２のサマリヒット指標が論理回路によって受信され、最終的な結果が、第１のサマリヒット指標及び第２のサマリヒット指標に基づいて論理回路によって生成され、これにより、第１のスレッド及び第２のスレッドの一方ずつがアクティブであり、第１のスレッドがアクティブである状況では、最終的な結果は第１のサマリヒット指標であり、第２のスレッドがアクティブである状況では、最終的な結果は第２のサマリヒット指標である。
【００７５】
いくつかの例では、第１の仮想アドレスは、第１のスレッドがアクティブ且つ有効な状況で、第１のコンパレータバンクによって第１のアドレスレジスタから受信される。第２の仮想アドレスは、第２のスレッドがアクティブ且つ有効な状況で、第２のコンパレータバンクによって第２のアドレスレジスタから受信される。
【００７６】
いくつかの例では、第１のスレッド及び第２のスレッドのうち一方のスレッドが、プロセッサによって選択的にアクティブにされ、第１のスレッド及び第２のスレッドのうち他方のスレッドが、プロセッサによって選択的に非アクティブにされる。以前の第１の仮想アドレスは、第１のスレッドが非アクティブ又は無効である状況で、第１のコンパレータバンクによって第１のアドレスキャプチャ回路から受信され、これにより、以前の第１の仮想アドレスは、第１のスレッドが最後にアクティブ且つ有効であったときに受信した第１の仮想アドレスである。以前の第１の仮想アドレスは、第２のスレッドが非アクティブ又は無効である状況で、第２のコンパレータバンクによって第２のアドレスキャプチャ回路から受信され、これにより、以前の第２の仮想アドレスは、第２のスレッドが最後にアクティブ且つ有効であったときに受信した第２の仮想アドレスである。
【００７７】
いくつかの例では、第１の仮想アドレスは、第１のスレッドがアクティブ且つ有効な状況で、第１のコンパレータバンクによって第１のアドレスレジスタから受信され、第２の仮想アドレスは、第２のスレッドがアクティブ且つ有効な状況で、第２のコンパレータバンクによって第２のアドレスレジスタから受信される。
【００７８】
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
【００７９】
いくつかの態様が装置の文脈で説明されてきたが、これらの態様は、対応する方法の説明も表していることが明らかであり、ブロック又はデバイスは、方法ステップ又は方法ステップの機能に対応している。同様に、方法ステップの文脈で説明された態様は、対応する装置の対応するブロック、アイテム又は機能の説明を表している。方法ステップのいくつか又は全ては、例えば、マイクロプロセッサ、プログラム可能なコンピュータ又は電子回路等のハードウェア装置によって実行する（又は、ハードウェア装置を使用する）ことができる。いくつかの実施形態では、このような装置によって１つ以上の方法ステップのいくつかを実行することができる。
【００８０】
上述したコンポーネント又は構造（アセンブリ、デバイス、回路、システム等）によって実行される様々な機能に関して、かかるコンポーネントを説明するのに使用される用語（「手段」に対する言及を含む）は、特に明記しない限り、本明細書に示す本発明の例示的な実施態様における機能を実行する開示された構造と同等の構造でない場合であっても、説明されたコンポーネントの特定の機能を実行する（すなわち、機能的に同等である）任意のコンポーネント又は構造に対応することを意図している。
【００８１】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令（このような命令は、コンピュータ可読媒体に記憶することが可能である）の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００８２】
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）等の光学媒体が含まれる。
【図１】
2019525376.tif 000003
【図２】
2019525376.tif 000004
【図３】
2019525376.tif 000005
【図４】
2019525376.tif 000006
【図５】
2019525376.tif 000007
【図６】
2019525376.tif 000008
【国際調査報告】
2019525376.tif 000009
2019525376.tif 000010
2019525376.tif 000011