(57)【要約】  ビットプレーンリソースを管理するためのシステム及び方法が提示されている。ＳＩＭＤアーキテクチャでは処理要素（ＰＥ）メモリが不足しているため、最適な効率でＰＥメモリを使用することが重要である。本発明では、ほぼ１００％に近い使用率を達成できるように、ランタイム時のＰＥメモリの管理方法を開示する。この方法を採用すると、シングルビットプレーン刻みでメモリの割り当て及び割り当て解除を行うことができる。ランタイムの割り当て及び割り当て解除は連続して行われるため、ＰＥメモリの連続ブロックの可用性を保証することが不可能である。本発明で採用する方法によれば、散在したビットプレーンを使用することができ、「ガベージコレクション」に実行時間を費やす必要がなくなる。
2008515033.tif 000002
【特許請求の範囲】
【請求項１】
デジタルデータ処理システムであって、
（ａ）ビットプレーンデータを処理するのに適した、アドレス指定可能なデータ格納手段を備えた処理要素のアレイと、
（ｂ）物理的なアドレスを格納するための格納手段を備えた割り当てテーブルと、
（ｃ）仮想アドレス属性及びサイズ属性を備えた画像記述子を伝達するための手段とを有し、
前記仮想アドレス及びサイズにより割り当てテーブル位置の範囲が指定され、画像を含む前記ビットプレーンの前記物理的なアドレスが格納される、デジタルデータ処理システム。
【請求項２】
前記割り当てテーブルの格納位置の数が処理アレイを有するビットプレーンの数を超える、請求項１に記載のシステム。
【請求項３】
前記画像記述子が、画像を符号付きデータとして処理するかどうかを示す符号属性を更に有する、請求項１に記載のシステム。
【請求項４】
ビットプレーンの処理を制御するシーケンサを前記プロセッサアレイ内に更に有し、前記シーケンサは少なくとも１つの画像記述子に対して一続きの少なくとも１個のマイクロ命令を生成し、前記マイクロ命令は前記割り当てテーブル内に格納された物理アドレスに対して生成される少なくとも１つのビットプレーンアドレスを含んでいる、請求項１に記載のシステム。
【請求項５】
前記割り当てテーブルが複数の同時アクセスを提供するように構成される、請求項１に記載のシステム。
【請求項６】
前記アレイが複数のセグメントに分割されて各々のセグメントが複数のビットプレーンを有するとともに、前記割り当てテーブルが対応するセグメントに分割されて各々の割り当てテーブルセグメントが前記アレイセグメントの１つに関連する物理アドレスを格納するための格納手段を有する、請求項１に記載のシステム。
【請求項７】
ビットプレーンを画像に割り当てるための第１の割り当て手段を更に提供し、前記第１の割り当て手段は使用可能なビットプレーンを示す物理アドレスのリポジトリを有し、前記割り当てはリポジトリからの物理アドレスの読み取りと前記割り当てテーブルへの物理アドレスの書き込みとを含む、請求項１に記載のシステム。
【請求項８】
前記リポジトリがＦＩＦＯメモリである、請求項７に記載のシステム。
【請求項９】
前記処理アレイが複数のセグメントに分割されて各々のセグメントが複数のビットプレーンを有するとともに、前記リポジトリが対応するセグメントに分割されて各々のリポジトリセグメントが前記アレイセグメントの１つの物理アドレスを格納するための格納手段を有する、請求項７に記載のシステム。
【請求項１０】
ビットプレーンが割り当てられていない、取り込まれていない画像にビットプレーンを割り当てるための第２の割り当て手段を更に有し、前記第２の割り当て手段は、サイズ属性がゼロである画像記述子に対して前記割り当てを実行し、更に「新しいサイズ（ｎｅｗｓｉｚｅ）」と称されるサイズ制御信号に応答するものであり、前記新しいサイズによって割り当てるビットプレーン数が決定される、請求項７に記載のシステム。
【請求項１１】
複数のビットプレーンが割り当てられている部分的に取り込まれた画像にビットプレーンを割り当てるための第３の割り当て手段を更に有し、前記第３の割り当て手段は、画像記述子に応じて割り当てを実行し、更に新しいサイズと称されるサイズ制御信号に応答し、前記画像が新しいサイズ数のビットプレーンで取り込まれるように追加のビットプレーン数を割り当てる、請求項７に記載のシステム。
【請求項１２】
割り当てテーブル位置数と数において等しいレジスタのアレイを備えたスコアボード（Ｓｃｏｒｅｂｏａｒｄ）を更に有し、前記対応する割り当てテーブル位置が取り込まれているかどうかを示すように各々のレジスタが適合されている、請求項７に記載のシステム。
【請求項１３】
取り込まれた割り当てテーブル位置に対して割り当てが試行されているという状態を検出して、前記状態を示す信号を生成するための検出手段を更に有し、前記信号に応答して、前記状態が検出されなくなるまで割り当てを回避するための応答手段を更に有する、請求項１２に記載のシステム。
【請求項１４】
取り込まれた割り当てテーブル位置に対して割り当てが試行されているという状態を検出して、前記状態を示す信号を生成するための検出手段を更に有し、前記信号に応じてイベントレジスタを設定するための手段を更に有する、請求項１２に記載のシステム。
【請求項１５】
前記割り当てテーブルが複数のセグメントに分割されて各々のセグメントが複数の記憶位置を有するとともに、前記スコアボードが対応するセグメントに分割されて各々のスコアボードセグメントが、前記割り当てテーブルの対応するセグメント内の位置の割り当てステータスを示すように適合されたレジスタのアレイを有する、請求項１２に記載のシステム。
【請求項１６】
画像のビットプレーンを割り当て解除するための第１の割り当て解除手段を更に提供し、前記第１の割り当て解除手段は、使用可能なビットプレーンを示す物理アドレスのリポジトリを有し、前記割り当て解除が前記割り当てテーブルからの物理アドレスの読み取りと前記リポジトリへの前記物理アドレスの書き込みとを含む、請求項１に記載のシステム。
【請求項１７】
前記リポジトリがＦＩＦＯメモリである、請求項１６に記載のシステム。
【請求項１８】
前記処理アレイが複数のセグメントに分割されて各々のセグメントが複数のビットプレーンを有するとともに、前記リポジトリが対応するセグメントに分割されて各々のリポジトリセグメントが前記アレイセグメントの１つの物理アドレスを格納するための格納手段を有する、請求項１６に記載のシステム。
【請求項１９】
取り込まれた画像のビットプレーンを割り当て解除するための第２の割り当て解除手段を更に有し、前記第２の割り当て解除手段は、画像記述子に応じて前記割り当て解除を実行し、更に解放制御信号に応答するものであり、前記解除制御信号により、前記画像の全てのビットプレーンの割り当て解除を行うべきであることが示される、請求項１６に記載のシステム。
【請求項２０】
取り込まれた画像のビットプレーンを割り当て解除するための第３の割り当て解除手段を更に有し、前記第３の割り当て解除手段は、画像記述子に応じて割り当て解除を実行し、更に「新しいサイズ」と称されるサイズ制御信号に応答して、新しいサイズ数のビットプレーンで前記画像が取り込まれるように複数のビットプレーンの割り当て解除を行う、請求項１６に記載のシステム。
【請求項２１】
割り当てテーブル位置数と数において等しいレジスタのアレイを備えたスコアボードを更に有し、前記対応する割り当てテーブル位置が取り込まれているかどうかを示すように各々のレジスタが適合された、請求項１６に記載のシステム。
【請求項２２】
取り込まれていない割り当てテーブル位置に対して割り当て解除が試行されているという状態を検出して前記状態を示す信号を生成するための検出手段を更に有し、前記信号に応答して前記状態が検出されなくなるまで前記割り当て解除を回避するための応答手段を更に有する、請求項２１に記載のシステム。
【請求項２３】
取り込まれていない割り当てテーブル位置に対して割り当て解除が試行されているという状態を検出して前記状態を示す信号を生成するための検出手段を更に有し、前記信号に応じてイベントレジスタを設定するための手段を更に有する、請求項２１に記載のシステム。
【請求項２４】
前記割り当てテーブルが複数のセグメントに分割されて各々のセグメントが複数の記憶位置を備えるとともに、前記スコアボードが対応するセグメントに分割されて各々のスコアボードセグメントが前記割り当てテーブルの対応するセグメント内の位置の割り当てステータスを示すように適合されたレジスタのアレイを備える、請求項２１に記載のシステム。
【請求項２５】
少なくとも１つの画像記述子を含む命令を処理するための処理手段を更に有し、前記命令を処理した結果として、画像を取り込むためのビットプレーンの数を決定する「新しいサイズ」と称されるサイズ制御を更に有する、請求項１に記載のシステム。
【請求項２６】
前記サイズ属性を格納されている前記画像記述子のコピーの新しいサイズ値と置換するための置換手段を更に有する、請求項２５に記載のシステム。
【請求項２７】
少なくとも１つの画像記述子を含む命令を処理するための処理手段を更に有し、前記命令を処理した結果として、画像が取り込まれている全てのビットプレーンを割り当て解除すべきかどうかを決定する少なくとも１つの解放制御を更に有する、請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＳＩＭＤ並列処理、特に、ビットプレーンリソースの割り当てに関する。
【背景技術】
【０００２】
最高レベルの並列性を誇る並列処理アーキテクチャは、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）方式に準拠し、最も簡単に実現可能な処理要素（ＰＥ）構造であるシングルビット算術プロセッサを採用したものである。各ＰＥの処理スループットは非常に低いものの、ＰＥロジックの単純さは、非常に多数のＰＥから成るプロセッサアレイの構築をサポートする。非常に高い処理スループットは、このような多くのＰＥをＳＩＭＤプロセッサアレイに結合することで実現される。
【０００３】
ビットシリアルＳＩＭＤアーキテクチャのバリアントは、ＰＥが２Ｄメッシュとして接続され、各々のＰＥがアレイのすぐ北、南、東、西の４つのネイバーと通信を行うものである。この２Ｄ構造は、画像ピクセルデータ等の２Ｄ構造を有するデータの処理に適しているが、これだけに限られるものではない。
【発明の開示】
【課題を解決するための手段】
【０００４】
本発明の一様態では、
−ビットプレーンデータを処理するのに適した、アドレス指定可能なデータ格納手段を有する処理要素のアレイと、
−物理的なアドレスを格納するための格納手段を有する割り当てテーブルと、
−仮想アドレス属性及びサイズ属性を含む画像記述子を伝達するための手段とを有し、
前記仮想アドレス及びサイズにより割り当てテーブル位置の範囲が指定され、画像を含むビットプレーンの物理的なアドレスが格納される、デジタルデータ処理システムを提供する。
【０００５】
本発明の実施形態の各種様態及び利点の詳細については、以下の説明及び添付の図面で明らかにする。
【発明を実施するための最良の形態】
【０００６】
本発明はデジタルデータ、特にデジタル画像のピクセルデータの並列処理に関する。ここで開示される実施形態は画像ピクセルデータの特定のケースに関連しているものの、本発明の趣旨及び範囲から逸脱しなければ、ピクセルデータはいずれかのデジタルデータと置き換えることができるものと理解されたい。
【０００７】
本発明は並列プロセッサの一部である。プロセッサは、処理要素（ＰＥ）のアレイ、順序制御ロジック、ピクセル入力／出力ロジックを有する。アーキテクチャはＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）で、単一命令ストリームが全てのＰＥによる実行を制御し、全てのＰＥが各命令を同時に実行する。ＰＥのアレイはＳＩＭＤアレイと呼ばれ、並列プロセッサ全体はＳＩＭＤアレイプロセッサと呼ばれる。
【０００８】
ＳＩＭＤアレイは処理要素のメッシュ接続アレイである。各処理要素（ＰＥ）は、１ビットデータを処理するために、メモリ、レジスタ、及び計算ロジックを有する。本発明の例示した実施形態では、アレイは４８行×６４列のＰＥを有する。ＳＩＭＤアレイがＳＩＭＤアレイプロセッサのロジックの大半を構成し、ピクセルデータのほとんど全ての計算を行う。
【０００９】
各ＰＥ１００は、１ビットデータを処理するために、メモリ、レジスタ、及び計算ロジックを有する。具体的に図１を参照すると、例示したＰＥ１００は１ビットデータを処理するために、ＰＥ  ＲＡＭ１１０と、ＡＬＵ１０１と、ロジックブロックＡ１２０及びＢ１３０と、レジスタＣ１４０、Ｄ１５０、ＮＳ１６０、ＥＷ１７０、ＡＬ１８０、ＢＬ１９０、及びＣＭ１０５とを有する。
【００１０】
ＰＥ  ＲＡＭ１１０は実際には各ＰＥに対し１ビット幅で、ＰＥによる処理のためにピクセルデータを格納する。マルチビットピクセル値は、ＲＡＭ１１０に格納された複数ビットで表現される。マルチビットオペランドの演算は、オペランドピクセルの対応するビットを順番に処理することで行われる。この例示の実施形態では、ＲＡＭ１１０はサイクル当たり最大２回の読み込みと１回の書き込みを行う。この読み込みと書き込みの組み合わせは、デュアルポートＲＡＭの２つのバンク（バンク当たり１回の読み込みと１回の書き込み）を有する「セグメント化」されたＲＡＭの使用によってサポートされる。この２つのバンクは各々１２８ビット幅で、ＰＥ当たり合計２５６ビットになる。セグメント化されたＲＡＭ方式により、ソースオペランドが反対のセグメントにある場合に、サイクル当たり２回の読み込みと１回の書き込みアクセスが可能になる。別の実施形態では、２５６ビット幅の３ポートＲＡＭが、ソースオペランドの配置に関係なく、同じアクセスを提供する。その他の実施形態では、他のマルチアクセス方式（１回の読み込みと１回の書き込み等）を採用してもよいし、あるいはサイクル当たり１つの読み込み又は書き込みアクセスを実現してもよい。
【００１１】
１つの例示したＰＥアレイ１０００は、図２に示すように、４８行×６４列のＰＥを有する。ピクセルには、アレイの北西コーナーである０、０から南東コーナーである４７、６３へ番号が付けられる。
【００１２】
処理時には、アレイの全てのＰＥが各演算ステップを同時に実行する。オペランドビットのあらゆる読み込み又はあらゆる書き込み、ＰＥレジスタ間でのビットのあらゆる移動、あらゆるＡＬＵ出力が、アレイのあらゆるＰＥによって同時に行われる。この動作パターンを説明する上で、対応する画像ビットをまとめて考えるのが有用である。対応する画像ビットのアレイサイズの集合を「ビットプレーン」と呼ぶ。（シリアルな）命令ストリームという見地からすると、ＳＩＭＤアレイ演算はビットプレーン演算としてモデリングされる。
【００１３】
この例示の実施形態における各命令は、ビットプレーンの流れ又は処理を指令するコマンドを有する。各レジスタリソースにつき１つずつ、ＰＥ  ＲＡＭ書き込みポート用に１つ、更にＡＬＵ１０１による処理を制御するための追加フィールド等、複数のコマンドフィールドを単一命令に取り込んでもよい。この方式は、１回の処理サイクルのアレイ制御を提供するアレイ命令のための従来のマイクロ命令の実現方法である。
【００１４】
例示したＰＥアレイ１０００は階層構造の実現方法であり、ＰＥがＰＥグループ（ＰＥＧ）に分割される。各ＰＥＧ２００は、８×８アレイセグメントを表現する６４個のＰＥを有する。このため、４８×６４のＰＥアレイ１０００は、各々の行が８つのＰＥＧから成る、６行のＰＥＧによって実現される。ＰＥ−ＰＥ間の通信がＰＥＧ境界をまたいで提供されるよう、各々のＰＥＧ２００が隣接するＰＥＧと結合される。この結合はシームレスであるので、ビットプレーン演算という見地からすると、ＰＥＧの分割は目に見えない。これらのアレイ次元は単なる例示に過ぎず、本発明の趣旨から逸脱しない範囲で、本発明に従い、これ以外のサイズを実現できることに注意する必要がある。
【００１５】
例示したＰＥＧ２００は、６４ビット幅のマルチアクセスＰＥ  ＲＡＭ２１０と、ＰＥＧ制御ロジック２３０と、ＰＥアレイ２０２の６４個のＰＥを構成するレジスタ及び計算ロジックとを有する。ＰＥ  ＲＡＭ２１０の各ビットスライスは６４個のＰＥのうちの１つのＰＥと結合され、各ＰＥに実質１ビット幅のＰＥ  ＲＡＭ１１０を提供する。
【００１６】
東西南北のネイバーとの通信に加え、例示したＰＥＧ各々は、ＰＥアレイ２０２との間でピクセルデータを出し入れするための８ビットの入出力パスを含む。ＣＭレジスタプレーンが、入出力時のビットプレーンデータの処理を行う。ＰＥアレイ１０００との間ではビットプレーン形式でデータが出し入れされる。
【００１７】
上記したＰＥアレイは、ピクセルデータの演算を行うための計算ロジックを提供する。これらの演算を行うために、ＰＥアレイでは、アレイとの間でピクセルデータを出し入れするための命令ソース及びサポートが必要となる。
【００１８】
例示したＳＩＭＤアレイプロセッサ２０００を図５に示す。ＳＩＭＤアレイプロセッサ２０００は、命令のストリームをＰＥアレイ１０００に提供するアレイシーケンサ３００を含む。また、ＰＥアレイ１０００との間でのピクセルデータの出し入れを制御するために、ピクセルＩ／Ｏユニット４００も提供される。これらのユニットがまとまって、ＳＩＭＤアレイプロセッサ２０００を構成する。
【００１９】
ＳＩＭＤアレイプロセッサ２０００は、アレイサイズの画像セグメントでアルゴリズムを実行するために採用してもよい。このプロセッサは集積回路装置上に実現しても、又はより大きなシステムの一部として単一の装置に実現してもかまわない。どちらの実現方法でも、ＳＩＭＤアレイプロセッサ２０００は、システム制御プロセッサ（ここでは「ＣＰＵ」と呼ぶ）に従属する。ＳＩＭＤアレイプロセッサ２０００とＣＰＵとの間のインターフェースによって、ＣＰＵは、例示したＳＩＭＤアレイプロセッサ２０００の初期設定及び制御を行えるようになる。
【００２０】
ピクセルＩ／Ｏユニット４００は、「Ｉｍｇ  Ｂｕｓ」と呼ばれる画像バスを介してＰＥアレイ１０００と外部記憶装置との間でピクセルデータを移動するための制御を提供する。ピクセルデータの移動は、ＰＥアレイの計算と同時に行われるため、ピクセルデータを処理するためのスループットが向上する。ピクセルＩ／Ｏユニット４００は、ピクセル形式とビットプレーン形式間の画像データの変換を行う。Ｉｍｇ  Ｂｕｓデータはピクセル形式、ＰＥアレイデータはビットプレーン形式であり、これらの形式間でのデータの変換はＩ／Ｏプロセスの一部としてピクセルＩ／Ｏユニット４００によって行われる。
【００２１】
ＳＩＭＤアレイプロセッサ２０００は、「サブフレーム」と呼ばれるアレイサイズのセグメント内の画像データを処理する。一般的なシナリオでは、処理される画像フレームはＰＥアレイ１０００の次元よりもはるかに大きい。画像フレームの処理は、画像フレームが全て処理されるまで、サブフレームの画像セグメントを順番に処理することで実現される。
【００２２】
ＰＥアレイ１０００によるサブフレーム処理の制御は、シーケンサユニットの階層構造によって提供される（図６）。これらのユニットは、アプリケーションの実行順序を決定し、画像演算（別名「プリミティブ」）をプリミティブシーケンサ３４０にディスパッチするプログラムシーケンサ３３０と、各プリミティブ演算の実行順序を決定し、個々のビット演算をオーバーレイユニット３５０にディスパッチするプリミティブシーケンサ３４０と、ビット演算のマイクロ命令フィールドを適切なパイプステージにスケジュールし、コマンドの競合を解決するオーバーレイユニット３５０とを含む。オーバーレイユニット３５０の出力は、サブフレーム演算を実行するためにＰＥアレイのクロック間制御を提供する一続きのマイクロ命令である。
【００２３】
プログラムシーケンサ３３０は、見た目的には従来のままの機械語命令セットを実現して、ＳＩＭＤコアに対して順序制御及び各種のサポートを提供し、命令を「プリミティブ演算」の形でプリミティブシーケンサ３４０にディスパッチする。プリミティブ演算は、特定のマイクロ命令（又はマイクロ命令と相応の派生物）が一続きの連続したメモリアドレスに対して繰り返される、つまり各オペランドビット（プレーン）に繰り返されるものである。画像のＡＤＤ等の基本的なアレイ演算は、１つのプリミティブ演算で実現することができる。
【００２４】
プリミティブモデルは、開始アドレスから始まり、ＰＥ  ＲＡＭの先頭プレーンに続く所定の数のビットプレーンに及ぶビットプレーンの集合として画像オペランドを定義する。画像を構成するビットプレーンの数を画像の「サイズ」と呼ぶ。各々の画像は、各ピクセル値のビットパターンを符号付きデータ（ｓｉｇｎ＝１）として解釈するのか、符号なしデータ（ｓｉｇｎ＝０）として解釈するのかを示す「符号」属性も持つ。これらの属性はまとめて、図７に示すように、「画像記述子」として知られている。これらの実施形態で与えられるサイズは単なる例示に過ぎず、本発明の範囲を逸脱しなければ、異なるいかなるサイズにでもスケーリングできることに注意されたい。
【００２５】
画像記述子はプログラムシーケンサ３３０内のレジスタセットに記憶（処理のため）され、プログラム命令ではレジスタ番号で参照される。画像オペランドで演算を行う前に、オペランド記述子をプロセッサのレジスタにロードする必要がある場合もある。プログラムシーケンサ３３０は、ＰＥアレイ１０００で使用される３つの画像オペランド（ソース２つ、デスティネーション１つ）の記述子情報と２４ビットのプリミティブ命令語を提供することで、プリミティブ演算をプリミティブシーケンサ３４０にディスパッチする。
【００２６】
プリミティブシーケンサ３４０によるプリミティブ演算の順序制御は、結果が記憶された状態の２つのソースオペランド画像のデスティネーションオペランド画像への追加によって説明できる。この３つのオペランドは各々画像記述子によって表現される。最初のビット演算は各ソースオペランドに対してビット０を加算し、この結果をデスティネーションオペランドのビット０に格納する。画像オペランドの各ビットプレーンのアドレスは、対応する画像記述子のベースアドレス値から導き出される。プリミティブシーケンサ３４０が、３つのオペランドのビットプレーンアドレスと２４ビットのプリミティブ命令語を有するビット演算をオーバーレイユニット３５０にディスパッチする。プリミティブシーケンサ３４０の処理が進むと、各記述子のアドレスフィールドがインクリメントされ、次のビット（ビット１等）のオペランドアドレスが提示される。デスティネーションのサイズに対応するビットが処理された時点で、演算の順序制御が終了する。デスティネーションのサイズがソースオペランドのサイズを超えた場合は、ソース記述子の符号属性を使用して、ソースオペランドについて符号拡張するのかゼロ充填するのかを決定する。
【００２７】
オーバーレイユニット３５０はビット演算を処理し、アレイで実行されるＰＥマイクロ命令語を生成する。ビット演算は、適切なパイプラインスロット内でスケジューリングする必要があるマイクロ命令コマンドを有する。オーバーレイユニット３５０がこのスケジューリングタスクを行い、マイクロ命令の内部競合を解決する。オーバーレイユニット３５０からＰＥアレイ１０００のＰＥＧにＰＥマイクロ命令が送られ、実行される。
【００２８】
プログラマにとっては、画像はＰＥ  ＲＡＭの一続きの連続したビットプレーンとしてモデリングされる。画像記述子６００はベースアドレスとサイズ属性を提供し、これは、画像がベースアドレスから上方に連続したアドレスを占有することを示す。例示した実施形態では、これは全体像のほんの一部に過ぎない。
【００２９】
画像がやりとりされるのはアルゴリズムの実行中であるため、ガベージコレクションを用いずにはＰＥ  ＲＡＭを最大限利用することが難しい。プログラマ及びソフトウェアツールの作成者は、ＰＥ  ＲＡＭの無駄な使用（使用可能なメモリのうち、使用できない小さなメモリブロックの急増に起因）か、散乱しているビットプレーンを回収して使用可能な画像ブロックを作り出すための実行時間のロスのどちらかの選択を迫られる。ＰＥ  ＲＡＭと実行時間はどちらもＳＩＭＤコアプログラマにとっては貴重であるので、本発明では、ガベージコレクションを伴わずにＰＥ  ＲＡＭの最適な利用をサポートするための手段がＳＩＭＤコアに組み込まれている。
【００３０】
画像記述子６００には、画像のベースアドレスを表すために、９ビットベースのアドレスコンポーネントが含まれる。ベースアドレス値は５１２個のビットプレーン領域に及び、下位の２５６個はＰＥ  ＲＡＭセグメント０用で、上位の２５６個はセグメント１用である。例示した実施形態で使用可能な物理的記憶領域は各セグメントにつき１２８個のＰＥ  ＲＡＭプレーンであるので、これは仮想領域である。この仮想領域内では、画像は連続するビットプレーンブロックとして表現される。常に、仮想領域の各セグメント内の最大１２８個の位置を取り込むことができる。
【００３１】
必要に応じ、随時、ＰＥ  ＲＡＭプレーンが画像に割り当てられる。常に、画像は画像のピクセル値の範囲を表現するために最低限必要とされるビットプレーン数に割り当てられている必要がある。演算のデスティネーションとなる画像では、演算結果を収容するために、サイズの調整が必要となることがある。この調整は、デスティネーションオペランドに対して「新しいサイズ」と呼ばれるサイズ制御値を指定することで実現される。また、ソース画像オペランド全体を「解放」、つまり割り当て解除することもできる。割り当て及び割り当て解除の制御については、本開示で詳しく後述する。
【００３２】
仮想領域はルックアップテーブルによって管理され、図８では割り当てテーブル７００がこれに当たる。この例示した実施形態では、割り当てテーブル７００は５１２段のマルチポートＲＡＭで、画像記述子の９ビットの各ベースアドレス値に対して物理的なＰＥ  ＲＡＭアドレスのルックアップを提供する。画像へのビットプレーンの割り当ては、「ビットプール」から物理的なアドレスを読み取り、割り当てテーブルに書き込むことで実現される。ビットプレーンの割り当てを解除するには、割り当てテーブル７００からアドレスが読み取られ、ビットプールに書き込まれる。
【００３３】
各セグメントに１つずつ、７３０と７４０の２つのビットプールがある。この特殊な実施形態では、各ビットプールは１２８段のＦＩＦＯで、割り当てに使用可能なＰＥ  ＲＡＭアドレス全てを随時取り込む。
【００３４】
５１２ビットのスコアボードレジスタは図８に示すようにスコアボード７５０とスコアボード７６０に分割され、このレジスタによって、どの割り当てテーブル位置を取り込むかが示される。スコアボードは、割り当て及び割り当て解除の順序の依存関係を遵守させ、割り当てエラー状態を検出するために、プリミティブシーケンサ３４０によって使用される。割り当てに関連するエラーはイベントレジスタによって追跡され、プログラマにレポートが提供される。
【００３５】
アプリケーションを実行するには、あらかじめ割り当てロジックが「クリーン」状態になっている必要がある。ビットプールは２５６個のＰＥ  ＲＡＭアドレスで初期設定され、スコアボードは全て０でなければならない。この２つの条件が満たされたときに、「クリーン」状態になる。
【００３６】
アレイ演算を指定するプログラムシーケンサ命令では、２つのソースオペランドと１つのデスティネーションオペランドが識別される。ソースオペランドは画像オペランドであっても画像オペランドでなくてもかまわないが、アレイ演算のデスティネーションオペランドは画像オペランドでなければならない。図９に示すように、命令ではオペランドに加えて、割り当て制御も指定される。
【００３７】
命令の割り当て制御フィールドによって、プログラマは新しいサイズから、演算の実行に起因するデスティネーションオペランドのサイズを直接決定できる。新しいサイズでは、デスティネーションオペランドがカレントのデスティネーションオペランドよりも大きくなることも（インクリメンタルな割り当て）、小さくなることも（インクリメンタルな割り当て解除）、又は同じサイズのままのこともある。
【００３８】
Ｆｒｅｅ１及びＦｒｅｅ２の制御により、第１のソースオペランドを割り当て解除すること（Ｆｒｅｅ１がアクティブ）及び／又は第２のソースオペランドを割り当て解除すること（Ｆｒｅｅ２がアクティブ）をプログラマは指定できる。Ｆｒｅｅ制御によって、アレイ演算を行うために使用した後、対応するオペランド画像全体が割り当て解除される。
【００３９】
画像記憶の管理はプログラマの直轄である。画像の管理に使用する割り当てテーブル７００内のアドレスの範囲を決定するのはプログラマである。プログラマは、この仮想アドレス空間領域をいつどのように取り込むかを決定する。プログラマはこのために、画像を表現するために適切な画像記述子値を生成するとともに、画像を伴う演算に割り当て制御フィールドを使用する。
【００４０】
本発明の更なる詳細の理解を促すために、以下の用語を使用する。
【００４１】
Ｆｒｅｅ１及びＦｒｅｅ２：Ｓｒｄ及びＳｒｃ２オペランドの割り当て解除制御信号。
【００４２】
Ｓｒｃ１  Ｓｒｃ２：「Ｓｏｕｒｃｅ  １」及び「Ｓｏｕｒｃｅ  ２」、アレイ演算の２つのソース（つまり、入力）オペランド。
【００４３】
Ｄｅｓｔ：アレイ演算の「デスティネーション」オペランド（つまり、出力）。
【００４４】
Ｚｅｎｄ：デスティネーションのベースアドレス＋新しいサイズ、乗算の順序制御時に、ビット演算の生成及びビットプレーンの割り当てをいつ停止するかを決定するために使用される。
【００４５】
Ａｌｌｏｃ．ｏｌｄｓｉｚｅ＿ｃｎｔ：カウントダウンカウンタ、プリミティブのはじめにオリジナルのＤｅｓｔオペランド値がロードされる。
【００４６】
Ｄｅｓｔ＿ｉｎ：プログラムシーケンサからプリミティブシーケンサへＤｅｓｔオペランド画像記述子を伝達する信号。
【００４７】
Ａｌｌｏｃ＿ｉｎ：プログラムシーケンサからプリミティブシーケンサへＦｒｅｅ１値、Ｆｒｅｅ２値、及び新しいサイズ値を伝達する信号。
【００４８】
Ａｌｌｏｃ＿ｅｎ＿ｒｅｇ：割り当てイネーブル信号を保持するレジスタ。
【００４９】
Ｗａｄｒ＿ｏｕｔ：プリミティブシーケンサからオーバーレイユニットへビットプレーン演算の書き込みアドレスを伝達する信号。
【００５０】
Ｗａｄｒ＿ｓｅｌ：Ｗａｄｒ＿ｏｕｔ値のソースを選択するセレクト信号。
【００５１】
Ｄｅａｌｌ＿ｅｎ＿ｒｅｇ：割り当て解除イネーブル信号を保持するレジスタ。
【００５２】
Ａｌｌｏｃ．ｄｅａｌｌ＿ｗｒ０又はＡｌｌｏｃ．ｄｅａｌｌ＿ｗｒ１：ビットプレーンアドレスをビットプール０及びビットプール１にそれぞれ書き込む（プッシュする）ための書き込みストローブ。
【００５３】
Ａａｄｒ：Ｂｉｔ＿Ｏｐ＿Ｒｅｇ１のＰＥ  ＲＡＭアドレスフィールド、順序制御時にＳｒｄ１オペランドの仮想アドレスを順番に提供する。
【００５４】
Ｂａｄｒ：Ｂｉｔ＿Ｏｐ＿Ｒｅｇ１のＰＥ  ＲＡＭアドレスフィールド、順序制御時にＳｒｃ２オペランドの仮想アドレスを順番に提供する。
【００５５】
Ｗａｄｒ：Ｂｉｔ＿Ｏｐ＿Ｒｅｇ１及びＢｉｔ＿Ｏｐ＿Ｒｅｇ２のＰＥ  ＲＡＭアドレスフィールド、順序制御時にＤｅｓｔオペランドの仮想アドレスを順番に提供する。
【００５６】
Ａａｄｒ＿ｏｕｔ：プリミティブシーケンサからオーバーレイユニットへの信号、オーバーレイへのビット演算出力のＳｒｄ１オペランドの物理アドレスコンポーネントを提供する。
【００５７】
Ｂａｄｒ＿ｏｕｔ：プリミティブシーケンサからオーバーレイユニットへの信号、オーバーレイへのビット演算出力のＳｒｄ２オペランドの物理アドレスコンポーネントを提供する。
【００５８】
Ｗａｄｒ＿ｏｕｔ：プリミティブシーケンサからオーバーレイユニットへの信号、オーバーレイへのビット演算出力のＤｅｓｔオペランドの物理アドレスコンポーネントを提供する。
【００５９】
Ｆｒｅｅ＿１＿ｒｅｇ：Ｓｒｄ１オペランドの割り当て解除タスク記述。この名前のフィールドがプリミティブレジスタと割り当てタスクレジスタの両方に含まれる。
【００６０】
Ｆｒｅｅ＿２＿ｒｅｇ：Ｓｒｄ２オペランドの割り当て解除タスク記述。この名前のフィールドがプリミティブレジスタと割り当てタスクレジスタの両方に含まれる。
【００６１】
Ｆｒｅｅ＿３＿ｒｅｇ：Ｄｅｓｔオペランドの割り当てタスク解除記述。この名前のフィールドがプリミティブレジスタと割り当てタスクレジスタの両方に含まれる。
【００６２】
画像の保存例を図１０に示す。この例では、画像Ａと画像ＢはそれぞれＳｅｇ０及びＳｅｇ１に格納されている８ビット画像である。網掛けで示すように、これらの画像はどちらも完全に取り込まれている。Ａが符号なしで、Ｂが符号付きと仮定すると、記述子は次のようになる。
Ａ＝（０＜＜１５）｜（８＜＜９）｜０    ＝０×１０００
Ｂ＝（１＜＜１５）｜（８＜＜９）｜２５６＝０×９１００
【００６３】
次に、ＡとＢをＡＤＤして、画像Ｃを作成すると仮定した場合、Ｃの位置を選択する必要がある。Ｃの即時値を収容できる大きさの連続した領域でなければならず、更にライフスパンの間でＣが取りうる全ての値を収容できる大きさであることが好ましい。ここに示した例では、アドレス１０を先頭に１０ビットに渡る、未使用の割り当てテーブル位置のブロックをＣで使用するようにプログラマは選択している。
【００６４】
現時点では、Ｃは新しい画像であり、このため取り込まれていない状態になっている（つまり、Ｃに割り当てられているビットプレーンはない）。Ｃが符号付きの画像と仮定すると、Ｃの記述子は次のようになる。
Ｃ＝（１＜＜１５）｜（０＜＜９）｜１０    ＝０×８００ａ
【００６５】
この例で、Ａ、Ｂ、及びＣについて上記で示した記述子は、演算に当たってレジスタセット３３１になければならない値である。そこで、プログラマは演算の結果としてＣが取るサイズを決定する必要がある。この例では、ＡとＢは符号属性が異なるものの、サイズはどちらも８ビットである。ＡとＢのピクセルの間で考えられるあらゆる和を考慮すると、演算結果はおそらく１０ビットとなる。符合属性を同じとすれば、結果サイズは９とするのがもっともである。ただし、演算結果についてのプログラマ自身の知識から、又は結果の下位８ビットだけを保持したいというのであれば、８ビットの結果を選択してもかまわない。新しいサイズ制御でＣの結果サイズをどのように指定するかはプログラマ次第である。
【００６６】
１０ビットの結果を希望し、Ａ又はＢの割り当て解除（解放）がないとした場合、この演算に対する割り当て制御は以下のようになる。
割り当て制御＝（１０＜＜２）（０＜＜１）｜０＝０×２８
【００６７】
この演算により、Ｃ画像に１０ビットプレーンが取り込まれる。プログラマがこの演算に対して新しいサイズを１０に設定することで、この結果が決定される。プログラムシーケンサ３３０が、アレイ演算を受けて、Ｃの記述子を新しいサイズ属性に自動的に更新するため、Ｃ記述子の値は以下のようになる。
Ｃ＝（１＜＜１５）｜（１０＜＜９）｜１０＝０×９４０ａ
【００６８】
このように、演算結果のピクセル値を格納するために最低限必要とされるサイズに画像がなるように、プログラマは各アレイ演算についてデスティネーションオペランドのサイズを調整する。デスティネーションオペランドのレジスタは新しいサイズに更新されるので、値の変化を受けて記述子をプログラマがロードし直す必要はない。
【００６９】
この例では、Ｃの開始サイズは０であった。多くの場合、デスティネーションオペランドのサイズはゼロ以外となり、アレイ演算によってサイズが調整される。いずれの場合でも、新しいサイズ制御によって演算結果のサイズが決まり、デスティネーションオペランドのサイズ属性（レジスタセット３３１）は新しいサイズ値に置換される。新しいサイズがデスティネーションのサイズよりも大きいと、インクリメンタルな割り当てが行われ、ビットプレーンが割り当てられ、画像のサイズを大きくする。新しいサイズがデスティネーションのサイズよりも小さいと、インクリメンタルな割り当て解除が行われ、ビットプレーンの割り当てが解除され、画像のサイズを小さくする。
【００７０】
画像が不要になったときは、割り当てを解除する必要がある。割り当て解除は、通常、Ｆｒｅｅ１又はＦｒｅｅ２の割り当て制御を使用して行われる。Ｆｒｅｅ制御は、画像にアクセスされる最終的な演算に適用される。Ｆｒｅｅ制御が適用されるのは、ソースオペランドだけである。画像への最終的なアクセスをソースオペランドとするとよい。さもないと、値が生成されても（書き込まれても）、使われない（読み込まれない）ことになる。また、Ｆｒｅｅ制御を使用すると、機会があり次第、割り当て解除が行われるので、割り当て解除されたビットプレーンをできるだけ早急に使用可能とすることができる。
【００７１】
Ｆｒｅｅ制御を適用する場合、プログラマは記述子全体を利用する必要がある。例えば、画像への最終的なアクセスが画像全体でなく、画像のスライスとすることができる。ここで、画像スライスにＦｒｅｅ制御を適用すると、画像の一部は割り当てられた状態のまま残る。これを解決するための１つの対策は、画像全体を解放するために特に行われる別の演算までＦｒｅｅ制御を見送ることである。もう１つの解決策は、画像スライスを解放した後、残りのビットプレーンに対応する記述子を生成して、この画像部分を解放する演算を実行することである。
【００７２】
画像の割り当てロジックの状態を破壊するには、いくつかの方法がある。図１０の例をもう一度見ると、画像Ｃが取り込まれていないものの、サイズが１０の無効な記述子が使用されるケースが考えられる。このケースでは、新しいサイズとサイズが一致しているため、割り当て又は割り当て解除は行われない。割り当てテーブル７００の現在１０から１９までの物理アドレスが、演算の実行に使われる。これらのアドレスが他の画像に属する場合、ビットプレーンのデータは破損する。アドレスが全てビットプール内にあり、画像Ｃが割り当て解除されていなければ、プログラマがこの間違いに気付かないことが考えられる。取り込まれていない割り当て解除テーブルアドレスへのアクセスはＳＩＭＤコアでフラグが付けられない。
【００７３】
この例を続け、プログラマがその後画像Ｃを割り当て解除した場合、アドレスは間違ってビットプールに送られる。この結果、ビットプールに重複した値が出来、画像間でクロストークが発生しかねない。また、余分なアドレスがビットプールに書き込まれるので、ビットプールがオーバーフローしかねない。更に、取り込まれていない割り当てテーブル位置の割り当て解除が検出され、割り当て解除競合というフラグが付けられる。
【００７４】
画像が複数回解放された場合、割り当て解除の競合が生じ、ビットプールに余分なアドレスが書き込まれるため、最終的にビットプールのオーバーフローを招く恐れがある。画像を解放できないと、置換されることなくビットが割り当て続けられるため、最終的にはビットプールのアンダーフローを招く。画像の割り当てを解除せずに、画像の割り当てテーブル領域を再利用した（つまり、同じ領域に新しいビットプレーンが割り当てられた）場合、割り当て競合イベントが生成される。
【００７５】
これ以外にもエラーを招く状況を列挙できる。すなわち、画像記述子が割り当てテーブル７００の実際のステータスと競合しないようにプログラマが保証する必要がある。ソースオペランドとして使用する前に割り当てテーブルのエントリが取り込まれていること、及び最終的な使用後に割り当て解除されていることを確かめる必要がある。
【００７６】
例示した実施形態では、画像はいずれか一方のセグメントに属し、セグメント境界のまたぎはない。画像記述子アドレス属性の上位ビット（ビット８）は、割り当てテーブル７００及びＰＥ  ＲＡＭを基準とした画像のセグメントを示す。割り当てテーブルのセグメントはラップされ、セグメントの終わりを越えた画像ブロックは同じセグメントの先頭にラップされる。
【００７７】
ビットプールの初期内容はプログラマに任されているため、ある程度のフォールトトレランスをＳＩＭＤコアに取り込むことができる。具体的には、１つのＰＥ  ＲＡＭプレーンに不具合があった場合、ビットプール全体から該当するビットプレーンアドレスを除外することで、切り離すことができる。こうすることで、プログラマには１つ少ないビットプレーンが残され、該当するアプリケーションとソフトウェアツールで対処する必要がある。
【００７８】
プリミティブ命令でＰＥ  ＲＡＭへの書き込みが指定されていなければ、インクリメンタルな割り当て及び割り当て解除は行われない。つまり、例示した実施形態では、デスティネーションオペランドが書き込まれないところでは、割り当て又は割り当て解除は行われない。
【００７９】
例示した実施形態では、アクティブな画像を記憶しておくために、物理的に２５６個のビットプレーンのＰＥ  ＲＡＭがある。この２５６個のビットプレーンは、１２８個のビットプレーンから成るセグメントに分割される。各セグメントの１２８個のビットプレーンは、１２８個のアドレスによって表現される。割り当てに使用可能なアドレスはＦＩＦＯビットプールに置かれる。ＰＥ  ＲＡＭセグメントごとに１つずつ、ビットプール０（７３０）とビットプール１（７４０）の２つのビットプールがある。画像へのビットプレーンの割り当ては、適切なビットプールからのビットプレーンアドレスの読み込みから構成される。割り当て解除では、ビットプレーナドレスが再度ビットプールに書き込まれる。
【００８０】
物理的なＰＥ  ＲＡＭアドレスへの画像記述子のビットプレーンアドレスのマッピングは、割り当てテーブル７００のルックアップによって行われる。割り当てテーブル７００は、５１２段、８ビット幅の５ポートＲＡＭ（読み取りポート４つ、書き込みポート１つ）である。画像記述子のベースアドレスとサイズ属性は、画像オペランドのＰＥ  ＲＡＭアドレスを含む割り当てテーブル７００内の位置の範囲を示す。ビットプレーンが画像に割り当てられると、割り当てテーブル７００の対応する位置にビットプレーンが書き込まれる。ビットプレーンの割り当てが解除されると、割り当てテーブル７００から読み込まれ、然るべきビットプールに再度書き込まれる。このため、ビットプレーンの割り当て及び割り当て解除では、割り当てテーブルの読み取りポートのうちの１つと書き込みポートが使われる。これ以外の３つの読み取りポートは、演算の実行時に、スコアボード７５０、スコアボード７６０、及びデスティネーションオペランドのＰＥ  ＲＡＭアドレスをルックアップするために使用される。
【００８１】
割り当てテーブル７００では、セグメント０（７１０）がＰＥ  ＲＡＭセグメント０のアドレスマッピングを提供し、セグメント１（７２０）がＰＥ  ＲＡＭセグメント１のマッピングを提供する。画像がセグメントをまたぐことは許されない。各々の画像は１つのセグメント内に完全に収まる。
【００８２】
割り当てテーブル７００には、ビットプレーンの２倍の位置が含まれる。これによって、物理的なビットプレーンアドレスを無駄にすることなく割り当てテーブル位置を使用することに「穴」が許容される。
【００８３】
なお、実行時にビットプールでビットプレーンアドレスを次々にチャーンしていくと、アドレスの順序にかなりのスクランブルを招くことになる。このため、画像に割り当てられる物理アドレスは、ＰＥ  ＲＡＭにおいてランダムに近いビットプレーンの集合になる可能性がある。アドレスは割り当てテーブル７００から順番に（つまり、「仮想的な」アドレス順序で）読み取られるので、これは問題ではない。
【００８４】
演算の順序制御時に、プリミティブレジスタ３４２のＳｒｃ１、Ｓｒｃ２、及びＤｅｓｔのオペランドアドレスフィールドがＢｉｔ  Ｏｐ１レジスタ３４３のＡａｄｒ、Ｂａｄｒ、及びＷａｄｒの各フィールドに提供される。Ａａｄｒ、Ｂａｄｒ、及びＷａｄｒフィールドは、割り当てテーブル７００において、この３つのオペランドのルックアップアドレスとなる。割り当てテーブル７００から読み取った物理的なアドレスは、オーバーレイユニット５００へのＡａｄｒ＿ｏｕｔ、Ｂａｄｒ＿ｏｕｔ、及びＷａｄｒ＿ｏｕｔ出力を有する。割り当てテーブル７００は同期ＲＡＭであるので、読み取りは、アドレスデータとビット演算の残りの同期を取る１クロックの遅延となり、Ｂｉｔ  Ｏｐ２レジスタ３４４からステージングされる。
【００８５】
起動時に、ビットプールは物理的なビットプレーンアドレスで初期設定される必要がある。ビットプール０（７３０）にはアドレス０〜１２７がロードされ、ビットプール１（７４０）にはアドレス１２８〜２５５がロードされなければならない。
【００８６】
画像へのビットプレーンの割り当ては、画像がデスティネーションオペランドである演算の実行時に限り行われる。プリミティブシーケンサ３４０はデスティネーションオペランドについてカレントサイズ（Ｄｅｓｔ＿ｉｎ［１４：９］）と新しいサイズ（Ａｌｌｏｃ＿ｉｎ［７：２］、つまり新しいサイズ）を受け取る。新しいサイズ値がカレントサイズよりも大きいと、カレントサイズを超えた分の各ビットプレーンに対してビットプレーンの割り当てが行われ、これによって、デスティネーションの画像サイズが新しいサイズ値に調整される。
【００８７】
プリミティブレジスタ３４２のロード時に、新しいサイズ値がプリミティブレジスタのＤｅｓｔ＿ｓｉｚｅフィールドにロードされ、プリミティブの順序制御に使用される。Ｄｅｓｔ＿ｉｎサイズ値がＡｌｌｏｃ．ｏｌｄｓｉｚｅ＿ｃｎｔカウンタにロードされる。プリミティブの順序制御時に、Ｄｅｓｔ＿ｓｉｚｅ値とＡｌｌｏｃ．ｏｌｄｓｉｚｅ＿ｃｎｔ値がカウントダウンされる。Ａｌｌｏｃ．ｏｌｄｓｉｚｅ＿ｃｎｔ値が０に達した時点で、ビットプレーンの割り当てが開始する。Ｄｅｓｔ＿ｓｉｚｅがカウントダウンされ続ける間（及びＡｌｌｏｃ．ｏｌｄｓｉｚｅ＿ｃｎｔが０の間）、デスティネーションオペランド画像にビットプレーンが割り当てられる。
【００８８】
乗算の場合、演算はマルチパスになるため、割り当てはより複雑になる。プリミティブレジスタ３４２のＺｅｎｄフィールドが、乗算デスティネーションオペランドへのビットプレーンの割り当てをトラッキングする。デスティネーションオペランドへの書き込みがＺｅｎｄ値を超えるたびに、割り当てが行われ、Ｚｅｎｄがインクリメントされる。
【００８９】
プリミティブシーケンサ３４０がＡｌｌｏｃ＿ｅｎ＿ｒｅｇをセットして、割り当てを要求する。このレジスタはＢｉｔ  Ｏｐ１レジスタ３４３でステージングされる。アクティブなＡｌｌｏｃ＿ｅｎ＿ｒｅｇを受けて適切なビットプールからビットプレーンアドレスが読み取られ、Ｂｉｔ  Ｏｐ１レジスタ３４３のＷａｄｒフィールドで示されるアドレス位置の割り当てテーブル７００に書き込まれる。
【００９０】
ビット演算に対して割り当てが行われない場合、割り当てテーブル７００からＷａｄｒ＿ｏｕｔ値が読み取られる。これに対して、割り当てが行われる場合は、ビットプールから新しいビットプレーンアドレスが取り出され、割り当てテーブル出力の代わりにＷａｄｒ＿ｏｕｔに提供される。ビットプールからの新しいビットプレーンがＢｉｔ＿ｐｏｏｌ＿ｗａｄｒレジスタにロードされ、Ｂｉｔ  Ｏｐ２レジスタ命令と同期が取られる。Ａｌｌｏｃ＿ｅｎ＿ｒｅｇ値に応じてＢｉｔ  Ｏｐ２レジスタ３４４のＷａｄｒ＿ｓｅｌフィールドがセットされ、Ｗａｄｒ＿ｏｕｔの計算にＢｉｔ＿ｐｏｏｌ＿ｗａｄｒ値と割り当てテーブル値とを適宜選択できる。
【００９１】
ビットプレーンの割り当て解除は、演算のどのオペランドについても行われうる。割り当て制御９００は２つのシングルビットフィールドを含み、その各々がソースオペランドの「解放」つまり割り当て解除を示す。更に、新しいサイズ値がＤｅｓｔ＿ｉｎサイズ値よりも小さいと、インクリメンタルな割り当て解除が示される。ソースオペランドの解放は、ソースオペランド記述子によって示される全てのビットプレーンの割り当て解除を意味する。ただし、デスティネーションオペランドのビットプレーンのインクリメンタルな割り当て解除は、新しいサイズ値を超えた分のビットプレーンの割り当て解除を意味する。
【００９２】
ビットプレーンの割り当て解除はプリミティブ実行と同時に行われるものの、割り当てと異なり、割り当て解除はプリミティブの一部としては実行されない。もう１つ別の割り当て解除シーケンサが割り当て解除タスクの順序制御を行う。割り当て解除タスクは、割り当て解除の待ち行列と呼ばれる８段ＦＩＦＯに書き込まれる。割り当て解除シーケンサが割り当て解除タスクを完了すると、割り当て解除の待ち行列から新しいタスクが読み取られる。
【００９３】
割り当て解除タスクの待ち行列への登録プロセスは、プリミティブレジスタ（３４２）のＦｒｅｅ＿１＿ｒｅｇ、Ｆｒｅｅ＿２＿ｒｅｇ、及びＦｒｅｅ＿３＿ｒｅｇフィールドのロードから始まる。Ｆｒｅｅ＿１＿ｒｅｇ及びＦｒｅｅ＿２＿ｒｅｇレジスタには、Ｓｒｃ１及びＳｒｃ２のアドレスフィールドとサイズフィールドがロードされる（下位１５ビット）。これらの各レジスタの上位ビットは、対応する割り当て制御の入力フィールド（Ｆｒｅｅ１、Ｆｒｅｅ２）がアクティブであるときにセットされる。上位ビットがセットされている場合に限り、これら各レジスタに対して割り当て解除が示される。Ｆｒｅｅ＿３＿ｒｅｇは、インクリメンタルな割り当て解除の実行を表すタスク値に設定される。割り当て解除が示される場合、上位ビットがセットされ、アドレスフィールドはＤｅｓｔ＿ｉｎアドレス値と新しいサイズ値を加えた値に設定され、サイズフィールドはＤｅｓｔ＿ｉｎサイズ値から新しいサイズ値を引いた値に設定される。
【００９４】
プリミティブレジスタのＦｒｅｅ＿１／２／３＿ｒｅｇフィールドが、割り当てタスクレジスタの対応するＦｒｅｅ＿１／２／３＿ｒｅｇフィールドに書き込まれる。このロードはひとまとめで行われる。つまり、３つ全てのレジスタが同時にロードされる。プリミティブレジスタ３４２から割り当てタスクレジスタ（割り当てロジック３４１内）への新しいタスクのロードが許されるのは、カレントのＡｌｌｏｃ  Ｆｒｅｅ＿１／２／３＿ｒｅｇタスクが全て待ち行列に登録されている場合だけである。また、プリミティブレジスタのＦｒｅｅ＿１／２／３＿ｒｅｇタスクは、このプリミティブ演算の最初のビット演算が生成されるまでは、割り当てタスクレジスタにロードできない（順序が狂った割り当て解除を生じさせないため）。
【００９５】
割り当て解除タスクがＡｌｌｏｃ  Ｆｒｅｅレジスタから割り当て解除の待ち行列に書き込まれる。アクティブな最上位ビット（ＭＳＢ）を持つＦｒｅｅレジスタごとに、待ち行列にタスクが書き込まれる。Ｆｒｅｅレジスタが３つあるので、このプロセスの完了には最大３サイクル必要となる可能性がある。待ち行列にタスクが書き込まれると、タスクが読み出されたレジスタがＭＳＢでクリアされ、レジスタ内にアクティブなタスクが残っていないことが示される。
【００９６】
割り当て解除の待ち行列が一杯になった場合は、待ち行列が一杯でなくなるまで、タスクの待ち行列への登録は保持される。必要に応じて、待ち行列への登録が完了するよう、プリミティブの順序制御が保持されるので、プリミティブレジスタのＦｒｅｅフィールド値をＡｌｌｏｃ  Ｆｒｅｅレジスタへ転送できる。
【００９７】
割り当て解除タスクは割り当て解除シーケンサによって順序制御される。割り当て解除タスクは、ベースアドレスとサイズで示される。ベースアドレスはカウントアップされるのに対し、サイズはカウントダウンされる。カウントごとに、割り当て解除が行われる。
【００９８】
ビットプレーンの割り当て解除は、Ｄｅａｌｌ＿ｅｎ＿ｒｅｇを設定し、Ｄｅａｌｌ＿ａｄｄｒ＿ｒｅｇに割り当て解除のためのビットプレーンアドレスをロードすることで要求される。（割り当て解除シーケンサの）サイズカウンタが１に達した場合、新しい割り当て解除タスクがあれば、割り当て解除の待ち行列から読み込まれる。アクティブな割り当て解除タスクがなければ、割り当て解除は行われない。
【００９９】
Ｄｅａｌｌ＿ｅｎ＿ｒｅｇがアクティブであると、Ｄｅａｌｌ＿ａｄｄｒ＿ｒｅｇで示されるアドレス位置で割り当てテーブル７００の読み取りが行われる。セグメントに応じて、Ａｌｌｏｃ．ｄｅａｌｌ＿ｗｒ０又はＡｌｌｏｃ．ｄｅａｌｌ＿ｗｒ１がセットされ、割り当てテーブルの読み取りデータが次のサイクルで適切なＦＩＦＯ（ビットプール０（７３０）又はビットプール１（７４０））へプッシュされる。
【０１００】
割り当てプロセスと割り当て解除プロセスは異なり、割り当てタスクは演算の一部として実行されるのに対し、割り当て解除タスクは独立した順序制御のため待ち行列に登録される。割り当て解除タスクを待ち行列に登録することで、割り当てが行われる順序が狂う可能性がある。すなわち、ある演算によってビットプレーンの割り当て解除が待ち行列に登録され、次の演算で同じビットプレーンを割り当てようとしたときにこのビットプレーンがまだ待ち行列の中に入っていることがある。プログラマから見ると、当然ビットプレーンは使用可能であるはずなのに、実行中しばらくの間使用できないことになる。
【０１０１】
割り当てタスクをいつ行うことができるか特定するために、割り当て及び割り当て解除トラフィックの分析を取り込むよう、プログラマ又はツールの作成者に要求することは、困難で受け入れがたい負担となる。スタンドアローンのルーチンの場合、起動のたびに、ルーチン外への実行の影響が把握されていなければならないため、ルーチンの中にコードシーケンスをカプセル化することは不可能に近い。
【０１０２】
割り当て及び割り当て解除の順序を守るための方法がプリミティブシーケンサ３４０に組み込まれている。順序を守るためのこの手段がスコアボードで、スコアボードは割り当てテーブルの位置ごとに１つずつ、合計５１２のレジスタのアレイから構成される。割り当てが行われると、割り当てテーブルのアドレスに対応するスコアボードレジスタがセットされる。割り当て解除が行われると、スコアボードレジスタがクリアされる。
【０１０３】
割り当てテーブルアドレスに対して割り当てが要求され、対応するスコアボードレジスタが設定された場合、ペンディング中の割り当て解除タスクがあると、順序が狂った割り当て状態が存在する。この状態に対して、プリミティブシーケンサ３４０はペンディング中の割り当て解除タスクが実行されるまで保留となり、ペンディング中の割り当て解除タスクが実行された時点で、割り当てが発生した演算を処理する。ペンディング中の割り当て解除タスクがないのにスコアボードが依然として順序が狂った割り当てを示している場合、又はスコアボードが順序が狂った割り当て解除を示している場合は、割り当てエラーが示される。この場合、イベント信号がアサートされ、実行は続行される。
【０１０４】
前述したような類のエラーは、プリミティブシーケンサの割り当てロジック３４１では回避できないかもしれないが、イベントレジスタにロギングされるイベントとして少なくとも検出及び伝播することができる。プリミティブシーケンサ３４０は７つのイベントをロギングし、このうち１つを除き全てが割り当てに関するものである。これらのイベントについて、図１１で説明する。
【０１０５】
前述したイベントに加えて、２つの監査信号が生成される。監査信号は各々セグメントに関連し、対応するビットプールが一杯で、スコアボードの対応する半分がクリアな状態である（割り当てられているビットがない）場合にアクティブになる。この信号はプログラムシーケンサ３００に渡され、そこからイベントレジスタを介して提供される。監査信号はプログラマにとってサニティチェックであり、この状態が期待されるアプリケーションの停止位置において割り当てが「クリアな状態」であることをチェックするための方法となる。監査信号は他のイベント信号と異なり、プログラムシーケンサのイベントレジスタに「スティッキー」なものではなく、絶えず更新されるため、一度セットされても必ずしもアサートのまま保持されるわけではない。
【図面の簡単な説明】
【０１０６】
【図１】例示した処理要素（ＰＥ）を示す回路図である。
【図２】処理要素のアレイのグラフィック表現である。
【図３】処理要素グループ（ＰＥＧ）から成るＰＥアレイを示す回路図である。
【図４】ＰＥＧの回路図である。
【図５】ＳＩＭＤアレイプロセッサの回路図である。
【図６】階層型アレイシーケンサの段を示す回路図である。
【図７】画像記述子の構成要素を示す表である。
【図８】ビットプレーンの管理構成要素のグラフィック表現である。
【図９】割り当て制御信号を示す表である。
【図１０】割り当てテーブルで割り当て済みの画像のグラフィック表現である。
【図１１】割り当てに伴うイベント信号を示す表である。
【図１２】プリミティブシーケンサによって生成される割り当て監査信号を示す表である。
【図１】
2008515033.tif 000003
【図２】
2008515033.tif 000004
【図３】
2008515033.tif 000005
【図４】
2008515033.tif 000006
【図５】
2008515033.tif 000007
【図６】
2008515033.tif 000008
【図７】
2008515033.tif 000009
【図８】
2008515033.tif 000010
【図９】
2008515033.tif 000011
【図１０】
2008515033.tif 000012
【図１１】
2008515033.tif 000013
【図１２】
2008515033.tif 000014