(57)【特許請求の範囲】
【請求項１】
データを記憶する第1のメモリと、
第2のメモリと、
前記第1のメモリおよび第2のメモリと通信する回路と
を備えており、前記回路は、
前記第1のメモリに記憶されている前記データのサブセットを特定し、
前記第1のメモリに記憶されている前記データの前記サブセットを処理してコードを生成し、
前記データの少なくとも一部を再構築するのに用いるために、前記コードを前記第2のメモリに記憶する
ために構成されており、
前記回路は、前記データの前記サブセットが、リアルタイムで前記データの前記サブセットに関連する複数の要求に基づいて特定されるようにさらに構成されている、装置。
【請求項２】
前記回路は、前記第1のメモリにおいてバンクコンフリクトにより利用可能でないデータが再構築されるように構成されている、請求項1に記載の装置。
【請求項３】
前記第2のメモリは、前記第1のメモリとは別々のものまたは前記第1のメモリの構成要素のうちの少なくとも1つである、請求項1または2に記載の装置。
【請求項４】
前記回路はメモリコントローラの構成要素である、請求項1から3のいずれか一項に記載の装置。
【請求項５】
前記回路は、前記コードが、前記データの前記サブセットとともに前記第2のメモリに記憶されるようにさらに構成されている、請求項1から4のいずれか一項に記載の装置。
【請求項６】
前記回路は、前記データの前記サブセットが、フローを利用することによって特定され、かつ前記フローを利用して前記データの前記サブセットが処理されてメモリコントローラによって前記コードが生成されるようにさらに構成されている、請求項1から5のいずれか一項に記載の装置。
【請求項７】
前記回路は、前記データの前記サブセットが、前記データの前記サブセットに関連する要求に基づいて特定されるようにさらに構成されている、請求項1から6のいずれか一項に記載の装置。
【請求項８】
前記回路は、前記要求が、メモリコントローラの外部のスケジューラによって特定されるようにさらに構成されている、請求項7に記載の装置。
【請求項９】
前記回路は、前記データの前記サブセットが、前記要求の処理と同時に少なくとも部分的に処理されるようにさらに構成されている、請求項7に記載の装置。
【請求項１０】
前記回路は、前記データの前記サブセットに関連する要求に関連づけられている情報を含むメッセージを受けるためにさらに構成されており、前記データの前記サブセットは、前記情報に基づいて特定される、請求項1から9のいずれか一項に記載の装置。
【請求項１１】
前記回路は、前記第1のメモリが複数のアクセスについてスケジューリングされるか否かを判断するためにさらに構成されている、請求項1から9のいずれか一項に記載の装置。
【請求項１２】
前記回路は、前記第1のメモリが複数のアクセスについてスケジューリングされるか否かに基づいて前記データの前記サブセットが条件に応じて処理されるようにさらに構成されている、請求項11に記載の装置。
【請求項１３】
前記回路は、前記第2のメモリの容量が前記コードの前記記憶に対応することができるか否かを判断するためにさらに構成されている、請求項1から12のいずれか一項に記載の装置。
【請求項１４】
前記回路は、前記第2のメモリの前記容量が前記コードの前記記憶に対応することができるか否かの前記判断に基づいて前記第2のメモリの少なくとも一部がクリアされるようにさらに構成されている、請求項13に記載の装置。
【請求項１５】
前記回路は、前記第2のメモリの準備が前記コードの前記記憶に対応することに対して整っているか否かを判断するためにさらに構成されている、請求項1から13のいずれか一項に記載の装置。
【請求項１６】
前記回路は、前記第2のメモリの前記準備が前記コードの前記記憶に対応することに対して整っているか否かの前記判断に基づいて前記コードの前記記憶が開始されるようにさらに構成されている、請求項15に記載の装置。
【請求項１７】
前記回路は、第1のバンクの第1のデータと、第2のバンクの第2のデータとに関連する1つ以上の機能を発揮するために前記コードが使用可能であるように、前記データの前記サブセットが、前記第1のメモリの前記第1のバンクの前記第1のデータと、前記第1のメモリの前記第2のバンクの前記第2のデータとを含むようにさらに構成されている、請求項1から16のいずれか一項に記載の装置。
【請求項１８】
前記回路は、第1のバンクの第1のデータと、第2のバンクの第2のデータと、第3のバンクの第3のデータとに関連する1つ以上の機能を発揮するために前記コードが使用可能であるように、前記データの前記サブセットが、前記第1のメモリの前記第1のバンクの前記第1のデータと、前記第1のメモリの前記第2のバンクの前記第2のデータと、前記第1のメモリの前記第3のバンクの前記第3のデータとを含むようにさらに構成されている、請求項1から17のいずれか一項に記載の装置。
【請求項１９】
前記装置は、前記コードが、前記第1のメモリの任意のバンクから1つ以上のデータアイテムを用いることに関連する1つ以上の機能を発揮するために使用可能であるように構成されている、請求項1から18のいずれか一項に記載の装置。
【請求項２０】
前記装置は、バンクに関連する複数の同時読み出し動作を再構築するために動作可能である、請求項1から19のいずれか一項に記載の装置。
【請求項２１】
第1のメモリに記憶されているデータのサブセットを特定するステップと、
前記第1のメモリに記憶されている前記データの前記サブセットを処理してコードを生成するステップと、
前記データの少なくとも一部を再構築するのに用いるために、前記コードを第2のメモリに記憶するステップと
を備え、
前記データの前記サブセットは、リアルタイムで前記データの前記サブセットに関連する複数の要求に基づいて特定される、方法。
【請求項２２】
前記データの前記サブセットは、フローを利用することによって特定され、前記フローを利用して前記データの前記サブセットは処理されてメモリコントローラによって前記コードが生成される、請求項21に記載の方法。
【請求項２３】
前記データの前記サブセットは、前記データの前記サブセットに関連する要求に基づいて特定される、請求項21または22に記載の方法。
【請求項２４】
前記要求は、メモリコントローラの外部のスケジューラによって特定される、請求項23に記載の方法。
【請求項２５】
前記データの前記サブセットは、前記要求の処理と同時に少なくとも部分的に処理される、請求項23に記載の方法。
【請求項２６】
前記データの前記サブセットに関連する要求に関連づけられている情報を含むメッセージを受けるステップをさらに備え、前記データの前記サブセットは、前記情報に基づいて特定される、請求項21から25のいずれか一項に記載の方法。
【請求項２７】
前記第1のメモリが複数のアクセスについてスケジューリングされるか否かを判断するステップ
をさらに備える、請求項21から25のいずれか一項に記載の方法。
【請求項２８】
前記データの前記サブセットは、前記第1のメモリが複数のアクセスについてスケジューリングされるか否かに基づいて条件に応じて処理される、請求項27に記載の方法。
【請求項２９】
前記第2のメモリの容量が前記コードの前記記憶に対応することができるか否かを判断するステップ
をさらに備える、請求項21から28のいずれか一項に記載の方法。
【請求項３０】
前記第2のメモリの準備が前記コードの前記記憶に対応することに対して整っているか否かを判断するステップ
をさらに備える、請求項21から29のいずれか一項に記載の方法。
【請求項３１】
前記コードの前記記憶は、前記第2のメモリの前記準備が前記コードの前記記憶に対応することに対して整っているか否かの前記判断に基づいて開始される、請求項30に記載の方法。
【請求項３２】
第1のバンクの第1のデータと、第2のバンクの第2のデータとに関連する1つ以上の機能を発揮するために前記コードが使用可能であるように、前記データの前記サブセットは、前記第1のメモリの前記第1のバンクの前記第1のデータと、前記第1のメモリの前記第2のバンクの前記第2のデータとを含む、請求項21から31のいずれか一項に記載の方法。
【請求項３３】
第1のバンクの第1のデータと、第2のバンクの第2のデータと、第3のバンクの第3のデータとに関連する1つ以上の機能を発揮するために前記コードが使用可能であるように、前記データの前記サブセットは、前記第1のメモリの前記第1のバンクの前記第1のデータと、前記第1のメモリの前記第2のバンクの前記第2のデータと、前記第1のメモリの前記第3のバンクの前記第3のデータとを含む、請求項21から32のいずれか一項に記載の方法。
【請求項３４】
前記コードは、前記第1のメモリの任意のバンクから1つ以上のデータアイテムを用いることに関連する1つ以上の機能を発揮するために使用可能である、請求項21から33のいずれか一項に記載の方法。
【請求項３５】
それ自体に記録されるプログラムを有するコンピュータ可読記憶媒体であって、前記プログラムは、コンピュータに請求項21から34のいずれか一項に記載の方法を実行させる、コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本特許出願は、「メモリのためのインテリジェントコード装置、方法およびコンピュータプログラム」と題された2015年7月28日に出願された米国出願第14／811，763号に対する優先権を主張し、この米国出願は、その全体が再現されるように、この参照によって本明細書に援用される。
【０００２】
本発明は、メモリシステムに関し、特に、メモリシステムに関連して使用されるコーディングに関する。
【背景技術】
【０００３】
現在では、メモリシステムにおいてコード（たとえばパリティコードなど）を生成して記憶する様々な技術が存在する。一般的に、コードは、メモリに記憶されるデータの全体に対して生成される。これにより、このようなコードのすべてを記憶するきわめて大きい記憶容量が必要になる。これによりコスト増加をまねくだけでなく、動作中のパフォーマンス低下もまねく。
【発明の概要】
【０００４】
メモリとともに用いられるインテリジェントコード装置、方法およびコンピュータプログラムが提供される。動作では、第1のメモリに記憶されているデータのサブセットを特定する。第1のメモリに記憶されているデータのこのようなサブセットを処理してコードを生成する。その後、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリに記憶する。
【課題を解決するための手段】
【０００５】
一実施の形態では、データを記憶する第1のメモリと、第2のメモリと、第1のメモリおよび第2のメモリと通信する回路とを含む装置が開示されている。この回路は、第1のメモリに記憶されているデータのサブセットを特定し、第1のメモリに記憶されているデータのサブセットを処理してコードを生成し、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリに記憶するために構成することができる。
【０００６】
別の実施の形態では、第1のメモリに記憶されているデータのサブセットを特定するステップと、第1のメモリに記憶されているデータのサブセットを処理してコードを生成するステップと、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリに記憶するステップとを含む方法が開示されている。
【０００７】
さらに別の実施の形態では、第1のメモリに記憶されているデータのサブセットを特定するコードと、第1のメモリに記憶されているデータのサブセットを処理してコードを生成するコードと、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリに記憶するコードとを含む、非一時的コンピュータ可読媒体上で具体化されるコンピュータプログラム製品が開示されている。
【図面の簡単な説明】
【０００８】
【図１】一実施の形態に係る、インテリジェントコード化メモリアーキテクチャを実施する方法を示す。
【図２】一実施の形態に係るインテリジェントコード化メモリシステムを示す。
【図３】一実施の形態に係るインテリジェントコード化メモリシステムを実施する方法を示す。
【図４】一実施の形態に係る、インテリジェントコード化メモリシステムを実施する第1の設計を示す。
【図５】一実施の形態に係る、インテリジェントコード化メモリシステムを実施する第2の設計を示す。
【図６】一実施の形態に係る、インテリジェントコード化メモリシステムを実施する第3の設計を示す。
【図７】一実施の形態に係る、図6の設計を超える改良を含む設計を示す。
【図８】1つの可能な実施の形態に係るネットワークアーキテクチャを示す。
【図９】一実施の形態に係る典型的なシステムを示す。
【発明を実施するための形態】
【０００９】
図1は、一実施の形態に係る、インテリジェントコード化メモリアーキテクチャを実施する方法100を示す。動作102に示されているように、第1のメモリに記憶されているデータのサブセットを特定する。様々な実施の形態で、このような第1のメモリは任意のタイプのメモリを含んでもよい。たとえば、様々な実施の形態で、第1のメモリは、これに関して、ランダムアクセスメモリ（RAM）、キャッシュ、バンクまたはその他任意のタイプのメモリという任意の形態態をとってもよい。
【００１０】
以下の実施の形態の説明中に示されるように、データのサブセットは、様々な実施の形態では、このようなデータサブセットに関連する1つ以上のスケジューリングされたアクセスに基づいて特定されてもよい。これのために、第1のメモリでのアクセスの対象であるものとして、データのサブセットを特定してもよい。当然のことながら、他の実施の形態に関しては、以降の処理のためにデータのサブセットが特定されるという結果のみをもたらす任意の所望のアルゴリズム（たとえば、統計的、予測的など）を用いてデータサブセットを特定してもよい。
【００１１】
次に、第1のメモリに記憶されているデータのサブセットを処理してコードを生成する。動作104を参照。本説明に関して、このようなコードは、すぐに分かるように、データを再構築するのに利用することができる任意のコードを含んでもよい。たとえば、一実施の形態では、コードは、データサブセットに基づいて生成される1つ以上のビットを含んでもよい。別の実施の形態では、コードはパリティコードを含んでもよい。1つの可能な実施の形態に係る使用の場合、第1のメモリでのバンクコンフリクトのために利用可能でないデータを再構築してもよい。さらに、上記の処理は、このようなコードをもたらすことができる任意の処理であってもよい。
【００１２】
特定されるデータサブセットは、様々な実施の形態で、2つ、3つまたは4つのバンクからのデータを含んでもよく、これらの任意の組み合せに基づいてコードを生成してもよい。一般的に議論すると、異なる複数の実施の形態で、第2のメモリは、第1のメモリの構成要素の数以下である数の構成要素を含んでもよい。これのためにコードの複雑さが適切にされ、したがってこれは問題のないものになる。当然のことながら、他の実施の形態に関しては、データサブセットを上記のように限定する必要はなく、したがって、データサブセットは第1のメモリに記憶されているデータの任意のサブセットを含んでもよい。
【００１３】
図1を続けて参照して、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリに記憶する。動作106を参照。本説明に関して、第2のメモリは、第1のメモリの構成要素（たとえば一部など）であってもよいし、そうでなくてもよい。さらに、第1のメモリと同様に、第2のメモリは、これに関しては、ランダムアクセスメモリ（RAM）、キャッシュ、バンクまたはその他任意のタイプのメモリの任意の形態をとってもよい。
【００１４】
適宜、一実施の形態では、コードをデータのサブセットとともに第2のメモリに記憶してもよい。当然のことながら、そうではない他の実施の形態が考えられる。任意のケースで、コードは、データの少なくとも一部（たとえばサブセットまたはその部分など）を、これに対する任意の以降のアクセスに関連して再構築するのにその後に利用可能である。適宜、第1のメモリの任意のバンクから1つ以上のデータアイテムを用いることに関連する1つ以上の機能を発揮するためにコードが使用可能であってもよい。さらに、関連するデータサブセットのみをコードを生成する目的で特定することによって、様々な特徴が示される場合がある（示されない場合もある）。たとえば、様々な任意に追加可能な実施の形態では、コード記憶のために必要な第2のメモリのサイズが節約される場合がある、同時読み出し／書き込みが有効にされる場合がある、などである。
【００１５】
様々な任意に追加可能なアーキテクチャおよび用法に関して、より分かり易い説明を以下示すが、ユーザの所望にしたがって上記の方法は実施される場合もされない場合もある。以下の説明は例示目的で示されており、いかなるようにも限定するように解釈すべきではない点に強く留意すべきである。以下の特徴のいずれも任意に組み込んでもよく、この場合、記載されている他の特徴を除外してもしなくてもよい。
【００１６】
図2は、一実施の形態に係るインテリジェントコード化メモリシステム200を示す。適宜、任意の上記および／もしくは下記の図ならびに／またはその説明に示されている実施の形態の任意の1つ以上に関してシステム200を実施してもよい。ただし、当然のことながら、任意の所望の環境に関してシステム200を実施してもよい。
【００１７】
図示の通り、オリジナルデータを記憶する第1のメモリ202と、1つ以上のコードを記憶する第2のメモリ204とが含まれている。上述したように、このような第1のメモリ202および第2のメモリ204は任意の形態をとってもよい。さらに、第1のメモリ202および第2のメモリ204は図2に別々のメモリであるように示されているが、このような第1のメモリ202および第2のメモリ204が同じ単一のメモリの部分であってもよい点に留意すべきである。さらにまた、近接する別々のメモリであるように示されているが、このような第1のメモリ202および第2のメモリ204が離れて位置する他の実施の形態が考えられる。
【００１８】
第1のメモリ202および第2のメモリ204と通信するメモリコントローラ206がさらに含まれている。図示の通り、メモリコントローラ206は様々な回路を含むように示されている。たとえば、第1のメモリ202に記憶されているデータのサブセットを、これのためのコードを生成する目的で特定する第1のスケジューラ210が含まれている。メモリコントローラ206は、第1のスケジューラ210を用いることにより特定されるデータサブセットのためのコードを生成するコード生成器212をさらに含む。図示されてはいないが、コードはデータのサブセットとともに第2のメモリ204に記憶されてもよい。
【００１９】
図2を引き続き参照して、第2のスケジューラ214が第1のスケジューラ210と通信する。様々な実施の形態で、第2のスケジューラ214は、これに関して、グローバルスケジューラ、チップレベルスケジューラまたはその他任意のタイプのスケジューラを含んでもよい。使用に際して、第2のスケジューラ214は、様々なデータに関連するタスク（たとえばプロセッサなどによって取り扱われるもの）をスケジューリングすることを担当し、さらに、コード生成器212を介したコード生成のためにデータサブセットを特定するのに用いられるように第1のスケジューラ210を促すために、直接的に、または、（図示されているような）バスのような相互接続部を介してメモリコントローラ206と通信する。
【００２０】
第1のスケジューラ210およびコード生成器212は、本実施の形態のメモリコントローラ206の構成要素であるように示されているが、このような回路を別のデバイス（たとえば、プロセッサ、メモリ、別個の1つ以上のチップなどに集積されるもの）に配置してもよく、かつ／または別々の別のデバイスに配置してもよい他の実施の形態が考えられる点に留意すべきである。
【００２１】
同様のことが、第2のスケジューラ214について言うことができる。第2のスケジューラ214は、中央処理装置（CPU）216、デジタル信号プロセッサ（DSP）218、ハードウェアアクセラレータ（HAC）220に対してスタンドアロンであるように示されているが、他の実施の形態では、プロセッサに関して実施してもよい。たとえば、様々な実施の形態では、このようなプロセッサは、CPU216、DSP218、専用プロセッサ（たとえばHAC220など）、プロセッサコアまたはデータを処理することができるその他任意のデバイス（またはその構成要素）を含んでもよい。
【００２２】
さらに、様々な構成要素のいくつかの間の通信は、直接通信であるように示されているが、通信が間接的である（たとえば、1つ以上の他の構成要素がその間にあるなど）他の実施の形態が考えられる点に留意すべきである。一実施の形態に係る、上記の構成要素が動作するのに用いられる典型的な方法に関して、さらなる説明を以下示す。
【００２３】
図3は、一実施の形態に係るインテリジェントコード化メモリシステムを実施する方法300を示す。適宜、任意の上記および／もしくは下記の図ならびに／またはその説明に示されている実施の形態の任意の1つ以上に関して方法300を実施してもよい。たとえば、一実施の形態では、方法300を図2のシステム200に関して実施してもよい。ただし、当然のことながら、方法300を任意の所望の環境に関して実施してもよい。
【００２４】
使用に際して、データサブセット（すなわちコードの基礎）をデータのサブセットに関連する要求に基づいて特定してもよい。特に、このような要求は、グローバルスケジューラまたはチップレベルスケジューラ（たとえば図2のスケジューラ214など）によって特定されるアクセス要求を含んでもよい。他の実施の形態では、リアルタイムにデータのサブセットに関連する複数の要求に基づいてデータサブセットを特定してもよい。たとえば、複数のアクセス要求を受けて異なるデータにアクセスしてもよい。これのために、データサブセットを、アクセス要求に基づいてこのような異なるデータを含むものとして特定してもよい。さらにまた、データサブセットを、異なるデータを含むものとして特定するプロセスを、リアルタイムに実行してもよい。
【００２５】
さらにまた、メッセージによりグローバルスケジューラまたはチップレベルスケジューラを用いてメモリコントローラ（たとえば図2のメモリコントローラ206など）のメモリコントローラスケジューラ（たとえば図2のスケジューラ210など）に上記の要求に関連する情報を通信してもよく、これにより、コード生成のために適切なデータサブセットを特定する際にこのような情報を用いることができる。使用中、データサブセットを、（以降のコード生成に用いられる）アクセス要求の処理と同時に、少なくとも部分的に（コード生成のために）処理してもよい。
【００２６】
図3を参照して、メモリコントローラスケジューラは、グローバルスケジューラまたはチップレベルスケジューラから上記のメッセージを受ける。動作302を参照。その後、第1のメモリの特定のメモリ領域中のデータが複数のアクセスのためにスケジューリングされていたか否かを判断する。判別304を参照。一実施の形態では、このような判別をグローバルスケジューラまたはチップレベルスケジューラによって行なってもよい。
【００２７】
特定のメモリ領域中のデータが判別304において複数のアクセスのためにスケジューリングされていたと判断される場合、データのサブセットが条件に応じて（コード生成のために）処理されるような追加動作を開始する。特に、図3に示されているように、関連するアドレス領域がグローバルスケジューラまたはチップレベルスケジューラからメモリコントローラスケジューラに伝えられることによってこのような追加動作は開始される。動作306を参照。
【００２８】
次に、判別308で、メモリコントローラは、第2のメモリの容量がコードの記憶に対応することができるか否かを判断する。特に、コードの新しいコード領域（たとえばコーディングバンクなど）に対応する余地があるか否かを判断する。余地がない場合、既存のコード領域を空けて（remove）容量を生成してもよい。動作310を参照。一実施の形態では、空ける既存のコード領域の選択は、必要な容量を生じさせる、これに関する最低使用頻度ポリシ（least−used policy）またはその他任意のアルゴリズムに基づいてもよい。これのために、第2のメモリの容量がコードの記憶に対応することができるか否かの判断に基づいて第2のメモリの少なくとも一部をクリアする。
【００２９】
いずれの場合でも、その際、コードバンクをバックグラウンドで生成してもよく、コードバンクの準備が行なわれた後、メモリコントローラに通知／トリガをかけてもよい。動作312〜314を参照。次に、動作316で、メモリコントローラスケジューラはそれに応じて、実際のトラフィックがメモリコントローラに到達した後、コーディングバンクをスケジューリングし始める。したがって、第2のメモリの準備がコードの記憶に対応することに対して整っているか否かの判断に基づいてコードの記憶を開始してもよい。
【００３０】
さらにまた、様々な実施の形態では、データサブセットを特定するのに用いられたのと同じフローを利用して、データのサブセットを処理してコードを生成してもよい。したがって、1つの可能な実施の形態に係れば、データサブセットの特定と、コード生成のためのデータサブセットの処理とは、その同じフローの最初および以降の動作であってもよく、これらの動作は、リアルタイム動作のために「連続的に（back−to−back）」継ぎ目なく実行することができるようなものである。
【００３１】
コーディングバンクが整った後、メモリコントローラスケジューラはグローバルスケジューラまたはチップレベルスケジューラに対するいくつかのイベントについてトリガをかけることもできる。さらに、いくつかの状況では、グローバルスケジューラまたはチップレベルスケジューラは、トリガが到着するのを待って、複数のCPU／DSPコアなどのプロセッサに対するタスクをスケジューリングしてもよい。このような複数のCPU／DSPコアは、この領域に対する複数の同時アクセスを有効にすれば、コーディングバンクから利益を受けることができ、パフォーマンス全体がさらに改善される。
【００３２】
様々な実施の形態に係る、インテリジェントコード化メモリシステムに関して実行され得る複数の異なる設計についてさらなる説明を以下示す。示されている通り、各実施の形態はコードを記憶する効率的な手法を含む。このような設計を説明して違いを明らかにする目的で、本明細書において表1に以下の用語を定める。
【００３３】
表1
・データバンク：生データ（たとえばオリジナルデータなど）を記憶するオリジナルバンク、およびベースラインシステム（たとえばコード化されていないシステムなど）に存在するオリジナルバンク。
・コーディングバンク：少なくとも1つのコードを記憶するバンク。
・コード領域：1つ以上のバンクのグループであり、より効果的なアクセスを確実にし、かつコードのアベイラビリティに合わせるために分割されるもの。
・コードのローカリティ（locality of code）：コードを形成するのに用いられるデータバンク要素の数。たとえば、a＋bを記憶するコーディングバンクは、コーディングバンクがコーディングを形成するのにaおよびbを用いるので、「2」のローカリティを持つ。
・コードのアベイラビリティ（availability of code）：データバンクがコーディングバンクに現われる回数。たとえば、コード（a＋b）、（a＋c）、（a＋d）が存在する場合、（a）のアベイラビリティは3であり、（b）、（c）および（d）のアベイラビリティは、これらがコード化されたシステムで一度だけ出現するので、1である。
・コードのレート：これは、データバンクの数／バンクの総数、すなわちN（データバンク）／［N（データバンク）＋N（コーディングバンク）］という比である。一実施の形態では、これは、コーディングバンクサイズがデータバンクサイズと同じである場合に限ってもよく、同じでない場合、コードのレートの式は、オリジナルデータのサイズ／コード化されたデータのサイズであってもよく、ここで、コード化されたデータは、オリジナルデータ＋コーディングデータを含む。
【００３４】
以下の設計の実施の形態では、単に例示目的でのみ、表2に示されている以下の制約を持つと仮定している。
【００３５】
表2
・読み出しアクセス：1サイクルで1バンクあたり4
・書き込みアクセス：1サイクルで1バンクあたり2
・共有メモリサイズ：8kB〜256kB
・バンクの数：8
・メモリオーバヘッド：15％
・コーディングバンク：コード記憶用に5つまたは6つのシャローバンク
【００３６】
図4は、一実施の形態に係る、インテリジェントコード化メモリシステムを実施する第1の設計400を示す。適宜、任意の上記および／もしくは下記の図ならびに／またはその説明に示されている実施の形態の任意の1つ以上に関して設計400を実施してもよい。当然のことながら、しかし、任意の所望の環境に関して設計400を実施してもよい。
【００３７】
第1の設計400では、バッチコードの概念を用いてバンクの各々中のメモリの特定の列をコード化する。これにより、コーディングバンクを用いて、コード化された領域に対して複数のアクセスを提供することができる。第1の設計400下で、1つの可能な実施の形態では、コード化された領域に対する任意の4つの読み出し要求を適時に扱うことができることが保証され得る。図4に示されているように、8つのバンクは2つの領域に分けられる。各領域は4つのバンクからなる。各領域は、コードを記憶する6つの並列シャローバンクを有する。バンク1〜8に示されている中間の領域はコード化された領域である。メモリに対するこれらの領域の割合はαであると仮定する。
【００３８】
使用に際して、コードは、コード化された領域に対するシーケンシャルアクセスが発せられる場合に最大パフォーマンスを実現するように設計されている。このようなアクセス中に最高10個の並列アクセスが1サイクルで実現されてもよい。たとえば、a1、b1、c1、d1、a2、b2、c2、d2、a3、b3、c3およびd3に対するアクセスを受けた場合のシナリオを考えることができる。ここで、第1の設計400は、コーディングバンクa1＋b1およびb1＋c1、c1＋d1とともにa1を用いてa1、b1、c1およびd1を扱うことができる。さらに、関連するデータバンクからb2を用い、コーディングバンクからa2＋d2、b2＋d2およびa2＋c2を用いてa2、b2、c2およびd2を扱うことができる。最後に、第1の設計400はデータバンクCおよびデータバンクDを用いてc3およびd3を扱うことができる。
【００３９】
別のシナリオでは、コードスキームは、メモリバンクに対する非シーケンシャルかつ非連続アクセスがある場合に1サイクルで4つのアクセスまで低下する。たとえば、これは、アクセスがa1、b8、c9およびd15について要求される場合に起こる場合がある。この組み合せについてのコードはコーディングバンクに存在しないので、並列アクセスの利益は用いられない。ただし、この場合には、第1の設計400は、キューを先読みして、以降のアクセスのためにコーディングバンクからコードをプリフェッチするプリフェッチ機構を用いることができる。このような機構についてさらなる説明を以下に示す。図4はバンクにおけるコードの記憶パターンを示す。表3は第1の設計400の概要を示す。
【００４０】
表3
1バンクあたりのコード化された領域の割合＝α
【数１】
0006555841.tif 000002
任意のバンクに対して1クロックサイクルで最大4つの読み出し要求を扱うことができる。
【００４１】
図5は、一実施の形態に係る、インテリジェントコード化メモリシステムを実施する第2の設計500を示す。適宜、任意の上記および／もしくは下記の図ならびに／またはその説明に示されている実施の形態の任意の1つ以上に関して設計500を実施してもよい。ただし、当然のことながら、任意の所望の環境に関して設計500を実施してもよい。
【００４２】
示されるように、1サイクルあたり、1バンクあたり最大5つの読み出しアクセスを可能にすることによって設計500は図4の設計400よりも改善される。設計500でもバンクを2つの領域に分ける。第1の領域は、5つの対応するコーディングバンクを有するバンクA〜バンクDである。図5に示されている2つの領域は、一領域を形成する9個の上側バンクと、別の領域を形成する9個の下側バンクとを含む。設計500では領域間でのコードの混合記憶が可能である。さらに設計500は1領域あたり5つのコーディングバンクを用いる。この設計500下のデータはバンク間コードとバンク内コードとの両方についてコード化される。バンク内コードは、互い違いになっているコーディングバンク領域に記憶される。これにより、他の領域からのコーディングバンクの使用が、これらが利用できる場合に、可能である。
【００４３】
通常の使用に際して、設計500では、コード化された領域に対するシーケンシャルアクセスが発せられる場合に最大パフォーマンスの実現が可能である。このようなアクセス中に最高9個の並列アクセスを1サイクルで実現することができる。たとえば、a1、b1、c1、d1、a2、b2、c2、d2、a3、b3およびc3に対するアクセスを受けた場合のシナリオを考えることができる。ここで、コーディングバンクa1＋b1、b1＋c1およびc1＋d1とともにa1を用いてa1、b1、c1、d1を扱うことができる。さらに、コーディングバンクa2＋d2およびb2＋d2とともにb2を用いてa2、b2、d2を扱うことができる。最後に、バンク3およびバンク4を用いてc2およびd3を扱うことができる。
【００４４】
一実施の形態では、メモリバンクに対する非シーケンシャルかつ非連続アクセスがあってもよい。たとえば、アクセスパターンがd1、d6、d9、d15およびd20である場合に、設計500は、コード化されたバンクに支援されてこれらの5つの読み出しを行なうことができる。コード領域IIの一番下のコーディングバンクからd1を読み出してもよく、ここで、これは、コード領域Iのオリジナルデータバンク由来の記憶されたd1、d6を有し、a9およびa9＋d9を読み出してd9を取得してもよく、b15およびb15＋d15を読み出してd15を取得してもよく、c20およびc20＋d20を読み出してd20を取得してもよく、これらすべてはコード領域Iおよびその関連コーディングバンクに由来する。さらに、設計500は、キューを先読みして、さらなるアクセスのためにコーディングバンクからコードをプリフェッチするプリフェッチ機構を用いることができる。たとえば、プリフェッチングプログラムコードは、すべてのキュー由来のすべての未処理の読み出しコマンドおよび書き込みコマンドを解析して、最大データアクセスおよび最大コーディングバンクアクセスが並列に実行されるように、最適アクセスパターンを生成してもよい。これのために、読み出しおよび書き込み数を増やしてもよい。
【００４５】
表4は設計500の概要を示す。
【００４６】
表4
1バンクあたりのコード化された領域の割合＝α
【数２】
0006555841.tif 000003
1バンクに対して1クロックサイクルで最大5つの読み出し要求を扱うことができる。
【００４７】
図6は、一実施の形態に係る、インテリジェントコード化メモリシステムを実施する第3の設計600を示す。適宜、任意の上記および／もしくは下記の図ならびに／またはその説明に示されている実施の形態の任意の1つ以上に関して設計600を実施してもよい。ただし、当然のことながら、任意の所望の環境に関して設計600を実施してもよい。
【００４８】
図4／図5の設計400／500は、2／5のレートを実現する。設計600は1／2のレートを実現する。設計600には、図6に示されているように9つのデータバンクおよび9つのコーディングバンクが必要である。設計600はまた3という比較的高いローカリティを持つ。すなわち、設計600では、メモリコントローラが3つのデータエレメント中2つを「認識（know）」して3つ目をデコードすることが必要である。これはまた、1サイクルあたり、1バンクあたり4つの同時読み出しアクセスを実現し、1サイクルあたり、バンクあたり2つの同時書き込みアクセスを実現するのに有用である。設計600のメモリオーバヘッドは設計400／500と比較して小さい（正確にαである）。しかし、大きいローカリティのため、設計600にはより高い論理的複雑さがある。以下、この設計の事例を表5に記載する。
【００４９】
表5
a0、a1、a2およびa3などのバンクAについて4回読み出す：
○a0についてバンクAから1回読み出す
○バンクB、CおよびA＋B＋Cに対して1回読み出してb1、c1およびa1＋b1＋c1を取得しa1を求める
○バンクD、GおよびA＋D＋Gに対して1回読み出してd2、g2およびa2＋d2＋g2を取得しa2を求める
○バンクE、IおよびA＋E＋Iに対して1回読み出してe3、i3およびa3＋e3＋i3を取得しa3を求める
a0、a1およびa3などのバンクAに対して3回読み出し、b0などのバンクBに対して1回読み出す：
○a0についてバンクAから1回読み出す
○バンクD、GおよびA＋D＋Gに対して1回読み出してd1、g1およびa1＋d1＋g1を取得しa1を求める
○バンクE、IおよびA＋E＋Iに対して1回読み出してe2、i2、a2＋e2＋i2を取得しa2を求める
○バンクBに対して1回読み出してb0を取得する
a0、a1などのバンクAに対して2回読み出し、b0およびb1などのバンクBに対して2回読み出す：
○a0についてバンクAから1回読み出す
○バンクD、GおよびA＋D＋Gに対して1回読み出してd1、g1およびa1＋d1＋g1を取得しa1を求める
○b0についてバンクBから1回読み出す
○バンクE、HおよびB＋E＋Hに対して1回読み出してe1、h1およびe1＋e1＋h1を取得しb1を求める
a0およびa1などのバンクAに対して2回読み出し、b0としてのバンクBに対して1回読み出し、c0としてのバンクCについて1回読み出す：
○a0についてバンクAから1回読み出す
○バンクD、GおよびA＋D＋Gに対して1回読み出してd1、g1およびa1＋d1＋g1を取得しa1を求める
○b0についてバンクBから1回読み出す
○c0についてバンクCから1回読み出す
【００５０】
表6は設計600の概要を示す。
【００５１】
表6
1バンクあたりのコード化された領域の割合＝α
【数３】
0006555841.tif 000004
1つのバンクに対して1クロックサイクルで最大4つの読み出し要求を扱うことができる。
【００５２】
表7では、様々なパラメータおよび関連コストについて図4〜図6の設計実施の形態が比較される。
【００５３】
【表１】
0006555841.tif 000005
【００５４】
図7は、一実施の形態に係る、図6の設計600を超える改良を含む設計700を示す。表8は設計700の概要を示す。
【００５５】
表8
1バンクあたりのコード化された領域の割合＝α
【数４】
0006555841.tif 000006
1つのバンクに対して1クロックサイクルで最大4つの読み出し要求を扱うことができる。
【００５６】
端的に説明すれば、様々な実施の形態で、コード化メモリシステムを実施して、圧縮形式でデータ冗長性をもたらすことができる。一実施の形態では、コード化されたデータは、オリジナルデータの数学的な組み合せであってもよい。データの互いに素の組み合せを用いてコードを取得することもできる。コードは、これらの互いに素の組み合せのサブセットを含んで、読み出しおよび書き込み保証をサポートすることもできる。一実施の形態では、コード構成を2セットに分けてもよい。たとえば、バンク間コーディングに関しては、m個のバンクからデータ値を取得することによってコードを構成してもよい。言い換えれば、2つのバンク、すなわちバンクAおよびバンクBがある場合、これらの2つのバンク由来のデータ値を加えることによってコードを構成してもよい。このコーディングは、バンクにわたってアクセスを分散させるのに有用である場合がある。他方、バンク内コーディングに関しては、同じバンク由来のデータ値を用いてコードを構成してもよい。たとえば、バンクAがa1〜anの値を持つ例では、a1＋a2、a2＋a3などのようにコードを構成してもよい。ここで、バンクは自己コード化され（self−coded）、データバンク毎にコードバンクが存在する。この場合、コードを、最良のレートがもたらされるように、所定のパターンで構成することができたり、ランダム性を持つ状態で構成することができたりする点に留意すべきである。たとえば、シーケンシャルにコード化する場合（a1＋a2、a2＋a3など）、一般的には、読み出しアクセス要求は、コードを使用するのにシーケンシャルでなければならない場合があるとされる。上記では、「＋」符号は、関係する2つの項の間の排他的論理和演算を指す場合があるが、一般的には、これは、a1とa2との両方に関係する関数演算を表わす［たとえばFunc（a1、a2）など］。いくつかの実施の形態では、アドレス空間配置のランダム化（ASLR）システムの場合にもランダムなコードをサポートすることができる。
【００５７】
図8は1つの可能な実施の形態に係るネットワークアーキテクチャ800を示す。図示の通り、少なくとも1つのネットワーク802が設けられる。本ネットワークアーキテクチャ800に関しては、ネットワーク802は、インターネット、ピア・ツー・ピア・ネットワーク、ケーブルネットワークなどの、電気通信ネットワーク、ローカルエリアネットワーク（LAN）、無線ネットワーク、ワイドエリアネットワーク（WAN）を含むがこれらに限定されない任意の形態をとってもよい。1つのネットワークのみが示されているが、当然、2つ以上の同様の、または異なるネットワーク802が設けられてもよいと解する。
【００５８】
ネットワーク802には複数のデバイスが接続される。たとえば、サーバコンピュータ812およびエンドユーザコンピュータ808を通信目的でネットワーク802に接続してもよい。このようなエンドユーザコンピュータ808は、デスクトップコンピュータ、ラップトップコンピュータおよび／またはその他任意のタイプのロジックを含んでもよい。さらにまた、携帯情報端末（PDA）デバイス810、携帯電話デバイス806、テレビジョン受像器804などを含むその他様々なデバイスをネットワーク802に接続してもよい。
【００５９】
図9は一実施の形態に係る典型的なシステム900を示す。適宜、図8のネットワークアーキテクチャ800のデバイスのいずれに関してもシステム900を実施することができる。当然のことながら、任意の所望の環境でシステム900を実施してもよい。
【００６０】
図示の通り、バスなどの通信相互接続部912に接続されている少なくとも1つの中央プロセッサ901を含むシステム900が設けられている。システム900はメインメモリ904［たとえばランダムアクセスメモリ（RAM）など］も含む。システム900はグラフィックプロセッサ908およびディスプレイ910も含む。
【００６１】
システム900は2次記憶部906も含んでもよい。2次記憶部906は、たとえば、ハードディスクドライブおよび／またはフロッピーディスクドライブ、磁気テープドライブ、コンパクトディスクドライブなどを表わすリムーバブル記憶ドライブを含む。リムーバブル記憶ドライブは、よく知られた手法でリムーバブル記憶ユニットに対して読み出しおよび／または書き込みを行なう。
【００６２】
これに関して、コンピュータプログラムまたはコンピュータ制御ロジックアルゴリズムをメインメモリ904、2次記憶部906および／またはその他任意のメモリに記憶してもよい。このようなコンピュータプログラムにより、実行時に、システム900は様々な機能（たとえば上記に示されている機能）を発揮することができる。メモリ904、記憶部906および／またはその他任意の記憶部は非一時的コンピュータ可読媒体の可能な例である。
【００６３】
なお、一態様におけるここに記載されている技術は、コンピュータベースの、またはプロセッサを含むマシン、装置またはデバイスなどの指示実行マシン、装置またはデバイスによって用いられるか、これに関連して用いられるコンピュータ可読媒体に記憶される実行可能な指示において具体化される。いくつかの実施の形態については、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（RAM）、読み出し専用メモリ（ROM）などの、コンピュータによってアクセス可能なデータを記憶し得る他のタイプのコンピュータ可読媒体が含まれると当業者であれば考える。
【００６４】
本明細書で用いられているように、「コンピュータ可読媒体」は、指示実行マシン、システム、装置またはデバイスが、コンピュータ可読媒体からの指示を読み出し（すなわちフェッチし）、記載されている方法を行なう指示を実行するように、コンピュータプログラムの実行可能な指示を記憶する任意の好適な媒体の1つ以上を含む。好適な記憶フォーマットは、電子、磁気、光学、電磁気フォーマットの1つ以上を含む。従来の典型的なコンピュータ可読媒体の列挙例（網羅するものではない）には、ポータブルコンピュータフロッピディスク、RAM、ROM、消去可能プログラマブル読み出し専用メモリ（EPROMまたはフラッシュメモリ）、ポータブルコンパクトディスク（CD）、ポータブルデジタルビデオディスク（DVD）、ハイディフィニションDVD（HD−DVD（商標））、BLU−RAYディスクを含む光記憶デバイスなどが含まれる。
【００６５】
記載されている図に示されている構成要素の構成は典型的なものであり、他の構成が可能であると当然解する。下記の請求項によって定められ、様々なブロック図に示されている様々なシステム構成要素（および手段）が、本明細書で開示されている主題にしたがって構成されるいくつかのシステムにおける論理的構成要素を表わすとも当然解する。
【００６６】
たとえば、説明されている図に示されている構成中に示されている構成要素の少なくともいくつかによって、これらのシステム構成要素（および手段）の1つ以上の全体または一部を実現してもよい。さらに、これらの構成要素の少なくとも1つを、電子ハードウェア構成要素として少なくとも部分的に実施することでマシンを構成し、他の構成要素を、実行環境に含まれるときにマシン、ハードウェア、または、ソフトウェアとハードウェアとの組み合せを構成するソフトウェアで実施してもよい。
【００６７】
特に、請求項によって定めされている少なくとも1つの構成要素を、指示実行マシン（たとえば、プロセッサベースの、もしくはプロセッサを含むマシン）などの電子ハードウェア構成要素、および／または、専用小規模回路または専用回路（たとえば、専用機能を発揮するように相互接続された慎重な論理ゲート）として少なくとも部分的に実施する。他の構成要素を、ソフトウェア、ハードウェアまたはソフトウェアとハードウェアとの組み合せで実施してもよい。さらに、これらの他の構成要素の一部もしくは全部を組み合わせてもよく、いくつかは完全に省略してもよく、本明細書に記載されている機能をこの場合も実現する状態で追加構成要素を加えてもよい。したがって、本明細書に記載されている主題を多数の異なる変形例で具体化してもよく、すべてのこのような変形例は請求されるものの範囲内にあると考えられる。
【００６８】
上記の説明では、主題は、特に明記しない限り、1つ以上のデバイスによって行なわれる働きおよび動作の記号的表現に関して記載されている。したがって、場合によってはコンピュータ実行が行なわれるものとして記述されているこのような働きおよび動作は、構造化形式のデータのプロセッサによる操作を含むと解する。この操作によりデータが変換されたり、コンピュータのメモリシステム中の適所で管理されたりし、そのデータによって、当業者によって十分に理解される手法でデバイスの動作の再構成またはその他変更が行なわれる。データは、データのフォーマットによって定められる特定の特性を持つデータ構造としてメモリの物理的な位置で管理される。ただし、主題は上記に関して説明されているが、以下に記載されている働きおよび動作の多様化例をハードウェアでも実行し得ると当業者であれば考えるので、これは限定するものであることを意味しない。
【００６９】
本明細書に記載されている主題の理解を容易にするために、多くの態様では、作用の連続という観点で記載されている。請求項によって定めされているこれらの態様の少なくとも1つは電子ハードウェア構成要素によって実行される。たとえば、様々な作用が専用小規模回路または専用回路によって実行されてもよいし、1つ以上のプロセッサによって実行されているプログラム指示によって実行されてもよいし、両方の組み合せによって実行されてもよいことが分かる。作用の任意の連続についての本明細書中の説明は、その連続物を実行するための記載されている特定の順序をたどらなければならないことを意味することを意図しない。本明細書に特に明記しない限りまたは文意によって明確に否定されない限り、本明細書に記載されているすべての方法を任意の適当な順序で実行してもよい。
【００７０】
たとえば、一実施の形態では、データを記憶する第1のメモリ手段と、第2のメモリ手段と、第1のメモリ手段および第2のメモリ手段と通信する回路手段とを含む装置が開示されている。この回路は、第1のメモリに記憶されているデータのサブセットを特定し、第1のメモリに記憶されているデータのサブセットを処理してコードを生成し、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリに記憶するために構成することができる。
【００７１】
別の実施の形態では、第1のメモリ手段に記憶されているデータのサブセットを特定するステップと、第1のメモリ手段に記憶されているデータのサブセットを処理してコードを生成するステップと、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリ手段に記憶するステップとを含む方法が開示されている。
【００７２】
さらに別の実施の形態では、第1のメモリ手段に記憶されているデータのサブセットを特定するコードと、第1のメモリ手段に記憶されているデータのサブセットを処理してコードを生成するコードと、データの少なくとも一部を再構築するのに用いるために、コードを第2のメモリ手段に記憶するコードとを含む、非一時的コンピュータ可読媒体上で具体化されるコンピュータプログラム製品が開示されている。
【００７３】
主題の記載に関する（特に以下の請求項に関する）用語「前記」を使用することおよび「前記」を使用しないこと（The use of the terms“a”and“an”and“the”）および同様の指示物を使用することは、本明細書に特に明記しない限りまたは文意によって明確に否定されない限り、単数と複数との両方をカバーするものと解釈することにしている。本明細書中の値の範囲の記載は、本明細書に特に明記しない限り、この範囲に含まれる各個別の値を個々に指す省略表現法として用いられることを単に意図するだけであり、各個別の値は、これが本明細書において個々に記載されるように、本明細書に含まれる。さらにまた、上記の説明は例示目的に限られ、限定目的でではなく、求められる保護の範囲は、権利が与えられる請求項の均等物とともに、以下に示されている請求項によって定められる。一切の例または本明細書で設けられている例示語（たとえば、「など（such as）」）の使用は、単によりよく主題を示すことのみを意図しており、特に請求されない限り、主題の範囲に限定を課さない。請求項と明細書との両方における結果をもたらす条件を示す用語「に基づく（based on）」およびその他同様の句の使用は、その結果をもたらすその他任意の条件を除外することを意図しない。本明細書中の言葉は、請求された発明の実施にとって必須である任意の請求されていない要素を示すものとして解釈すべきではない。
【００７４】
本明細書に記載されている実施の形態は、請求された主題を実施するための発明者に知られている1つ以上のモードを含んだ。当然のことながら、それらの実施の形態の変形例は、上記の記載を読めば、当業者に明らかになる。発明者は当業者がこのような変形例を適宜使用することを期待しており、発明者は請求されている主題が本明細書に特に記載されているのとは異なるように実施されることを意図する。したがって、この請求されている主題は、準拠法によって許容されるように本明細書に追記される請求項に示されている主題のすべての修正および均等物を含む。さらに、本明細書に特に明記しない限りまたは文意によって明確に否定されない限り、そのすべての可能な変形例の上記の要素の任意の組み合せが含まれる。
【符号の説明】
【００７５】
100  方法
200  インテリジェントコード化メモリシステム
202  第1のメモリ
204  第2のメモリ
206  メモリコントローラ
210  第1のスケジューラ
212  コード生成器
214  第2のスケジューラ
216  CPU
218  DSP
220  HAC
300  方法
400  第1の設計
500  第2の設計
600  第3の設計
700  改良を含む設計
800  ネットワークアーキテクチャ
802  ネットワーク
804  テレビジョン受像器
806  携帯電話デバイス
808  エンドユーザコンピュータ
810  携帯情報端末（PDA）デバイス
812  サーバコンピュータ
900  システム
901  中央プロセッサ
904  メインメモリ
906  2次記憶部
908  グラフィックプロセッサ
910  ディスプレイ
912  通信相互接続部
【図１】
0006555841.tif 000007
【図２】
0006555841.tif 000008
【図３】
0006555841.tif 000009
【図４】
0006555841.tif 000010
【図５】
0006555841.tif 000011
【図６】
0006555841.tif 000012
【図７】
0006555841.tif 000013
【図８】
0006555841.tif 000014
【図９】
0006555841.tif 000015