(57)【要約】  論理空間内の連続点を表す不連続メモリアドレスのストリームを発生する方法が述べられる。この方法は理論空間内の連続点を記述する初期化パラメータを発生するステップと、初期化パラメータを用いてメモリアドレスエンジンをコンフィギュレーションするステップと、複数の不連続メモリアドレスを作成するために初期化パラメータに従ってメモリアドレスエンジンにおいてアルゴリズムを実行するステップと、データメモリに出力するために不連続メモリアドレスをメモリアドレスのストリームに組み換えるステップとを含む。本発明は、複数のメモリアドレスエンジンがあるＳＴＭＤ処理技術に特定の用途を持つ。
2005514677.tif 000002
【特許請求の範囲】
【請求項１】
論理空間内の連続点を表す不連続メモリアドレスのストリームを発生する方法であって、論理空間内の連続点を記述する初期化パラメータを発生するステップと、前記初期化パラメータを用いてメモリアドレスエンジンをコンフィギュレーションするステップと、複数の不連続メモリアドレスを作成するために前記初期化パラメータに従って前記メモリアドレスエンジンにおいてアルゴリズムを実行するステップと、データメモリへ出力するために前記不連続メモリアドレスをメモリアドレスのストリームに組み換えるステップとを含む方法。
【請求項２】
前記発生ステップがデータのボリュームを通るある角度で取られたデータの論理平面の観察を可能にすることを特徴とする特許請求の範囲第１項に記載の方法。
【請求項３】
前記発生ステップがデータの論理平面の一部の観察を可能にすることを特徴とする特許請求の範囲第２項に記載の方法。
【請求項４】
前記実行するステップが、論理空間の論理平面内の行上の各データ点に対してメモリアドレスを漸進的に計算するステップと、論理平面内の行の数だけ前記計算を繰り返すステップとを含むことを特徴とする特許請求の範囲の前記請求項の何れかに記載の方法。
【請求項５】
前記発生ステップが、論理平面内の初期データ点に関連付けられた初期化パラメータと、論理平面の列及び行のそれぞれに対する単位増分と、論理平面内の必要なデータに対する列及び行の限界とを発生するステップとを含み、前記コンフィギュレーションスするステップが、論理平面内の初期データ点の座標を指定するステップと、論理平面の各列における単位増分に対する列ベクトルを指定するステップと、論理平面の各行における単位増分に対する行ベクトルを指定するステップと、論理平面内の必要なデータに対する列限界（ＣｏｌＬｉｍｉｔＬ、ＣｏｌＬｉｍｉｔＨ）と行限界（ＲｏｗＬｉｍｉｔＬ、ＲｏｗＬｉｍｉｔＨ）を指定するステップを含むことを特徴とする特許請求の範囲第４項に記載の方法。
【請求項６】
前記論理平面上の初期データ点の座標を指定するステップがデカルト座標（ｘＩｎｉｔ，ｙＩｎｉｔ，ｚＩｎｉｔ）を用いて実行されることを特徴とする特許請求の範囲第５項に記載の方法。
【請求項７】
前記列ベクトルと行ベクトルを指定するステップがデカルト座標（ＣｏｌＩｎｃｒ（ｘ，ｙ，ｚ），ＲｏｗＩｎｃｒ（ｘ，ｙ，ｚ））を用いて実行されることを特徴とする特許請求の範囲第５項又は第６項に記載の方法。
【請求項８】
メモリアドレスの前記組み換えられたストリームをメモリ記憶装置に出力するステップを更に含む特許請求の範囲の前記請求項の何れかに記載の方法。
【請求項９】
前記実行するステップが、発生されたメモリアドレスが前記メモリアドレスエンジンにアクセス可能かどうかをチェックするステップを更に含むことを特徴とする特許請求の範囲の前記請求項の何れかに記載の方法。
【請求項１０】
前記実行するステップが、発生されたメモリアドレスを、前記メモリアドレスエンジンにアクセス可能なメモリアドレスの所定の範囲のアドレスと比較するステップを更に備えることを特徴とする特許請求の範囲第９項に記載の方法。
【請求項１１】
前記発生されたメモリアドレスが前記メモリアドレスエンジンにアクセス出来ない場合、無結果を返すステップを前記実行するステップが更に含むことを特徴とする特許請求の範囲第９項又は第１０項に記載の方法。
【請求項１２】
複数のメモリアドレスエンジンがあり、前記コンフィギュレーションするステップが前記発生された初期化パラメータを用いて少なくとも一つの更なるメモリアドレスエンジンをコンフィギュレーションするステップを更に含み、前記実行するステップが前記複数の不連続メモリアドレスを作成するために前記少なくとも一つの更なるメモリアドレスエンジンのそれぞれにおいて実行されることを特徴とする特許請求の範囲の前記請求項の何れかに記載の方法。
【請求項１３】
前記実行ステップが、発生されたメモリアドレスが隣接するメモリアドレスエンジンにアクセス可能であるかどうかを決定するステップを組み入れることを特徴とする特許請求の範囲第１２項に記載の方法。
【請求項１４】
前記実行ステップが隣接するメモリアドレスエンジンのためにメモリアドレスを計算するステップを更に含むことを特徴とする特許請求の範囲第１２項又は第１３項に記載の方法。
【請求項１５】
あたかも隣接するメモリアドレスエンジンの個々のメモリ記憶装置から戻されたかのように個々のメモリアドレスエンジンに関連付けられたメモリ記憶装置から戻されたデータをルーティングするステップを更に含む特許請求の範囲第１４項に記載の方法。
【請求項１６】
前記ルーティングするステップが、メモリアドレスデータが前記隣接するメモリアドレスエンジンにルーティングされるのを排除するステップを更に含むことを特徴とする特許請求の範囲第１５項に記載の方法。
【請求項１７】
メモリアドレスエンジンのデータ転送をその隣接するメモリアドレスエンジンのそれと同期させるステップを更に含む特許請求の範囲第１５項又は第１６項に記載の方法。
【請求項１８】
外部コントローラにより設定された論理空間内の連続点を記述する初期化パラメータを受けるようになっているメモリアドレスエンジンであって、前記初期化パラメータで実行される少なくとも一つのアルゴリズムに従って複数の不連続メモリアドレスを発生するようになっているアドレス発生器と、データメモリに出力するために不連続メモリアドレスを出力メモリアドレスのストリームに組み換えるようになっている組み換え手段とを備えるメモリアドレスエンジン。
【請求項１９】
前記アルゴリズムが前記アドレス発生器の部分としてハードウェアで実行されることを特徴とする特許請求の範囲第１８項に記載のメモリアドレスエンジン。
【請求項２０】
前記アドレス発生器が論理空間の論理平面内の行上の各データ点に対してメモリアドレスを漸進的に計算する手段と、論理平面内の行の数だけ前記計算を繰り返す手段とを備える特許請求の範囲第１８項又は第１９項に記載のメモリアドレスエンジン。
【請求項２１】
前記アドレス発生器が論理平面内の初期データ点を記述する受信された初期化パラメータである論理平面の各列における単位増分に対する列ベクトルと、論理平面の各行における単位増分に対する行ベクトルと、論理平面内の必要なデータに対する列及び行限界とを処理するようになっていることを特徴とする特許請求の範囲第１８項乃至第２０項の何れかに記載のメモリアドレスエンジン。
【請求項２２】
前記アドレス発生器がデカルト座標において指定された少なくともいくつかの初期化パラメータを処理するようになっていることを特徴とする特許請求の範囲第２１項に記載のメモリアドレスエンジン。
【請求項２３】
発生されたメモリアドレスが前記メモリアドレスエンジンにアクセス可能であるかどうかを決定するアクセス手段を更に備える特許請求の範囲第１８項乃至第２２項の何れかに記載のメモリアドレスエンジン。
【請求項２４】
前記アクセス手段が発生されたメモリアドレスを、前記メモリアドレスエンジンにアクセス可能なメモリアドレスの所定の範囲のそれと比較するようになっていることを特徴とする特許請求の範囲第２３項に記載のメモリアドレスエンジン。
【請求項２５】
前記発生されたメモリアドレスが前記メモリアドレスエンジンにアクセス不可能であった場合、前記アクセス手段が無結果を返すようになっていることを特徴とする特許請求の範囲第２３項又は第２４項に記載のメモリアドレスエンジン。
【請求項２６】
前記アクセス手段が、発生されたメモリアドレスが隣接するメモリアドレスエンジンにアクセス可能かどうかを決定するようになっていることを特徴とする特許請求の範囲第２３項乃至第２５項の何れかに記載のメモリアドレスエンジン。
【請求項２７】
前記アクセス手段が隣接するメモリアドレスエンジンのためにメモリアドレスを計算するようになっていることを特徴とする特許請求の範囲第２６項に記載のメモリアドレスエンジン。
【請求項２８】
前記アドレス発生器が連想処理装置を備えることを特徴とする特許請求の範囲第１８項乃至第２７項の何れかに記載のメモリアドレスエンジン。
【請求項２９】
前記アドレス発生器が連想処理装置配列を備えることを特徴とする特許請求の範囲第１８項乃至第２７項の何れかに記載のメモリアドレスエンジン。
【請求項３０】
前記連想処理装置が一つ以上の関連ストリング処理装置を備えることを特徴とする特許請求の範囲第２８項又は第２９項に記載のメモリアドレスエンジン。
【請求項３１】
メモリアドレス処理システムであって、少なくとも第一と第二のメモリアドレスエンジンと、前記個々のメモリアドレスエンジンに関連付けられた第一と第二の主データ記憶装置と、前記個々のメモリアドレスエンジンに関連付けられた第一と第二の補助データ記憶装置と、各メモリアドレスエンジンをその関連する主及び補助データ記憶装置に接続するデータバスと、各メモリアドレスエンジンに関連付けられたデータルータであって、前記第一のメモリアドレスエンジンに関連付けられた前記データルータが命令により前記第一のメモリアドレスエンジンの前記第一の補助データ記憶装置から前記第二のメモリアドレスエンジンの第二の主データ記憶装置にデータをルーティングするようになっているようなデータルータとを備えるメモリアドレス処理システム。
【請求項３２】
前記第一のメモリアドレスエンジンに関連付けられた前記データルータに対する前記命令が前記第一のメモリアドレスエンジンから送られることを特徴とする特許請求の範囲第３１項に記載のメモリアドレスネットワーク。
【請求項３３】
前記少なくとも第一と第二のメモリアドレスエンジンが特許請求の範囲第１８項乃至第３０項の何れかによるメモリアドレスエンジンを備えることを特徴とする特許請求の範囲第３１項又は第３２項に記載のメモリアドレスネットワーク。
【請求項３４】
複数のメモリアドレスエンジンを備えるメモリアドレス処理システムと共に使用するルータであって、第一のメモリアドレスエンジンからの命令により前記第一のメモリアドレスエンジンに関連付けられたメモリ記憶装置から第二のメモリアドレスエンジンに関連付けられたメモリ記憶装置にデータを向けるようになっているルータ。
【請求項３５】
前記第一と第二のメモリアドレスエンジンが隣接するメモリアドレスエンジンとして一緒に論理的に接続されることを特徴とする特許請求の範囲第３４項に記載のルータ。
【請求項３６】
前記第一のメモリエンジンに関連付けられた前記メモリ記憶装置からのメモリデータのみが第二のメモリアドレスエンジンに関連付けられた前記メモリ記憶装置に向けられることを特徴とする特許請求の範囲第３４項又は第３５項に記載のルータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリアドレス技術に関する改良に関し、特に（これに限らないが）、この発明はマイクロプロセッサと共に使用されるメモリ記憶装置に保持されたデータに対するメモリアドレスの発生に関する。
【背景技術】
【０００２】
図１にＣＰＵ２、ＤＭＡエンジン８及びメモリ記憶装置４を備える簡単な先行技術の処理システムを示す。ＣＰＵ２はデータバス６によりメモリ記憶装置４に接続される。ＣＰＵはメモリアドレス要求をＤＭＡエンジン８に送信し、これがメモリ記憶装置４をページしてそのメモリアドレスに存在するデータを処理するためにＣＰＵ２に送る。メモリ記憶装置４から送られたデータは、ＣＰＵがメモリ記憶装置から送られたデータを処理する準備が出来る前はメモリキャッシュ（図示せず）に集められてもよい。
【０００３】
最新のマイクロプロセッサ・アーキテクチャはメモリ記憶装置から送られたデータを処理する中央処理ユニット（ＣＰＵ）の概念に基づいている。次に、処理済みデータは更なる処理のために他所に送られ、記憶装置に、あるいは表示用の周辺装置に戻してもよい。未処理データはメモリ記憶装置に保持され、メモリ記憶装置がメモリマネージャによりページされるときにＣＰＵに送れるように準備をする。メモリマネージャは一般的にダイレクトメモリアクセス（ＤＭＡ）エンジンと呼ばれる。ＤＭＡエンジンはＣＰＵにより要求されたメモリアクセスの処理を担当するマイクロプロセッサコンポーネントであり、それはＣＰＵが次にどのデータを必要とするかについての命令や、そのデータが位置するメモリ記憶装置内のアドレスをＣＰＵから受ける。メモリ記憶装置から要求されたページされたデータはデータバスを通じて処理のためにＣＰＵに送られる。
【０００４】
マイクロプロセッサの設計においては、ＣＰＵがデータの処理に出来るだけ多くのクロックサイクルを費やし、データがメモリ記憶装置から到着するのを待たず、またそれが次にどんなデータを必要とするかの算出にクロックサイクルを費やさないことが重要な考慮事項である。並列にデータを処理出来、一度に多数の命令を実行出来るマルチスレッド処理装置及びベクトル処理装置の出現により、最新のＣＰＵのデータ要求レートは、ＣＰＵにデータが供給され続けるための新しい技術が発明されねばならなかったことを意味して来た。一つの技術は、時間的及び空間的局在性を利用するメモリ階層の技術である。
【０００５】
メモリ階層の原理は、アクセスされたメモリデータは再びすばやくアクセスされるであろうし（時間的局在性）、直近にアクセスされたメモリデータに隣接するメモリデータは早くアクセスされる（空間的局在性）であろうという事実に依存している。メモリ階層は一連のメモリキャッシュを有し、最大の主メモリ記憶装置（通常は何ギガバイトものハードディスクドライブ）を始めとし、ＣＰＵコアと同じ速度で動作する数キロバイトのオンチップメモリキャッシュに至るまでサイズを小さくしかつ応答速度を増加することにより実行される。
【０００６】
たとえそのようにしてＣＰＵへのデータ送信の問題を取り除いても、そもそもメモリアドレスコールを発生する処理を如何にスピードアップするかの問題がなお存在する。このタスクは通常は上で触れたＤＭＡコントローラにより処理されてきた。しかしながら、複合的なアドレス列が必要な場合、ＤＭＡは一般的にその役割に適さず、ＣＰＵ自身が責任をもつ。実行パイプラインを一つだけ有するＣＰＵの設計については、メモリアドレスのこの次のバッチを発生するのに必要な数だけサイクルが経過するまでＣＰＵ全体はメモリアドレスの処理でふさがっている。最新のスーパースカラーＣＰＵ設計は一つ以上の実行ユニットを有し、これらの実行ユニットはメモリアドレスを処理及び発生するメモリマネージャのタスクを実行するようにプログラムすることが出来る。
【０００７】
しかしながら、実行ユニットはＣＰＵに要求される如何なる処理も引き受けねばならないので、実行ユニットは通常は複雑な計算が実行可能な全浮動小数点ユニットであり、四則演算及び論理ユニット（ＡＬＵ）、レジスタ及びそれら自身の他の電子コンポーネントを備えてもよい。そのようなＣＰＵの強力な部分を単純にメモリアドレス発生に専念させることは一般的にＣＰＵ処理能力の浪費と見なされ、更なる電力を必要とし、更なる熱を発生する。これらは、特にモバイルコンピューティング用途においてはますます重要な考慮事項である。同一チップに多数の実行ユニットを作り込むことは金がかかるので、ＣＰＵが全浮動小数点の実行ユニットを二つ又は三つを超えて持たないことは現在では普通である。従って、メモリアドレスの発生に一つの実行ユニットを割り当てても、それはＣＰＵの処理能力の著しい低下を意味する。
【０００８】
特に画像及び音声処理の分野における最新の用途はクロックサイクルごとに移動を必要とする高レベルのデータを伴うためにメモリアドレス発生処理に対して更なる負担をかけて来た。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
この発明にとって重要性を持つのは医用画像形成、特にサンプルボリュームの任意の角度で取られ断面を画像形成する分野である。医用画像分野において、画像データ列から解剖学上の構造を正確かつ自動的に描くには、走査されたボリュームの処理が必要な場合、大きな処理能力を必要とする。例えば、磁気共鳴画像形成（ＭＲＩ）技術、三次元超音波技術又はポジトロン放射トモグラフィー（ＰＥＴ）技術を用いて走査が行われた後に画像処理が必要な場合がある。これらの技術は非侵襲的ボリュームサンプリング技術であり、これらの方法によりサンプリングされる体ボリュームのタイプ例は脳、心臓、微視的組織断面である。
【００１０】
走査された体ボリュームは通常は、二次元データセットを作成する規則的な間隔で取られた画素の、多くの二次元（２−Ｄ）スライス、即ち平面から成る。一つのスライス内の任意の二つの画素間の間隔は画素間距離と呼ばれ、これは実世界の距離を表す。任意の二つのスライス間の距離はスライス間距離と呼ばれ、これは実世界の奥行きを表す。実世界のサンプリングされたボリュームを正確に反映するために画素間及びスライス間距離に基づいて一連のスライスがコンピュータメモリに積層される。データセットの実際のスライスの間に種々の内挿形式により更なるスライスを挿入してもよく、従って、ボリューム全体は適当な解像力で一つの立体的データブロックとして表される。データブロックが一旦確立されたら、各スライス内の画素はボリュームを呈し、ボリューム画素、あるいはボクセルと呼ばれる。言い換えれば、ボクセルは三次元（３−Ｄ）画像の最小の区別可能なボックス状の部分である。この３−Ｄデータセットは従って実際のサンプルボリュームのデジタル表現である。
【００１１】
画像処理は体ボリュームを通るユーザが定めた角度で取られたサンプルボリュームのスライスの画像の提供を通常は伴う。どの画像データ点（必要なデータ点）が新しい観察平面内に見えるかを決定するために計算を実行する必要があり、メモリ記憶装置内のどのメモリアドレスに必要なデータ点を表すデータが存在するかを決定するために更なる計算を実行する必要がある。
【００１２】
必要なデータ点のそれぞれは、例えば彩度、輝度及び透明度パラメータを表す数バイトのデータから成っていてもよい（次にこれらのパラメータのそれぞれは値の範囲を表す数ビットから成っていてもよい）。サンプルボリュームの画像スライスが取られるときは、その一つのスライス上の各データ点に対応するデータはメモリ記憶装置内の逐次的なメモリアドレスに記憶される。漸進的な走査手段により画像スライスデータを記憶するのが普通であり、その場合、２−Ｄスライスの一つの隅に対応するデータが先ず記録され、画像スライス全体が捕捉されるまで各列に沿って漸進的に走査しながら記録は対角線方向の反対の隅で終る。一つの必要なデータ点に対応するデータのメモリアドレスを求めるために、先ずどの座標が新しいデータ点であるかを三次元物理空間において算出し、その後にこれをメモリ空間における実際のメモリアドレスに置き換えるという二つのステップが行われる必要がある。
【００１３】
既知のマイクロプロセッサ・アーキテクチャを用いてこの新しい観察面を提供するために、ＣＰＵは上記の二つのステップを実行しなければならない。取られた観察面はサンプルボリュームに対して如何なる角度を成していてもよいので、新しい観察面に対応するデータが、走査スライス平面に平行な平面を表す観察面のみが連続的に記憶されるようにメモリ記憶装置内の連続的なメモリアドレスに記憶されることは起こり得ない。既知のＤＭＡエンジンの単純な性質のために、ＣＰＵはＤＭＡエンジンに必要な全ての単一メモリアドレスを与えるか、あるいは各データ自身を直接フェッチするかしなければならない。このタスクはＣＰＵの処理能力の著しい低下を意味するが、ＣＰＵにはこの計算の実行が課せられている。
【００１４】
同様レベルのメモリアドレス処理を要する他の用途はＺバッファ法、光線追跡、オクルージョンマッチング及び音声処理を含む。
【００１５】
以下の発明が提出されるのは上記の問題、特にＣＰＵを集中的なメモリアドレス発生処理から解放するという問題に対処するためである。
【課題を解決するための手段】
【００１６】
本発明の一つの態様によれば、論理空間において連続点を表す不連続メモリアドレスのストリームを発生する方法であって、論理空間において連続点を記述する初期化パラメータを発生するステップと、初期化パラメータを用いてメモリアドレスエンジンをコンフィギュレーションするステップと、複数の不連続メモリアドレスを作成するために初期化パラメータに従ってメモリアドレスエンジンにおいてアルゴリズムを実行するステップと、データメモリに出力するために不連続メモリアドレスをメモリアドレスのストリームに組み換えるステップを含む方法が提供される。
【００１７】
必要なメモリアドレスを計算するジョブを外部メモリアドレスエンジンに任せることにより、コントローラ（これは常時ではないが、一般的にはＣＰＵである）はメモリ記憶装置から戻されたデータの処理に自由に専念出来る。更に、コントローラは計算すべき一連のメモリアドレスに対してメモリアドレスエンジンを一度設定するだけでよいが、これはコントローラが処理タスクを行うのに費やす時間の割合をより大きく出来ることを意味する。より詳細には、コントローラＣＰＵにより必要とされるデータ処理は初期化パラメータの発生に限定され、これは典型的には、結果としてメモリエンジンにより発生される大量の不連続メモリアドレスと比較して数バイトから成る。
【００１８】
この発明のもう一つの利点は、歴史的に、ＤＭＡエンジンのようなメモリアドレスエンジンがコントローラ又はＣＰＵからの介入なしには不連続メモリアドレスで作られたメモリアドレスの連続ストリームを作成できなかったことである。この発明は、メモリアドレスを処理するアルゴリズムの性質により、この有益作用を生み出すことが出来、それにより既知のメモリアドレスエンジンよりコントローラ入力を低減する。
【００１９】
好都合にも、初期化パラメータの発生はデータボリュームを通るある角度で取られたデータの論理平面の観察を可能にし、一連のパラメータの発生がデータの論理平面の一部の観察を可能にすることも好都合である。これは特に３−Ｄボリュームの２−Ｄ画像観察に当てはまる。
【００２０】
好ましくは、方法は論理平面内の行上の各データ点に対して漸進的にメモリアドレスを計算するステップと、論理平面内の行の数だけ上記の計算を繰り返すステップとを組み入れるアルゴリズムを含む。論理空間の処理要素のこの規則性により、メモリアドレスが必要とする論理空間の連続点をパラメータ化するタスクが簡略化出来る。即ち、論理空間を記述する処理要素の分布が規則的であればあるほど、コントローラからのより最小限の命令でアドレス処理エンジンが実行出来る。
【００２１】
実世界平面において平面ごとにメモリアドレスを計算し、論理平面内のデータ点に関連付けられた必要なメモリアドレスを単に保持するよりも、論理平面内のデータ点に対してだけメモリアドレスを計算する方がずっと効率的である。
【００２２】
特許請求された方法のもう一つの有利な特徴は、コンフィギュレーションステップが論理平面内の初期データ点の座標を指定するステップと、論理平面の列の単位増分に対するベクトルを指定するステップと、論理平面内の行の単位増分に対するベクトルを指定するステップと、論理平面内の必要なデータに対する列限界と行限界を指定するステップとを組み入れれば達成される。
【００２３】
上記のステップは、論理平面内の必要なデータ点に関連付けられたメモリアドレスのみを如何に計算すべきかの問題を解決する基本的な帰納的計算手順を概説している。これらの値はメモリアドレスエンジンに対する初期化パラメータのコアセットから成り、それらがメモリアドレスエンジンに実行させるメモリアドレス計算と比較してコントローラに対しては比較的些細な計算要件である。
【００２４】
上記の好都合な特徴に関して、論理平面上の初期データ点の座標を指定するステップはデカルト座標を用いて実行してもよい。同様に、列ベクトルと行ベクトルを指定するステップは好ましくはデカルト座標を用いて実行される。論理平面は好ましくは実世界サンプルを通る平面を表し、従って、論理平面内の各点は適当な座標により表すことが出来る。またこれは、座標軸のそれぞれが独立であるので処理タスクがメモリアドレスエンジンにおいてアルゴリズムにより各軸に対して同時に実行出来ることを意味する。
【００２５】
論理平面は実世界デカルト座標空間に対して任意の角度で傾斜していてもよいので、論理平面内の行と列を移動する必要のあるベクトルはこれらの三つの軸のそれぞれに成分を持ち得る。
【００２６】
この方法がメモリアドレスの組み換えられたストリームをメモリ記憶装置、典型的には「補助データ記憶装置」に出力するするステップを更に含むことが望ましいかも知れない。「補助データ記憶装置」はどのようなメモリでもよく、例えばメインシステムメモリでもよい。
【００２７】
特許請求された方法の代わりの態様において、アルゴリズムを実行するステップは好ましくは、発生されたメモリアドレスがメモリアドレスエンジンにアクセス可能かどうかをチェックするステップを更に含む。
【００２８】
メモリアドレスエンジンに、それらがメモリ空間のどこにアクセス可能であるかについて制限が課せられているのが普通である。アクセスとはそのメモリアドレスから読み出し、あるいはそれに書き込むことを意味する。これは効率上の理由のため、例えば、それぞれのメモリアドレスエンジンが異なる範囲のメモリアドレスに並列に取り組めるようにメモリースペースをいくつかのメモリアドレスエンジンに分割するためである。
【００２９】
上記の代りの態様において、アルゴリズムを実行するときに、これが、発生されたメモリアドレスをメモリアドレスエンジンにアクセス可能な所定の範囲のメモリアドレスと比較するステップを含むことが好ましい。この簡単なチェックが、メモリアドレスエンジンがアクセス出来ないメモリ位置からデータを検索しようとする処理時間の浪費を防止するために必要な全てである。そのようなアドレスが検出された場合、実行ステップは無結果を返すステップを更に含んでもよい。無結果は例えば画像データを囲む枠として表示できるので、これは処理を助ける。
【００３０】
本発明は、好ましくも複数のアドレスエンジンがあるときはもっと効率的である。この場合、コンフィギュレーションステップは、発生された初期化パラメータを用いて少なくとも一つの更なるメモリエンジンをコンフィギュレーションするステップを更に含んでもよく、実行ステップは複数の不連続メモリアドレスを作成するために少なくとも一つの更なるメモリアドレスエンジンのそれぞれにおいて実行してもよい。
【００３１】
並列に処理するためにいくつかのメモリアドレスエンジン間のメモリアドレス発生要件をいくつかのメモリアドレスエンジンに分割すれば一つのメモリアドレスエンジンのみを使用するよりもっと効率的である。単一命令多重データ（ＳＩＭＤ）モードで動作するメモリアドレスエンジンの場合、各メモリアドレスエンジンは同じ初期化パラメータを用いて設定される。
【００３２】
いくつかのメモリアドレスエンジンを使用する場合、各メモリアドレスエンジンにおいてアルゴリズムを実行するときに、これが、発生されたメモリアドレスが、隣接するメモリアドレスエンジンにアクセス可能であるかどうかを決定するステップを組み入れることが好ましい。
【００３３】
アクセス可能である場合、各メモリアドレスエンジンにおいてアルゴリズムを実行するときに、これが、隣接するメモリアドレスエンジンのためにメモリアドレスを発生するステップを更に含むこともまた望ましい。
【００３４】
これらの二つの特徴はアドレス計算タスクが、並列するメモリアドレスエンジンの配列にわたり分配され、そのそれぞれがそれらの個々のメモリ記憶装置にアクセスするようにする。速度の著しい増加という利点はわずかな付加的なアドレス問題をはるかに埋め合わせる。
【００３５】
上記のことに関し、それは好ましくは、隣接するメモリアドレスエンジンのためにメモリアドレスを発生するときにそれがあたかも隣接するメモリアドレスエンジンの個々のメモリ記憶装置から戻されたかのように個々のメモリアドレスエンジンに関連付けられたメモリ記憶装置から戻されたデータをルーティングするステップを更に含む。このようにして、隣接するデータ記憶装置から得られるデータの転送先はそこからのデータが予測されるメモリアドレス用エンジンに関連付けられた処理装置または記憶装置に正しく向けることが出来る。これはそのデータで動作するあらゆるデータ処理アルゴリズムの変更を最小にする。
【００３６】
ルーティングするステップはメモリアドレスデータが隣接するメモリアドレスエンジンにルーティングされることを排除するステップを更に含んでもよい。これはデータとアドレスの分離を保ち、このことは動作のし易さにとって重要であり、またルーティング機能のシリコンでの実施に必要な入力／出力ピン数を最小にする。
【００３７】
隣接するメモリアドレスエンジンのためにメモリアドレスを発生するときに、これが、隣接するメモリアドレスエンジンを用いてデータ転送を同期するステップを更に含むとことが好ましい。各メモリアドレスエンジンはある程度独立に動作できるけれども、隣にデータをルーティングするときは、これは普遍的なデータフローの変更であり、そのためにエンジン間に同期があることは非常に好都合である
【００３８】
本発明の代わりの態様において、外部コントローラにより設定された、論理空間において連続点を記述する初期化パラメータを受けるように配列されたメモリアドレスエンジンが提供され、メモリアドレスエンジンは、初期化パラメータで実行される少なくとも一つのアルゴリズムに従って複数の不連続メモリアドレスを発生するようになっているアドレス発生器と、データメモリに出力するために不連続メモリアドレスを出力メモリアドレスのストリームに組み換えるようになっている組み換え手段とを備える。
【００３９】
本発明のもう一つの態様によれば、少なくとも第一と第二のメモリアドレスエンジンと、それぞれのメモリアドレスエンジンに関連付けられた第一と第二の主データ記憶装置と、それぞれのメモリアドレスエンジンに関連付けられた第一と第二の補助データ記憶装置と、各メモリアドレスエンジンをその関連する主及び補助データ記憶装置に接続するデータバスと、各メモリアドレスエンジンに関連付けられたデータルータとを備えるメモリアドレス処理システムが提供され、第一のメモリアドレスエンジンに関連付けられたデータルータは命令により第一のメモリアドレスエンジンの第一の補助データ記憶装置から第二のメモリアドレスエンジンの第二の主データ記憶装置にデータをルーティングするようになっている。
【００４０】
上記のメモリアドレス処理システムは必要なアドレスを迅速に計算するために複数のメモリアドレスエンジンを持つという利点を利用する。アドレス計算は論理空間の小さなサブセットについて実行され、従って一つの大きな空間について実行する場合よりもかなり速い。新しい分布構造を扱うために処理アルゴリズムを変更するよりも、二つのメモリアドレスエンジン間にルータを設ければ処理がずっと容易になる。
【００４１】
上記のシステムにおいて、第一のメモリアドレスエンジンに関連付けられたデータルータに対する命令が第一のメモリアドレスエンジンから送られるのが好ましい。これはコントロールをローカルに留め、いつデータルータがそれ自身のローカルデータ記憶装置から直接コントローラにデータをルーティングすべきか、またいつそれがその隣接するメモリアドレスエンジンのローカルデータ記憶装置からデータをルーティングすべかをメモリアドレスエンジンが指定出来るようにする。後者は通常、メモリアドレスがそのローカルデータ記憶装置にないことを第一のメモリアドレスエンジンが計算するときに必要である。
【００４２】
本発明のもう一つの態様によれば、複数のメモリアドレスエンジンを備えるメモリアドレス処理システムと共に使用されるルータが提供され、ルータは第一のメモリアドレスエンジンからの命令により第一のメモリアドレスエンジンに関連付けられたメモリ記憶装置から第二のメモリアドレスエンジンに関連付けられたメモリ記憶装置にデータを向けるようになっている。
【００４３】
そのようなルータは、多くの異なる処理装置とメモリアドレスエンジンが一緒に動作するようにメモリアドレス計算のタスクを細分化する場合、特定の用途を有する。二つのコンフィギュレーションの一つにおいて、即ち、関連するメモリアドレスエンジンのデータ記憶装置から直接、あるいは隣接するメモリアドレスエンジンに関連付けられたデータ記憶装置から、データをルーティングするように出来るので、ルーティングは複雑ではない。従って、各ルータはスペースとコストの点で比較的安価にシリコンに作り込むことが出来、どの返還データが有効であり、どの要求を表すかを算出しなければならないＣＰＵの計算費用の著しい低減をもたらす。
【００４４】
好ましくは、第一のメモリエンジンに関連付けられた第一のメモリ記憶装置からのデータのみが第二のメモリアドレスエンジンに関連付けられたメモリ記憶装置に向けられる。これによりルータを単純に構成しかつ各メモリアドレスエンジンに対して繰り返し使用することが可能になる。
【発明を実施するための最良の形態】
【００４５】
さて、発明がより容易に理解出来るように、添付図を参照して例として発明を説明する。
【００４６】
図１にＣＰＵ２、ＤＭＡエンジン８及びメモリ記憶装置４を備える簡単な先行技術の処理システムを示す。ＣＰＵ２はデータバス６によりメモリ記憶装置４に接続される。ＣＰＵはメモリアドレス要求をＤＭＡエンジン８に送信し、これがメモリ記憶装置４をページしてそのメモリアドレスに存在するデータを処理用のＣＰＵ２に送る。メモリ記憶装置４から送られたデータは、ＣＰＵがメモリ記憶装置から送られたデータを処理する準備が出来る前はメモリキャッシュ（図示せず）に集められてもよい。
【００４７】
図２は本発明の第一の実施例による処理システムを示す。理解を容易にするために、第一の実施例と先行技術の差が第一の実施例を説明するために使用される。図１のメモリ記憶装置４は非常に大きい２−Ｄ又は３−Ｄデータセットを記憶するために使用される「補助データ記憶装置（ＳＤＳ）」１４により置き換えられる。ＳＤＳ１４はデータ転送パイプライン１６に接続され、次にこれが「主データ記憶装置（ＰＤＳ）」１２に接続される。ＰＤＳ１２はＣＰＵ２にローカルなキャッシュ、あるいは何らかの他の処理装置、例えば関連するストリング処理装置であると考えることが出来る（これはＷＯ  ０２／４２９０６として公開された本出願人の同時係属中の国際特許出願の主題である）。必要な２−Ｄ又は３−ＤデータセットはＰＤＳに関連付けられた処理装置による処理に先立ちＰＤＳに転送される。このネットワークにおけるアドレス発生は、データアドレス要求をパイプライン１６を介してＳＤＳ１４に送る「補助データ移動コントローラ（ＳＤＭＣ）」１８と呼ばれるスマートＤＭＡエンジンにより取り扱われる。ＳＤＭＣ１８はＣＰＵ２からのアドレス命令を用いてセットアップされる。ＳＤＭＣ１８をセットアップするＣＰＵは必ずしもＰＤＳに関連付けられた同一処理装置である必要はない。
【００４８】
前に述べたメモリ階層の観点から、ＳＤＳはＰＤＳと比較してより下層のどんなメモリ又はメモリキャッシュでもよい。ＰＤＳがＳＤＭＣ１８にローカルな処理装置に密接に関連付けられるというシナリオ、特に処理装置がベクトル処理装置であるというシナリオはこの特定の発明にとって特別な重要性を持っている。
【００４９】
データ転送パイプライン１６はアドレスデータ（ピン１５）とデータ（ピン１７）の同時送信を可能にするピン１５と１７によりＳＤＳ１４に接続される。データ転送パイプラインはまたＰＤＳにデータを転送し、データ帯域幅はコネクタ１７と１９にあるピン数を決定する。
【００５０】
ＳＤＭＣ１８は従来のｘ、ｙ、ｚ軸を有するデカルト座標を採用する。３−Ｄ（ボリューム）データセットのサイズと配置はｘＳｉｚｅ、ｙＳｉｚｅ及びｚＳｉｚｅにより定められる。前に述べたように、単位はボクセル（画素の３−Ｄ等価物）であり、これは用途にふさわしい解像力／精度を持っている。例えば、ボクセルを表すデータは色、濃度、透明度等についての情報から成っていてもよく、その場合、記憶装置の複数バイト（ｖｏｘｅｌＳｉｚｅ）を占めることになる。これは以下のバイト数から成るデータセット総数をもたらす。即ち、
【００５１】
ｖｏｘｅｌＳｉｚｅ＊ｘＳｉｚｅ＊ｙＳｉｚｅ＊ｚＳｉｚｅバイト
【００５２】
パラメータｘＳｉｚｅ、ｙＳｉｚｅ及びｚＳｉｚｅはＳＤＭＣアーキテクチャにより直接使用されない。その代わり、ユーザはｘ、ｙ及びｚ軸のそれぞれに沿って一つのボクセルを移動するために何バイトのメモリを省略すべきかを指定する。これらの量はｘＳｃａｌｅ、ｙＳｃａｌｅ及びｚＳｃａｌｅと呼ばれる。典型的には（必須ではないが）、ｘＳｉｚｅ、ｙＳｉｚｅ及びｚＳｉｚｅの値は同一である。
【００５３】
どんな３−ＤデータセットもそれぞれがｘＳｉｚｅ×ｙＳｉｚｅの寸法を持つｚＳｉｚｅ平面群と解釈出来る。３−Ｄデータは習慣的に一番目の平面（ｚ＝０）の一番目の行（ｙ＝０）がメモリ内で物理的に一番目であるようにＳＤＳに配列される。この一番目の行の一番目のデータ要素は当然ｘ＝０にある要素であり、その後にｘ＝１が続き、ｘ＝ｘＳｉｚｅ−１まで続く。この後に一番目の平面の第二の行が続き、一番目の平面の最後のボクセル（ｘ＝ｘＳｉｚｅ−１、ｙ＝ｙＳｉｚｅ−１）まで同様に続く。一番目の平面の最後のボクセルから当然二番目の平面の一番目のボクセル（ｘ＝０、ｙ＝０、ｚ＝１）に移動し、データセットにわたりこれを繰り返す。
【００５４】
この全てはｘが小寸法で、ｚが大寸法とすることにより、より簡潔に表すことが出来る。ｘＳｉｚｅ、  ｙＳｉｚｅ及び  ｚＳｉｚｅと、ｘＳｃａｌｅ、ｙＳｃａｌｅ及び  ｚＳｃａｌｅの間の関係はこのことから以下のようになる。即ち、
【００５５】
ｘＳｃａｌｅ＝ｖｏｘｅｌＳｉｚｅ
ｙＳｃａｌｅ＝ｘＳｃａｌｅ＊ｘＳｉｚｅ
ｚＳｃａｌｅ＝ｙＳｉｚｅ＊ｙＳｃａｌｅ
【００５６】
ＳＤＭＣ１８はＳＤＳ１４とＰＤＳ１２間のボクセルデータの転送を容易にする。ボクセルの実際のメモリアドレスを決定するために、それは、転送すべき各ボクセルの座標（ｘ，ｙ，ｚ）を内部で計算してこれらにスケールファクター（それぞれｘＳｃａｌｅ、ｙＳｃａｌｅ及びｚＳｃａｌｅ）を掛ける。
【００５７】
通信ネットワークにより相互接続された実行ユニットの配列が、コンボリューションやマトリックス掛け算のような共通処理タスクの間、隣のデータを共有するために効率的に使用できるように、多くの並列処理アプリケーションは隣接ボクセルが隣接する処理要素にロードされることを常に必要とする。従って、ＳＤＭＣ１８は２−Ｄ「パッチ状ボクセル」をＳＤＳへ、またＳＤＳから転送するように設計される。
【００５８】
「パッチ」は全てボリュームデータセット内の任意の同一平面にあるボクセルの矩形配列である。この２−Ｄ「パッチ状ボクセル」は２−Ｄ画像と混同すべきではない（一定の非常に特殊な環境では二つは同一であるけれども）。この平面の向きは任意でよい。言い換えれば、転送に係わるＳＤＳに記憶されたボクセルの位置と順序は概念的にボリュームデータ内に位置する任意の方向に向いた矩形により定められる。ＳＤＭＣのパラメータのほとんどはボリュームデータ内のボクセルデータのこのパッチの位置、サイズ及び向きについて指定する必要がある。
【００５９】
ボクセルデータのパッチは列寸法と行寸法を持つ。列寸法は常に小寸法である。即ち、データが行ごとに転送され、従って列インデックスは転送中に最も頻繁に変化する。
【００６０】
使用時、ＣＰＵ２は初期化中に一連のアドレス命令を用い、また後で詳細に説明し、またその例をここで説明するハードウェアで実施されたアルゴリズムを使用することにより、ＳＤＭＣ１８をセットアップするように命令を発行する。ＳＤＭＣ１８はＳＤＳに対してページされかつＰＤＳに戻される必要な一連のメモリアドレスを発生することが出来る。従って、メモリアドレス計算はＣＰＵからＳＤＭＣ１８に任せられ、ＣＰＵはＰＤＳから得られたデータの処理にクロックサイクルを集中することが出来る。
【００６１】
図３は、データアイテム２１のパッチ２０（図３ではデータアイテム２１の一部のみに付番される）が図解の都合だけのためにｚ平面に合致するように選択された図例を示す。この例ではパッチのサイズは３×３個のデータアイテムである。
【００６２】
ＣｏｌＩｎｃｒは「データパッチ」の行に沿って次のデータ要素のアドレスを計算するのに必要なベクトルである。ＲｏｗＩｎｃｒは次の行の次のデータ要素のメモリアドレスを計算するのに必要なベクトルである。ＣｏｌＩｎｃｒとＲｏｗＩｎｃｒはそれぞれ、ｘ、ｙ及びｚ方向に対してそれぞれ一つの、三つの成分（ｘＣｏｌＩｎｃｒ、ｙＣｏｌＩｎｃｒ等）を持つ。パッチ状ボクセルはこの図解ではｚ平面上にあるので図ではｚＣｏｌＩｎｃｒとｚＲｏｗＩｎｃが表されないのは明らかである。
【００６３】
しかしながら、選択された平面がｚ平面に平行でない場合は各ベクトルＣｏｌＩｎｃｒとＲｏｗＩｎｃｒは三つの軸のそれぞれに成分をもつ。
【００６４】
選択された平面は論理平面と呼ばれ、ＣｏｌＩｎｃｒ及びＲｏｗＩｎｃｒベクトルは物理的平面におけるベクトルであり、これらを合成すると論理平面における単位ベクトルを表す。
【００６５】
ＣＰＵ２はＣｏｌＩｎｃｒとＲｏｗＩｎｃｒの両方に対するｘ、ｙ及びｚ成分を算出し、これは初期化中にＳＤＭＣ１８に送られ、必要なパッチに対するデータ点の全てが計算されるまで、後に続く全ての計算の間中、維持される。
【００６６】
制御用パラメータのもっと完全な説明が以下の節において成される。
【００６７】
ｘＩｎｉｔ、ｙＩｎｉｔ、ｚＩｎｉｔ
【００６８】
ボクセルデータ２０の矩形パッチ、又はマトリックスの位置はその一番目のボクセル（マトリックス内の最小の列及び行座標を持つボクセル）のｘ、ｙ、ｚ座標により決定される。この位置はＳＤＭＣパラメータｘＩｎｉｔ、ｙＩｎｉｔ及びｚＩｎｉｔにより指定される。ｘＩｎｉｔ、ｙＩｎｉｔ及びｚＩｎｉｔの値は端数部を表す下位１６ビットを持つ３２ビット符号付きの固定小数点値である。
【００６９】
ＣｏｌＩｎｃｒ及びＲｏｗＩｎｃｒ
【００７０】
矩形パッチ２０の向きは二つのベクトル、ＣｏｌＩｎｃｒ（ｘ，ｙ，ｚ）とＲｏｗＩｎｃｒ（ｘ，ｙ，ｚ）により指定される。ＣｏｌＩｎｃｒは矩形パッチ２０の行に沿って次のデータに移動するのに必要なベクトルである。ＲｏｗＩｎｃｒはある行から次の行に移動するのに必要なベクトルである。ＣｏｌＩｎｃｒとＲｏｗＩｎｃｒのそれぞれは、ｘ、ｙ及びｚ方向に対してそれぞれ一つの、三つの成分（ｘＣｏｌＩｎｃｒ、ｙＣｏｌＩｎｃｒ等）を持つ。これらの成分は３２ビット整数部を表す上位１６ビットと端数部を表す下位１６ビットを持つ３２ビットの２の補数の固定小数点値である。
【００７１】
ＣａｌＬｉｍｉｔ及びＲｏｗＬｉｍｉｔ
【００７２】
パッチ内の転送元／転送先データ要素の数（従ってそのサイズも）はＣｏｌＬｉｍｉｔＬ、ＣｏｌＬｉｍｉｔＨ、ＲｏｗＬｉｍｉｔＬ及びＲｏｗＬｉｍｉｔＨにより指定される。これらは矩形パッチ２０により定められるデータ要素を横切るのに使用される内部のＳＤＭＣ行及び列カウンタの始め及び終りの限界を指定する。即ち、列カウンタはＣｏｌＬｉｍｉｔＬからＣｏｌＬｉｍｉｔＨまでカウントし、行カウンタはＲｏｗＬｉｍｉｔＬからＲｏｗＬｉｍｉｔＨまでカウントする。このように、選択されたパッチのサブセットはユーザの自由裁量で転送出来る。
【００７３】
上記の三つのパラメータセット、開始ボクセルの初期値、論理平面内の単位増分ベクトル及び論理平面限界が、論理平面内のパッチ状データを指定するのに必要とされる全てである。更に、ＳＤＭＣの機能性を増すために随意のパラメータが与えられてもよい。
【００７４】
例えば、ＳＤＭＣ１８は完全な「パッチ（矩形）状データ」を転送する必要はなく、転送すべきデータ要素の実際の数はＴｆｒＬｅｎｇｔｈ（転送長さ）により指定される。ＴｆｒＬｅｎｇｔｈはＲｏｗＬｉｍｉｔとＣｏｌＬｉｍｉｔにより定められるデータ要素の数より少なくてもよいが、もっとあり得るのは、それがこの値と同じか、その整数倍（ロード動作中にＰＤＳに転送されるべき矩形パッチデータの多重コピーを可能にする）であることである。
【００７５】
もう一つの例はプログラム可能なパラメータＲｏｗＢｏｕｎｄ、ＣｏｌＢｏｕｎｄ及びＮｕｌｌＤａｔａの供給である。ＳＤＳからのパッチ状データのサブセットのみが抽出される必要があり、残りのデータアイテムを何らかの任意のＮＵＬＬ値で埋めることがしばしばある。ＳＤＭＣ１８は、ＳＤＳからのこのサブセットデータのみを選択し、ＰＤＳに転送すべきＮＵＬＬデータで残りの位置を埋める役目をする付加的な機能を持つ。
【００７６】
同様に、パッチ状データの処理は無効結果がローカルＰＤＳに戻されることになるかも知れない（即ち、処理後のパッチの境界において）。これらの無効結果の発生（ＳＩＭＤ処理装置では非実用的であり、あるいは望ましくない）を抑えるためにＣＰＵ２における計算帯域幅を浪費するよりも、どんな無効境界データも処理、廃棄した後に有効結果のみをＳＤＳにライトバックする方がよい。
【００７７】
内部ＳＤＭＣ列カウントが≧ＣｏｌＢｏｕｎｄＬで≦ＣｏｌＢｏｕｎｄＨであり、内部ＳＤＭＣ行カウントが≧ＲｏｗＢｏｕｎｄＬで≦ＲｏｗＢｏｕｎｄＨである、即ち、ＲｏｗＢｏｕｎｄＨ、ＲｏｗＢｏｕｎｄＬ、ＣｏｌＢｏｕｎｄＨ及びＣｏｌＢｏｕｎｄＬがその中の有効データが転送される内部行及び列カウンタの境界を示すときのみＰＤＳとＳＤＳ間でデータが転送される。行カウンタと列カウンタのどちらかがそれぞれの境界を越えたら、ＮＵＬＬデータ値がロード動作中にＰＤＳにロードされる。記憶サイクル中にそのＰＤＳデータは廃棄され、ＳＤＳにはデータは何も書き込まれない。ＮＵＬＬデータ値はＮｕｌｌＤａｔａ  ＳＤＭＣパラメータにより指定される。
【００７８】
図４はＭＰＥＧビデオ復号における例を示し、ＩＤＣＴ（逆離散余弦変換）が８×８マトリックスについて実行されねばならず、その結果（８×８マトリックス）は半画素内挿により９×９マトリックスから作成された基準データに加算されねばならない。一つのアプローチは、先ず余計なスペースを必要としないでＩＤＣＴ結果に対して９×９の基準データをロードする十分な余地を与えるために、計算を処理するのに６４個ではなく８１個のＳＩＭＤ処理要素を採用してもよい。この状況では、一つの転送でＩＤＣＴ入力データ全体（６４データ要素）を８１個の「連想処理要素」までロードしたいと思うであろう。しかしながら、マトリックス掛け算を容易にするために、入力データからの各８行目が、ＳＩＭＤ処理装置配列において９行目に合致したままにし、最終ブランクの９行目が「終わり」に来ることが必要であろう。
【００７９】
このことはＲｏｗＢｏｕｎｄとＣｏｌＢｏｕｎｄの適当な指定によりＳＤＭＣ１８を用いて容易に達成出来る。ＭＰＥＧの例に関して、以下のように簡単に設定してもよい。即ち、ＴｆｒＣｏｕｎｔを８１に設定することを念頭において、ＣｏｌＬｉｍｉｔＬ  ＝  ＲｏｗＬｉｍｉｔＬ＝０、ＣｏｌＬｉｍｉｔＨ＝ＲｏｗＬｉｍｉｔＨ＝８、そしてＲｏｗＢｏｕｎｄＬ＝ＣｏｌＢｏｕｎｄＬ＝０、ＲｏｗＢｏｕｎｄＨ＝ＣｏｌＢｏｕｎｄＨ＝７。
【００８０】
ＳＤＭＣ処理データの配列が並列の場合、単一命令多重データ（ＳＩＭＤ）モードにおいて、図５に示す処理システムで表される本発明の第二の実施例を採用出来る。この並列構造において、補助データ転送（ＳＤＴ）ルータ２０はパイプライン１６とＰＤＳ１２の間に配置される。ＣＰＵが初期命令を用いてＳＤＭＣ１８をセットアップするときにＣＰＵはまた、各ＳＤＭＣ１８がどのメモリアドレス列にアクセス可能であるかをＳＤＭＣ１８に知らせる。
【００８１】
第一のＳＤＭＣ１８がＣＰＵにより初期化された一連のアドレス命令を処理する過程で、発生されたメモリアドレスがそれ自身の割り当てられたローカルなメモリアドレス列の外側にあることをＳＤＭＣ１８が知ったら、ＳＤＭＣ１８はどの隣接ＳＤＭＣがこのメモリアドレスにアクセス可能であるかを決定し、それに従ってルータがそれ自身を、データを隣接するＳＤＭＣのルータ（２２、２４）から第一のＳＤＭＣのルータ２０を介して第一のＳＤＭＣ１８のＰＤＳにデータをルーティングするように設定する。
【００８２】
ＳＤＭＣプログラムパラメータが、グローバルなボクセルアドレスが計算されるようにすることを覚えておくことは重要である。グローバルデータセットは、それぞれがそれら自身のＳＤＭＣと、ＰＤＳへの補助Ｉ−Ｏチャンネルを持つ多数のローカルＳＤＳ全体に分配され、それにより向上された補助Ｉ−Ｏ（入力−出力）性能を提供する。多くのＳＩＭＤアプリケーションは、このようにデータを多数の独立なデータセットに単純に分割することにより動作する。
【００８３】
しかしながら、隣接するＳＤＭＣチャンネルが、それらをシステムＳＤＳ全体にわたってデータを参照させるグローバルアドレス方式を維持しながら、互いのローカルデータへの物理的アクセスを有するという能力は利点を生じる。常にこれはデータセットが同じサイズと形状を有し、データのアクセスが隣接するＳＤＳに制限されると仮定している（ＳＩＭＤ  ２−Ｄ及び３−Ｄ画像形成用途においては妥当で費用効果の大きい仮定である）。
【００８４】
従って、「チャンネル」アーキテクチャは特定のＳＤＭＣ１８がその最も近い隣がもつＳＤＳの一つからデータを効率的に読み取れるようにする。問題のＳＤＭＣ１８は直接データ自身をフェッチしないが、このフェッチを行うために隣がもつＳＤＭＣを利用する。言い換えれば、各ＳＤＭＣはグローバルアドレスを発行し、データをフェッチする。しかしながら、このデータが実際に隣接するＳＤＳにあることを認識してＳＤＭＣは適当なオフセットをそれ自身のグローバルアドレスに与えてローカルアドレスを作り出し、得られたデータ転送を単純な隣のスイッチングネットワークを介してその隣にルーティングする。
【００８５】
実際には、これはプログラムにおいて同一点における隣接するＳＤＳデータへのアクセスを要する全てのＳＤＳチャンネルに依存し、従って、それらは全て隣のためにそれらのローカルＳＤＳからデータをフェッチしている。これは隣接するＳＤＳ間にハンドシェークチャンネルを採用することにより行われる。ＳＩＭＤモードで動作するＳＤＭＣの配列において、各ＳＤＭＣ１８は、処理するために初期化されたアドレス命令列のわずかに異なる場所にあってもよい。各ＳＤＭＣ１８が同じ命令セットを動作しているので、たとえデータの異なる部分に対してであっても、一つのＳＤＭＣ１８が、発生されたアドレスがそのローカルデータ記憶装置の外側にあることを理解するや否や、それはハンドシェーク信号を隣接するＳＤＭＣに送る。全てのＳＤＭＣが同じ位置に達し、次のアドレスがそれらのローカルＳＤＳの外側にあることを理解するや否や、ルータが作動され、各ＳＤＭＣは適当な隣がもつアドレスページを処理し、ルータは戻されたデータを隣がもつＰＤＳにルーティングする。
【００８６】
一つのＳＤＭＣが、隣接するＳＤＳに保持されたデータを必要とし、従って全ての処理ユニットも同様に必要とする場合、ハンドシェーク処理はＳＩＭＤ処理アーキテクチャにおけるように上記のシナリオにとって重要である。この転送は、全ての処理ユニットが処理命令列内の同じ段階に同期されるまで行うことは出来ない。
【００８７】
この実施例は本発明の拡張性を示すだけでなく、ルータを用いて各ＳＤＭＣに対するローカルデータ記憶装置のサイズを如何に小さく出来るかを示す。ルータ機能がなければ、各ＳＤＭＣはＳＤＳ全体と同じサイズのアクセス可能なローカルメモリ記憶装置を持つ必要があり、これには金がかかる。
【００８８】
更に、パイプライン１６とＳＤＳ１４の間ではなく、データ転送パイプライン１６とＰＤＳ１２の間へのルータの配置は供給を要する信号が顕著に少なくなることを意味し、ルータがＰＤＳ１２へのデータ転送を可能にするに十分なピンを備えることだけが必要であるが、一方、パイプライン１６とＳＤＳ１４の間へのルータの配置はアドレスデータを送信するために更なるピンの具備を必要とする。図５に示すようにルータを配置することにより処理システムにおいて必要な接続数、即ちピン総数がかなり減る。これは回路基板の設備、コスト及び電力消費の顕著な低減と同等である。
【００８９】
実際には、図５に示すルータの作動はパラメータＷｒａｐＢａｓｅとＷｒａｐＬｉｍｉｔを設定することにより制御される。ＷｒａｐＢａｓｅとＷｒａｐＬｉｍｉｔはグローバルな位置ベクトル（これは隣がもつＳＤＳにおける物理的位置と言ってもよい）を修正するためにＳＤＭＣ１８により使用され、従ってそれは常にローカルＳＤＳ内の対応する位置を指す。ルータをイネーブルするビットはこの機能性を必要とする転送に対してＳＤＭＣ機能レジスタにおいて設定されねばならず、ルータはｘ、ｙ又はｚ方向のそれぞれにおいてローカルＳＤＳの境界を越えるアクセスに対して独立にイネーブルされねばならない。
【００９０】
ＷｒａｐＢａｓｅとＷｒａｐＬｉｍｉｔはまた特定のＳＤＭＣのＳＤＳがグローバルＳＤＳのどのサブセットを占有するかを指定する（即ち、各ＳＤＭＣ１８に特有のローカルＳＤＳを定める）。ＷｒａｐＢａｓｅ（ｘＷｒａｐＢａｓｅ、ｙＷｒａｐＢａｓｅ及びｚＷｒａｐＢａｓｅ）はローカルＳＤＳにおける一番目のボクセルに対応するグローバルボクセル座標を指定する。ＷｒａｐＬｉｍｉｔ（ｘＷｒａｐＬｉｍｉｔ、ｙＷｒａｐＬｉｍｉｔ及びｚＷｒａｐＬｉｍｉｔ）はローカルＳＤＳの限界に達するまでの各軸に沿って取れるボクセルステップ数を指定する。
【００９１】
ボリュームが多数のローカルＳＤＳ（それぞれはそれら自身のＳＤＭＣ１８とＰＤＳへの補助Ｉ−Ｏチャンネルを持つ）にわたって分割される場合、ｘＩｎｉｔ、ｙＩｎｉｔ及びｚＩｎｉｔ値は与えられたデータチャンネルのｘＷｒａｐＢａｓｅ、ｙＷｒａｐＢａｓｅ及びｚＷｒａｐＢａｓｅ値に呼応して供給されねばならない。
【００９２】
第一のＳＤＭＣ１８の必要なメモリアドレスがＷｒａｐＬｉｍｉｔより大きければ、必要なアドレスはＷｒａｐＬｉｍｉｔから減算され、第一のＳＤＭＣ１８は、より小さなローカル範囲のメモリアドレスを持つ隣接するＳＤＭＣのアドレスを第一のＳＤＭＣのローカルＳＤＳから戻すように設定され、このデータは、第一及び隣接するＳＤＭＣのルータの両方を介してルーティングすることにより隣接するＳＤＭＣのＰＤＳにルーティングされる。第一のＳＤＭＣ１８により必要とされるデータは他のＳＤＭＣのルータと第一のＳＤＭＣのルータを介して他の隣接するＳＤＭＣにより第一のＳＤＭＣのＰＤＳに戻される。
【００９３】
逆に、必要なメモリアドレスがＷｒａｐＬｉｍｉｔより小さければ、必要なアドレスはＷｒａｐＬｉｍｉｔに加算され、第一のＳＤＭＣは、それ自身のものより大きいローカルＳＤＳ範囲を持つ隣接するＳＤＭＣに戻されるデータをそのローカルＳＤＳから戻すように設定される。
【００９４】
図６ａ乃至６ｄはこの方式に基づいてサポートされるルータ２０に対するルーティングコンフィギュレーションを示す。示された例では、ルータ２０はデータロードサイクル（即ち、ＳＤＳからＰＤＳへの転送）の間動作するだけであることに注意のこと。これは、この例ではこの方式が、与えられた処理装置が隣接するデータ転送元からの「重複」データにアクセスしようとし、一般的にこれを、ローカル結果を計算するために使用する（即ち、それ自身のローカルＳＤＳに記憶する）だけであることを予測するからである。この制限は常に一般的な場合に適用する必要はない。
【００９５】
アルゴリズム（ハードウェアで実施される）により設定される他のパラメータは明確な境界のチェックのための上限及び下限、ＨａｒｄＢｏｕｎｄＨ及びＨａｒｄＢｏｕｎｄＬである。ＳＤＭＣ１８はデータが無効な場所に対して読み書きされないようにそれが計算したアドレスに対する境界チェックを行う。これは、それらのデータセットを多数のＳＤＳチャンネルにわたって分割し、隣のデータアクセスを採用する用途に特に有用である。この状況では、データセットの「端」を含むチャンネルはグローバルデータセットの外側にあるアドレスを必然的に発生する。
【００９６】
ＨａｒｄＢｏｕｎｄＨ（ｘＨａｒｄＢｏｕｎｄＨ、ｙＨａｒｄＢｏｕｎｄＨ及びｚＨａｒｄＢｏｕｎｄＨ）とＨａｒｄＢｏｕｎｄＬ（ｘＨａｒｄＢｏｕｎｄＬ、ｙＨａｒｄＢｏｕｎｄＬ及びｚＨａｒｄＢｏｕｎｄＬ）はＳＤＭＣ１８により計算されたグローバル位置ベクトルに課せられた「明確な」境界を指定する。明確な境界を越えたら、メモリに対する読み書きは発生せず、ＮｕｌｌＤａｔａ値が読みデータに代わって返される。
【００９７】
図５と図６で言及されるＳＤＭＣ１８は図７に示すようなコンフィギュレーションレジスタを有する。図８で言及されるＡｄｄｒｅｓｓＢａｓｅはローカルＳＤＳの初めから設定されるデータのオフセットである。これはＳＤＳ記憶装置内の単純なオフセットを表し、２−Ｄ又は３−Ｄデータセットサイズ、あるいはその座標系との特別な関係は持たない。
【００９８】
図５乃至７で言及される第二の実施例に使用するＳＤＭＣ１８の詳細なアーキテクチャを図８に示す。
【００９９】
このＳＤＭＣは特に第二の実施例に関するものであるけれども、第一の実施例での使用に直ちに適合することが出来る。
【０１００】
図８に示す回路に対して三つの主なユニットがあり、このユニットが次に論理平面ベクトルＲｏｗＩｎｃｒ及びＣｏｌＩｎｃｒのそれぞれのｘ、ｙ及びｚ成分の発生を担当する。上を要約すると、ＲｏｗＩｎｃｒ及びＣｏｌＩｎｃｒは論理平面内の単位ベクトルに関連し、論理平面は観察される実世界サンプルに対して任意の角度を成してよいので、ＲｏｗＩｎｃｒ及びＣｏｌＩｎｃｒは三つの軸全てに成分を持ち得る。詳細な回路はＲｏｗＩｎｃｒ及びＣｏｌＩｎｃｒの各ベクトル計算においてｘ成分の計算を担当するユニットに対してのみ示すが、他の二つのユニットは正確に同じ構成要素を備える。動作時に、全ての三つのユニットは全ての三つのユニットからの出力を含む一つの最終メモリアドレスを発生するために同時に動作する。
【０１０１】
パッチインデックス論理回路（図示せず）と呼ばれるカウント機構はｘ、ｙ及びｚ成分処理ユニットを駆動するクロック信号を供給し、これは既知の方法で直ぐに達成出来る。このカウント機構は論理平面の列と行にわたってインデックスを付けて列と行が幾つ処理されたかを追跡し、また列限界と行限界に到達したら処理を停止する。
【０１０２】
以下はＸ成分の計算を担当するユニットに関してのみ述べる。他のＹ成分及びＸ成分のユニットにおいて全く同じ処理が後に続く。カウント機構からの適当な信号により、ｘＣｏｌＩｎｃｒ多重化装置が、動作の開始時に初期化されるパラメータの一つであるＣｏｌＩｎｃｒの加算を開始する。
【０１０３】
｛ｘ，ｙ，ｚ｝パラメータ空間におけるグローバルアドレスを計算する主要モジュールはＲｏｗＩｎｃｒ及びＣｏｌＩｎｃｒオフセットを適用するために３２ビット固定小数点四則演算を利用する。最も効率的なやり方でこの概念を実行するために、本発明はローカルなＷｒａｐＢａｓｅ（ｘ，ｙ，ｚ）に対するチャンネルごとのＩｎｉｔ（ｘ，ｙ，ｚ）値を供給する。このようにして、全てのアドレス計算がローカルＳＤＳメモリに対して実際に成されるが、ＷｒａｐＢａｓｅオフセットをローカルアドレスに単純に加算することによりグローバルアドレス空間（即ち、明確な境界のチェックのために）に直ぐに作り直すことが出来る。
【０１０４】
ラップオフセットを適用するために、アドレスの整数部（ＷｒａｐＢａｓｅに対する）はＷｒａｐＬｉｍｉｔと比較される。アドレスがＷｒａｐＬｉｍｉｔより大きいか、あるいは０より小さいなら、ルータはそれぞれ右又は左の隣接するＰＤＳにデータを向け直すようにイネーブルされる。これらの条件の下ではアドレスルータを介して向けられず、厳密にローカルのままであるので、隣にルーティングされたデータにローカルアドレスを与えるように修正されねばならない。アドレスがＷｒａｐＬｉｍｉｔより大きければ、ＷｒａｐＬｉｍｉｔはローカルアドレスを計算するために減算される。アドレスが負なら、ローカルアドレスを計算するためにそれはＷｒａｐＬｉｍｉｔと再度合算される。
【０１０５】
あるいは、ルータネットワークが必要ないなら、グローバルアドレスは無修正でＳｃａｌ乗算器に送られる。
【０１０６】
次に明確な境界のチェックが実行される。アドレスはグローバルアドレスを計算するために先ずＷｒａｐＢａｓｅと合算され、次いでＨａｒｄＢｏｕｎｄ限界と比較される。
【０１０７】
その後、１でないボクセルサイズを考慮するために、アドレスがＳｃａｌｅファクターで乗算される。
【０１０８】
最後にｘ、ｙ及びｚ成分が組み合わされて最終ＳＤＳアドレスを発生する。これらの最終段階においてＡｄｄｒｅｓｓＢａｓｅオフセットが与えられる。
【０１０９】
これらのステップは論理平面の各行内の全ての点に対して繰り返される。行の終りに到達したら、カウント機構はｘＲｏｗＩｎｃｒ多重化装置に異なる信号を送ってｘＣｏｌＩｎｃｒに対してそのクロックサイクルにおいて計算されたアドレス値にＲｏｗＩｎｃｒを加算する。
【０１１０】
一旦これが加算されたら残りの手順は同じままである。必要な論理平面内の全ての点、あるいは論理平面のパッチが計算されるまで、点ごと、及び行ごとにこの手順は続けられる。
【０１１１】
ＡｄｄｒｅｓｓＢａｓｅの合算の直前に多重化装置を経由してメモリアドレス別の転送元がこの段階においてメモリアドレスを供給する（これはＡｄｄｒｅｓｓＭｅｍｏｒｙという用語で表される）。しかしながらこのことは、本設計についてフレキシビリティーを示し、現存のネットワーク設計とのより大きな適合性を与えるためにこの図のみに存在する。一例として、ＡｄｄｒｅｓｓＭｅｍｏｒｙ多重化装置で多重化される前にＳＤＭＣ１８のアドレス発生論理ユニットにより発生されたアドレスは連想処理装置又は連想処理装置配列で発生されたアドレスで置き換えることが出来、これがその代わりにメモリアドレスを発生し、これらをローカルＳＤＳに供給する。連想処理装置はベクトル処理装置であるので発生されたメモリアドレスは多重化装置に流される前に、更なるレジスタ又はキャッシュ（図示せず）にダンプされるが、これはメモリアドレスがメモリ記憶装置により直線的にしか扱えないからである。連想処理装置配列はメモリアドレスが多重化装置に流される前にアドレスをこのレジスタ又はキャッシュにダンプすることが出来る。
【０１１２】
この処理は図９に示すフローチャートで表され、これは座標軸の一つ、この場合Ｘ軸に対する処理を示すだけである。この処理の説明で示すように、三つ全ての軸において後続の点において計算されたメモリアドレスは合計されて最終グローバルメモリアドレスを作成する。
【０１１３】
論理平面パッチ上の一番目の点の座標、ｘＩｎｉｔ、ｙＩｎｉｔ及びｚＩｎｉｔは既知であり、初期化中に記憶される。図９に示す処理はデータ点の新しい行を計算すべきかどうかの決定を必要とするステップ５０で始まる。ＹＥＳならパッチインデックス論理ユニットがｘＲｏｗレジスタ内の値にＲｏｗＩｎｃｒを加算し、新しい値がｘＲｏｗレジスタに記憶される。これはステップ５２、５４及び５６のシーケンスにより表される。５０での決定が、論理平面上の新しい行が開始されていないということであったなら、処理はステップ５８に直接飛び、その場合、ステップ５８と６０で示すｘＣｏｌＩｎｃｒを加算することによりｘＣｏｌレジスタ値が修正される。
【０１１４】
実際には、論理平面上の点は行ごとに計算されるので、最も増加される回数の多いのは列増分ベクトルｘＣｏｌＩｎｃｒである。ＸＲｏｗＩｎｃｒは論理平面パッチ上の各新しい行の開始においてｘＲｏｗレジスタ値に加算されるだけである。
【０１１５】
各データ点に対してｘＲｏｗレジスタ値とｘＣｏｌレジスタ値がステップ６０において合算されてＭｅｍｏｒｙＡｄｄｒｅｓｓ（ＭＡ）を形成する。ＭＡはステップ６２において捨てられる端数部である。
【０１１６】
次に、ステップ６４においてＭＡの残りの整数部がＷｒａｐＬｉｍｉｔ（ＷＬ）と比較される。この比較ステップには三つの結果がある、即ち、ＭＡが０より小さいか、ＭＡがＷＬより大きいか、あるいは０＜ＭＡ＜ＷＬ。それぞれの三つの結果は６６、６８及び７０と付番される。
【０１１７】
６６が当てはまる場合、ルータは現在のＳＤＳより小さいアクセス可能なメモリアドレス範囲を持つ隣接するＳＤＳにローカルなＰＤＳにルーティングするように設定される（これは７２で示される）。６８が当てはまる場合、ルータは現在のＳＤＳより大きいアクセス可能なメモリアドレス範囲を持つ隣接するＳＤＳにルーティングするように設定される（７４で示すように）。図６ａと６ｂから分かるように、ルータが隣接するルータを介して隣接するＰＤＳにデータをルーティングするように設定されるときに、ルータはそれと同時に他の隣接するルータから戻されたローカルＰＤＳデータの中に受けられるようにセットアップする。
【０１１８】
条件０＜Ｍ＜ＷＬが当てはまる（ステップ７０）ためにルータが全く作動されない場合、ルータは７６においてパスモードに設定され、ＭＡが８８において加算ステップに直接送られる。
【０１１９】
７２と７４に戻って言及すれば、７２の後に、ＭＡ（これもやはりグローバルＭＡである）はＷＬに加算されて修正されたローカルＭＡ７８を作成し、７４の後に、ＷＬがグローバルＭＡから減算されて修正されたローカルＭＡ８０を作成する。
【０１２０】
７８又は８０から続くＭＡはＨａｒｄＢｏｕｎｄチェックステップ８２を通り、ＨＢｏｕｎｄＬ≧ＭＡ≧ＨＢｏｕｎｄＨが当てはまれば修正されたローカルＭＡは境界の外側にある（ステップ８４）。他の場合は全て、８６が当てはまると見なされ、ＭＡが８８まで行き、対応するＹ軸及びＺ軸論理ユニットにより発生されたＭｅｍｏｒｙＡｄｄｒｅｓｓに加算される。
【０１２１】
８８の後に、ステップ９０においてＡｄｄｒｅｓｓＢａｓｅ（ＡＢ）がメモリに加算され、その後、ルータがパスするように設定されているかどうかをチェックステップ９２が判断する。ルータがパスするように設定されていたら、ＭＡはローカルＳＤＳに送られてステップ９６においてルータを介してデータを戻す（この場合データをローカルＰＤＳに戻す）。
【０１２２】
ルータがパスするように設定されていなかったら、９４においてハンドシェークステップが作動され、各ＳＤＭＣは隣接するＳＤＭＣの準備が出来かつ個々のルータを介するＳＤＭＣ間のデータ転送に対して同期されるまで待つ。このハンドシェークステップは以下にもっと詳細に述べる。
【０１２３】
ハンドシェークステップが一旦完了したら、ＭＡはローカルＳＤＳに送られてステップ９６においてルータを介してデータを戻し、この場合データは隣接するローカルＰＤＳに戻される。
【０１２４】
９８においてデータがＰＤＳにより受け取られた後、パッチの最後に達するか、転送長さを越える（この場合ＳＤＭＣは待機状態に入る）かしない限りステップ５０において処理が再開される。
【０１２５】
上記のハンドシェークステップは全てのＳＤＭＣが同期してそれらの間でデータを転送することを保証することになっている。前に述べたように、ＳＩＭＤシナリオにおいてこの方法は始めて動作する。そのローカルＳＤＳから隣接するＰＤＳへのデータの転送が必要であることを理解したら、各ＳＤＭＣは、データのルーティング先である隣接するＳＤＭＣに通知信号を送る。隣接するＳＤＭＣは適当な時点で通知信号を検出し、受領確認信号を返す。それと同時に、他の隣接するＳＤＭＣは第一のＳＤＭＣに通知信号を送り、受領確認信号を受け取るのを待っている。こうして、第一のＳＤＭＣが受領確認を受け取り、受領確認信号を送るや否や、それは、次のクロックサイクルにおいてＳＤＭＣ間データ転送を開始する準備が出来たことを知る。
【０１２６】
そのクロックサイクルの間、配列内の全てのＳＤＭＣはおとなしくしており、ＳＤＭＣ間データ転送の開始を準備及び待機をしている。もちろん、ハンドシェーク処理を完了するためにかかる時間は配列に採用されたＳＤＭＣの数と共に増加し、ＳＤＭＣが多すぎて一つのクロックサイクルのスペースでハンドシェークを完了出来ない場合、制御用ＣＰＵはこのことについて通知され、ＳＤＭＣ間のデータ転送をさせる前に全てのＳＤＭＣに対してハンドシェークを完了するために必要な数のクロックサイクルが経過するようにする。
【０１２７】
配列の端にあるＳＤＭＣに対して両端のＳＤＭＣ間のハンドシェークをイネーブルするリンクがあり、それにより、事実上、ハンドシェークステップに関して最初及び最後のＳＤＭＣを持つラインとは反対のＳＤＭＣの円がある。
【０１２８】
本発明の更なる実施例において、ＳＤＭＣ１８が、関連する並列処理装置に接続される以外は、ハードウェア構成は第二の実施例に類似している。第三の実施例の処理システムの動作は図１０に示すフローチャートにより表される。ＣＰＵによる初期化において、ＣＰＵはそれぞれステップ１００と１０２で示す初期命令を用いてＳＤＭＣ１８及び関連する処理装置の両方を設定する。ＳＤＭＣ１８は一連のメモリアドレスの転送と、これらのメモリアドレス計算の実行に必要なパラメータとを用いて設定される（ステップ１００）。ステップ１０２において、関連する処理装置は処理装置機能列（従来の処理装置言語シナリオにける手順又は機能の呼び出しに類似している）を用いて設定される。初期化段階が完了したら、ステップ１０４においてＣＰＵが開始信号を送り、ステップ１０６においてＳＤＭＣ１８が列を成すメモリアドレスの処理を開始し、各メモリアドレスをローカルＳＤＳに出力し、１０８において、要求されたデータがＰＤＳにあることを関連する処理装置に通知する。処理装置がＰＤＳ内のデータを処理した後に、処理済みデータを再びＰＤＳに戻し（ステップ１１０）、１１２において、処理済みデータがＰＤＳに存在し、ＳＤＭＣがそれを他の場所に移動する準備が出来ていることをＳＤＭＣに通知する。この場合、ステップ１１４においてＳＤＭＣはデータをＳＤＳに戻す。
【０１２９】
各データパッチが処理された後に、１１６において、処理装置はＳＤＭＣとハンドシェークし、実行すべき命令が残っているかどうかを問い合わせる。もしそうであれば、処理は１０６に戻って処理サイクルを続ける。ＳＤＭＣが処理すべき更なる命令がなくなれば、１１８において、それが次の命令バッチを受ける準備が出来ているという状態フラッグを設定する。明らかなように、このセットアップには固有の拡張性が組み込まれている。
【０１３０】
説明しない他のシナリオは、関連する処理装置がデータを処理し、データをＳＤＭＣに対するＰＤＳにダンプして、ＳＤＭＣがデータを処理する必要が全くなしに別のデータ記憶装置に移動し、それを先ずＰＤＳに移動するというものを含む。代わりのシナリオはＳＤＭがＰＤＳからデータを移動することを必要とせずに、データを処理しまたそれをＰＤＳに移動することのみを必要とする。
【０１３１】
処理装置、特に並列処理装置に密接に関連付けられたＳＤＭＣ１８の説明したシナリオにおいて、本発明の更なる恩恵が得られる。必要なデータが処理装置のレジスタに必要な時にロードする準備が出来ていることは並列処理装置とって重要であり、ＳＤＭＣ１８を採用してデータをレジスタに接続されたＰＤＳに移動することにより、データがＰＤＳにおいて利用可能になるのを待たなくても、ＰＤＳに十分なデータがあって処理装置が全速力で動作出来るようにする。
【０１３２】
上記のパラメータは、説明したアルゴリズムを実行するためにＳＤＭＣ１８の中にハードウェアで作成される。本実施例において、このＳＤＭＣ１８の応用は特に２−Ｄ及び３−Ｄ画像の処理に適用可能である。もちろん、他で述べたＳＤＭＣ１８の別の応用にもっと適した他のアルゴリズムは異なったハードウェア作成のパラメータを利用してもよい。データセットに与えられるベクトル命令セットを必要とするどのような大きなデータセットも、データセットを一連の小さな断片に分解し、各データ断片を個々のＳＤＭＣ１８（及び関連するＳＤＳ）に割り当て、初期化パラメータを用いて各ＳＤＭＣ１８を設定することによりこの発明に特に適用可能であることは以上の説明から明らかである。
【０１３３】
本発明の特に好ましい実施例を説明したが、問題の実施例は例示に過ぎず、添付された特許請求項に記載された発明の精神と範囲から逸脱することなく、適当な知識と技能を有するものが思いつくような変形と修正を成し得ることは言うまでもない。例えば本発明はＳＩＭＤ技術に限定されず、如何なるデータ並列処理技術にも適用出来る。
【図面の簡単な説明】
【０１３４】
【図１】図１は、先行技術のＤＭＡの例を示す模式的ブロックダイヤグラムである。
【図２】図２は、発明の第一の実施例による処理システムを示す模式的ブロックダイヤグラムである。
【図３】図３は、ｚ軸に直交するボクセルデータの任意の矩形パッチの代表であり、図２の処理システムに使用される異なる初期化パラメータを図解する。
【図４】図４は、ＭＰＥＧプログラム計算を決定する現行実施例の具現化候補の例を示す。
【図５】図５は、主データ記憶装置とルータを有する「補助データ移動コントローラ（ＳＤＭＳ）」を備える本発明の第二の実施例を示す模式的ブロックダイヤグラムである。
【図６】図６ａ〜図６ｄは、図５におけるルータのルータコンフィギュレーション候補を示す模式図である。
【図７】図７は、第二の実施例のＳＤＭＣ制御と状態レジスタを示す表である。
【図８】図８は、図５のＳＤＭＣの詳細なアーキテクチャを示す。
【図９】図９は、図８に示すアーキテクチャに利用されるデータパスのフローチャートである。
【図１０】図１０は、関連する処理装置を有するＳＤＭＣを備える本発明の代わりの実施例において使用される処理のフローチャートである。
【図１】
2005514677.tif 000003
【図２】
2005514677.tif 000004
【図３】
2005514677.tif 000005
【図４】
2005514677.tif 000006
【図５】
2005514677.tif 000007
【図６ａ】
2005514677.tif 000008
【図６ｂ】
2005514677.tif 000009
【図６ｃ】
2005514677.tif 000010
【図６ｄ】
2005514677.tif 000011
【図７】
2005514677.tif 000012
【図８】
2005514677.tif 000013
【図９】
2005514677.tif 000014
【図１０】
2005514677.tif 000015
【国際調査報告】
2005514677.tif 000016
2005514677.tif 000017
2005514677.tif 000018
2005514677.tif 000019
2005514677.tif 000020