(57)【特許請求の範囲】
【請求項１】
データを処理する処理システム（１０，１２）と、
前記処理システムによって処理されたデータ、または該処理システムによって処理されるべきデータを記憶するメモリ（１４）と、
前記メモリへのアクセスを制御するメモリ・アクセス・コントローラ（１６）と、
前記メモリとの間で読み書きされるべきデータをバッファするための少なくとも１つのデータ・バッファ(４０)を含むバースト・バッファ・メモリと、を備え、
前記メモリはＤＲＡＭであり、前記バースト・バッファ・メモリは、より高速にアクセス可能なメモリであり、さらに、
前記メモリ・アクセス・コントローラへバースト命令を発信するバースト命令コントローラであって、該メモリ・アクセス・コントローラは、バースト命令に応答して、前記メモリおよび前記データ・バッファの間で、前記メモリのメモリ位置の列が選択され、該列に局所的な一連のアクセスが実行されるデータ・バーストによって、複数のデータ・ワードを転送する、バースト命令コントローラ（３２）と、
先行バースト命令が実行された直後に前記バースト命令が前記メモリ・アクセス・コントローラによる実行のため使用可能な状態にされるように、バースト命令を並べるバースト命令待ち行列（３０）と、
を備える、コンピュータ・システム。
【請求項２】
前記バースト命令のうちの少なくとも１つが遅延パラメータを含み、前記バースト命令コントローラが、前記遅延パラメータに従って前記メモリ・アクセス・コントローラへの前記命令の発信を遅延するように動作可能である、請求項１に記載のコンピュータ・システム。
【請求項３】
前記バースト命令の各々が、該バースト命令に応答してアクセスされるべきメモリ位置の間の間隔を定義するパラメータを含み、または該パラメータに関連づけられる、請求項１または請求項２に記載のコンピュータ・システム。
【請求項４】
前記処理システムからのメモリ要求に応答して、対応するメモリ位置が前記データ・バッファにマップされているか否かを判断し、マップされていれば前記データ・バッファ内のマップされている位置にアクセスするように動作する比較手段（２８）を更に備える、請求項１乃至請求項３のいずれかに記載のコンピュータ・システム。
【請求項５】
前記バースト命令コントローラが、前記メモリへのトランザクションの記述のためのメモリ・アクセス・テーブル（６５）および少なくとも１つのデータ・バッファへのトランザクションの記述のためのバッファ・アクセス・テーブル（６６）を含み、
各々のバースト命令が、前記メモリ・アクセス・テーブルおよび前記バッファ・アクセス・テーブルに対するインデックスを発行する、請求項１乃至請求項４のいずれかに記載のコンピュータ・システム。
【請求項６】
バースト命令に関して、メモリおよび少なくとも１つのデータ・バッファの間のトランザクションを定義するため、前記メモリ・アクセス・テーブルおよび前記バッファ・アクセス・テーブルにおける情報が実行時に結合される、請求項５に記載のコンピュータ・システム。
【請求項７】
前記バースト命令コントローラが、バースト命令による前記メモリ・アクセス・テーブルおよび前記バッファ・アクセス・テーブルのインデックス付けを文脈に応じて修正するための文脈テーブルをさらに有する、請求項５または請求項６に記載のコンピュータ・システム。
【請求項８】
前記バースト命令のうちの少なくとも１つが、データ・バッファに一度に記憶することができるものより多い数のデータ・エレメントに関連し、該命令に応答して当該システムが一連のバースト命令を実行するように動作する、請求項１乃至請求項７のいずれかに記載のコンピュータ・システム。
【請求項９】
前記データ・バッファは、ハードウェアまたはソフトウェアの制御の下当該システムによって構成することが可能である、請求項１乃至請求項８のいずれかに記載のコンピュータ・システム。
【請求項１０】
前記少なくとも１つのデータ・バッファが、２ポート・メモリ内で提供され、２ポートのうちの１つのポートが前記処理システムによってアクセスされ、他のポートが前記メモリによってアクセスされる、請求項１乃至請求項９のいずれかに記載のコンピュータ・システム。
【請求項１１】
前記２ポート・メモリが前記処理システムおよび前記メモリによって同時にアクセス可能である、請求項１０に記載のコンピュータ・システム。
【請求項１２】
前記処理システムが、主マイクロプロセッサ、および、データ・バッファのデータを処理するように構成されたコプロセッサを含む、請求項１乃至請求項１１のいずれかに記載のコンピュータ・システム。
【請求項１３】
前記処理システムが、主マイクロプロセッサ、および、データ・バッファのデータを処理するように構成された独立計算処理エンジンを含む、請求項１乃至請求項１１のいずれかに記載のコンピュータ・システム。
【請求項１４】
請求項１乃至請求項１３のいずれかに記載のコンピュータ・システムにおいて実行される方法であって、
少なくとも１つのデータ・バッファの支援の下での実行に適切な計算処理エレメントを原始コード内で識別するステップと、
前記原始コード内の前記識別された計算処理エレメントを、各々が少なくとも１つのデータ・バッファのサイズより大きくないメモリ・トランザクションを含む一連の命令に変換し、該命令をバースト命令として表すステップと、
前記処理システムによって前記原始コードを実行し、前記少なくとも１つのデータ・バッファに対するアクセスを通して前記識別された計算処理エレメントを処理するステップと、を含む方法。
【請求項１５】
前記識別された計算処理エレメントによって要求されるデータが、前記処理システムによって要求される前にメモリから少なくとも１つのデータ・バッファへ取り出される、請求項１４に記載の方法。
【請求項１６】
前記メモリと少なくとも１つの前記データ・バッファの間のトランザクションが完了するまで、前記処理システムを停止させる手段が提供される、請求項１４または請求項１５に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ・システムに関するもので、特に媒体データを処理するシステムに関するものである。
【０００２】
【従来の技術】
最適なコンピュータ・アーキテクチャは、性能上の要件を充足しながらかつ最小限度のコストを達成するものである。現状では、媒体の処理に重点を置いた装置システムにおける主要なハードウェア・コスト要因はメモリである。メモリは媒体データを保持するに足る十分な容量を持たなければならないし、またコンピュータのスループット要件を充足することができる十分なアクセス・バンド幅を提供しなければならない。命令スループットを常に最大にしなければならない通常のプロセッサとは対照的に、そのような装置システムはデータ・スループットを最大にする必要がある。本発明は、媒体集約的アルゴリズムを処理する上での制約を所与として、低コスト・メモリから高性能を引き出すことを(その点に限定するものではないが)特に対象とする。
【０００３】
本発明は、特に、データを処理するための処理システム、処理システムによって処理されるまたは処理されるべきデータを記憶するためのメモリ(例えばダイナミックＲＡＭすなわちＤＲＡＭ)、メモリへのアクセスを制御するためのメモリ・アクセス・コントローラ、およびメモリとの間で読み書きが行われるべきデータをバッファするためのデータ・バッファ(例えばスタティックＲＡＭすなわちＳＲＡＭ)を備えるタイプのコンピュータ・システムに関するものである。
【０００４】
現在、最も廉価な形式の対称性読み書きメモリはＤＲＡＭである(対称性は、フラッシュ・メモリの場合の読み書きと違って、読み取りおよび書き込みアクセス時間が全く同じであることを意味する)。現在、ＤＲＡＭはパーソナル・コンピュータにおいてメイン・メモリとして広く使用されているが、プロセッサにより近いデータ・バッファやキャッシュではＳＲＡＭのような比較的高速な(しかしより高価な)メモリ技術が使用されている。低コスト・システムにおいては、処理性能(および能力)の目標が満たされるような最も低コストのメモリを使用する必要がある。
【０００５】
本発明の開発過程で、達成可能な最大データ・バンド幅を理解するため、最も廉価なＤＲＡＭ技術について分析を行ったが、明らかに、既存システムは利用可能なバンド幅を活用していない。本発明は、利用可能なバンド幅の使用度を増加させること、従って、上記のようなコンピュータ・システムにおけるメモリの全般効率を増加させることを目的とする。
【０００６】
典型的プロセッサは、ＳＲＡＭキャッシュに１０ｎｓでアクセスすることができる。しかし、メモリ・コストを最小限にとどめなければならないシステムにおけるメインＤＲＡＭメモリへのアクセスは２００ｎｓを要し、キャッシュのアクセス時間の２０倍である。従って、高いスループットを確実にするためには、必要とされる前に可能な限り多くのデータを局所的キャッシュ・メモリ・ブロックに置かなければならない。そうすることによって、プロセッサは、メイン・メモリに関する場合のような比較的長い遅延ではなく、迅速な局所的キャッシュ・メモリに対するアクセス待ち時間を経験するだけである。
【０００７】
ここで「待ち時間」とは、メモリからデータを取り出すために要する時間のことである。システムの処理性能がプロセッサに依存するような「計算処理中心」のシステムにおいて待ち時間は重大な関心事である。局所的メモリとメイン・メモリの速度の間の大きい係数によって、処理がメモリ・システムの性能に左右される場合がある。そのようなケースは、「バンド幅依存的」であって、メモリ・システムのバンド幅によって究極的に制限される。プロセッサの処理速度がメモリに比較して十分早ければ、プロセッサは、メモリが応ずることができるよりも速い速度で要求を生成するであろう。今日の多くのシステム性能は、計算処理依存型からバンド幅依存型へ移行している。
【０００８】
【発明が解決しようとする課題】
より速いメモリを使用することは、性能問題を軽減するための１つの技法である。しかし、それにはコストの増加がともなう。高速メモリの使用に代わって、既存のメモリ・チップの使用度が効率ではないという認識に基づいて、現在使用のメモリに対して一層効率的にアクセスする新しい方法を展開することが必要とされている。
【０００９】
【課題を解決するための手段】
伝統的ＤＲＡＭ構成の特徴は、それが「バースト」モードでのアクセスを可能にするという点である。ＤＲＡＭは、矩形マトリックスの形態のメモリ位置から構成されるアレイを含む。アレイにおける１つのエレメントにアクセスするためには、先ず行を選択(すなわちオープン)して、次に該当する列を選択しなければならない。しかし、一旦ある行が選択されると、その行の中の複数列への連続したアクセスは、単に列アドレスを与えることによって実行される。ある行をオープンしてその行にとって局所的な一連のアクセスを実行する概念は、「バースト(burst)」と呼ばれる。
【００１０】
本明細書で使用される用語「バースト効率」は、ＤＲＡＭへの平均アクセス時間(b)を分母としＤＲＡＭへの最小アクセス時間(b)を分子とする比率の測定値である。ＤＲＡＭアクセスにおいて、ｎ個のデータ項目をバーストするためには、１回の長いアクセスと(ｎ−１)回のそれより短いアクセスが必要とされる。このように、バーストが長いほど、平均アクセス時間は減少し、従ってバンド幅は増大する。典型的には、キャッシュ型システムは、(キャッシュ・アーキテクチャおよびバス幅がその理由であるが)、４回のアクセス・バーストを使用する。これは、約２５ないし４０％のバースト効率に相当する。１６ないし３２回のアクセスというバースト長の場合に効率は約８０％と倍になる。
【００１１】
本明細書において使用される用語「飽和効率」とは、ＤＲＡＭバスにおけるトラヒック頻度の測定値を指す。性能がプロセッサに依存するシステムにおいては、キャッシュ・ミスが発生し、そこで新しいキャッシュ行を取り出すため４アクセス・バーストが実行されるまで、バスはアイドルである。この場合、待ち時間は非常に重要である。このように、バスがほとんど使用されていないので、飽和効率は低い。本発明人のテストでは、ある１つのシステムにおける飽和効率は２０％であった。従って、バスから５倍の性能向上を引き出す機会が存在する。
【００１２】
バースト効率と飽和効率の向上の可能性を組み合わせることによって、現在使用されているものと同等のメモリについて約１０倍のスループト向上を獲得できる可能性がある。
【００１３】
本発明は、第１の局面において、バースト命令をメモリ・アクセス・コントローラに伝達する手段、およびそのようなバースト命令を待ち行列に記憶する手段を備える。該メモリ・アクセス・コントローラは、バースト命令に応答して、単一のメモリ・トランザクションで複数のデータをメモリとデータ・バッファの間で転送させる。また、バースト命令の待ち行列への記憶によって、先行したバースト命令が実行された直後に次のバースト命令がメモリ・アクセス・コントローラによって実行される状態に置かれる。
【００１４】
第２の局面において、本発明は、バースト命令をメモリ・アクセス・コントローラに伝達する手段を備え、この場合、そのようなバースト命令は、そのバースト命令に応答してアクセスされるメモリの位置の間の間隔を定義するパラメータを含むかあるいはそのようなパラメータに関連づけられ、該メモリ・アクセス・コントローラは、バースト命令に応答して、単一のメモリ・トランザクションの間に、上記間隔パラメータに従って間隔を置いたメモリ位置とデータ・バッファの間で複数のデータを転送させる。
【００１５】
第３の局面において、本発明は、コンピュータ・システムにおいて、少なくとも１つのデータ・バッファへコンパイルしなければならない計算処理エレメントおよびそのデータ・バッファを介する実行にとって適切な計算処理エレメントを原始コードの中で特定するステップ、該原始コードにおいて特定した上記計算処理エレメントを、各々が上記少なくとも１つのデータ・バッファのサイズより小さいメモリ・トランザクションを含み、バースト命令のような演算を表す一連の演算に変換するステップ、および上記特定した計算処理エレメントが上記少くとも１つのデータ・バッファへのアクセスを通して処理されるように、上記原始コードを処理システムによって実行するステップを含む。
【００１６】
【発明の実施の形態】
本発明は、それに限定はされないが、特に、「媒体集約的」アルゴリズムと呼ばれる特定のクラスのアルゴリズムに適用できる。このアルゴリズムは、データに依存するアドレス指定を用いることなく長いアレイにアクセスすることができる通常のプログラム・ループを使用するアルゴリズムを意味する。そのようなアルゴリズムは、高度の空間上の局所性および規則性を示すが、一時的局所性は低い。高度の空間上の局所性および規則性が発生する理由は、アレイ項目ｎが使用されるとすると、ｓをアレイにおけるデータ・エレメント間の一定のストライド(間隔)を示すとすればアレイ項目ｎ＋ｓが使用される可能性が非常に高いからである。低い一時的局所性は、典型的にはアレイ項目ｎが一度だけアクセスされるという事実による。
【００１７】
普通のキャッシュは、頻繁に使用されているデータをプロセッサの近くに保持することによって高い一時的局所性を開拓するように設計される。空間局所性は開拓されるが、それは行取り出しメカニズムによる非常に限られた形態である。これは、通常は、単位ストライドであり、相対的に短い。これら２つの点は、キャッシュが媒体データストリームを取り扱うのが不得意であることを意味する。動作の際、キャッシュにおいて冗長データによって役立つデータが置き換えられることが頻繁に発生し、ＤＲＡＭバンド幅は極大化されない。伝統的キャッシュは特定のデータ・タイプには理想的に適しているが、媒体データには適していない。
【００１８】
本発明と伝統的キャッシュのバースト・バッファリングの主な相違は、充填方針、すなわちバッファの内容を空にし充填する状況および方法にある。
【００１９】
本発明に従って、伝統的データ・キャッシュを補強し、特に媒体データにアクセスするために使用される新しいメモリ・インタフェース構造すなわちバースト・バッファが提供される。媒体データ特性を活用することによって、ＤＲＡＭまたはそれと同等の機構が最適化され、また、制御のために使用されるその他のデータ・タイプに関してデータ・キャッシュは一層効果的に動作することができる。媒体データがキャッシュのデータと衝突する可能性が少ないので、性能を犠牲にすることなくデータ・キャッシュ・サイズを減少することができる場合が出てくる。バースト・バッファのために必要とされる全追加メモリが、データ・キャッシュのために必要とされるメモリの節約と同じ大きさであるような場合に、上記のようなケースとなる可能性がある。
【００２０】
システムは、いくつかのバースト・バッファを含むことができる。典型的には、各バースト・バッファは、それぞれのデータストリームに割り当てられる。アルゴリズムは可変的数のデータストリームを持つので、バースト・バッファにとって利用できるＳＲＡＭの量を固定させることが提案される。この量は、必要とされるバッファの数に従って等量に分割される。例えば、固定的ＳＲＡＭの量が２ＫＢでアルゴリズムが４つのデータストリームを持つとすれば、メモリ領域は、４つの５１２バイトのバースト・バッファに細分化される。６個のデータストリームを持つアルゴリズムの場合は、各々が２５６バイトの８個のバースト・バッファに細分化される。換言すれば、データストリームが２の累乗でない場合、バースト・バッファの数は、好ましくは、次に大きい２の累乗である。
【００２１】
本発明に従うアーキテクチャにおいて、バーストは次式によって定義されるアドレス・セットを含む。
burst {B + s × i | B,S,i ∈ N ∧ ０ ≦ i < L}
上式において、Bは転送の基底アドレスであり、Sはエレメントの間のストライドであり、Lは長さであり、Nは自然数のセットである。この式において明示的に定義されていないが、バーストの順序は、0からL-1へ増分するiによって定義される。従って、１つのバーストは、
(base_address, length, stride)
という３タプルによって定義することができる(ここで、base_addressは基底アドレス、lengthは長さ、strideはストライドを意味する)。
また、ソフトウェアにおいて、バーストはエレメント・サイズによって定義するこができる。これは、バーストが、バイト、ハーフワードまたはワードという単位でサイズを与えられることを意味する。ストライドの単位はサイズを考察しなければならない。「サイズを与えられたバースト」は、
(base_address, length, stride, size)
という４タプルによって定義することができる(sizeはサイズを意味する)。
【００２２】
「経路バースト」は、メモリへの経路の幅であるようなサイズを与えられたバーストを指す。コンパイラは、ソフトウェアがサイズを与えたバーストを経路バーストに対応づける責任がある。経路バーストは、
(base_address, length, stride, width)
という４タプルによって定義される(widthは経路幅を意味する)。
【００２３】
経路幅が３２ビット(すなわち４バイト)であれば、経路バースの形式は、常に(base_address, length, stride, 4)であり、簡略化して、(base_address, length, stride)という３タプルで表される。
【００２４】
このメモリの制御およびバースト・バッファの割り当て(および解放)は、より高レベルのソフトウェアまたはハードウェア・プロセスによって取り扱われることもできる。このプロセスは、バースト・バッファの名前を自動的に変更するような別のアーキテクチャ上の機能を含むこともできる。
【００２５】
図１に示されるように、本発明に従うコンピュータ・システムは、ｉ９６０のようなプロセッサ１０、メイン・メモリ・インターフェースまたはアクセス・コントローラ１６を持つＥＤＯ ＤＲＡＭのようなメインＤＲＡＭメモリ１４、メモリ・インターフェース１６からの経路２０ａおよびプロセッサ１０への経路２０ｂをもつ小規模ＳＲＡＭ命令キャッシュ１８、データ・キャッシュ１９とメモリ・インターフェース１６の間の経路２１ａおよびデータ・キャッシュ１９とプロセッサ１０の間の経路２１ｂを持つＳＲＡＭデータ・キャッシュ１９、および、キャッシュ・バイパス・プロセッサ・ロード／ストア命令を実行するためのプロセッサ１０とメモリ・インターフェース１６の間の経路２２を備える。既知のコンピュータ・システムとは違って、本コンピュータ・システムには、図１において点線で囲われて示されているバースト・バッファ・システム２４が含まれる。
【００２６】
バースト・バッファ・システム２４は、(1)例えばプロセッサ１０のためのコプロセッサであるプロセッサ・インターフェース１２、(2)例えば２ＫＢという固定量のＳＲＡＭを持つバースト・バッファ・メモリ２６、(3)プロセッサ１０からメモリ要求を受け取り、必要とされるデータがバースト・バッファ・メモリ２６に駐在しているかあるいはデータを取り出すためメイン・メモリ１４へのアクセスを始動すべきかをプロセッサに対して透過的に決定する範囲比較機構２８、(4)少くとも１つのＦＩＦＯ形態をなし、プロセッサ１０からバースト命令を受け取ることができるバースト命令待ち行列３０、(5)現在時のシステム状態を評価し、バースト命令待ち行列３０から次の適切なバースト命令を取り出し、その命令または要求をメイン・メモリ１４に伝達するように動作することができるバースト・コントローラ３２、(6)バースト転送に関連するパラメータを保持し特定のバースト命令によって更新されるパラメータ記憶機構３４、(7)ミスしたデータに関してバースト・バッファ・メモリ２６をバイパスする経路を含め、バースト・バッファ・メモリ２６とプロセッサおよびメモリ・インターフェース１２、１６の間のデータ移動のための経路３６ａ乃至３６ｄ、および(8)状態情報およびバースト命令をバースト・バッファ・システム２４内およびプロセッサならびにメモリ・インターフェース１２、１６へ移動させるための制御経路３８ａ乃至３８ｆ、を含む。
【００２７】
図２および図３に示されるように、バースト・バッファ・メモリ２６は選択可能な数のバッファ４０として構成することができる。例えば、図２の(Ａ)のように単一２ＫＢバッファ４０(0)として、図２の(Ｂ)のようにそれぞれが１ＫＢの２つのバッファ４０(0)、(1)として、図３の(Ｃ)のようにそれぞれが５１２バイトの４つのバッファ４０(0)、(1)、(2)、(3)として、また、図３の(Ｄ)のようにそれぞれが２５６バイトの８つのバッファ４０(0)、(1)、(2)、(3)、(4)、(5)、(6)、(7))として、構成できる。また、各バッファは、例えば図３の(Ｃ)のバッファ４０(2)、(3)をメイン・メモリ１４からプロセッサ１０への入力バッファとして、例えば図３の(Ｃ)のバッファ４０(0)、(1)をプロセッサ１０からメイン・メモリ１４への出力バッファとして、あるいは例えば図２の(Ａ)のバッファ４０(0)を双方向バッファとして、配置することが可能である。バースト命令待ち行列は、バースト・バッファ４０の数と同数のＦＩＦＯ４２を持つように構成される。図２の(Ａ)はデータストリームが１つの場合に、図２の(Ｂ)はデータストリームが２つの場合に、図３の(Ｃ)はデータストリームが３または４つの場合に、図３の(Ｄ)はデータストリームが５乃至８つの場合に、それぞれ使用される。代替的構成として、単一のバースト命令待ち行列ＦＩＦＯ４２をバースト・バッファ４０の数と無関係に使用することも可能である。
【００２８】
プロセッサ１０はロード命令"ld"のような普通のｉ９６０命令に従って動作することができる。パラメータを持つロード命令の形式は次の通りである。
ld (g5),r4
これは、プロセッサに対して、そのレジスタg5にあるアドレスによってポイントされるデータ・ワードを取り出して取り出したデータ・ワードをレジスタr4に格納することを命令している。しかしながら、本発明の１つの実施形態において、命令セットは、同等のロードバースト命令"loadburst"を含むように拡張される。ロードバースト命令は次の形式を持つ。
loadburst src, stride, size, buf
これは、srcが示すメモリ・アドレスを開始点としてstrideが示す量増分したアドレスまでのメモリ１４から、sizeで示された大きさのバースト・データ・ワードを、bufで識別された入力または双方向性バースト・バッファ４０の１つ(buf)に転送させるものである。これに対応する次の形式のストア・バースト命令"sotreburst"がある。
storeburst buf, src, stride, size
これは、bufで識別された入力または双方向性バースト・バッファ４０の１つ(buf)から、srcが示すメモリ・アドレスを開始点としてstrideが示す量増分したアドレスまでのメモリ１４へsizeで示された大きさのバースト・データ・ワードを転送させるものである。
【００２９】
命令loadburstおよびstoreburstは、たとえ転送が発生しなかったとしてもそれらが単一サイクルで終了するという点において、通常のloadおよびstore命令とは相違する。要するに、loadburstおよびstoreburst命令はメモリ・インターフェース１６にバーストを実行するように伝えるが、バーストの完了を待たない。
【００３０】
上記のシステムにおいて、メモリ・インターフェース１６は、良識の範囲内ではあるが、いかなるサイズおよびストライドを持つバースト要求にも応じることができなければならない。マイクロプロセッサ１０に対する高度な追加機構が必要ではあるが、同一のチップへの組み込みが最善の実施策である。プロセッサ１Ｏからのメモリ要求の実行にはいくつかの方法があるが、そのうちの２つは、(a)バースト命令待ち行列３０に関してメモリ・マップ化対応レジスタを使用する方法と、(b)コプロセッサを使用してload/storeメカニズムをバイパスする方法である。後者の方法が好ましいけれども、必ずしもアーキテクチャ機能がプロセッサに常に存在しなければならないことはない。後者のモデルの使用には、また、新しいプロセッサ命令の定義および使用が必要とされる。
【００３１】
キャッシュの主な利点のうちの１つは、正しさの透過性である。正しいデータがプロセッサに常に与えられ、必要な場合プロセッサに視認できないハードウェア方法を使用してデータはいつでもメイン・メモリにおいて更新される。バースト・バッファ・システム２４も同様の機能性を提供する。
【００３２】
上記のシステムにおいて、バースト・バッファ４０のデータは、メイン・メモリ１４の領域からコピーされる。位置情報(すなわちアドレス、ストライド等々)は、それぞれのバッファ４０にヒットがある(すなわちそのメモリ位置のデータが現在キャッシュに存在する)か否かを判断するためプロセッサ１０からのすべてのメモリ要求に対して比較される。比較は次の２つの方法で実行される。すなわち、(1)バッファ４０におけるすべてのアドレスを範囲比較器２８を使用して(通常キャッシュ・タグに関して)プロセッサ・アドレスと連想比較すること、および(2)プロセッサ・アドレスを使用して、範囲比較器によってバッファのアドレスを指定する式を検査して、解があるか調べること、である。前者は高価であり(そして速度を早くするほど高価となり)、後者は安くて速いが、満足のゆく性能を得るためストライドを２の累乗に制限する。
【００３３】
アドレス範囲比較が真であれば、読取りはバッファ４０においてヒットする。この場合、データはバッファからプロセッサへ迅速に返される。一方、読み取りがミスすれば(すなわちバッファ４０においてヒットしなければ)、バースト・バッファ・メモリ２６を迂回して、要求されたデータはメイン・メモリ１４から直接取り出される。しかし、データがその時点でロードされつつある範囲にあると、その範囲がロードされ次にバッファ４０から取り出されプロセッサ１０に渡されるまで読取りは「停止」または「阻止」される。(待ち時間を節約するため、データは受け取られ次第渡されるようにシステムは修正されている)。当該データが送出されるべきバーストに含まれていれば、当該データが近接した連続動作で２度読み取られることを防ぐため、バーストの実行が完了するまで、データ読み取りは阻止される。
【００３４】
書込みのヒットがあると、対応するバッファ４０のデータは更新される。その時点でメイン・メモリ１４は更新されないが、メイン・メモリ１４に関する整合性は、後刻ソフトウェア制御の下storeburst命令によって達成される。一方、書込みミスが発生すると、同じデータを含むstoreburst命令が保留状態または活動状態にない限り、メイン・メモリのデータが直接更新される。この場合、書込みは、storeburst命令が完了するまで阻止される。
【００３５】
命令をメモリ・インターフェース１６へ送達するバースト・コントローラ３２は、「遅延」と呼ばれるメカニズムを使用することがある。これは、命令が発せられる時間が後刻またはなにがしかの事象まで延期されることを意味する。例えば、次の命令が、例えばstoreburst-deferred-16access命令であれば、バースト・バッファへの１６回のアクセスが完了するまでそれは待機し、そのその後自動的にstoreburst命令を発する。その他の遅延メカニズムとして、時間(すなわちサイクルのカウント)、外部割り込みのような事象、およびバッファ空き有無インジケータを使用することもできる。アクセス・カウントに基づく遅延の使用は、プログラムの流れとメモリ・インターフェース１６への命令伝達を切り離すので、バースト・バッファ・システム２４の強力な機能である。
【００３６】
バースト・バッファ・コントローラ３２は、経路３８ｆを経由してプロセッサ１０へ状態情報を提供する。バースト・バッファ・コントローラ３２は、また、バッファ割当ておよび論理バッファの名前変更がソフトウェア制御の下実施されるように、ユニークなバッファ識別子を提供する。
【００３７】
バーストの長さが対応するバッファ４０のサイズより長ければ、１つの手順として、バッファ４０の長さと同じになるようにバースト長が切り捨てされる。しかし、修正された手順では、非常に長いストリームがバッファに持ち込まれる。loadstream-deferred-32accessのような単一命令を使用して、それぞれがバースト・バッファのサイズを持ついくつかの断片に長いストリームを格納し、断片の各々は指定された数のアクセスが完了すると次の断片と置き換えられる。
【００３８】
プロセッサ１０にとって透過的でないアクセス・モードをサポートすることも可能である。最も簡単な方法は、先入れ先出し方式(ＦＩＦＯ)バッファである。この場合、プロセッサ１０は単一のアドレスを使用してバッファ４０にアクセスする。読取りの場合は、バースト・バッファ４０から最初のエレメントを取り出す。後続の読取りはバッファ全体を通して次々とエレメントを取り出す。空きの有無の概念がここで導入される。より一般的に拡張すれば、バッファ４０上に「窓」が与えられる。この窓は、バッファに対する相対的アクセスを可能にする。この窓における固定数のアクセスの後(あるいは別のトリガーに従って)、窓は、その位置がもう１つのデータに対して中央となるように、進められる。前進の量はプログラムできる。これを「循環窓」方法と呼ぶ場合があり、多くの実施形態が可能である。
【００３９】
以下に、バースト・バッファ・システム２４の動作の詳細を記述する。バッファ４０の中のデータは、要求されたアドレスを開始アドレス、長さおよびストライド情報を使用した計算結果と比較することによって有効性を検査される。(レジスタ・サイズは別として)長さおよびストライド値に対する制約はない。しかし、通常のloadburstおよびstoreburst命令に関しては、長さがバッファ・サイズより大きければ、データは切り捨てられる。レジスタから読み戻される値は切り捨てられた値である。
【００４０】
アドレス・タグが使用されない限り、範囲比較は非常に遅い。範囲検査はワード・アドレスのみを考慮するので、ビット０および１は無視される。バッファ４０における読み取りヒットによってデータ項目は復元される。ミスはメイン・メモリ１４からの取り出しを引き起こす。書込みヒットによって、該当するバッファ４０が更新される。書込みミスはメイン・メモリ１４を直接更新する。メイン・メモリ１４に完全なバッファ４０を最後に書き戻すことによって、整合性が維持される。
【００４１】
データがデータ・キャッシュに存在する場合に発生する整合性問題を防止するため、バッファ４０を使用するデータに「キャッシュ使用不可」というマークを付けることもできる。これは、バッファ４０に関するデータを含む同じ領域のメモリにおける行取り出しからデータ・キャッシュは制約されなければならないことを意味する。
【００４２】
読み取り用の状態レジスタが各バッファ４０に関連づけられる。このレジスタは、バッファが使用中であるか否かを示す有効ビットを含む。ソフトウェアは、このようなフラグを検査してどのバッファが利用できるか判断する。現在動作状態を含むその他の状態情報も利用できる。無効なバッファへのアクセスが発生すると、通常のメモリ・ロード／ストア命令が生成される。有効性メカニズムはソフトウェアにとって透過的である。
【００４３】
バースト命令待ち行列３０に書き込まれるloadburst命令によって、指定された特性を持つバーストが目標バッファに記憶される。loadburst命令が発信され次第、書き込み動作が完了するまでバッファは完全に無効状態にされる。バッファに保持されていたいかなるデータも、消去され回復はできない。
【００４４】
storeburst命令によって、目標バッファは空にされる。storeburst命令が発信され次第、バッファはロックされ(すなわちすべてのアクセスが禁止され)、バッファはメモリへコピーされる。次にそのバッファは無効状態にされる。
【００４５】
loadburstおよびstoreburst命令は両者とも遅延化できる。これは、動作開始を誘導するため、実行されねばならない読み取り／書き込み数を記述するカウントが各命令に関連づけされることを意味する。（その他のオプションとして、計時や命令カウントが含まれる)。これは、例えば１６回のアクセスだけ遅延されるburststore命令をバッファに伝達することができることを意味する。そこで、バッファ・コントローラはバッファへ１６回アクセスが行われるのを待ち、その時点でバッファを空にする。
【００４６】
バッファは"allocbuffer"命令によって有効状態に変更される。この命令は、範囲計算機構へアドレス情報を提供する点でloadburst命令と同じであるが、いかなるデータのロードも行わない。この命令は、先行loadburst命令を必要とするのではなく、プロセッサ書き込みを使用してバッファに書き込みが行われるのを可能にする。allocbuff命令によってバッファは有効状態にされる。バッファに含まれているデータは不変のままであり、これは、バッファをいっぱいにしているデータが異なるメモリ領域に再配置されることを意味する。
【００４７】
同様の"freebuffer"命令がある。これは、バッファを単に無効状態にしてその内容を不変のままとする命令である。その後に続くallocbuff命令によって、バッファをその前の状態に復帰させることができる。
【００４８】
プロセッサはいくつかの条件によって処理を停止させられる。それらの条件には、(1)バッファ命令待ち行列がいっぱいであるにもかかわらずバースト命令が出される場合、(2)バースト命令が進捗中に目標バッファへのアクセスが要求される場合、および(3)バッファ命令がバッファをミスし、通常のメモリ・アクセスが実行されなければならない場合、が含まれる。
【００４９】
転送のため指定された長さがバッファの長さ未満の場合は、部分的アクセスが実行され、バッファ中の未使用位置は未定義とされる。バースト転送は、バースト命令によって示唆される順序でバッファが常に空にされるという制約を持つ。部分的アクセスは常にバッファの最初の位置から始まる。
ストライドは符号付き量であるので、バースト・データの順序は、常に、昇順または降順のいずれかである。特定のアプリケーションまたはシステムによって要求されるバッファの数は、性能要件、サポートすべきストリームの数等々によって変わる。命令は、前の命令が完了した時のみ実行される。
【００５０】
"storeburst value O"コマンドを出して、目標メモリ区域をゼロで埋めることができる。バースト・バッファ自体はゼロにされないが、別々のデータ経路がメイン・メモリに値０を書き込む。この拡張コマンドにおいて、どのような値でも指定することは可能であり、必要とされる値に設定されるレジスタが提供される。
"loadburst value O"命令によってバッファをゼロで埋めることができる。メモリ・トラヒックは生成されないが、この演算は同じ方法で実行され１サイクル以上を要する。このように、この命令は他のloadburst命令と同様に取り扱われる。
【００５１】
データストリームが以下の条件に合致することをアプリケーションが保証するという前提で、メモリ・コントローラによってバーストに分解された上で、データストリームがメモリに送られる。その条件は、(1)各データ・エレメントは順次持ち込まれること、(2)各データ・エレメントは、正確に１度またはあらかじめ定められた使用パターンに従って、使用されること、(3)バッファ・サイズの断片の形態でのストリーム処理が適用されること、である。これらの条件が満たされれば、書込みストリームまたは読取りストリームは、該当する数のアクセスだけ遅延されるバースト命令に分解される。
【００５２】
バースト転送に関連づけられる長さは通常バッファ・サイズに切り捨てられるが、loadburstストリームおよびstoreburstストリーム命令を使用することで、長さはストリーム長と解釈される。これらの命令も初期的に遅延されるかもしれないが、これは最初のバースト転送の開始に影響を及ぼすだけである。後続のバーストは、バッファのサイズだけ自動的に遅延される。
【００５３】
"burstabort"コマンドはバースト転送を中止するため使用される。その機能性は、進捗中のバーストを終了させることができない点で制約される。しかし、バーストが保留中であれば(すなわち遅延されていれば)、それはキャンセルされる。いずれにせよ、バッファは常に無効状態にされる。その本当の用途は、現在のバーストの終了時にあるいはバーストが保留中であれば即刻ストリームを終了させるためのものである。
【００５４】
次に、システムのファームウェア・インターフェースを記述する。各バースト・バッファ４０には４つのレジスタが関連づけられている。これらのレジスタは、メモリに対応付けされていて、プロセッサによって単一サイクルのロード／ストアでアクセスされる。それらレジスタの名前は、1.基底アドレス、2.長さ、3.ストライド、および4.制御／状態、である。最初の３つのレジスタは、バースト命令のために使用されるパラメータを含む。バースト命令は制御レジスタに書き書き込まれ、状態情報が制御レジスタを読むことによって取得される。すべてのレジスタは、１ワード幅である(本実施形態では３２ビットである)。各レジスタについて以下に記述する。レジスタの意味を理解するためには、１バーストでデータを取り出すために使用される関数を定義することが必要である。１バースト転送における各エレメントiは、以下の式によって与えられるメイン・メモリのアドレス(address)から取り出される。
Address[i] = base_address + (i- 1)*stride   (式1)
但し、base_addressは基底アドレス、strideはストライドを意味し、iは１からlengthまでの範囲の値である。
【００５５】
base_addressレジスタは、バースト命令が出される前に、初期化されていなければならない。バースト命令が出されると、基底アドレスを使用してデータ・アドレスが計算される。基底アドレスは、ストリーム・アクセスに関しても自動的に変更されることはない。バッファが有効である時のbase_addressレジスタへの書き込みは、バッファを無効状態にさせる。レジスタ自体はハードウェアによって隠されていて、たとえバッファがその後無効状態にされるとしてもすべての活動的バーストが正しく完了することが保証される。基底アドレスは、バイト単位で指定されワード単位で整列されなければならない。そうでなければ、値は自動的に切り捨てらされ、丸めは実行されない。レジスタから読まれる値は変更されない。
【００５６】
長さレジスタは、バースト命令が出される前に、初期化されなければならない。バースト命令が出されると、長さ(length)を使用して、データ・アドレスが計算される。非ストリーム・バーストに関しては、長さレジスタは、バースト・バッファ長以下の長さに制限される。バースト命令が出され、長さレジスタの値がこの基準を上回ると、それはバッファ長に自動的に切り捨てられる。この切り捨ては、バースト命令が出される際発生するが、長さレジスタへの書込みが行われる時は発生しない。切り捨てられる値は、このレジスタから順次読み取られている値である。ストリーム・アクセスの場合、長さレジスタは、全ストリーム転送の長さを指定する。バッファが有効である時の長さレジスタへの書き込みはバッファを無効状態にする。レジスタ自体はハードウェアによって隠されていて、たとえバッファがその後無効状態にされるとしてもすべての活動的バーストが正しく完了することが保証される。転送の長さはバイト単位で測定されるが、ワード(すなわち４バイト)の倍数に制限される。ワード境界に整列されない値は切り捨てられ、丸めは実行されない。レジスタから読み取られる値は変更されない。
【００５７】
ストライド・レジスタには、バースト命令が出される前に、初期化されなければならない。バースト命令が出されると、ストライドを使用して、データ・アドレスが計算される。ストライドは、ストリーム・アクセスに関しても、自動的に変更されることはない。バッファが有効である時のストライドへの書き込みはバッファを無効状態にさせる。レジスタ自体はハードウェアによって隠されていて、たとえバッファがその後無効状態にされるとしてもすべての活動的バーストが正しく完了することが保証される。ストライドはバイト単位で測定されるが、ワード(すなわち４バイト)の倍数に制限される。ワード境界に整列されない値は切り捨てられ、丸めは実行されない。レジスタから読まれる値は変更されない。
【００５８】
制御／状態レジスタに関しては、すべてのバースト命令は制御レジスタへの書き込みの別名である。これらのアクセスにおいて使用されるデータは、各命令に関して定義される形式に従って構成される。ワードの最初の３ビットは、命令を識別するために使用される。
【００５９】
以下、種々のバースト命令を記述する。
最初に、"allocbuffer"命令は、メモリの領域を対応させるバッファを構成するために使用される。バーストは実行されないが、バッファは有効にされ、範囲検査が実行される。転送の長さはバッファのサイズ以下でなければならない。これより大きい値はバッファ・サイズに自動的に切り捨てられる。範囲検査は、上記(式1)に従って生成されたアドレス・セットに対して比較を行う。この命令を出すために使用されるデータ・ワードの形式は、
allocbuffer: [000] [29 reserved bits]
である。
バッファの中のデータは無効化を通してバッファに残るので、バッファ・パラメータを変更し第２のallocbuff命令を出すことによってバッファは再配置される。
【００６０】
"burstabort"命令はバースト命令を中止するため使用される。メモリからバッファへのバーストは、一旦始まれば、中止することはできない。しかし、遅延バーストは、保留の間中止することはできるし、loadstreamコマンドはバースト境界上で中止することは可能である。すべての場合、バッファは無効状態にされる。バッファのどのデータも変更されない。この命令の形式は、
burstabort: [001] [29 reserved bits]
である。
【００６１】
"freebuffer"命令を使用して、関係バッファが無効状態にされる。パラメータはなにも使用されない。形式は、
freebuffer:[O10][29 unused bits]
である。
【００６２】
"loadburst"および"storeburst"命令を使用して、それぞれ、バースト・データをメイン・メモリからバースト・バッファへ取り出し、バスト・バッファからメイン・メモリへバースト・データを書き込む。転送の長さはバッファのサイズ以下でなければならない。これより大きい値は、バッファの大きさに自動的に切り捨てられる。バースト・アドレスは、上記(式１)に従って生成される。これらの命令を出すために使用されるデータ・ワードの形式は、
loadburst:[011] [V] [12 reserved bits] [16 bit deferral_count]
storeburst:[100] [V] [12 reserved bits] [16 bit deferral_count]
である。但し、Vは、バッファにロードされたデータがすべてゼロであるか(V=0)、メモリからの実際のデータであるか(V=1)を示すビット値である。最後の１６ビットは、遅延カウントである。この値が０を超えていれば、遅延カウントのアクセス数がバッファに対して実行されるまでバースト命令は延期され。そのようなアクセスは読取りまたは書き込みのいずれかである。転送は、開始アドレス、長さおよびストライドの点でワード境界に整列されている。
【００６３】
"loadstream"および"storestream"コマンドを使用して、完全なデータストリームがバッファへロードされ、完全なデータストリームがバッファからコピーされる。ストリームの長さは長さレジスタにおいて定義され、２32バイトに制限される。バッファ管理機構が、メモリからバッファへおよびバッファからメモリへ転送されるバースト・セットにストリームを自動的に分解する。バッファへの書き込みは、ハードウェアによって自動的に調整される。遅延カウントを使用してバースト境界が検出される。これは、あるバッファは、あらかじめ定義された数のアクセスの後シーケンスの中の次のバッファと置き換えられることを意味する。ストリームを進める他のどのようなメカニズムも利用できないが、他の命令を使用してストリームを進めるメカニズムを考慮することは可能である。長さＬバイトのストリームに関して、４バイト幅を持つメモリ・バス上に長さＳのＬ／４Ｓ個のバーストに加えて、残りを記憶しコピーするための１つのバーストがある。長さは４バイトの倍数でなければならず、そうでなければ最も近い倍数まで切り捨てられる。loadstream値０は、バッファへ継続的にゼロをロードし、実際のメモリ・アクセスは起きない。storestream値０は、メモリへ継続的にゼロをロードする。これらの命令の形式は、
loadstream: [101] [V] [12 reserved bits] [16 bit deferral_count]
storestream : [110] [V] [12 reserved bits] [16 bit deferral_count]
但し、Vは上記定義されたとおりのものである。最後の１６ビットは遅延カウントである。
【００６４】
関係バースト・バッファの条件を評価するため、"querystatus"コマンドが使用される。これは、バッファに対してサポートされる読み取りコマンドである。返される値は、バッファが割り当てらていなければ０、割り当てられていれば１である。現在の対応付けに関する情報は、他のレジスタを読むことによって取得できる。その他のいかなる情報も利用できない。
【００６５】
本発明に従ったコンピュータ・システムの第２の実施形態が、図４および図５に示されている。この実施形態において、第１の実施形態のキャッシュ的インターフェースが、ペアを構成する２つのテーブルに基づくインターフェースと置き換えられる。２つのテーブルは、バースト・バッファ・メモリとの間でバースト転送を行うメイン・メモリの領域を記述するＭＡＴ(Memory Access Tableすなわちメモリ・アクセス・テーブル)およびバースト・バッファ・メモリの領域を記述するＢＡＴ(Buffer Access Tableすなわちバッファ・アクセス・テーブル)である。この実施形態においては、２ポート型ＳＲＡＭの同等区域がバースト・バッファに使用される。
【００６６】
第２の実施形態のアーキテクチャの主な機構が図４に示されている。
本質的に第１の実施形態と類似している機構に関しては、同じ参照番号が使用されている。バースト命令は、バースト命令待ち行列３０によってプロセッサ・インターフェース１２から提供される。バースト命令待ち行列３０からの命令は、バッファ・コントローラ５４によって処理され、ＭＡＴ６５およびＢＡＴ６６の基準スロットへ送られる。バッファ・コントローラは、また、８つのバースト制御レジスタ５２から制御入力を受け取る。これらの２つのテーブルに含まれる情報は実行時に結合され、完全なmain-memory-to-burst-buffer transaction(メモリからバースト・バッファへのトランザクション)を記述する。出力は、バッファ・コントローラ５４からＤＭＡコントローラ５０従ってメモリ・データ経路アービタ５８に提供され、メイン・メモリ１４とバースト・バッファ・メモリ２６の間のトランザクションが有効となる。
【００６７】
本実施形態において、バースト・バッファ・メモリ２６は、２ＫＢの２ポート型ＳＲＡＭとして提供される。ＳＲＡＭの１つのポートはプロセッサ・メモリ空間にあり、迅速なプロセッサ・アクセスに対して使用されることができる。このアーキテクチャの利点は、バースト・バッファ・メモリ２６からのアクセスがメイン・メモリ１４からのアクセスに比較して非常に速いことが必要なだけであるが、バースト・バッファ・メモリ２６への単一サイクル・プロセッサ・アクセスは特に利点がある。もう１つのポートの機能は、後述されるように、メイン・メモリとＳＲＡＭの間のＤＭＡ転送を可能にすることである。バースト・バッファ・メモリ２６内の個々のバッファは、バッファ・アドレスおよびその長さによって定義されるバッファ領域に保持される。プロセッサ・ポートに関して、バイト、ハーフワードおよびワードのアクセス(すなわち動的バス幅指定)がサポートされることが望ましい。これはＤＭＡポートにも望ましいが、必要性は少ない。この２ポート機能は、メイン・メモリとの間のバースト転送をプロセッサからのアクセスと並列して実行させることを可能にする。適切なインターロックまたは優先度メカニズムがない場合は、ソフトウェアが同一ＳＲＡＭ位置への書き込み衝突を防止する必要がある。
【００６８】
ＳＲＡＭのサイズは、計算処理の際いくつかのストリームを取り扱うことができ、かつ長いバーストに関連する要求を取り扱うことができるような大きさでなければならない。多数のアプリケーションに関して、８つのストリームを取り扱うことができる資源を備えれば十分であり、各ストリームは、１つが到来および出力のためもう１つが進行中の計算処理のためという２つのバッファを備えることが望ましいことが判明している。従って、１６個のバッファが必要となることが示唆される。また、メモリへの経路幅が３２ビットであるＳＤＲＡＭを使用するバンド幅の約８０％の利用度は、３２個のバーストで達成できることが判明している。この場合、各バースト・バッファのサイズは１２８バイトで、合計２ＫＢのＳＲＡＭとなる。
【００６９】
次に、バースト制御レジスタ５２に関して記述する。
主バッファ制御レジスタはbufcntlである。このレジスタは、バースト・バッファ・アーキテクチャの集中制御を提供する。次の表１はバッファ制御レジスタの定義であり、このレジスタの各ビットに関連する機能性を示す。
【００７０】
【表１】
0004142141.tif 000002
【００７１】
バージョン・レジスタ(version)は読み取り専用で、その目的は自明である。同期レジスタ(sync)は読み取り専用レジスタであって、バースト命令待ち行列が空になるまでプロセッサを停止させるために使用される。このレジスタは、プロセッサ命令とバースト命令の並列実行を同期化に役立つ。このレジスタを読むと、下記表２に示されるような４つの値のうちの１つが戻される。この値は、同期命令の前に実行される最後のバースト命令に関連する。
【００７２】
【表２】
0004142141.tif 000003
【００７３】
デフォルト値は0x0である。これはビット2:0だけが使用されその他は常にゼロであることを意味する。(ビット0は停止が必要とされていたか否かを示し、ビット2:1はビット31:30の命令形式に合致するか否かを示す。注：同期命令(sync)はこのレジスタの読み取りを停止できないので、ここでは使用のための定義はされてない)。例外的な状況においてこのレジスタへの書き込みを可能にするような容量が提供される。具体的には、例外処理機構が戻る前に同期レジスタの状態を元に戻すことを可能にする。
【００７４】
以下の４つのレジスタは、バースト命令待ち行列からメモリ・コントローラへバースト命令進捗度を逐次通知するために使用される。図６は、それらのレジスタの構造および位置を示す。
【００７５】
currcmdレジスタは、読み取り専用レジスタであって、メモリ・コントローラによって現在実行されている命令を保持する。これはbufcntl.transferが１である時のみ有効である。しかしながら、そのアイドル状態において、このレジスタは、ロードまたはストア・バースト命令の読み取りが進行中のバーストが存在することを自動的に意味するnull(ヌル)命令を戻す。
【００７６】
lastcmdは読み／書きレジスタである。通常の動作では、メモリ・コントローラによって実行された最後の命令を持っているので、このレジスタは読み取り専用である。しかしながら、文脈切り替えの時点の状態を全面的に元へ戻すことができるようにするため文脈切り替えから戻った後このレジスタは書き直されなければならないので、このレジスタは書き込み機能を持つ。このレジスタは、初期的にはヌル・コマンドに設定される。
【００７７】
queuetopレジスタは、文脈切り替えにおいてバースト命令待ち行列を空にするため使用される。bufcntl.enableへゼロの書き込みによってバースト命令を実行不可状態にした後、待ち行列が空になるまで命令毎に待ち行列の内容が読み取られる。queuetopレジスタの読み取りは、待ち行列から最上部の命令(すなわち実行中の命令ではない命令）を削除する効果を持つ。このレジスタはいつでも読み取ることができ、常に待ち行列の最上部から削除した命令を返す。この命令は実行されない。
【００７８】
待ち行列の深さは、bufcntl.pendingに保持される。ヌル命令を読むことは待ち行列が空であることを意味する。
【００７９】
バースト命令は、バースト命令待ち行列レジスタbiqに書き込まれる。命令は、待ち行列の始めに置かれる。biqレジスタの読み取りは、queuetopレジスタ読み取りと同様に、バースト命令待ち行列の最上部の命令(すなわちメモリ・コントローラによって実行されるべき次の命令)を返す。しかしながら、この場合、それがレジスタ読み取りが行うすべてである。queuetopから読み取られた命令と対照的に、biqから読み取られる命令は実行される。ヌル命令の読み取りは、待ち行列が空であるかまたはその初期化がまさに完了したことを意味する。注：biqレジスタが論理的に待ち行列であるので、待ち行列が空でない限り、読取りが後に続く書き込みは、同じ値に戻らない可能性がある。
【００８０】
最後はdebugレジスタである。このレジスタの詳細説明は行わないが、レジスタ定義を下記表３に示す。
【００８１】
0004142141.tif 000004
【００８２】
バースト命令待ち行列は、上述の通りＦＩＦＯメモリを含む。バースト命令はプロセッサによって提供される。この構造への原始コードのコンパイルの詳細は次の通りである。本実施形態では、次の４つのフィールドがバースト命令において提供される。
1. 命令
2. ＭＡＴに関する自動ストライド・インジケータ(ブロック増分ビット)
3. 転送を制御するために使用されるＭＡＴエントリに対するインデックス
4. 転送を制御するために使用されるＢＡＴエントリに対するインデックス
基本的な動作は、メモリ・アクセスおよびバッファ・アクセスという２つのテーブルの各々におけるエントリをインデックスする命令を発信することである。メモリ・アクセス・テーブルへのインデックスは、転送メモリの最後に使用されるアドレス、範囲およびストライドを取り出す。バッファ・アクセス・テーブルへのインデックスは、バースト・バッファ・メモリ領域の基底アドレスを取り出す。本実施形態では、バースト命令において提供されるインデックスは、アドレス値そのものではない点注意する必要がある(アドレス値そのものとする実施形態も可能ではある)。本実施形態においては、詳細は後述するが、文脈テーブルを介してマスクおよびオフセットがインデックス値に与えられる。ＤＭＡコントローラは、２つのテーブルからパラメータを渡され、それらを使用して必要とされる転送を指定する。
【００８３】
以下の表４に示されるように２つの代替的形式が与えられる。
【００８４】
【表４】
0004142141.tif 000005
【００８５】
形式は、バッファ制御レジスタにおけるbufcntl.swapビットによって選択される。０というデフォルト値は形式Ａを選択し、一方、値１は形式Ｂを選択する。このスワップ機能の使用によって、コンパイラは容易に命令を増分させることが可能とされ、それによってバッファとメイン・メモリの両方に対して異なる領域へのＤＭＡ動作が実行される。スワップ機能がない場合、一方だけに対してこれを達成する(従って１つの命令へのループ・パイプライン化のオーバーヘッドを減少させる)ことができるにすぎない。
【００８６】
バースト命令は第１の実施形態の場合と本質的に同じであるが、異なるアーキテクチャの観点から構文および動作の点で変更が行われる。
【００８７】
storeburstはビット31:30を00に設定することによって実行される。この命令は、所望の転送の特性を定義するＭＡＴおよびＢＡＴのパラメータをインデックスする。block_incrementビットが設定されていれば、インデックスを付けられたＭＡＴエントリのmemaddrフィールドは転送が完了すると自動的に更新される。
【００８８】
loadburstはビット31:30を01に設定することによって実行される。この命令も、所望の転送の特性を定義するＭＡＴおよびＢＡＴのパラメータをインデックスする。この場合も、block_incrementビットが設定されていれば、インデックスを付けられたＭＡＴエントリのmemaddrフィールドは転送が完了すると自動的に更新される。
【００８９】
Sync(同期)およびNull(ヌル)は、ビット31:30を11にビット29:0を0xFFFF_FFFFに設定することによって実行される。この命令の主な目的は、ソフトウェアおよびバースト命令の実行の間の同期化メカニズムを提供することである。バースト命令待ち行列３０に同期命令syncを書き込むことによって、他のいかなるバースト命令も該待ち行列に置くことが防止される。これは、いかなる１時点においてもその待ち行列には１つのsync命令が存在するだけであること、および同期命令の読み取りがその待ち行列が空であることを示すことを意味する。同期コマンドはＤＭＡアクセスを始動させないが、同期レジスタに連係する同期メカニズムを活動状態にする。同期命令の使用は以下に更に説明される。
【００９０】
図５に、メモリ・アクセス・テーブル(ＭＡＴ)６５が示されている。
これは、バースト処理に必要とされるメイン・メモリ位置に関連する情報を保有するメモリ記述子テーブルである。ＭＡＴの各エントリは、メイン・メモリに対するトランザクションを記述するインデックス付けされたスロットである。本実施形態中では、ＭＡＴ６５は１６個のエントリを持つが、当然のことながら異なる形態も可能である。各エントリは、次の３つのフィールドを含む。
1. メモリ・アドレス(memaddr)−メイン・メモリの該当する領域の開始アドレス。仮想アドレス変換によって２つの物理ページにわたるバースト要求が発生し、そのためメモリ・コントローラにとって困難が生じることになる可能性があるので、このメモリ位置は理想的には物理的メモリ・アドレスであることが望ましい。
2. 範囲(extent)−転送範囲。これは、ストライドを乗算された転送長であり、転送される最後のアドレスに１を加えたものである。転送の長さは、範囲をストライドによって除することによって計算され、転送の完了後関連するＢＡＴ６６のbufsizeフィールド(下記参照)に自動的にコピーされる。
3. ストライド(stride)−転送における連続エレメント間の間隔
フィールドの各々は、通常メモリ・マップ・レジスタとして読み取られる。各レジスタは３２ビット幅であるが、次の表５に示されるように、選択されたたフィールドだけが書き込み可能である。
【００９１】
【表５】
0004142141.tif 000006
【００９２】
memaddr：これは、符号なし３２ビットであって、経路バーストの最初のエレメントのワード境界整列のアドレスである。境界整列されてない値は、切り捨てによって自動的に整列される。このレジスタの読取りは、バーストのために使用される値を返す。
extent：範囲レジスタのパラメータは、バースト転送の範囲を示すオフセットされたアドレスである。転送がSというストライドだけ間隔を置いたL個のレメントを必要とするとすれば、範囲はS*Lである。バーストがメモリ・コントローラによって実行される時、この値にmemaddr値を加えた値がバッファ域のサイズより大きければ、bufcntl.buffer_overrun_warnフラグが設定される。結果として生じるバーストは、バッファ区域の最初にラップされる。デフォルト値はゼロで、転送がないことを示す。
stride：パラメータstrideは、アクセスの間スキップされるバイトの数である。転送ストライド間隔値は、１から１０２４の範囲に限定される。１０２４を越える値は自動的に１０２４にされ、bufcntl.stride_overrun_warnフラグが設定される。このレジスタの読取りは、バーストに使用される値を返す。ストライドは、また、この場合４バイトであるメモリ・バス幅の倍数である。４バイトの倍数に整列させるため自動的切り捨てが行われる。デフォルト値はゼロで、これは１というストライド長さに等しい。
【００９３】
ＭＡＴスロットによって含められる値の例を示せば、
{0x1feelbad, 128, 16}
である。これは、それぞれが４個の４バイト長ワードの間隔をおいた３２個の４バイト長ワードとなる。
【００９４】
バースト命令の自動ストライド標識ビットもＭＡＴ６５にとって意味を持つ。このビットがバースト命令において設定されていれば、開始アドレス・エントリは、バーストが連続している限り次のメモリ位置に次々と増加される。これは、長いシーケンスのメモリ・アクセスにおける次のバーストに関する開始アドレスを計算するプロセッサ・オーバーヘッドを節約する。
【００９５】
次に図５に示されるバッファ・アクセス・テーブル(ＢＡＴ)６６を説明する。これもまたメモリ記述子テーブルであるが、この場合はバースト・バッファ・メモリ区域２６に関連する情報を保有する。ＢＡＴ６６の各エントリは、バースト・バッファ・メモリ区域２６に対するトランザクションを記述する。ＭＡＴ６５の場合と同様に、ＢＡＴ６６は１６個のエントリを含むが、別の形態も当然のことながら可能である。本実施形態では、各エントリは次の２つのフィールドを含む。
1. バッファ・アドレス(bufaddr)−バッファ区域のバッファの開始アドレス。
2. バッファ・サイズ(bufsize)−最後の転送に使用されるバッファ区域のサイズ。
フィールドの各々は、この場合も、通常メモリ・マップ・レジスタとして読み書きされる。
ＭＡＴ６５の場合と同様に、各レジスタは３２ビット幅であるが、下記表６に記述されるように、レジスタ内の選択されたフィールドだけが書き込み可能である。すべての書き込み禁止ビットは常にゼロとして読み取られる。
【００９６】
【表６】
0004142141.tif 000007
【００９７】
バッファ・アドレス・パラメータbufaddrは、バッファ区域の経路バーストの最初のエレメントに対するオフセットされたアドレスである。バースト・バッファ区域は、ハードウェアによってプロセッサのメモリ空間の１つの領域に物理的にマップされる。これは、バースト・バッファ区域にアクセスする時プロセッサは絶対アドレスを使用しなければならないことを意味する。しかし、ＤＭＡ転送は単にオフセットを使用するので、ハードウェアが所望のアドレス決定を管理する必要がある。無効な境界整列は切り捨てによって調整される。このレジスタの読取りはバーストに使用される値を返す。デフォルト値はゼロである。
【００９８】
パラメータbufsizeは、最新のバーストによって占有されるバッファ区域内の領域のサイズである。このレジスタは、そのエントリに向けられたバースト転送が完了次第設定される。ゼロという値が未使用バッファ・エントリを示すので、記憶される値はバースト長である点注意する必要がある。このレジスタは書き込みされるが、バッファが保存され復元される場合文脈切り替えの後に役立つだけである。デフォルト値はゼロである。
【００９９】
バッファ・コントローラ５４の残りの機能は、文脈テーブル６２である。これは、入力としてバースト命令のインデックスを取り出し、ＭＡＴ６５およびＢＡＴ６６において使用されるべき対応するスロットを出力として与える。文脈テーブル６２のエントリは、バースト命令によってアクセスされるエントリの領域を制御するために使用される。文脈テーブル６２の機能をソフトウェアの形態で実施することも可能である。文脈テーブルの使用は、バッファ・アーキテクチャの効率的管理にとって利点がある。
【０１００】
文脈テーブルは、「文脈切り替え」の場合に特に役立つ。システムの文脈を変更する必要性を示す３つの事象は、内部トラップまたは例外、スレッド切り替え信号および外部割り込みである(スレッドとはプロセッサ実行の基本単位であり、単一シーケンスの計算処理のために必要とされたプロセッサ状態からなる)。上記事象のいずれも、バースト・バッファ・インターフェース資源を新しいスレッドが使用する必要性を確立する。文脈テーブルは、システム制御およびＭＡＴ６５ならびにＢＡＴ６６の間に付加的間接部分を加えることによってそのような事象の影響を最小限にとどめる。コンパイルの際複数のスレッドがＭＡＴ６５とＢＡＴ６６における同等のスロット領域を使用するように構成され、相互干渉なしに実行することができるように、オペレーティング・システムによってそれらスレッドに異なる文脈識別子が与えられる。
【０１０１】
スレッドが活動状態におかれる時文脈識別子が制御レジスタに書き込まれ、このメカニズムを使用して、各スレッドがテーブルの異なるスロット領域を使用するようにコンパイル時にオフセットがインデックス値に追加される。十分なテーブル資源が利用可能であると仮定すれば、上記メカニズムは、文脈切り替えの間のテーブル状態の保存復元を防止する。
【０１０２】
本実施形態において、文脈テーブル６２は、８個のエントリを持っているが、実施形態によってどのような整数値の数のエントリを持つことも可能である。各エントリは次の４つのフィールドを含む。
1. メモリ・オフセット(memoffset)−これはマスク(下記参照)の後バースト命令のＭＡＴに加えられるオフセットである。これは、ＭＡＴ６５をインデックスするために使用される値である。
2. メモリ・マスク(memmask)−これは、オフセットの追加の前にバースト命令のＭＡＴインデックス・フィールドに適用されるマスクである。
3. バッファ・オフセット(bufoffset)−これはマスク(下記参照)の後バースト命令のＢＡＴに加えられるオフセットである。これは、ＢＡＴ６６をインデックスするために使用される値である。
4. バッファ・マスク(bufmask)−これは、オフセットの追加の前にバースト命令のＢＡＴインデックス・フィールドに適用されるマスクである。
【０１０３】
オフセットおよびマスク・レジスタは、ＭＡＴおよびＢＡＴの連続スロット・セットが定義されることを可能にする。これは、複数のバースト・バッファ計算がＭＡＴ６５およびＢＡＴ６６において行われるので望ましい。文脈テーブル６２のマスク機能の重要性は以下の例によって理解されるであろう。ある特定の文脈が、バッファ・アクセス・テーブルのエントリ2、3、４および5の使用を必要とする場合を仮定する。バースト命令の増分によって、例えば値が10から20へ増加する。3というバッファ・マスクの使用によって、形式パターンは2, 3, O, 1, 2, 3, O, 1, 2, 3, Oとなる。次に、2というオフセットの使用によって、必要とされるエントリの範囲をインデックスするためのパターンは、4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2となる。別の文脈は、別の文脈テーブル・エントリを使用してアクセスされる別の範囲のエントリを使用することとなる。この方法は、外部および内部ループを含む文脈間の高速切り替えを可能にする。上述のように、このような文脈切り替えは制御レジスタ５２で提供されるが、バッファ・コントローラで提供することも可能である。しかしながら、このようなバッファ資源管理機能をソフトウェアで実施することもできる点は注意されるべきである。
【０１０４】
文脈テーブル・パラメータは次のように定義される。
memoffset：このパラメータは、ＭＡＴ６５のエントリにアクセスするために使用されるオフセットを定義する。テーブル・サイズが１６であるので、この最大値は１６である。それより高い値は１６へ自動的に切り捨てられ、負の値は許容される。
memmask：このパラメータは、ＭＡＴ６５のエントリにアクセスするために使用されるマスクを定義する。テーブル・サイズが１６であるので、許容される最大値は１５である。これは値の最下位４ビットを使用することに対応し、他のどのビット・セットも無視される。
bufoffset：このパラメータは、ＢＡＴ６６のエントリにアクセスするために使用されるオフセットを定義する。テーブル・サイズが１６であるので、この最大値は１６である。それより高い値は１６へ自動的に切り捨てられ、負の値は許容される。
bufmask：このパラメータは、ＢＡＴ６６のエントリにアクセスするために使用されるマスクを定義する。テーブル・サイズが１６であるので、許容される最大値は１５である。これは値の最下位４ビットを使用することに対応し、他のどのビット・セットも無視される。
【０１０５】
従って、ＤＭＡコントローラ５６は、バッファ・コントローラ５４からロードまたはストアからなる命令と共に、ＭＡＴ６５から添付されるメイン・メモリ・アドレス、ストライドおよび転送長を、またＢＡＴ６６からバッファ・アドレスを受け取る。メモリ・コントローラ構成の要件は、ＭＡＴ６５に関して定義される最大のサイズおよびストライドのバースト要求がサポートされること、ページ境界横断が透過的方法で取り扱われること、および転送が完了した時点を標示するハンドシェーキング信号が提供されることである。
【０１０６】
本実施形態のシステムは仮想メモリをサポートしていない。しかしながら、仮想ＤＭＡをサポートするように構成されるＤＭＡコントローラを用いれば、上述のようなバースト・アーキテクチャが動作するように構成できる点は、当業者に認められるであろう。本実施形態に記述されているシステムは、また、メモリ・キャッシュを含むアーキテクチャにおいて動作することができるが、バースト・バッファ動作の事象においてメイン・メモリとそのようなキャッシュの間の整合性を確認するためには適切な処理ステップの実行が必要とされるであろう。例えば、より高い優先度のＤＭＡプロセスを可能にするためバースト・バッファ動作を中止する必要がある場合、割り込みシステムを提供すなければならないであろう。デバッグ機能の支援のため警告フラッグをセットする必要があるかもしれない。
【０１０７】
プロセッサが計算処理を実行している間に並列的にデータをバースト処理するようにアーキテクチャはプログラムされるので、連続するバーストのそれぞれの後にバースト・バッファの名前を変更することができるという利点がある。これによって、プロセッサは、１つのバッファから代替バッファへ自動的に切り替えを行うことが可能とされる。そのような場合、代替バッファが次の計算処理ブロックのため(バースト命令を介して)書き込まれている間、一方のバッファは計算処理のため使用される。バーストおよび計算処理が完了すると、それらバッファの名前が変更(スワップ)され、プロセスは再び続行する。
【０１０８】
このため、ＢＡＴテーブルは、更に次の３つのレジスタ・フィールドを含むように拡張される。
オリジナル・フィールド：buffer_start_ad_ dress, buffer_size
新フィールド：buffer_offset_A, buffer_offset_B, Select_bit
上記のbuffer_offset_Aおよび buffer_offset_Bは、等しいサイズの２つのバッファの２つの開始アドレスを含むようにコンパイラによってプログラムされる。これらのバッファは、２ポート・バースト・バッファ・メモリ２６に存在しなければならない。select_bitレジスタは1または0を含み、1はbuffer_offset_Bが選択されることを示し、0はbuffer_offset_Aが選択されることを示す。このＢＡＴスロットを参照する命令が発信される場合、その命令がバースト命令待ち行列３０に書き込まれた直後に、Select_bitは、バースト・バッファ・コントローラによって自動的に反転される。次に、バースト・バッファ・コントローラは、新しく選択されたbuffer_offset_Xアドレスを(オリジナルのＢＡＴフィールドにおける)buffer_start_addressフィールドへコピーする。計算処理のため使用されるバッファを標示するためプロセッサ上で実行中のプログラムによって読み取られるのは、このエントリである。発信された命令は、後刻、バースト・バッファ・アーキテクチャによってバースト命令待ち行列３０から取り出され、処理される。その時点で、ＤＭＡコントローラ５６に渡されるバッファ・アドレスは、select_bitによって選択されてない代替buffer_offset_Xアドレス・レジスタからコピーされる。次の表７のコードはこのプロセスを処理するプログラムの例である。
【０１０９】
【表７】
0004142141.tif 000008
【０１１０】
本発明のアーキテクチャの第２の実施形態におけるバースト命令の処理を以下図７を参照して説明する。バースト動作はバースト命令の発信によって始動される。上述のように、この命令は、ＭＡＴ６５のエントリへのインデックスおよびＢＡＴ６６のエントリへのインデックスを含む。前述のように、ＭＡＴエントリは、メイン・メモリの開始アドレス、転送の範囲およびストライドを含み、一方、ＢＡＴエントリは、バッファ領域２６における目標アドレスと共に、このエントリを使用して完了される最後の転送の長さ(すなわちバッファ・サイズ)を含む。
【０１１１】
この命令は、ＦＩＦＯメモリに類似するバースト命令待ち行列３０に置かれる。この構造は、ＤＲＡＭからのデータのバースト処理とプロセッサによるデータのアクセスの間の切り離しを可能にする。この切り離しは、「事前取り出し」の性能利得を達成するために必要である。「事前取り出し」は、データがプロセッサによって必要とされる前にメイン・メモリからデータを取得し、プロセッサその事前取得したデータに対して同時に動作するプロセスである。プロセッサは、単一のサイクルにおいて命令を待ち行列に渡し、次に動作を続行する。このように、バースト命令は「非割り込み型」と述べることができる。すなわち、バースト命令は完了するまでプロセッサの停止を強制しない(しかしながら、場合によってはプロセッサを停止させる実施形態もある。例えば、 新しいバースト命令が出される時新しいバースト命令のための空間がが利用できるようになるまでバースト命令待ち行列３０がいっぱいであるような場合である)。バースト命令待ち行列３０はＤＭＡコントローラ５６によって読み取られる。ＤＭＡコントローラ５６は、バースト命令に代わってメイン・メモリＤＲＡＭ１４にアクセスする準備ができている時(すなわちバースト・バッファ・インターフェースが優先権を持っている時)、待ち行列の次の命令を読み取りその命令の実行を開始する。
【０１１２】
図７に示されるように、この構成はバースト命令実行における独立した４つのフェーズをとる。第１は、命令が出された直後の「保留」フェーズであり、命令はバースト命令待ち行列３０に格納されている。命令が待ち行列にあってＤＭＡコントローラ５６によって認識されると、Ｄまプロセスが実行される。これは「転送」フェーズである。転送フェーズが完了すると、バッファ領域２６のバースト・バッファとメイン・メモリ１４の対応する領域の内容が同一となる(またそのトランザクションに適切な警告フラグがセットされる)。そこで、バースト・バッファは「有効」と呼ばれ、その結果「有効」フェーズが始動される。これは、バッファ領域２６のバースト・バッファとメイン・メモリ１４の対応する領域の対応関係を変化させるなにがしかの事象が発生するまで、継続する。そのような変化の事象が発生すると、バースト・バッファは「無効」と呼ばれ、その結果「無効」フェーズが始動される。
【０１１３】
命令の発信は、物理的バッファとメイン・メモリの領域の間の関連性を定義するが、このような結合動作は命令が実行される実行時にのみ発生する。この実行時結合は、本アーキテクチャを使用する際の柔軟性および低いプロセッサ命令オーバーヘッドの主要要因をなすものである。両者の間で維持される相互関係はないが、バッファ名変更および再使用が許容される。移転フェーズの間に、本アーキテクチャは、bufcntl.transferビットに従って命令にラベルをつける。その他のフェーズは、ソフトウェアを通して追跡されるかまたは追跡可能である。
【０１１４】
有効なフェーズへの入口は、上述のように、関連バースト命令で指示されたバースト転送が完了したという標示である。これは、バースト命令直後の同期命令syncのソフトウェアによる発信によって検出されることができる。上述の通り、バースト命令待ち行列３０は１時点で１つの同期命令しか含むことができないので、待ち行列が同期命令を含む間は更なるバースト命令をバースト命令待ち行列に書き込むことはできない。同期命令syncを使用して同期化を実行するために使用できる次の３つの方法がある。
1. 同期命令を発信し同期レジスタを読み取る。待ち行列の中のすべてのバースト命令が完了し同期命令が出現するまで読取りが禁止される。
2. 同期命令を発信し、次に待ち行列にもう１つのバースト命令を書き込む。この場合は、待ち行列の中のすべてのバースト命令が完了し同期命令が出現するまで書き込みが禁止される。
3. 同期命令を発信し同期命令に関してlastcmdレジスタをポーリングする。
方法１および２はプロセッサをブロックするが、方法３はブロックしない。
バッファ領域がその有効フェーズにあれば、プロセッサは、それが含むデータに動作することができる。本実施形態では、プロセッサはバイト、ハーフワードおよびワード単位のアクセスを使用してバッファのデータにアクセスする。
【０１１５】
本発明に従うコンピュータ・システムの第２の実施形態へ原始コードをコンパイルするプロセスを以下に記述する。本実施形態のバースト・バッファ・アーキテクチャは、大規模なデータ・アレイに関して反復される単純な動作を含む通常の単純なループ構造を取り扱う場合、特に効果的である。そのようなループ構造には、例えば、媒体計算処理においてしばしば出会うことがある。バースト・バッファ・アーキテクチャへのコードのコンパイルは、原始コードにおける該当ループを識別して、それらループがバースト・バッファを利用してオリジナルの動作を正しく実行することができるように、それらループを再構築することを必要とする。
【０１１６】
該当するループの識別は手走査で行うことができる。代替的方法として、既知の技術によって適切なループを識別することもできる(例えば、１つの方法が"Compiler Transformations for High- Performance Computing " David F Bacon Susan L Graham and Oliver J.Sharp, Technical Report No.UCB/CSD-93-781, University of California, Berkeleyに記載されている)。 識別されたなら、それらループは、バースト・バッファによって利用されることができる形式に、正しく変換される必要がある。
【０１１７】
識別されるコードはループ形式をしている。バースト・バッファを通して処理されるためには、ループは、各々が１バーストのサイズである一連の断片に広げられる必要がある。その後、一連のバースト・ロードおよびストアという観点から本アーキテクチャによるループの取り扱いを定義することが可能となる。しかしながら、バースト・バッファはソフトウェアによって制御される資源であるので、ロードまたはストア・バースト命令が出される前、およびバッファが計算処理の目標として使用される前に、バッファを割り当てることが必要である。ロードおよび割当てに続いて、計算処理が実行される。このような方法は、識別したループを上記のように複数の断片に広げた場合、またはループそれ自体が１つのバーストより小さい場合に適用される。計算処理の直後に、storeburst命令を使用してバッファに記憶され、入力バッファが解放される。storeburst命令が完了すれば、出力バッファも解放される。
以下の表８は、上記動作を行うコードの１例を示す。
【０１１８】
【表８】
0004142141.tif 000009
0004142141.tif 000010
【０１１９】
上記変換されたコードに関する依存性グラフが図８に示されている。例えば、目標をバッファ04に向けた計算処理は、バッファ01、02および03のloadburstにのみ依存するが、出力バッファ04自体の割り当てにも依存する。図８上の括弧の中の番号はノード識別子である。ここで変換されているコードは、単純ではあるが相対的に役立たないスケジュールを作成する。これは，利用できる並列機能が開拓されなかった(すなわちコードがバースト命令を出している時計算処理が実行されていないまたはその逆)ためである。依存性グラフの分析を使用すれば、一層すぐれたスケジュールを生成するスケジューリング・プログラムを駆動させることができる。この場合、追加のバースト・バッファの使用を通して改善が図られる。
【０１２０】
必要とされるバースト・バッファの最小数は、各入力ストリームのための１つに計算処理を実行するためのものを加えた数である(計算処理用のバッファは計算処理が完了した後、空にし、解放し，次の計算処理のため割り当てられる)。リスト・スケジューリングおよびバッファ割当ての考察を通して、改善されるスケジュールを見出すことができる。可能な限り効率的にＤＲＡＭメモリ・バンド幅を使用するためバースト効率を最適化する解決策は測定可能である。これは、計算効率を最大にすることを目標とする通常の計算戦略とは異なる。相違は、本発明が考慮するシステムの主要制約がバンド幅にあることによる。
【０１２１】
バッファ割当てを管理することに加えて、メモリおよびバッファ・アクセス・テーブルはバッファ名変更をサポートする。コンパイラの目的の１つは、断片掘り出しと呼ばれるプロセスを使用して潜在的バーストを露顕させるようにループを変換することである。ループが断片掘り出しされると、モジュール・スケジューリング(またはソフトウェア・パイプライン化)と呼ばれる次のプロセスが適用される。この後者のプロセスは、部分的に広げられたループ内の特定の点でバッファ名が変更されることを必要とする。例えば、ループ計算処理は、'A'と名付けられた論理的バッファが物理的バッファ'2'からバッファ'5'へマップされることを必要とするかもしれない。この例では、別のバッファがプロセッサによって計算処理のためアクセスされている間に、１つの物理的バッファがメモリへのバースト転送のために使用されることができる。バースト動作および計算処理が並列に動作し、従って、処理性能が向上する。
【０１２２】
コンパイラによって実行されなければならない更なる機能は、メモリ・バス幅(本実施形態のケースでは３２ビット)の幅を持つバーストだけがバースト・バッファ・アーキテクチャによって処理されることができるので、ソフトウェアにおけるsizedburstをチャネル−バーストへ変換することである。コンパイルの間、ソフトウェアによって検出されるsizedburstはchanelburstへマップされる。
【０１２３】
以下に、バースト・バッファ・システム２４使用の典型例を記述する。
第１に、バースト・バッファは局所的データ・バッファとして使用され、バッファ・サイズのメモリ領域がバースト・バッファ４０へ直接マップされる。これは次の２つの方法で実施されることができる。(1)データが初期化されていなければ、allocbufferコマンドを使用して、バッファ４０が取得されアドレス・マッピングが実行される。(2)データがメイン・メモリ１４で初期化されていれば、loadburstを使用してデータがバースト・バッファ４０へコピーされる。マッピングが行われたなら、プロセッサ１０は同じアドレスへのアクセスを継続し、それらアドレスがバッファ４０によって捕捉される。完了時点、またはシステムが整合している必要がある時、storebufferコマンドが使用される。第２に、バースト・バッファ・システム２４は参照テーブルとして使用される可能性がある。局所的データ・バッファとまったく同じ方法で、バースト・バッファ４０は、loadburstコマンドを使用して参照テーブル・データで初期化されることもできる。バッファをヒットするアドレスへの参照は適切なデータを返す。テーブル・サイズは制限されるが、より大きいテーブルの一部をバッファ４０へ配置し残りをメイン・メモリ１４に置くことができない理由はない。バッファ４０に保持される区域が最も頻繁に使用されれば、性能向上に役立つ。整合性はこの場合問題でない。従って、テーブルの使用が完了したならば、freebufferコマンドが出されなければならない。
【０１２４】
上述されたシステムに対する制約の可能性は、バースト・バッファ４０が単純なＦＩＦＯとして使用されることができないかもしれないということである。アドレスはバッファの中のデータをアクセスするために常に使用されなければならない。このバッファをあたかもＦＩＦＯであるかのようにみせるラップ機構をソフトウェアで開発することは可能である。しかしながら、バッファが論理的にいっぱいになった時ストア・バーストが出されることを意味するバッファ・サイズ分のロードおよびストア・バーストの遅延という点でのＦＩＦＯ機能性を模倣するため遅延カウントが使用される。
【０１２５】
上述された実施形態の典型的動作において、バースト・データがメイン・メモリ１４からバースト・バッファ・メモリ２６へ読み込まれ、プロセッサ１０／プロセッサ・インターフェース１２によって処理され、バースト・バッファ・メモリ２６へ戻され、次にメイン・メモリ１４に書き込まれる。別の実施形態においては、プロセッサ１０／プロセッサ・インターフェース１２によって実行される処理の代わりに、バースト・バッファ・メモリ２６に接続される専用計算エンジンによってそれが実行される。
【０１２６】
本発明の範囲を逸脱することなく上述の実施形態に対し種々の変更を行うことができる点は認められるであろう。
【０１２７】
本発明には、例として次のような実施様態が含まれる。
（１）データを処理する処理システムと、上記処理システムによって処理されるデータまたは該システムによって処理されるべきデータを記憶するメモリと、上記メモリへのアクセスを制御するメモリ・アクセス・コントローラと、上記メモリとの間で読み書きされるべきデータをバッファするための少くとも１つのデータ・バッファと、上記メモリ・アクセス・コントローラへバースト命令を発信する手段と、上記メモリ・アクセス・コントローラへ発信されるバースト命令を待ち行列に記憶する手段と、を備えるコンピュータ・システムであって、上記メモリ・アクセス・コントローラが上記バースト命令に応答して単一のメモリ・トランザクションで上記メモリと上記データ・バッファの間で複数のデータ・ワードを転送し、上記待ち行列記憶手段によって、先行バースト命令が実行された直後に次のバースト命令が上記メモリ・アクセス・コントローラによる実行のため使用可能な状態にされることを特徴とする、コンピュータ・システム。
（２）上記バースト命令のうちの少くとも１つが遅延パラメータを含み、上記バースト命令発信手段が、上記遅延パラメータに従って上記メモリ・アクセス・コントローラへのそのような命令発信を遅延するように動作する、上記（１）に記載のコンピュータ・システム。
（３）上記バースト命令の各々が、そのバースト命令に応答してアクセスされるべきメモリ位置の間の間隔を定義するパラメータを含むかあるいはそのようなパラメータに関連づけられる、上記（１）または（２）に記載のコンピュータ・システム。
【０１２８】
（４）データを処理する処理システムと、上記処理システムによって処理されるまたは該システムによって処理されるべきデータを記憶するメモリと、上記メモリへのアクセスを制御するメモリ・アクセス・コントローラと、上記メモリとの間で読み書きされるべきデータをバッファするための少くとも１つのデータ・バッファと、上記メモリ・アクセス・コントローラへバースト命令を発信する手段と、を備えるコンピュータ・システムであって、そのようなバースト命令の各々が、そのバースト命令に応答してアクセスされるべきメモリ位置の間の間隔を定義するパラメータを含むかあるいはそのようなパラメータに関連づけられ、上記メモリ・アクセス・コントローラが、上記バースト命令に応答して、上記間隔パラメータに従った間隔をあけたメモリ位置と上記データ・バッファの間で複数のデータ・エレメントを単一トランザクションで転送することを特徴とする、コンピュータ・システム。
（５）上記処理システムからのメモリ要求に応答して、対応するメモリ位置がデータ・バッファにマップされているか否かを判断し、マップされていればデータ・バッファのマップされている位置にアクセスするように動作する比較手段を更に備える、上記（１）乃至（４）のいずれかに記載のコンピュータ・システム。
（６）バースト命令をメモリ・アクセス・コントローラに発信する上記手段が、メモリに対するトランザクションの記述のためのメモリ・アクセス・テーブルおよび少くとも１つのデータ・バッファに対するトランザクションの記述のためのバッファ・アクセス・テーブルを含み、発信されるバースト命令の各々が、上記メモリ・アクセス・テーブルおよび上記バッファ・アクセス・テーブルをインデックスする、上記（１）乃至（４）のいずれかに記載のコンピュータ・システム。
（７）バースト命令に関して、メモリおよび少くとも１つのデータ・バッファの間のトランザクションを定義するため、メモリ・アクセス・テーブルおよびバッファ・アクセス・テーブルにおける情報が実行時に結合される、上記（６）に記載のコンピュータ・システム。
【０１２９】
（８）バースト命令をメモリ・アクセス・コントローラに発信する上記手段が、バースト命令による上記メモリ・アクセス・テーブルおよび上記バッファ・アクセス・テーブルのインデックス付けを文脈に応じて修正するための文脈テーブルを含む、上記（６）または（７）に記載のコンピュータ・システム。
（９）バースト命令のうちの少くとも１つが、データ・バッファに１時点で記憶することができるものより多い数のデータ・エレメントに関連し、そのような命令に応答して当該システムが一連のバースト命令を実行するように動作する、上記（１）乃至（８）のいずれかに記載のコンピュータ・システム。
（１０）そのようなデータ・バッファの数をハードウェアまたはソフトウェアの制御の下当該システムによって構成することが可能な、上記（１）乃至（９）のいずれかに記載のコンピュータ・システム。
（１１）少くとも１つのデータ・バッファが２ポート・メモリ内で提供され、２ポートのうちの１つのポートが上記処理システムによってアクセスされ、他のポートがメモリによってアクセスされる、上記（１）乃至（１０）のいずれかに記載のコンピュータ・システム。
（１２）上記２ポート・メモリが上記処理システムおよび上記メモリによって同時にアクセスされることができる、上記（１１）に記載のコンピュータ・システム。
（１３）上記処理システムが、主マイクロプロセッサ、および、データ・バッファのデータを処理するように構成されたコプロセッサを含む、上記（１）乃至（１２）のいずれかに記載のコンピュータ・システム。
（１４）上記処理システムが、主マイクロプロセッサ、および、データ・バッファのデータを処理するように構成された独立計算処理エンジンを含む、上記（１）乃至（１２）のいずれかに記載のコンピュータ・システム。
【０１３０】
（１５）上記（１）乃至（１４）のいずれかに記載のコンピュータ・システムにおいて実行される方法であって、少なくとも１つのデータ・バッファへコンパイルすることが適切な，あるいは少なくとも１つのデータ・バッファの支援の下での実行に適切な計算処理エレメントを原始コードの中で識別するステップと、原始コードの中の上記識別した計算処理エレメントを、各々が少くとも１つのデータ・バッファのサイズより大きくないメモリ・トランザクションを含む一連の命令に変換し、そのような命令をバースト命令として表すステップと、上記処理システムによって原始コードを実行し、上記少なくとも１つのデータ・バッファに対するアクセスを通して上記識別した計算処理エレメントを処理するステップと、を含む方法。
（１６）上記識別した計算処理エレメントによって必要とされるデータが、上記処理システムによって要求される前にメモリから少くとも１つのデータ・バッファへ取り出される、上記（１５）に記載の方法。
（１７）メモリと少くとも１つのデータ・バッファの間のトランザクションが完了するまで処理システムを停止させる手段が提供される、上記（１５）または（１６）に記載の方法。
【０１３１】
【発明の効果】
本発明によって、マルチメディアなどの媒体データを処理するために適したキャッシュ・システムが実現し、メモリ・アクセスのバンド幅の極大化が図られる。
【図面の簡単な説明】
【図１】本発明に従うコンピュータ・システムの第１の実施形態のブロック図である。
【図２】図１のシステムにおけるバースト・バッファ・メモリおよびバースト命令待ち行列がハードウェアまたはソフトウェア制御の下で構成される種々の形態を図３と共に示すブロック図である。
【図３】図１のシステムにおけるバースト・バッファ・メモリおよびバースト命令待ち行列がハードウェアまたはソフトウェア制御の下で構成される種々の形態を図２と共に示すブロック図である。
【図４】本発明に従うコンピュータ・システムの第２の実施形態におけるバースト・バッファ・アーキテクチャを示すブロック図である。
【図５】図４のバッファ・コントローラを示すブロック図である。
【図６】図４のバースト・バッファ・アーキテクチャにおける制御レジスタの機能を示すブロック図である。
【図７】図４のバースト・バッファ・アーキテクチャによるバースト命令の実行の流れを示すブロック図である。
【図８】本発明に従ってコンパイルされる原始コードの相互関係を示すグラフ図である。
【符号の説明】
１０    プロセッサ、
１２    プロセッサ・インターフェース
１４    メインＤＲＡＭメモリ
１６    メイン・メモリ・インターフェースまたはアクセス・コントローラ
１８    ＳＲＡＭ命令キャッシュ
１９    ＳＲＡＭデータ・キャッシュ
２０ａ、２０ｂ、２１ａ、２１ｂ、３６ａ、３６ｂ、３６ｃ、３６ｄ、３８ａ、３８ｂ、３８ｃ、３８ｄ    経路
２２    データ・キャッシュ・バイパス・ロード/ストア経路
２４    バースト・バッファ・システム
２６    バースト・バッファ・メモリ
２８    範囲比較機構２８
３０    バースト命令待ち行列
３２    バースト・コントローラ
３４    パラメータ記憶機構
５２    バースト制御レジスタ
５４    バッファ・コントローラ
５６    ＤＭＡコントローラ
５８    メモリ・データ経路アービタ
６１    バースト命令フィールド
６２    文脈テーブル
６３    スワップ機構
６４    ループ/文脈レジスタ
６５    メモリ・アクセス・テーブル(ＭＡＴ)
６６    バッファ・アクセス・テーブル(ＢＡＴ)
【図１】
0004142141.tif 000011
【図２】
0004142141.tif 000012
【図３】
0004142141.tif 000013
【図４】
0004142141.tif 000014
【図５】
0004142141.tif 000015
【図６】
0004142141.tif 000016
【図７】
0004142141.tif 000017
【図８】
0004142141.tif 000018