(57)【要約】      （修正有）【課題】低減された配線複雑度を有するシフトレジスタを提供する。【解決手段】シフトレジスタは、シフト済みデータを受信する入力とシフト済みデータを送信する出力とを有する回路を含む。ここで、第1の論理的な順序のセルと第2の論理的な順序のセルとの間に物理的に位置するセルの回路は、論理的なシフトを行わない。直前にある論理的な順序のセルによって送信されたシフト済みデータを受信するために接続されたセルの回路は、シフトレジスタによって実行されるシフトコマンドで指定されたシフトの量を割り当てられている入力において受信されるデータをローカルレジスタ空間に書き込むための回路を含む。直後にある論理的な順序のセルにシフト済みデータを送信するために接続されたセルの回路は、データを受信した入力のシフト量から増分したシフト量を割り当てられている出力からデータを送信する回路を含む。【選択図】なし【特許請求の範囲】
【請求項１】
論理的な順序の限りではない順序で物理的に配置される複数のシフト処理ユニットセルを含むデバイスであって、各シフト処理ユニットセルは、ローカルレジスタ空間と、シフト済みデータを受信するように構成された入力とシフト済みデータを送信するように構成された出力とを有する回路とを含み、前記入力の各々は、異なるそれぞれのシフト量を割り当てられ、前記出力の各々は、異なるそれぞれのシフト量を割り当てられ、各シフト処理ユニットセルの前記回路は、
(i)シフトコマンドで指定されたそれぞれのシフト量を割り当てられているそれぞれの入力において、前にある論理的な順序のシフト処理ユニットセルから、データを受信し、前記受信したデータを前記シフト処理ユニットセルの前記ローカルレジスタ空間に書き込むように構成される、第1の回路と、
(ii)前記データが受信された入力のシフト量から増分したシフト量を割り当てられているそれぞれの出力から、後にある論理的な順序のセルに、データを送信するように構成される、第2の回路と
を含む、デバイス。
【請求項２】
前記第2の回路は、前記シフト処理ユニットセルの前記ローカルレジスタ空間からデータを読み込み、1というシフト量を割り当てられている出力から前記データを送信するように構成された回路をさらに含む、請求項1に記載のデバイス。
【請求項３】
前記シフト処理ユニットセルは、閉ループ内でデータを伝搬するように構成される、請求項1に記載のデバイス。
【請求項４】
前記シフト処理ユニットセルは、シフトが前記閉ループに沿った第1の方向または第2の方向のいずれかで生じるように、物理的に配置される、請求項3に記載のデバイス。
【請求項５】
各シフト処理ユニットセルは、双方向シフトレジスタの一部である、請求項1に記載のデバイス。
【請求項６】
前記複数のシフト処理ユニットセルは、2次元シフトレジスタアレイを形成する、請求項1に記載のデバイス。
【請求項７】
シフト処理ユニットセルの複数の行および列を含む2次元シフトレジスタアレイであって、特定の行または列にある前記シフト処理ユニットセルは、論理的な順序の限りではない順序で物理的に配置されるであり、各シフト処理ユニットセルは、ローカルレジスタ空間と、シフト済みデータを受信するように構成された入力とシフト済みデータを送信するように構成された出力とを有する回路とを含み、前記入力の各々は、異なるそれぞれのシフト量を割り当てられ、前記出力の各々は、異なるそれぞれのシフト量を割り当てられ、各シフト処理ユニットセルの前記回路は、
(i)シフトコマンドで指定されたそれぞれのシフト量を割り当てられているそれぞれの入力において、前にある論理的な順序のシフト処理ユニットセルから、データを受信し、前記受信したデータを前記シフト処理ユニットセルの前記ローカルレジスタ空間に書き込むように構成される、第1の回路と、
(ii)前記データが受信された入力のシフト量から増分したシフト量を割り当てられているそれぞれの出力から、後にある論理的な順序のセルに、データを送信するように構成される、第2の回路と
を含む、2次元シフトレジスタアレイ。
【請求項８】
前記第2の回路は、前記シフト処理ユニットセルの前記ローカルレジスタ空間からデータを読み込み、1というシフト量を割り当てられている出力から前記データを送信するように構成された回路をさらに含む、請求項7に記載の2次元シフトレジスタアレイ。
【請求項９】
前記シフト処理ユニットセルは、閉ループ内でデータを伝搬するように構成される、請求項7に記載の2次元シフトレジスタアレイ。
【請求項１０】
前記シフト処理ユニットセルは、シフトが前記閉ループに沿った第1の方向または第2の方向のいずれかで生じるように、物理的に配置される、請求項9に記載の2次元シフトレジスタアレイ。
【請求項１１】
各シフト処理ユニットセルは、双方向シフトレジスタの一部である、請求項7に記載の2次元シフトレジスタアレイ。
【請求項１２】
前記2次元シフトレジスタアレイは、システムメモリに接続されている1つまたは複数の処理コアを有するコンピューティングシステム内にある、請求項7に記載の2次元シフトレジスタアレイ。
【請求項１３】
各シフト処理ユニットセルについて、非シフト処理ユニットセルをさらに含み、各非シフト処理ユニットセルは、シフト済みデータを受信する入力と前記受信したシフト済みデータをさらにシフト処理することなく送信する対応する出力とを有し、前記入力の各々は、異なるそれぞれのシフト量を割り当てられている、請求項1に記載のデバイス。
【請求項１４】
各シフト処理ユニットセルについて、非シフト処理ユニットセルをさらに含み、各非シフト処理ユニットセルは、シフト済みデータを受信する入力と前記受信したシフト済みデータをさらにシフト処理することなく送信する対応する出力とを有し、前記入力の各々は、異なるそれぞれのシフト量を割り当てられている、請求項7に記載の2次元シフトレジスタアレイ。
【請求項１５】
画像プロセッサであって、
2次元実行レーンアレイと、
シフト処理ユニットセルの複数の行および列を含む2次元シフトレジスタアレイであって、特定の行または列にある前記シフト処理ユニットセルは、論理的な順序の限りではない順序で物理的に配置されるであり、各シフト処理ユニットセルは、ローカルレジスタ空間と、シフト済みデータを受信するように構成された入力とシフト済みデータを送信するように構成された出力とを有する回路とを含み、前記入力の各々は、異なるそれぞれのシフト量を割り当てられ、前記出力の各々は、異なるそれぞれのシフト量を割り当てられ、各シフト処理ユニットセルの前記回路は、
(i)シフトコマンドで指定されたそれぞれのシフト量を割り当てられているそれぞれの入力において、前にある論理的な順序のシフト処理ユニットセルから、データを受信し、前記受信したデータを前記シフト処理ユニットセルの前記ローカルレジスタ空間に書き込むように構成される、第1の回路と、
(ii)前記データが受信された入力のシフト量から増分したシフト量を割り当てられているそれぞれの出力から、後にある論理的な順序のセルに、データを送信するように構成される、第2の回路と
を含む、2次元シフトレジスタアレイと
を含む、画像プロセッサ。
【請求項１６】
前記第2の回路は、前記シフト処理ユニットセルの前記ローカルレジスタ空間からデータを読み込み、1というシフト量を割り当てられている出力から前記データを送信するように構成された回路をさらに含む、請求項15に記載の画像プロセッサ。
【請求項１７】
前記シフト処理ユニットセルは、閉ループ内でデータを伝搬するように構成される、請求項15に記載の画像プロセッサ。
【請求項１８】
前記シフト処理ユニットセルは、シフトが前記閉ループに沿った第1の方向または第2の方向のいずれかで生じるように、物理的に配置される、請求項17に記載の画像プロセッサ。
【請求項１９】
各シフト処理ユニットセルについて、非シフト処理ユニットセルをさらに含み、各非シフト処理ユニットセルは、シフト済みデータを受信する入力と前記受信したシフト済みデータをさらにシフト処理することなく送信する対応する出力とを有し、前記入力の各々は、異なるそれぞれのシフト量を割り当てられている、請求項15に記載の画像プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は、その全体が参照により組み込まれている、2015年12月4日に出願した、「Shift Register With Reduced Wiring Complexity」と題する、米国仮出願第62/263,530号の利益を主張する。
【０００２】
発明の分野は、一般的にコンピューティングサイエンスに関し、より具体的には、低減された配線複雑度を有するシフトレジスタに関する。
【背景技術】
【０００３】
画像処理は、配列で構成されているピクセル値の処理を一般的に伴う。ここで、空間的に組織化された2次元アレイは、画像の2次元的特質をキャプチャする(追加の次元は、時間(例えば、2次元画像のシーケンス)およびデータタイプ(例えば、色)を含み得る)。一般的なシナリオにおいては、配列化されたピクセル値は、静止画をまたはモーションの画像をキャプチャするために一連のフレームを生成したカメラによって提供される。従来の画像プロセッサは、二極化したいずれかの一端に一般的に行き着く。
【０００４】
第1の一端は、汎用プロセッサまたは汎用的なプロセッサ(例えば、ベクトル命令エンハンスメントを有する汎用プロセッサ)において実行されるソフトウェアプログラムとして画像処理タスクを行うことである。第1の一端は、汎用性の高いアプリケーションソフトウェア開発プラットフォームを一般的に提供するが、関連するオーバーヘッド(例えば、命令フェッチおよびデコード、オンチップおよびオフチップデータの処理、投機的実行)を伴う微細な粒度のデータ構造の使用により、プログラムコードの実行中にデータのユニットあたりで消費されるエネルギーが最終的により多くの量となってしまう。
【０００５】
第2の反対側の一端は、固定機能のハードワイヤード回路をかなり大規模なデータのブロックに適用することである。カスタム設計された回路に直接適用される大規模(より微細な粒度の対語として)なデータのブロックの使用は、データのユニットあたりの電力消費を大幅に低減する。しかしながら、カスタム設計された固定機能の回路の使用は、一般的に、プロセッサが行うことができるタスクのセットが制限されることになる。そのため、(第1の一端に関連する)汎用性の広いプログラミング環境は、第2の一端が欠けている。
【０００６】
改善されたデータのユニットあたりの電力効率を伴った汎用性の高いアプリケーションソフトウェア開発状況という両端を提供する技術プラットフォームが、まだ見つかっていない望ましいソリューションとして残っている。
【発明の概要】
【課題を解決するための手段】
【０００７】
シフトレジスタを記載している。シフトレジスタは、複数のセルと、レジスタ空間とを含む。シフトレジスタは、シフト済みデータを受信する入力とシフト済みデータを送信する出力とを有する回路を含む、ここで、i)第1の論理的な順序のセルと第2の論理的な順序のセルとの間に物理的に位置するセルの回路は、論理的なシフトを行わないように構成され、ii)直前にある論理的な順序のセルによって送信されたシフト済みデータを受信するために接続されたセルの回路は、シフトレジスタによって実行されるシフトコマンドで指定されたシフトの量を割り当てられている入力において受信されるデータをローカルレジスタ空間に書き込むための回路を含み、iii)直後にある論理的な順序のセルにシフト済みデータを送信するために接続されたセルの回路は、データが受信された入力のシフト量から増分したシフト量を割り当てられている出力からデータを送信する回路を含む。
【０００８】
シフトレジスタのセルは、それぞれの入力においてそれぞれのデータアイテムを受信するための手段であって、入力は各々、異なるそれぞれのシフト量を割り当てられている、手段を有する形で表される。シフトレジスタのためのセルはまた、シフトコマンドによって指定されたシフト量を有する入力のうちの1つにおいて受信されるデータアイテムのうちの1つをレジスタ空間に書き込むための手段を有する。シフトレジスタのためのセルはまた、他のデータアイテムがそれぞれ受信されるそれぞれの入力のものより増分的により高いシフト量を割り当てられているそれぞれの出力から他のデータアイテムを送信するための手段であって、増分的により高いシフト量は、シフトコマンドによって指定されたシフト量未満である、手段を有する。シフトレジスタのセルはまた、レジスタ空間からデータアイテムを読み込み、1という大きさを有するシフト量を割り当てられている出力から読み込んだデータアイテムを送信するための手段を有する。
【０００９】
以下の説明および添付の図面は、発明の実施形態を図示するために使用される。
【図面の簡単な説明】
【００１０】
【図１】閉ループシフトレジスタを示す図である。
【図２ａ】厳密な論理的な順序でレイアウトされていないセルを有する閉ループシフトレジスタを示す図である。
【図２ｂ】厳密な論理的な順序でレイアウトされておらず単一のサイクルにおいて異なるシフト量をサポートするセルを有する閉ループシフトレジスタを示す図である。
【図３】単一のサイクルにおいて異なるシフト量をサポートする改善されたシフトレジスタのための機構を示す図である。
【図４】図3のシフトレジスタのセルのサポートロジック回路のためのユニットセル設計を示す図である。
【図５ａ】シフトレジスタによる異なるシフト動作を示す図である。
【図５ｂ】シフトレジスタによる異なるシフト動作を示す図である。
【図５ｃ】シフトレジスタによる異なるシフト動作を示す図である。
【図６】図5a、5b、および5cのシフトレジスタとは異なる物理的なレイアウトを有するシフトレジスタによるシフト動作を示す図である。
【図７】シフト処理ユニットセルロジック回路設計を示す図である。
【図８】双方向シフトレジスタを示す図である。
【図９】2次元シフトレジスタアレイを示す図である。
【図１０】シフトレジスタのインスタンスの応用を使用した2次元シフトレジスタアレイのための設計を示す図である。
【図１１】2次元シフトレジスタの水平シフトレジスタと垂直シフトレジスタとの間の接続を示す図である。
【図１２】2次元シフトレジスタの水平シフトレジスタユニットセル回路と垂直シフトレジスタユニットセル回路との間の接続を示す図である。
【図１３】本明細書に記載したようなシフトレジスタによって行われる方法の手順を示す図である。
【図１４】画像プロセッサのステンシルプロセッサコンポーネントを示す図である。
【図１５】コンピューティングシステムを示す図である。
【発明を実施するための形態】
【００１１】
図1は、8という次元を有する例示的な閉ループシフトレジスタ回路100を示している。ここで、一意なデータが、8つのセルの各々に記憶されている。シフトコマンドがあると、各レジスタの内容は、1番目のセルにその内容をロールバックする8番目のセルを除くすべてのセルに関して「右に」セル1つ分シフトすることになる。すなわち、セル0は、その内容をセル1にシフトすることになり、セル1は、その内容をセル2にシフトすることになり、その他も同様にシフトすることになり、セル7は、その内容をセル0にシフトすることになる。
【００１２】
図1は、シフトレジスタの例示的な物理的なレイアウトを図示している。図1でみられるように、セルは、論理的な順序で物理的にレイアウトされている。すなわち、セル0は、セル1の隣に物理的に隣接しており、セル1は、セル2の隣に物理的に隣接しており、以下同様である。論理的な順序でセルを物理的にレイアウトすることの問題は、配線101の長さである。ここで、当業者に理解されているように、より長い配線は、よい多く抵抗および容量、すなわち、所与のドライブ強度に対するより低速の伝搬遅延(または、逆に言えば、他のセル間のより短い長さの配線と同一の伝搬遅延で配線101をドライブしようとした場合にはセル7の出力ドライバによるより多くの電力消費)に対応することになる。ここで、信号配線は、RCの影響を大きく受ける。そのため、遅延は、リピータが挿入されると、線形的に距離に比例することになる。配線101が他のセル間のより短い配線と比較してより長い伝搬遅延を有していると仮定すると、さらにより短い出力の配線を有するセル0から6が、セル7がセル0にその内容をシフトすることができるよりもさらに速く、それらの隣接セルにそれらの内容をシフトすることができたとしても、シフトレジスタ100のパフォーマンスは、配線101によって制限されることになる。
【００１３】
上述した問題に対するソリューションは、それらの論理的な順序とは異なる順序でシフトレジスタのセルを物理的にレイアウトすることである。図2aは、図1のシフトレジスタに対する本アプローチを実例説明している。図2aでみられるように、セル1は、セル5の隣に物理的に位置している。それらの論理的な順序とは異なる順序でセルを物理的にレイアウトすることによって、図2aのシフトレジスタ内の最長の配線は、図1の配線101より短くなり、このことは、同様に、図1のシフトレジスタと比較して図2aのシフトレジスタによる潜在的なより優れたパフォーマンスに対応する。
【００１４】
図1および2aのシフトレジスタの両方とも+1のシフトレジスタのみを図示している(シフトレジスタはデータ内容を右に1つの論理ユニットセル分シフトすることのみが可能となっている)。図2bは、+1のシフトだけでなく+2のシフトもサポートするようにさらに設計された場合の図2aのシフトレジスタを示している。すなわち、単一のサイクルにおいて、図2bのシフトレジスタの任意のセルは、その次の論理的な隣またはその2番目に次の論理的な隣のいずれかにその内容をシフトすることができる。
【００１５】
例えば、図2bの直接配線から、セル0は、(配線201を介して)セル1または(配線202を介して)セル2にその内容をシフトすることができる。しかしながら、図2bの直接配線アプローチの問題は、配線複雑度である。端的に言って、図2aと2bとを比較すると、もう1つの論理的なシフトを単に導入することによって、図2aの回路と比べてかなりの数のより長い配線が図2bの回路に導入されている。配線複雑度問題は、(ユニットセルの数の観点で)より大きい次元のシフトレジスタおよび/またはより多様な論理的なシフト(例えば、+1、+2、+3、および+4)をサポートするシフトレジスタについてはその問題が悪化する。r個のレジスタを用いて、+nのシフトをサポートするためには、図2bのアプローチでは、2*(n-1)個のユニット長の最長の配線を有するr*n本の配線が必要となる。
【００１６】
そのため、例えば、多様な論理的なシフトの選択肢を有する大規模な次元のシフトレジスタためのより優れたシフトレジスタ設計が必要となる、ここで、より高いパフォーマンス且つ低減された電力消費が望ましい。
【００１７】
図3は、改善されたシフトレジスタ設計300の物理的機構を示している。図3でみられるように、シフトレジスタ300は、そのサポートロジックが上部301および下部302を有する複数のユニットセルとしてみなすことができる。論理的および物理的なシフトが、シフトレジスタを一周する「ループ」内で一方向に生じる。様々な実施形態において、上部301が一方向に(例えば、右に)物理的にシフトすると想定し得るし、下部302がもう一方の方向に(例えば、左に)物理的にシフトすると想定し得るし、すべての論理的なシフトが同一の方向(例えば、正または「+」)という場合もある。図3でみられるように、各ユニットセルをサポートするそれぞれのロジック回路303_0から303_Nは、両方の物理的方向にシフトすることを行うことができる。
【００１８】
図4は、図3のサポートロジック回路303_1から303_Nのためのユニットセルロジック回路設計401、402を示している。図4の各ユニットセルロジック設計401、402は、一方向にシフトすることをサポートすることを可能としている。そのため、図3のシフトレジスタのサポートロジック303_1から303_Nの各インスタンスは、図4のユニットセルロジック設計401、402から選択したユニットセルロジックの2つのインスタンス(すなわち、各方向について1つの選択したユニットセルロジック設計、または、別の方法では、上部について1つの選択および下部について1つの選択)を有する。
【００１９】
さらに以下でより詳細に説明しているように、どちらの特定のユニットセルロジック設計を任意の特定のユニットセルのサポートロジックの任意の特定の方向/部分について選択するかは、シフトレジスタのユニットセル間の論理的関係全体に関連する各セルの物理的なレイアウト位置についての働きによる。そのため、シフトレジスタ内のそれらの論理識別子および物理的位置に応じて、いくつかのユニットセルは、ユニットセル401の2つのインスタンスを有し得るし、他のユニットセルは、ユニットセル402の2つのインスタンスを有し得るし、さらに他のユニットセルは、ユニットセル401の1つのインスタンスおよびユニットセル402の1つのインスタンスを有し得る。単なる一例として、図4のユニットセル401、402は、+1、+2、+3、および+4の論理的なシフトを行うことができるシフトレジスタのためのものである。以下で詳細に説明しているような設計アプローチ全体にそのまま一致する一方で、他のシフト量のスキームが可能である。
【００２０】
図4の2つのユニットセルは、シフト処理ユニットセル401と非シフト処理(または、「ストレートスルー」)ユニットセル402とを含む。シフト処理ユニットセル401は、入力データ内容を隣接セルから受信する。ここで、各入力は、入力において受信されるデータに既に適用し終えた論理的なシフトの量を表している。例として、+1の入力において受信されたデータは、シフト処理ユニットセル401におけるその受信時までに論理的に1回シフトされていて、+2の入力において受信されたデータは、シフトセル401におけるその受信時までに論理的に2回シフトされていて、+3の入力において受信されたデータは、シフトセル401におけるその受信時までに論理的に3回シフトされていて、+4の入力におけるデータは、シフトセル401におけるその受信時までに論理的に4回シフトされている。
【００２１】
シフトセル401はまた、送信されるデータがシフトセル401から送信される時点でどれくらいシフトされているかを示す出力を有する。すなわち、+1の出力は、シフトセル401によって送信される時点で論理的に1回シフトされているデータに対応し、+2の出力は、シフトセル401によって送信される時点で論理的に2回シフトされているデータに対応し、+3の出力は、シフトセル401によって送信される時点で論理的に3回シフトされているデータに対応し、+4の出力は、シフトセル401によって送信される時点で論理的に4回シフトされているデータに対応する。
【００２２】
定義上は、+1の出力において送信されるデータは、ユニットセルのローカルレジスタ空間403から読み込まれる。すなわち、ローカルレジスタ403から読み込まれユニットセル401から次のセルに送信されるデータは、それが送信される時点で+1ほどシフトされる。そのため、+1の出力は、シフト処理ユニットセル401のローカルレジスタ空間403に接続される。同様に、+2の出力から送信されるデータは、それがシフト処理ユニットセル401によって受信された時点で+1ほど既にシフトされていたものでなければならない。そのため、+2の出力は、+1の入力によって直接供給される。同様の理由により、+3の出力は、+2の入力によって直接供給され、+4の出力は、+3の入力によって直接供給される。
【００２３】
シフトセルが入力データに適用する処理は、シフト量コマンド(例えば、+1、+2、+3、+4)に依存する。シフトコマンドより少ないシフト量に対応する入力(例えば、入力データが+1の入力において受信されシフトコマンドが+3である)については、シフトセル401は、入力データを次のより高いシフト出力上で再送信する(例えば、+3のシフトコマンドについては、データがローカルレジスタ403から読み込まれ+1の出力において送信され、+1の入力において受信されたデータが+2の出力から送信され、+2の入力において受信されたデータが+3の出力から送信される)。シフトコマンドと同一のシフト量を有する入力において受信された入力データ(例えば、入力データが+3の入力において受信され且つシフトコマンドが+3である)については、ユニットセルは、そのローカルレジスタ空間403に入力データを記憶する。以下の説明から明らかとなっているように、シフトコマンドより大きいシフト量を有する入力および出力は、必然的にセルによって使用されない(例えば、+3のシフトコマンドについては、任意のセルの+4の入力または+4の出力にはデータは現れない)。
【００２４】
ローカルレジスタ空間403は、ある実施形態においては、データの幅は2倍であり、自身の内部にシフト能力を有している。ここで、第1の時間フレーム(例えば、第1のハーフサイクル)の間に、データが、レジスタ空間403_1の「第1の」ハーフから読み込まれ、データは、それらの適切な入力/出力経路に沿ってユニットセル間をシフトレジスタを介して伝搬される。第2の時間フレーム(例えば、第2のハーフサイクル)の間に、データが、各ユニットセルにおいてローカルに、レジスタ空間403_2の「第2の」ハーフに書き込まれる。レジスタ空間403のどの部分から読み込むのか(すなわち、どちらのハーフが「第1の」ハーフであるか)およびどの部分に書き込むか(すなわち、どちらのハーフが「第2の」ハーフであるか)が、連続したサイクル間で切り替わる。本プロセスによれば、様々な量のシフト(例えば、+1、+2、+3、および+4)が各々単一のサイクルにおいて生じ得る。しかしながら、他のアプローチを使用してレジスタ空間を実装してもよい、との気付きは的を射たことである。例えば、別の実施形態においては、フロップベースのマルチポートレジスタファイルが使用されてもよく、そこではすべてのデータがクロックエッジで読み込みまたは更新される。さらに他の可能な実施形態が存在してもよい。
【００２５】
ストレートスルーセル402は、あるシフト量をシフトセルのある入力/出力に割り当てるスキームに支障を来たさないように、論理的な順序以外の順序でセルの物理的なレイアウトを可能にするために使用される。すなわち、的確な論理的なシフト順序が、ストレートスルーユニット402によって、つまり、入力ノードにおいて受信されるものと同一のシフト量で各出力ノードを供給することによって保たれる。そのため、論理的な順序における2つのシフト処理ユニットセルがそれらの間に1つまたは複数の他のセルを物理的に有している場合には、これらの他のセルは、送信ユニットセルの出力において送信されるとともに受信シフト処理ユニットセルの入力において受信される際の的確なシフト量を保持するために、ストレートスルーセルを有している。
【００２６】
図5aから5cは、+1、+2、+3、および+4のシフトをサポートする次元が10のシフトレジスタによって確立されたデータ経路を検討している。上記説明と整合して、セルの各々のためのサポートロジック回路は、一方向に(「右に」)データをシフトする4つの入力および4つの出力を有する上半分と、もう一方の方向に(「左に」)データをシフトする4つの入力および4つの出力をまた有する下半分とを有しているとみなすことができる。セルが純粋な論理的な順序以外の順序で物理的にレイアウトされている(すべてのセルがその論理的な順序の隣接関係上の隣に物理的に存在するわけではない)ことに留意されたい。
【００２７】
以下の説明から明確になっているように、ユニットセル1、2、3および4のサポートロジック回路は、その上半分にあるシフト処理ユニットセルとその下半分にあるストレートスルーユニットセルとを有する。一方、ユニットセル9、8、7、6のためのサポートロジックは、その上半分にあるストレートスルーユニットセルおよびその下半分にあるシフト処理ユニットセルを有する。ユニットセル5は、その上部にあるシフト処理ユニットセルの受信部分およびその下部にあるシフト処理ユニットセルの送信部分から構成される。ユニットセル0は、その下部にあるシフト処理ユニットセルの受信部分およびその上部にあるシフト処理ユニットセルの送信部分から構成される。セル0および5の両方については、受信部分の入力は、シフト処理ユニットセル401の設計と整合するように送信部分に有線接続されている。
【００２８】
図5aは、+1のシフトの動作を示している。ここで、その受信側においてその論理的な順序の隣接関係上の隣に各々が物理的に存在しているセル1から4を用いて、各セルの上部は、その的確な論理的な隣からデータを直接受信することになる。そのため、上述したように、セル1から4の上部は、+1のシフトに関する的確なシフト機能を実施していると認められる。すなわち、セル1から4の各々の上部は、その+1の入力においてデータを受信し、そのローカルレジスタ空間にそれを記憶する。加えて、ユニットセル1から4の各々は、そのローカルレジスタ空間からデータを読み込み、その+1の出力からそれを送信する。
【００２９】
ユニットセル4と5とは、ユニットセル9、8、7および6によって物理的に分離されている。そのため、ユニットセル9、8、7および6の上半分は、ストレートスルー機能を実施していると認められる。ユニットセル9、8、7および6の上半分がストレートスルー機能を実施しているため、ユニットセル5は、的確なシフト量を反映している入力において(すなわち、その+1の入力において)ユニットセル4によって送信されたデータを受信する。そのため、ユニットセル5の上部は、シフト処理ユニットセルの受信側機能を実行していると認められる。ユニットセル5の下部は、シフト処理ユニットセルの送信側機能を実行する。シフトレジスタ全体の下部の実行が、(ユニットセル0がその下部では受信側シフトセル機能およびその上部では送信側シフト処理ユニットセル機能を実行していることを除いて)異なる方向であること以外上部と同一である。すべてのセルのユニットセルロジックが+1の入力および出力のみを使用していることに留意されたい。すなわち、すべてのユニットセルの+2、+3、および+4の入力および出力はデータを搬送しない。
【００３０】
図5bは、+2のシフトを行う同一のシフトレジスタを示している。ここで、この場合も同様に、セル1から4の上部は、+2のシフトに関するシフト処理ユニットセル機能を実施していると認められる。これらのセルの各ユニットは、その+2の入力において受信したデータをローカルに記憶し、そのローカルレジスタの内容をその+1の出力から送信し、その+1の入力において受信したデータをその+2の出力から送信する。ここで、+1および+2のデータ入力および出力はセルによって使用されているが+3および+4の入力および出力は使用されていないことに留意されたい。同様に、ユニットセル9、8、7および6の上部によって実施されるストレートスルー機能は、+1および+2の両方の入力および出力を使用する。既に述べたように、終端ユニットセル5は、その上部では+2の受信側シフト処理ユニットセル機能を、その下部では+2の送信側シフト処理ユニットセル機能を実施する。同様に、終端ユニットセル0は、その下部では+2の受信側シフト処理ユニットセル機能を、その上部では+2の送信側シフト処理ユニットセル機能を実施する。
【００３１】
図5cは、+3のシフトを行う同一のシフトレジスタを示している。セル1から4の上部は、+3のシフトに関するシフト処理ユニットセル機能を実施していると認められる。これらのセルの各々は、その+3の入力において受信したデータをローカルに記憶し、そのローカルレジスタの内容をその+1の出力から送信し、その+1の入力において受信したデータをその+2の出力から送信し、その+2の入力において受信したデータをその+3の出力から送信する。ここで、+1、+2、および+3のデータ入力および出力はユニットセルによって使用されているが+4の入力および出力は使用されていないことに留意されたい。ユニットセル9、8、7および6の上部によって実施されるストレートスルー機能は、+1、+2、および+3の入力および出力を使用する。既に述べたように、終端ユニットセル5は、その上部において+3の受信側シフト処理ユニットセル機能を、その下部において+3の送信側シフト処理ユニットセル機能を実施する。同様に、終端ユニットセル0は、その下部では+3の受信側シフト処理ユニットセル機能を、その上部では+3の送信側シフト処理ユニットセル機能を実施する。
【００３２】
図6は、物理的なレイアウトが異なっていることを除いて上述したものと同一の原理に従って設計された別の次元が10のシフトレジスタを示している。ここで、図6の設計は、(図5aから5cの設計と同様に)論理的な順序でレイアウトされている5つのセルのセットおよび5つの隣接するストレートスルーセルのセットの代わりに、論理的な順序でレイアウトされている2つのセルのセットおよび2つの隣接するストレートスルーセルのセットを有する。図6は、図6のシフトレジスタによって行われる+1のシフトを示している。
【００３３】
図5aのシフトレジスタと図6のシフトレジスタとを比較すれば、図6のシフトレジスタ(図6中には1セル距離が4ホップ存在している)と比べてより多くの最短可能距離ホップを有している(図5a中には1セル距離が8ホップ存在している)と図5aのシフトレジスタを特徴付けることができることに留意されたい。加えて、図5aのシフトレジスタは、図6のシフトレジスタと比べてより長い最大距離ホップを有している(図5aのシフトレジスタが5セルの最大ホップ距離を有している一方で、図6のシフトレジスタは3セルの最大ホップ距離を有している)。
【００３４】
そのため、図6のシフトレジスタは、図5aのシフトレジスタより速いはずである。回路のおおまかな原理および特性は、遅延(距離)が増大するのに先立ってセルをレジスタの最大シフト量以下の論理的な順序で物理的にグループ分けし得ることである。図5aのシフトレジスタは、最大シフトレジスタ量(4)より大きい量(5)で論理的な順序でセルを物理的にグループ化している一方で、図6のシフトレジスタはしていない。そのため、この場合も同様に、図6の回路は、図5aの回路より速いはずである。
【００３５】
図7は、シフト処理ユニットセル401のためのロジック設計の実施形態701を示している。ここで、マルチプレクサ701は、シフトコマンドに基づいてシフト済み入力のどれをそのローカルレジスタ空間に書き込むかを選択する。すなわち、シフトコマンドによって指定されたシフトの量は、マルチプレクサ701のチャネル選択入力を対象としている。回路はまた、内部制御信号を利用し、第1の内部制御信号は、何らかのシフト(+1、+2、+3または+4)が発生しているかどうかを示し、+1の出力を有効にするために使用される。第2の内部制御信号は、+2、+3または+4のシフトが発生しているかどうかを示し、+2の出力を有効にするために使用される。第3の内部制御信号は、+3または+4のシフトが発生しているかどうかを示し、+3の出力を有効にするために使用される。第4の内部制御信号は、+4のシフトが発生しているかどうかを示し、+4の出力を有効にするために使用される。データ経路はマルチビットデータ経路であると理解され、ワイドデータワードをそれらに沿って搬送することができる。
【００３６】
上記の説明では、一方向に(+、または「右に」)シフトするシフトレジスタに焦点を当てていた。図8は、両方向に(+や右に、-や左に)シフトすることができる双方向レジスタの高次の図を示している。ここで、双方向シフトレジスタは、+のシフトレジスタのためにサポートユニットセルロジック801を構成し、-のシフトレジスタのためにサポートユニットセルロジック802を構成し、同一のレジスタ空間803に両方向に関して同一の論理セルを接続する(簡潔にするために図8は1つのセルのための接続のみを示している)ことによって実装されている。+のシフトレジスタ801のためのロジック設計は、例えば、図5a〜cおよび6に関して上述したようなことと同一である一方で、-のシフトレジスタ802のためのロジック設計も、シフトおよびデータフロー方向が時計回りの方向ではなく反時計回りの方向であること以外、図5a〜cに関して上述したようなことと同一である。+のシフトを実装するために、+のロジック801が使用され、-のロジックは使用しない。-のシフトを実装するために、-のロジック802が使用され、+のロジック801は使用しない。そのため、どちらの方向のシフトも追加の配線リソースを消費することなく可能となっている。すなわち、配線が+のシフト方向と-のシフト方向との間で共有される。例えば、図7のデータ+4出力の配線はまた、同一のユニットセルに対するデータ-4入力の配線のためのバイパス配線を実装するために使用され得る。そのため、本設計は、かなりの配線削減効率を可能としている。
【００３７】
図9は、2次元シフトレジスタアレイ900を示している。図9でみられるように、2次元シフトレジスタアレイは、レジスタの2次元アレイを効率的に形成する、多数の行または列のレジスタを含む。セル間の矢印は、2次元レジスタアレイが右、左、上、または下にシフトすることが可能であることを示している(図面を簡易にするために、任意の行または列に沿ったループバック能力が存在し得るが図示はしていない)。そのため、2次元シフトレジスタアレイは、SHIFT(+/-X; +/-Y)形式のシフトコマンドをサポートし得る、ここで、Xは、行軸に沿ったシフト量に対応し、Yは、列軸に沿ったシフト量に対応し、極性(+または-)は、どちらかの軸に沿ったシフトの方向(行軸に沿った左もしくは右または列軸に沿った上もしくは下)を示す。2次元シフトレジスタは、さらに以下で詳細に説明しているように、例えば、画像プロセスにおいて実装され得る。
【００３８】
図10は、図3から6について詳細に上述した基本シフトレジスタ設計から構成される2次元シフトレジスタの高次の図を示している。ここで、ロジック回路インスタンス1001_1から1001_Nは、特定の行軸に沿ったシフトレジスタのためのユニットセルロジック回路をそれぞれ実装している、ここで、各シフトレジスタは、上述したシフトレジスタ設計原理を実装している。回路1001_1は、第1の行に沿ったシフトレジスタを実装するために使用されるロジック回路に対応し、回路1001_2は、第2の行に沿ったシフトレジスタを実装するために使用されるロジック回路に対応し、以下同様である。図面を簡易にするために、回路は、一方向におけるシフト能力のみを示している、しかしながら、インスタンス1001_1から1001_Nの各々は、図8について上述した原理と整合性が取れる双方向シフト能力を実施してもよい。
【００３９】
同様に、ロジック回路インスタンス1002_1から1002_Mは、特定の列軸に沿ったシフトレジスタのためのユニットセルロジック回路をそれぞれ実装している、ここで、各シフトレジスタは、上述したシフトレジスタ設計原理を実装している。回路1002_1は、第1の列に沿ったシフトレジスタを実装するために使用されるロジック回路に対応し、回路1002_2は、第2の列に沿ったシフトレジスタを実装するために使用されるロジック回路に対応し、以下同様である。この場合も同様に、図面を簡易にするために、回路は、一方向におけるシフト能力のみを示している、しかしながら、インスタンス1002_1から1002_Nの各々は、図8について上述した原理と整合性が取れる双方向シフト能力を実施してもよい。
【００４０】
図10の回路インスタンス1001、1002が、水平シフト能力を示す回路1001および垂直シフト能力を示す回路1002を用いてシフトレジスタのセルを実装するために使用されるロジック回路を図示していることに留意されたい。同一のアレイセルに関連付けられた水平シフトおよび垂直ユニットセルシフト回路は、同一のレジスタ空間に接続されている。水平シフトを実装するために、水平シフト回路1001_1から1001_Mが、すべての行に沿った水平シフト処理を達成するために使用され、垂直シフトを実装するために、垂直シフト回路1002_1から1002_Mが、すべての列に沿った垂直シフトを実装するために使用される。
【００４１】
2次元シフトレジスタを実装することに伴う問題は、例えば、水平シフトおよび垂直シフトを単一のコマンド(例えば、SHIFT(+3, +4))で行うことができるように、水平シフト回路1001を垂直シフト回路1002に接続することである。図11は、10x10の2次元シフトレジスタアレイの物理的なレイアウトを示している、ここで、各行のレジスタ回路は、図5aから5cの物理的なセルレイアウトを実装し、各列のレジスタ回路は、図5aから5cの物理的なレイアウトを実装している。ここで、アレイのセルは、Q/R形式の数値シンタックスを含み、Qは、垂直論理セル割り当てを表し、Rは、水平論理セル割り当てを表す(図11の左および上の端に沿って見えている「行」および「列」ラベルは物理的な行および列に対応している)。そのため、任意の行にわたるRの値だけに注目すれば、図5aから5cのセルパターンが見て取れる。加えて、任意の列にわたるQの値だけに注目すれば、図5aから5cのセルパターンがまた見て取れる。
【００４２】
水平シフトのみが必要な場合には、データシフトは行のみに沿って生じる(図10の回路インスタンス1001のみを使用する)。垂直シフトのみが必要な場合には、データシフトは列のみに沿って生じる(図10の回路インスタンス1002のみを使用する)。水平および垂直シフトの両方が発生する場合には、データユニットを、例えば、まず水平にシフトして次に垂直にシフトする実施形態においては、特定の行から的確な論理垂直セルに的確にシフトする必要がある。例として、行0に沿ったすべてのセルは、垂直論理セル0(それらのRの値の各々が0)内に存在するとしてみなされる。+1のシフトアップを行うためには、行0の各セルの内容を、1という垂直論理値を有するセルにシフトする必要がある(すなわち、内容を、各々が1というQの値を有するセルにシフトする必要がある)。したがって、矢印1101は、的確なシフトを論理的に行う物理配線を示している。
【００４３】
図12は、水平シフトロジックと垂直シフトロジックとの間の接続の例を示している。ここで、例えば、シフト処理ユニットセル1201は、図11中の行0の任意のセルのための水平シフトロジックに対応する。したがって、シフト処理ユニットセル1202は、データが水平移動から垂直移動にシフトするように変換するために水平シフトロジック1201がシフトする先のセルの垂直シフトロジックに対応する。この特定の例においては、垂直シフトロジック1202は、水平シフトロジック1201と同一の列にあるが1という論理垂直値を有する(すなわち、1というQの値を有する)垂直シフトロジックに対応する。そのため、例として、回路1201は、図11のセル1102のための水平シフト回路に対応し、回路1202は、図11のセル1103のための垂直シフト回路に対応している。
【００４４】
水平次元から垂直次元へのシフトの動作は、+1の水平シフトに対応する。そのため、データは、次のより高い垂直論理値を有するセル(例えば、0というQの値を有するセル1102から1というQの値を有するセル1103に)の+1の入力において受信される。データが+1の入力において垂直シフト回路にシフトされると、垂直シフト回路の動作は、詳細に上述したような動作をする(例えば、+2の垂直移動が必要な場合には、+1の垂直シフト済みデータは、+2の信号ラインにシフトアップされ次の論理的により高いセルのレジスタに書き込まれることになる)。
【００４５】
水平から垂直への接続は、図11中の行0から3の各々については接続1101に類似している。一方、接続1104は、4というQの論理値から5というQの論理値への接続には行4から行9へのジャンプが必要になるため、より長くなる。図12にはマルチプレクサ1203が存在することに留意されたい。ここで、実施形態に従って、水平シフトは、任意のシフトコマンドに対して垂直シフトの前に行われる。すべての水平シフト処理が完了してシフトコマンドを満足した際に、垂直シフトがコマンドで指定されていない場合には、マルチプレクサ1203は、水平シフト回路1201のローカルレジスタへの書き込むチャネルを有効にする。一方、コマンドが垂直シフトを指定している場合には、シフトコマンドによって指定されたすべての水平シフト処理が完了すると、マルチプレクサ1203は、垂直シフト回路1202にデータをルーティングするチャネルを有効にする。+1のみの垂直シフトが指定されていた場合、データは、シフト回路1202のローカルレジスタ空間に書き込まれる。より多くの垂直シフト処理が指定されていた場合には、ユニットセル1201からユニットセル1202までシフトされたデータは、ユニットセル1202の+2の出力から送信される。
【００４６】
シフトレジスタ全体の合成プロセスにおけるグリッチを避けるために、EDAコンパイラで用いるシフトレジスタの回路記述(例えば、合成ツールで用いるRTL記述)を2つの別個のシフトレジスタに分けてもよい、との気付きは的を射たことである。例えば、第1のシフトレジスタを、例えば、開始端(セル0)において送信側シフト処理ユニットセル回路と終端(セル5)において受信側シフト処理ユニットセル回路とを用いる前述した図5a〜5cのシフトレジスタの上部として記述してもよい。第2のシフトレジスタを、例えば、前述した図5aから5cのシフトレジスタの下部として記述してもよい。シフトレジスタを2つの別個のシフトレジスタ記述に分けることによって、合成ツールがシフトレジスタの設計のような論理的な「ループ」で有し得る任意の問題を回避することができる。
【００４７】
図13は、上述したようなシフトレジスタのセルによって行われる方法の手順を示している。方法は、それぞれの入力においてそれぞれのデータアイテムを受信するステップであって、入力は各々、異なるそれぞれのシフト量を割り当てられている、ステップ1301を含む。方法は、シフトコマンドによって指定されたシフト量を有する入力のうちの1つにおいて受信されるデータアイテムのうちの1つをレジスタ空間に書き込むステップ1302を含む。方法は、他のデータアイテムがそれぞれ受信されるそれぞれの入力のものより増分的により高いシフト量を割り当てられているそれぞれの出力から他のデータアイテムを送信するステップであって、増分的により高いシフト量は、シフトコマンドによって指定されたシフト量未満である、ステップ1303を含む。方法は、レジスタ空間からデータアイテムを読み込み、1という大きさを有するシフト量を割り当てられている出力から読み込んだデータアイテムを送信するステップ1304を含む。
【００４８】
上述した2次元シフトレジスタアレイの実施形態は、1つまたは複数の統合ステンシルプロセッサを有する画像プロセッサ内に実装されてもよい。ステンシルプロセッサは、以下の説明からより明確になっているように、画像データのステンシルを処理するために最適化またさもなければ設計されたプロセッサである。
【００４９】
図14は、ステンシルプロセッサ機構1400の実施形態を示している。図14でみられるように、ステンシルプロセッサは、データ計算ユニット1401、スカラプロセッサ1402、関連メモリ1403、およびI/Oユニット1404を含む。データ計算ユニット1401は、実行レーンのアレイ1405、2次元シフトアレイ構造1406、およびアレイの特定の行または列に関連付けられた別個のランダムアクセスメモリ1407を含む。
【００５０】
I/Oユニット1404は、データ計算ユニット1401に受信した画像データの入力「シート」をロードするとともに、ステンシルプロセッサからのデータの出力シートをデータ計算ユニットの外部に記憶する責任を負う。ある実施形態においては、データ計算ユニット1401にシートデータをロードする処理は、画像データの行/列に受信したシートをパースする処理と、2次元シフトレジスタ構造1406または実行レーンアレイの行/列のそれぞれのランダムアクセスメモリ1407(以下でより詳細に説明)に画像データの行/列をロードする処理とを伴う。シートがまずメモリ1407にロードされると、実行レーンアレイ1405内の個々の実行レーンはその後、適切なときに(例えば、シートのデータに対する処理の直前のロード命令のときに)、ランダムアクセスメモリ1407から2次元シフトレジスタ構造1406にシートデータをロードし得る。データのシートをレジスタ構造1406に(シートジェネレータから直接またはメモリ1407からのどちらかから)ロードする処理が完了すると、実行レーンアレイ1405の実行レーンは、データを処理し、ステンシルプロセッサの外部にまたはランダムアクセスメモリ1407に出来上がったデータを最終的に「ライトバック」する。後者である場合には、I/Oユニット1404は、ランダムアクセスメモリ1407からデータをフェッチして、その後シートジェネレータの外部に書き込まれる出力シートを形成する。
【００５１】
スカラプロセッサ1402は、命令メモリ1403からステンシルプロセッサのプログラムコードの命令読み込み、実行レーンアレイ1405内の実行レーンに命令を発行する、プログラムコントローラ1409を含む。ある実施形態においては、単一の同一の命令が、アレイ1405内のすべての実行レーンにブロードキャストされ、データ計算ユニット1401からSIMD的な挙動をもたらす。ある実施形態においては、スカラメモリ1403から読み込まれ実行レーンアレイ1405の実行レーンに発行される命令の命令フォーマットは、命令あたり2つ以上のオペコードを含む超長命令語(VLIW)タイプのフォーマットを含む。さらに実施形態においては、VLIWフォーマットは、各実行レーンのALUによって行われる数学的機能を指示するALUオペコードおよび(実行レーンの特定の実行レーンまたはセットに対するメモリ演算を指示する)メモリオペコードの両方を含む。様々な実施形態において、実行レーンそのものが、それらが所有するそれぞれのシフト命令を実行して、シフトレジスタの内容の大規模SIMD2次元シフトを達成する。
【００５２】
「実行レーン」という用語は、命令を実行することが可能な1つまたは複数の実行ユニット(例えば、命令を実行することができるロジック回路)のセットを指す。ただし、様々な実施形態において、実行レーンは、単なる実行ユニットを超えたよりプロセッサ的な機能性を含む。例えば、実行レーンはまた、1つまたは複数の実行ユニットの傍らに、受信した命令をデコードするロジック回路、または、よりMIMD的な設計のケースでは、命令をフェッチおよびデコードするロジック回路を含み得る。MIMD的なアプローチについては、集中型プログラム制御アプローチを主に本明細書に説明しているが、より分散したアプローチを、(例えば、アレイ1405の各実行レーン内にプログラムコードおよびプログラムコントローラを含む)様々な別の実施形態において実施してもよい。
【００５３】
実行レーンアレイ1405、プログラムコントローラ1409、および2次元シフトレジスタ構造1406の組合せは、幅広く適用可能/設定可能なハードウェアプラットフォームを多様なプログラマブル機能に提供している。例えば、アプリケーションソフトウェアデベロッパは、個々の実行レーンが多種多様な機能を行うことが可能であるとともに任意の出力アレイの位置に最も近い入力画像データに容易にアクセスすることが可能であることを考えれば、多様な異なる機能的能力および次元(例えば、ステンシルサイズ)を有するカーネルをプログラムすることが可能である。
【００５４】
演算中、実行レーンアレイ1405および2次元シフトレジスタ1406が理由で、画像の複数のステンシルを並列に演算することができる(その分野で理解されているように、ステンシルは画像内で隣接するNxMまたはNxMxCのピクセルのグループとして一般的に実施される(ここで、NがMに等しくてもよい))。ここで、例えば、各実行レーンは、画像データ内のデータに相当する特定のステンシルのための処理を行うための演算を実行する一方で、2次元シフトアレイは、そのデータをシフトして、ステンシルのためのタスクを実行している実行レーンに接続されたレジスタ空間に各ステンシルのデータをシーケンシャルに渡している。また、2次元シフトレジスタ1406が実行レーンアレイ1405より大きい次元であり得る(例えば、実行レーンアレイが次元XxXである場合には、2次元シフトレジスタ1406は次元YxYであり得る、ここで、Y>X)ことに留意されたい。ここで、ステンシルを完全に処理するためには、ステンシルの左端が実行レーンによって処理されると、シフトレジスタ1406内のデータは、実行レーンアレイ1405の右端から「押し出す」ことになる。シフトレジスタ1406の余剰な次元は、実行レーンアレイの端から押し出されるデータを負担することができる。
【００５５】
実行レーンアレイ1405で処理される画像データのためのデータストアとしての動作とは別に、ランダムアクセスメモリ1407はまた、1つまたは複数のルックアップテーブルを保持し得る。様々な実施形態において、1つまたは複数のスカラルックアップテーブルもスカラメモリ1403内にインスタンス化され得る。
【００５６】
スカラルックアップは、同一のルックアップテーブルからの同一のデータ値を同一のインデックスから実行レーンアレイ1405内の実行レーンの各々に渡す処理を伴う。様々な実施形態において、上述したようなVLIW命令フォーマットは、スカラプロセッサによって行われるルックアップ演算を指示するスカラオペコードもスカラルックアップテーブルに含めるように拡張される。オペコードを伴った使用のために指定されるインデックスは、即値オペランドであり得る、または、いくつかの他のデータストレージロケーションからフェッチされ得る。いずれにせよ、ある実施形態においては、スカラメモリ内のスカラルックアップテーブルからのルックアップは、同一のクロックサイクル中に実行レーンアレイ1405内のすべての実行レーンに同一のデータ値をブロードキャストする処理を原則的に伴う。
【００５７】
上述した様々な画像プロセッサ機構の特徴は、従来の観念における画像処理に必ずしも限定されるわけではなく、したがって、画像プロセッサに再び特徴付けされるようにさせ得る(またはさせ得ない)他のアプリケーションに適用されてもよい、との指摘は的を射たことである。例えば、上述した様々な画像プロセッサ機構の特徴の一部が実際のカメラ画像の処理とは対照的にアニメーションの作成および/または生成および/またはレンダリングにおいて使用されているならば、画像プロセッサは、グラフィック処理ユニットとして特徴付けられ得る。加えて、上述した画像プロセッサの機構上の特徴は、ビデオ処理、ビジョン処理、画像認識、および/または機械学習などの他の技術的アプリケーションに適用され得る。このような適用において、画像プロセッサは、より汎用的なプロセッサ(例えば、コンピューティングシステムのCPUまたはその一部)と(例えば、それに対するコプロセッサとして)統合され得る、または、コンピューティングシステム内のスタンドアローンプロセッサであり得る。
【００５８】
上述したハードウェア設計の実施形態は、半導体チップ内におよび/または最終的な半導体製造プロセスへのターゲッティングのための回路設計の記述として、具現化され得る。後者のケースでは、回路設計のそのような記述は、(例えば、VHDLまたはVerilog)レジスタ転送レベル(RTL)回路記述、ゲートレベル回路記述、トランジスタレベル回路記述、もしくはマスク記述、または様々なその組合せの形式を取り得る。回路設計の記述は、コンピュータ可読記憶媒体(CD-ROMまたは他のタイプのストレージ技術など)上に一般的に具現化される。回路設計の記述は、コンピュータ可読記憶媒体(CD-ROMまたは他のタイプのストレージ技術など)上に一般的に具現化される。
【００５９】
前述の記載から、上述したような画像プロセッサをコンピュータシステム上のハードウェアに(例えば、ハンドヘルドデバイスのカメラからのデータを処理するハンドヘルドデバイスのシステム・オン・チップ(SOC)の一部として)具現化してもよい、との認識することは的を射たことである。画像プロセッサがハードウェア回路として具現化されるケースにおいては、画像プロセッサによって処理される画像データがカメラから直接受信され得ることに留意されたい。ここで、画像プロセッサは、個別のカメラの一部、または、統合カメラを有するコンピューティングシステムの一部であり得る。後者のケースでは、画像データは、カメラから、または、コンピューティングシステムのシステムメモリ(例えば、カメラはその画像データを画像プロセッサではなくシステムメモリに送信する)から、直接受信され得る。前述の記載において説明した特徴の多くが(アニメーションをレンダリングする)グラフィックプロセッサユニットに適用可能であり得ることに留意されたい。
【００６０】
図15は、コンピューティングシステムの例示的な図を提供している。以下で説明しているコンピューティングシステムのコンポーネントの多くは、統合カメラおよび関連画像プロセッサを有しているコンピューティングシステム(例えば、スマートフォンまたはタブレットコンピュータなどのハンドヘルドデバイス)に適用可能である。当業者は、2つの間を容易に記述することができるであろう。
【００６１】
図15でみられるように、基本コンピューティングシステムは、中央処理ユニット1501(例えば、複数の汎用処理コア1515_1から1515_Nと、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置されたメインメモリコントローラ1517とを含み得る)、システムメモリ1502、ディスプレイ1503(例えば、タッチスクリーン、フラットパネル)、ローカル有線ポイント・ツー・ポイントリンク(例えば、USB)インターフェース1504、様々なネットワークI/O機能1505(イーサネット(登録商標)インターフェースおよび/またはセルラモデムサブシステムなど)、無線ローカルエリアネットワーク(例えば、WiFi)インターフェース1506、無線ポイント・ツー・ポイントリンク(例えば、Bluetooth(登録商標))インターフェース1507、およびグローバル・ポジショニング・システムインターフェース1508、様々なセンサ1509_1から1509_N、1つまたは複数のカメラ1510、バッテリ1511、電力管理制御ユニット1512、スピーカおよびマイクロフォン1513、ならびにオーディオエンコーダ/デコーダ1514を含み得る。
【００６２】
アプリケーションプロセッサまたはマルチコアプロセッサ1550は、そのCPU1501内の1つまたは複数の汎用処理コア1515、1つまたは複数のグラフィカル処理ユニット1516、メモリ管理機能1517(例えば、メモリコントローラ)、I/O制御機能1518および画像処理ユニット1519を含み得る。汎用処理コア1515は、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを一般的に実行する。グラフィック処理ユニット1516は、例えば、ディスプレイ1503に表示されるグラフィック情報を生成するために、グラフィックの集約的機能を一般的に実行する。メモリ制御機能1517は、データをシステムメモリ1502に書き込み/から読み込むためにシステムメモリ1502とのインターフェースを有する。システム1500の電力管理制御ユニット1512は、電力消費を一般的に制御する。
【００６３】
画像処理ユニット1519は、前述の記載において詳細に上述した画像処理ユニット実施形態のいずれかに従って実装され得る。代替としてまたは組合せて、IPU1519は、GPU1516およびCPU1501のいずれかまたは両方にそのコプロセッサとして接続され得る。加えて、様々な実施形態において、GPU1516は、詳細に上述した画像プロセッサの特徴のいずれかを用いて実装され得る。
【００６４】
本明細書に記載および図示したシフトレジスタは、画像処理以外のアプリケーションのために使用されてもよい。例として、シフトレジスタは、パラレルシリアルデータコンバージョン、またはシリアルパラレルデータコンバージョンにおいて使用されてもよい。シフトレジスタは、遅延回路において使用されてもよい。シフトレジスタは、デジタルパルス拡張器において使用されてもよい。シフトレジスタは、デジタル信号プロセッサ(DSP)、汎用プロセッサコア、またはASICにおいて使用されてもよい。
【００６５】
タッチスクリーンディスプレイ1503の各々、通信インターフェース1504〜1507、GPSインターフェース1508、センサ1509、カメラ1510、スピーカ/マイクロフォン1513、およびコーデック1514のすべては、コンピューティングシステム全体に関連する様々な形式のI/O(入力および/または出力)としてみなすことができ、同様に、コンピューティングシステムは、統合周辺機器デバイス(例えば、1つまたは複数のカメラ1510)を適切な場所に含む。実施形態に応じて、これらのI/Oコンポーネントのいくつかを、アプリケーションプロセッサ/マルチコアプロセッサ1550に統合してもよい、または、ダイとは別にもしくはアプリケーションプロセッサ/マルチコアプロセッサ1550のパッケージの外部に配置してもよい。
【００６６】
ある実施形態において、1つまたは複数のカメラ1510は、カメラとその視野内のオブジェクトとの間の深度を測定することができる深度カメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用CPUコア(または、プログラムコードを実行するための命令実行パイプラインを有する他の機能ブロック)において実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェア、および/またはファームウェアは、上述した機能のいずれかを行い得る。
【００６７】
発明の実施形態は、上述したような様々なプロセスを含み得る。プロセスは、マシン実行可能命令に具現化され得る。命令は、汎用または特殊用途プロセッサにあるプロセスを行わせるために使用され得る。あるいは、これらのプロセスは、プロセスを行うためのハードワイヤードロジックを含む特定のハードウェアコンポーネントによって、または、任意の組合せでプログラムされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントによって、行われ得る。
【００６８】
本発明の要素はまた、マシン実行可能命令を記憶するための機械可読媒体として提供され得る。機械可読媒体は、フロッピーディスケット、光ディスク、CD-ROM、および光磁気ディスク、FLASHメモリ、ROM、RAM、EPROM、EEPROM、磁気もしくは光学カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体/機械可読媒体を含み得るがそれらに限定されない。例えば、本発明は、搬送波に具現化されたデータ信号または通信リンク(例えば、モデムまたはネットワーク接続)を介した他の伝搬媒体を経由して、リモートコンピュータ(例えば、サーバ)から要求コンピュータ(例えば、クライアント)に伝達され得るコンピュータプログラムとしてダウンロードされ得る。
【００６９】
前述の本明細書においては、発明をその特定の例示的な実施形態を参照して説明してきた。しかしながら、添付の特許請求の範囲に記載されているような発明の大局的な精神および範囲を逸脱しない限り様々な修正および変更をしてもよいことは明白であろう。それゆえ、本明細書および図面は、制限的な観念ではなく例示的なものとしてみなされるべきである。
【符号の説明】
【００７０】
1400  ステンシルプロセッサ
1401  データ計算ユニット
1402  スカラプロセッサ
1403  スカラメモリ
1404  I/Oユニット
1405  実行レーンアレイ
1406  2次元シフトレジスタ
1407  ランダムアクセスメモリ
1409  プログラムコントローラ
1500  システム
1501  中央処理ユニット
1502  システムメモリ
1503  ディスプレイ
1504  ローカル有線ポイント・ツー・ポイントリンクインターフェース
1505  ネットワークI/O機能
1506  無線ローカルエリアネットワークインターフェース
1507  無線ポイント・ツー・ポイントリンクインターフェース
1508  グローバル・ポジショニング・システムインターフェース
1509_1  センサ
1509_2  センサ
1509_N  センサ
1510  カメラ
1511  バッテリ
1512  電力管理制御ユニット
1513  スピーカ/マイクロフォン
1514  オーディオエンコーダ/デコーダ
1515_1  コア
1515_2  コア
1515_N  コア
1516  グラフィカル処理ユニット
1517  メモリ管理機能
1518  I/O制御機能
1519  画像処理ユニット
【図１】
2019207745.tif 000002
【図２ａ】
2019207745.tif 000003
【図２ｂ】
2019207745.tif 000004
【図３】
2019207745.tif 000005
【図４】
2019207745.tif 000006
【図５ａ】
2019207745.tif 000007
【図５ｂ】
2019207745.tif 000008
【図５ｃ】
2019207745.tif 000009
【図６】
2019207745.tif 000010
【図７】
2019207745.tif 000011
【図８】
2019207745.tif 000012
【図９】
2019207745.tif 000013
【図１０】
2019207745.tif 000014
【図１１】
2019207745.tif 000015
【図１２】
2019207745.tif 000016
【図１３】
2019207745.tif 000017
【図１４】
2019207745.tif 000018
【図１５】
2019207745.tif 000019
【外国語明細書】
2019207745000001.pdf