特許第6764904号(P6764904)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グーグル インコーポレイテッドの特許一覧

特許6764904画像プロセッサのための二次元シフトアレイ
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6764904
(24)【登録日】2020年9月16日
(45)【発行日】2020年10月7日
(54)【発明の名称】画像プロセッサのための二次元シフトアレイ
(51)【国際特許分類】
   G06F 15/80 20060101AFI20200928BHJP
   G06F 9/34 20060101ALI20200928BHJP
   G06T 1/20 20060101ALI20200928BHJP
【FI】
   G06F15/80
   G06F9/34 330
   G06T1/20 B
【請求項の数】22
【外国語出願】
【全頁数】25
(21)【出願番号】特願2018-130045(P2018-130045)
(22)【出願日】2018年7月9日
(62)【分割の表示】特願2017-550909(P2017-550909)の分割
【原出願日】2016年4月8日
(65)【公開番号】特開2018-185847(P2018-185847A)
(43)【公開日】2018年11月22日
【審査請求日】2019年4月1日
(31)【優先権主張番号】14/694,750
(32)【優先日】2015年4月23日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】シャチャム,オフェル
(72)【発明者】
【氏名】レッドグレイブ,ジェイソン・ルパート
(72)【発明者】
【氏名】メイクスナー,アルバート
(72)【発明者】
【氏名】ヂュー,チウリン
(72)【発明者】
【氏名】フィンチェルステイン,ダニエル・フレデリック
(72)【発明者】
【氏名】パターソン,デイビッド
(72)【発明者】
【氏名】スターク,ドナルド
【審査官】 千葉 久博
(56)【参考文献】
【文献】 特開2014−16957(JP,A)
【文献】 特開2010−63173(JP,A)
【文献】 特開2007−94846(JP,A)
【文献】 米国特許出願公開第2015/0086134(US,A1)
【文献】 米国特許第4380046(US,A)
【文献】 楠田浩平, 外2名,“メモリ分散型アレイアクセラレータのための命令生成手法の開発と評価”,情報処理学会 研究報告 計算機アーキテクチャ(ARC),日本,情報処理学会,2014年 1月16日,第2014−ARC−208巻, 第16号,p.1-7
【文献】 千葉諒太郎, 外4名,“フラクショナルステップ法に基づく非圧縮性流体計算専用ストリームプロセッサの設計と評価”,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2013年 9月11日,第113巻, 第221号,p.13-18
【文献】 W. QADEER, 外5名,"Convolution engine:balancing efficiency and flexibility in specialized computing",Communications of the ACM,2015年 4月,第58巻, 第4号,p.85-93
【文献】 F. CARDELLS-TORMO, 外4名,"Area-efficient 2-d shift-variant convolvers for fpga-based digital image processing",Field programmable logic and applications,2005年10月10日,p.578-581
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/20
G06F 9/34
G06F 15/80
(57)【特許請求の範囲】
【請求項1】
プロセッサであって、
複数の実行レーンを備え、各実行レーンは命令を実行することができる論理回路を含み、
気的に結合された複のシフトレジスタからなる二次元シフトレジスタアレイを備え、各実行レーンは、当該実行レーンに専用のそれぞれのシフトレジスタから前記二次元シフトレジスタアレイ上で1つ以上の隣接するシフトレジスタにデータをシフトするように構成され、前記1つ以上の隣接するシフトレジスタの各々は、異なる実行レーンに専用のシフトレジスタであり、
前記プロセッサは、前記複数の実行レーンによって、重なり合うステンシルのうち複数に亘るステンシル機能の命令を実行するように構成されており、当該命令は、各実行レーンによって実行されることで、各実行レーンが前記ステンシル機能によって定義されたそれぞれのステンシルの複数の値を読み出せるように、前記二次元シフトレジスタアレイのシフトレジスタにおいてデータを二次元に複数回シフトすることを前記実行レーンに実行させる、プロセッサ。
【請求項2】
前記複数の実行レーンの各実行レーンは、当該実行レーンに専用の1つ以上のシフトレジスタに読み書きするように構成された算術論理ユニットを含む、請求項1に記載のプロセッサ。
【請求項3】
前記複数の実行レーンのすべての実行レーンは、前記シフトレジスタ上のデータを同じ指定された方向に同時にシフトするように構成される、請求項1に記載のプロセッサ。
【請求項4】
前記プロセッサは、前記二次元シフトレジスタアレイの二次元のうち1つに沿った方向を指定するシフト命令を受け取り、前記指定された方向を示すデータを前記複数の実行レーンの各々にブロードキャストするように構成される、請求項1に記載のプロセッサ。
【請求項5】
前記実行レーンは、前記方向を前記シフト命令の一部として受け取ることに応答して、前記二次元シフトレジスタアレイの同じ方向に沿って前記二次元シフトレジスタアレイ上のデータをシフトするように構成される、請求項4に記載のプロセッサ。
【請求項6】
前記プロセッサは、二次元画像データのシートを受け取り、前記二次元画像データのシートの別個の部分を前記二次元シフトレジスタアレイの対応のシフトレジスタに格納するように構成される、請求項1に記載のプロセッサ。
【請求項7】
各実行レーンは、ランダムアクセスメモリに読み書きすることなく、当該実行レーンに専用のシフトレジスタから隣接するシフトレジスタにデータをシフトするように構成される、請求項1に記載のプロセッサ。
【請求項8】
各実行レーンは、当該実行レーンの算術論理ユニットによってデータが処理されることなく、当該実行レーンに専用のシフトレジスタから隣接するシフトレジスタへ前記データをシフトするように構成される、請求項1に記載のプロセッサ。
【請求項9】
各実行レーンは、1つ以上の専用シフトレジスタと1つ以上の専用テンポラリレジスタとを含む2つ以上の異なるタイプの専用レジスタを有し、各実行レーンの算術論理ユニットは、当該実行レーンの前記1つ以上の専用シフトレジスタおよび前記1つ以上の専用テンポラリレジスタに対する読み書きを行うように構成される、請求項1に記載のプロセッサ。
【請求項10】
複数のハロー実行レーンをさらに備え、各ハロー実行レーンは、前記二次元シフトレジスタアレイ上の前記複数のシフトレジスタのうち1つ以上のシフトレジスタを有し、
前記ハロー実行レーンに専用のシフトレジスタは、前記二次元シフトレジスタアレイの縁部に沿って位置するシフトレジスタであり、
前記複数のハロー実行レーンの各ハロー実行レーンは、算術論理ユニットを有していない、請求項1に記載のプロセッサ。
【請求項11】
前記ステンシル機能の命令を実行することで、各実行レーンは、それぞれのステンシルの複数の値を使用して、前記ステンシルに従う値をそれぞれ単一の出力値を算出する、請求項1に記載のプロセッサ。
【請求項12】
プロセッサにおける複数の実行レーンによって、重なり合うステンシルのうち複数に亘るステンシル機能の命令を実行する、コンピュータによって実現される方法であって、前記プロセッサは、電気的に結合された複のシフトレジスタを含む二次元シフトレジスタアレイを備え、前記複数のシフトレジスタの各々は、異なる実行レーンに専用のシフトレジスタであり
前記プロセッサにおける複数の実行レーンの各実行レーンが、前記ステンシル機能を実現する命令を受け取るステップを備え、
各実行レーンは、命令を実行可能な論理回路を含み、各実行レーンは、当該実行レーンに専用のそれぞれのシフトレジスタから前記二次元シフトレジスタアレイ上で1つ以上の隣接するシフトレジスタにデータをシフトするように構成され
前記ステンシル機能の命令が前記複数の実行レーンの各実行レーンによって実行されるること各実行レーンが前記ステンシル機能によって定義されたそれぞれのステンシルの複数の値を読み出せるように、前記二次元シフトレジスタアレイのシフトレジスタにおいてデータを二次元に複数回シフトすることを前記実行レーンに実行させる、方法。
【請求項13】
前記複数の実行レーンの各実行レーンは、当該実行レーンに専用の1つ以上のシフトレジスタに読み書きするように構成された算術論理ユニットを含む、請求項12に記載の方法。
【請求項14】
各実行レーンがステンシル機能の命令を実行することで、前記実行レーンに、前記シフトレジスタ上のデータを同じ指定された方向に同時にシフトさせる、請求項12に記載の方法。
【請求項15】
前記ステンシル機能の命令は、前記二次元シフトレジスタアレイの二次元のうち1つに沿った方向を指定し、前記方法は、前記プロセッサが前記指定された方向を示すデータを前記複数の実行レーンの各々にブロードキャストするステップをさらに備える、請求項12に記載の方法。
【請求項16】
前記実行レーンは、前記方向を前記命令の一部として受け取ることに応答して、前記二次元シフトレジスタアレイの同じ方向に沿って前記二次元シフトレジスタアレイ上のデータをシフトするように構成される、請求項15に記載の方法。
【請求項17】
前記プロセッサが二次元画像データのシートを受け取るステップと、
前記プロセッサが前記二次元画像データのシートの別個の部分を前記二次元シフトレジスタアレイ上の対応のシフトレジスタに格納するステップとをさらに備える、請求項12に記載の方法。
【請求項18】
各実行レーンが前記シフトレジスタ上のデータをシフトするステップは、ランダムアクセスメモリに読み書きすることなく、前記実行レーンに専用のシフトレジスタから隣接するシフトレジスタに前記データをシフトするステップを含む、請求項12に記載の方法。
【請求項19】
各実行レーンがデータをシフトすることは、前記シフトレジスタ上のデータを当該実行レーンの算術論理ユニットによって処理することなく、当該実行レーンに専用のシフトレジスタから隣接するシフトレジスタに前記データをシフトするステップを含む、請求項12に記載の方法。
【請求項20】
各実行レーンは、1つ以上の専用シフトレジスタと1つ以上の専用テンポラリレジスタとを含む2つ以上の異なるタイプの専用レジスタを有し、各実行レーンの算術論理ユニットは、当該実行レーンの前記1つ以上の専用シフトレジスタおよび前記1つ以上の専用テンポラリレジスタに対する読み書きを行うように構成される、請求項12に記載の方法。
【請求項21】
各実行レーンがデータをシフトするステップは、1つ以上の実行レーンによって、1つ以上のハロー実行レーンに専用の1つ以上のシフトレジスタにデータをシフトするステップを含み、
前記ハロー実行レーンに専用のシフトレジスタは、前記二次元シフトレジスタアレイの縁部に沿って位置するシフトレジスタであり、
前記1つ以上のハロー実行レーンの各ハロー実行レーンは、算術論理ユニットを有していない、請求項12に記載の方法。
【請求項22】
前記ステンシル機能の命令を実行することで、各実行レーンは、それぞれのステンシルの複数の値を使用して、前記ステンシルに従う値をそれぞれ単一の出力値を算出する、請求項12に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
発明の分野
本発明は、一般に、画像処理に関し、特に、画像プロセッサのための二次元シフトアレイに関する。
【背景技術】
【0002】
背景
画像処理は、典型的には、アレイに編成されたピクセル値の処理を含む。ここで、空間的に編成された二次元アレイは、画像の二次元的性質を捕捉する(追加の次元は、時間(例えば二次元画像のシーケンス)およびデータタイプ(例えば色)を含み得る。典型的なケースでは、アレイ化されたピクセル値は、静止画像または動きの画像を捕捉するためにフレームのシーケンスを生成したカメラによって提供される。伝統的な画像プロセッサは、典型的には、2つの極端な側面のいずれかに分類される。
【発明の概要】
【発明が解決しようとする課題】
【0003】
第1の極端な側面は、汎用プロセッサまたは汎用状プロセッサ(例えばベクトル命令拡張を備えた汎用プロセッサ)上で実行されるソフトウェアプログラムとして画像処理タスクを実行する。第1の極端な側面は、一般的に非常に汎用性の高いアプリケーションソフトウェア開発プラットフォームを提供するが、関連するオーバーヘッド(例えば、命令フェッチおよびデコード、オンチップおよびオフチップデータの処理、投機的実行)と組み合わされたより精細な粒子のデータ構造の使用は、究極的には、プログラムコードの実行中に、データの単位あたり、より多くのエネルギーが消費される結果となる。
【0004】
第2の逆の極端な側面は、固定機能のハードワイヤード回路系をはるかに大きなデータブロックに適用する。カスタム設計された回路に直接適用される、(粒度の細かいブロックとは対照的な)より大きなデータブロックの使用は、データ単位あたりの消費電力を大幅に削減する。しかしながら、カスタム設計された固定機能回路系の使用は、一般に、プロセッサが実行することができるタスクのセットが限られる結果となる。このように、(第1の極端な側面に関連する)幅広く汎用性の高いプログラミング環境は第2の極端な側面においては欠けている。
【0005】
高度に汎用性の高いアプリケーションソフトウェア開発の機会と、データ単位あたりの電力効率の向上とを両立させた技術プラットフォームは、依然として望ましいが、欠けている解決策である。
【課題を解決するための手段】
【0006】
概要
装置が記載される。この装置は、二次元シフトレジスタアレイ構造内の複数の連続した位置からデータを同じ方向および数の位置でシフトして、実行レーンアレイ内の複数の異なる実行レーンの各々に、複数の異なる実行レーンのそれぞれの専用レジスタ内における新しい値を提供するための手段を備える。異なる実行レーンは、それらのそれぞれの専用レジスタに、実行レーンアレイおよび二次元シフトレジスタアレイのそれぞれの同じ位置で結合される。
【0007】
装置が記載される。この装置は、二次元シフトレジスタアレイ構造に結合される実行レーンアレイを含む。実行レーンアレイにおける位置は、異なる実行レーンが異なる専用レ
ジスタを有するように、二次元シフトレジスタアレイ構造における同じ位置に結合される。
【0008】
図面のリスト
以下の説明および添付の図面は、本発明の実施形態を例示するために使用される。
【図面の簡単な説明】
【0009】
図1】画像プロセッサハードウェアアーキテクチャの実施形態を示す。
図2a】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
図2b】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
図2c】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
図2d】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
図2e】画像データのライングループへの解析、ライングループのシートへの解析、および重なり合うステンシルでシート上で実行される操作を示す。
図3】ステンシルプロセッサの実施形態を示す。
図4】ステンシルプロセッサ内のデータ計算ユニットの一実施形態を示す図である。
図5a】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5b】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5c】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5d】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5e】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5f】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5g】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5h】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5i】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5j】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図5k】二次元シフトアレイおよび実行レーンアレイを使用して、重なり合うステンシルで近隣の出力ピクセル値の対を決定する例を示す。
図6】統合された実行レーンアレイおよび二次元シフトアレイのための単位セルの実施形態を示す図である。
図7a】第1の二次元レジスタアレイ構造相互接続スキームを示す図である。
図7b】第2の二次元レジスタアレイ構造相互接続スキームを示す。
図8a】二次元レジスタアレイ構造の第1の行または列を示す図である。
図8b】二次元レジスタアレイ構造の第2の行または列を示す図である。
図8c】メモリユニットに結合される図8bの行を示す。
図8d】別のトロイドの実施形態を示す。
図8e】電力保存回路を示す。
図9】コンピューティングシステムの一実施形態を示す。
【発明を実施するための形態】
【0010】
詳細な記載
a.画像プロセッサハードウェアアーキテクチャおよび動作
図1は、ハードウェアで実現される画像プロセッサのためのアーキテクチャ100の実施形態を示す。画像プロセッサは、例えば、シミュレートされた環境内で仮想プロセッサ用に書かれたプログラムコードを、ハードウェアプロセッサによって実際に実行されるプログラムコードに変換するコンパイラによって対象とされてもよい。図4に示すように、アーキテクチャ100は、複数のラインバッファユニット101_1〜101_Mを含み、それらは、複数のステンシルプロセッサユニット102_1〜102_Nおよび対応するシート生成部ユニット103_1〜103_Nに、ネットワーク104(例えば、ネットワークオンチップ(NOC)(オンチップスイッチネットワーク、オンチップリングネットワークまたは他の種類のネットワークを含む))を介して相互接続される。一実施形態では、どのラインバッファユニットが、ネットワーク104を介してどのシート生成部および対応するステンシルプロセッサに接続してもよい。
【0011】
一実施形態では、プログラムコードはコンパイルされ、対応するステンシルプロセッサ102にロードされて、ソフトウェア開発者によって以前に定義された画像処理動作を実行する(プログラムコードは、例えば、設計および実装に応じて、ステンシルプロセッサの関連のシート生成部103にもロードされてもよい)。少なくともいくつかの例では、画像処理パイプラインを、第1のパイプラインステージ用の第1のカーネルプログラムを第1のステンシルプロセッサ102_1にロードし、第2のパイプラインステージ用の第2のカーネルプログラムを第2のステンシルプロセッサ102_2にロードするなどして、実現することができ、第1のカーネルはパイプラインの第1ステージの機能を実行し、第2のカーネルはパイプラインの第2ステージの機能を実行し、追加の制御フロー方法がインストールされて、出力画像データをパイプラインの1つのステージからの次のステージに渡す。
【0012】
他の構成では、画像プロセッサは、同じカーネルプログラムコードを動作させる2つ以上のステンシルプロセッサ102_1,102_2を有する並列マシンとして実現することができる。例えば、画像データの高密度かつ高データレートのストリームが、各々が同じ機能を実行する複数のステンシルプロセッサにわたってフレームを広げることによって処理されてもよい。
【0013】
さらに他の構成では、カーネルの本質的に任意のDAGのハードウェアプロセッサへのロードを、それぞれのステンシルプロセッサをそれら自身のプログラムコードのカーネルとともに構成し、適切な制御フローフックをハードウェアに構成して、出力画像をDAG設計における1つのカーネルから次のカーネルの入力に向けることによって、行なってもよい。
【0014】
一般的なフローとして、画像データのフレームは、マクロI/Oユニット105で受信され、フレーム単位でラインバッファユニット101の1つ以上に渡される。特定のラインバッファユニットは、それの画像データのフレームを、「ライングループ」と呼ばれる画像データのより小さな領域に解析し、次いでライングループをネットワーク104を介して特定のシート生成部に渡す。ある完全な(full)単数のライングループを、例えば、フレームの複数の連続した完全な行または列のデータで構成することができる(簡単にするために、本明細書では主に連続した行と称する)。シート生成部は、画像データの
ライングループを「シート」と呼ばれる画像データのより小さな領域にさらに解析し、そのシートを対応するステンシルプロセッサに提示する。
【0015】
単一入力の画像処理パイプラインやDAGフローの場合、一般に、入力フレームは、同じラインバッファユニット101_1に向けられ、それは、画像データをライングループに解析し、ライングループを対応するシート生成部103_1(対応するステンシルプロセッサ102_1はパイプライン/DAGにおいて第1のカーネルのコードを実行している)に向ける。ステンシルプロセッサ102_1による、それが処理するライングループでの動作が終了した後、シート生成部103_1は、出力ライングループを「下流」のラインバッファユニット101_2に送信する(ある使用例では、出力ライングループは、先に入力ライングループを送信したのと同じラインバッファ装置101_1に送り返すことができる)。
【0016】
自身のそれぞれの他のシート生成部およびステンシルプロセッサ(例えば、シート生成部103_2およびステンシルプロセッサ102_2)上で実行されるパイプライン/DAGにおける次のステージ/動作を表す1つ以上の「消費側」カーネルは、下流ラインバッファユニット101_2から、第1のステンシルプロセッサ102_1によって生成された画像データを受信する。このようにして、第1のステンシルプロセッサ上で動作する「作成側」カーネルは、その出力データが、第2のステンシルプロセッサ上で動作する「消費側」カーネルに転送され、消費側カーネルは、パイプラインまたはDAG全体の設計と整合する作成側カーネルの後に次のタスクのセットを実行する。
【0017】
ステンシルプロセッサ102は、画像データの複数の重なり合うステンシル上で同時に動作するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサの内部ハードウェア処理能力は、シートのサイズを効果的に決定する。ここでは、ステンシルプロセッサ102内で、実行レーンのアレイが一致して動作して、複数の重なり合うステンシルによってカバーされる画像データ表面領域を同時に処理する。
【0018】
以下でより詳細に説明するように、様々な実施形態において、画像データのシートは、ステンシルプロセッサ102内において二次元レジスタアレイ構造にロードされる。シートおよび二次元レジスタアレイ構造の使用は、大量のデータを、大量のレジスタ空間に、例えば、処理タスクが実行レーンアレイによってその直後に直接データ上で実行される単一のロード動作として移動することによって、電力消費の改善を効果的に提供すると考えられている。さらに、実行レーンアレイおよび対応するレジスタアレイの使用は、容易にプログラマブル/設定可能な異なるステンシルサイズを提供する。
【0019】
図2a〜図2eは、ラインバッファユニット101の解析アクティビティ、およびシート生成部ユニット103のより微細な粒子の解析アクティビティ、ならびにシート生成部103に結合されるステンシルプロセッサ102のステンシル処理アクティビティの両方のハイレベルの実施形態を示す。
【0020】
図2aは、画像データ201の入力フレームの一実施形態を示す。図2aはまた、ステンシルプロセッサが動作するように設計された3つの重なり合うステンシル202(各々3ピクセル×3ピクセルの寸法を有する)の概要を示す。各ステンシルがそれぞれ出力画像データを生成する出力ピクセルは、ベタ黒で強調表示される。簡略化のために、3つの重なり合うステンシル202は、垂直方向にのみ重なるように示されている。実際には、ステンシルプロセッサは、垂直方向および水平方向の両方に重なるステンシルを有するように設計されてもよいことを認識することが適切である。
【0021】
図2aに見られるように、ステンシルプロセッサ内の垂直に重なり合うステンシル20
2のために、フレーム内に単一のステンシルプロセッサが動作することができる画像データの広い帯域が存在する。以下でより詳細に説明するように、一実施形態では、ステンシルプロセッサは、データを、それらの重なり合うステンシル内で、左から右への態様で、画像データにわたって処理する(そして、次のラインのセットに対して、上から下の順序で繰り返す)。このように、ステンシルプロセッサがそれらの動作を前方に進めるにつれて、ベタ黒出力ピクセルブロックの数は、水平方向に右に成長する。上述したように、ラインバッファユニット101は、ステンシルプロセッサが今後の拡張された数のサイクルにわたって動作するのに十分な入来フレームからの入力画像データのライングループを解析することを担う。ライングループの例示的な図示は、陰影領域203として示されている。一実施形態では、ラインバッファユニット101は、ライングループをシート生成部との間で送受信するための異なるダイナミクスを理解することができる。例えば、「完全なグループ」と呼ばれる1つのモードによれば、画像データの完全な全幅のラインが、ラインバッファユニットとシート生成部との間で渡される。「仮想的に高い」と呼ばれる第2のモードによれば、ライングループは最初に全幅行のサブセットと共に渡される。その後、残りの行は、より小さい(全幅未満の)片で順番に渡される。
【0022】
入力画像データのライングループ203がラインバッファユニットによって画定され、シート生成部ユニットに渡されると、シート生成部ユニットはさらに、ライングループを、ステンシルプロセッサのハードウェア制限に、より正確に適合する、より微細なシートに、解析する。より具体的には、以下でさらに詳細に説明するように、一実施形態では、各ステンシルプロセッサは、二次元シフトレジスタアレイからなる。二次元シフトレジスタアレイは、本質的に、画像データを実行レーンのアレイの「真下」にシフトし、シフトのパターンは、各実行レーンをそれ自身のステンシル内においてデータに対して動作させる(すなわち、各実行レーンは、それ自身の情報のステンシル上で処理して、そのステンシルの出力を生成する)。一実施形態では、シートは、二次元シフトレジスタアレイを「満たす」か、さもなければ二次元シフトレジスタアレイにロードされる入力画像データの表面領域である。
【0023】
以下でより詳細に説明するように、様々な実施形態では、実際には、任意のサイクルでシフト可能な二次元レジスタデータの複数の層が存在する。便宜上、本記載の多くは、「二次元シフトレジスタ」などの用語を、シフト可能な二次元レジスタデータの1つ以上のそのような層を有する構造を指すために単純に使用する。
【0024】
したがって、図2bに見られるように、シート生成部は、ライングループ203から最初のシート204を解析し、それをステンシルプロセッサに供給する(ここで、データのシートは、参照番号204によって全体的に識別される陰影領域に対応する)。図2cおよび図2dに示すように、ステンシルプロセッサは、重なるステンシル202をシート上で左から右へ効果的に移動させることによって、入力画像データのシートに対して動作する。図2dのように、シート内のデータから出力値を計算することができるピクセル数が使い果たされる(他のピクセル位置は、シート内の情報から決定される出力値を有することができない)。簡単にするために、画像の境界領域は無視されている。
【0025】
図2eにおいて見られるように、シート生成部は次いで、ステンシルプロセッサが動作を継続する次のシート205を提供する。ステンシルが次のシートに対して動作を開始するときのステンシルの初期位置は、(先に図2dに示されている)最初のシート上の消耗点から右への次の進行であることに留意されたい。新たなシート205で、ステンシルプロセッサが最初のシートの処理と同じ態様で新たなシートに対して動作するにつれ、ステンシルは単に右に移動し続ける。
【0026】
出力ピクセル位置を取り囲むステンシルの境界領域のために、第1のシート204のデ
ータと第2のシート205のデータとの間にいくらかの重なりがあることに留意されたい。重なりは、シート生成部が重なり合うデータを2回再送信することによって簡単に処理することができる。別の実現例では、次のシートをステンシルプロセッサに供給するために、シート生成部は、ステンシルプロセッサに新たなデータを送るだけに進んでもよく、ステンシルプロセッサは、前のシートからの重なり合うデータを再利用する。
【0027】
b.ステンシルプロセッサ設計および動作
図3は、ステンシルプロセッサ300の実施形態を示す。図3において見られるように、ステンシルプロセッサは、データ計算ユニット301、スカラープロセッサ302および関連するメモリ303およびI/Oユニット304を含む。データ計算ユニット301は、実行レーンのアレイ305、二次元シフトアレイ構造306、およびアレイの特定の行または列に関連する別個のランダムアクセスメモリ307を含む。
【0028】
I/Oユニット304は、シート生成部から受け取ったデータの「入力」シートをデータ計算ユニット301にロードし、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納する役割を果たす。一実施形態では、データ計算ユニット301へのシートデータのロードは、受け取ったシートを画像データの行/列に解析し、画像データの行/列を二次元シフトレジスタ構造306または実行レーンアレイの行/列のそれぞれのランダムアクセスメモリ307にロードすることを必要とする(以下でより詳細に説明する)。シートが最初にメモリ307にロードされる場合、実行レーンアレイ305内の個々の実行レーンは、適宜、ランダムアクセスメモリ307からシートデータを二次元シフトレジスタ構造306にロードすることができる(例えば、シートのデータ上での動作のすぐ前のロード命令として)。データのシートのレジスタ構造306へのロード(シート生成部からの直接的であろうとまたはメモリ307からであろうと)が完了すると、実行レーンアレイ305の実行レーンはデータに対して動作し、最終的に、完成したデータをシートとしてシート生成部に、またはランダムアクセスメモリ307に「書き戻す」。後者の場合、I/Oユニット304はランダムアクセスメモリ307からデータをフェッチして出力シートを形成し、出力シートはシート生成部に転送される。
【0029】
スカラープロセッサ302は、スカラーメモリ303からステンシルプロセッサのプログラムコードの命令を読み出し、実行レーンアレイ305の実行レーンに命令を発行するプログラムコントローラ309を含む。一実施形態では、データ計算ユニット301からSIMDのような動作を実行するために、単一の同じ命令がアレイ305内のすべての実行レーンにブロードキャストされる。一実施形態では、スカラーメモリ303から読み出され、実行レーンアレイ305の実行レーンに発行される命令の命令フォーマットは、命令当たり2つ以上のオペコードを含む非常に長い命令語(VLIW)タイプのフォーマットを含む。さらなる実施形態では、VLIWフォーマットは、(以下に説明するように、一実施形態では2つ以上の従来のALU動作を指定することができる)各実行レーンのALUによって実行される数学的機能を指示するALUオペコードと、(特定の実行レーンまたは実行レーンのセットに対してメモリ操作を指示する)メモリオペコードとの両方を含む。
【0030】
「実行レーン」という用語は、命令を実行することができる1つ以上の実行ユニットのセット(例えば、命令を実行することができる論理回路系)を指す。実行レーンは、しかしながら、様々な実施形態では、単なる実行ユニットを超えた、よりプロセッサに似た機能を含むことができる。例えば、1つ以上の実行ユニットに加えて、実行レーンは、受信された命令をデコードする論理回路系、または、よりMIMDのような設計の場合、命令をフェッチおよびデコードする論理回路系を含むことができる。MIMDのようなアプローチに関しては、ここでは集中プログラム制御アプローチが主に記載されているが、より分散型のアプローチが様々な代替実施形態(例えば、アレイ305の各実行レーン内のプ
ログラムコードおよびプログラムコントローラを含む)において実施されてもよい。
【0031】
実行レーンアレイ305、プログラムコントローラ309および二次元シフトレジスタ構造306の組み合わせは、広範囲のプログラマブルな機能のための幅広く適応可能/設定可能なハードウェアプラットフォームを提供する。例えば、アプリケーションソフトウェア開発者は、個々の実行レーンが多種多様な機能を実行することができ、任意の出力アレイ位置に近接した入力画像データに容易にアクセスすることができれば、寸法(例えばステンシルサイズ)だけでなく幅広い異なる機能能力を有するカーネルをプログラミングすることができる。
【0032】
実行レーンアレイ305によって操作される画像データのためのデータ記憶装置として機能することとは別に、ランダムアクセスメモリ307は、1つ以上のルックアップテーブルを保持することもできる。様々な実施形態では、1つ以上のスカラールックアップテーブルをスカラーメモリ303内でインスタンス化することもできる。
【0033】
スカラールックアップは、同じルックアップテーブルからの同じインデックスからの同じデータ値を実行レーンアレイ305内の各実行レーンに渡すことを含む。様々な実施形態では、上述のVLIW命令フォーマットは、スカラープロセッサによって実行されるルックアップ動作をスカラールックアップテーブルに向けるスカラーオペコードを含むようにも拡張される。オペコードとともに使用するために指定されたインデックスは、即値オペランドでもよいし、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、一実施形態では、スカラーメモリ内のスカラールックアップテーブルからのルックアップは、基本的に同じクロックサイクル中に実行レーンアレイ305内のすべての実行レーンに同じデータ値をブロードキャストすることを含む。ルックアップテーブルの使用および動作に関する追加の詳細は、以下でさらに説明する。
【0034】
図4は、データ計算コンポーネント401の一実施形態を示す。図4において見られるように、データ計算コンポーネント401は、二次元シフトレジスタアレイ構造406「の上に」論理的に位置決めされる実行レーンのアレイ405を含む。上述したように、様々な実施形態では、シート生成部によって提供される画像データのシートが二次元シフトレジスタ406にロードされる。実行レーンは、レジスタ構造406からのシートデータに対して動作する。
【0035】
実行レーンアレイ405およびシフトレジスタ構造406は、互いに対して適所に固定される。しかし、シフトレジスタアレイ406内のデータは、戦略的かつ調整された態様でシフトして、実行レーンアレイ内の各実行レーンがデータ内で異なるステンシルを処理するようにする。したがって、各実行レーンは、生成されている出力シートにおいて異なるピクセルに対する出力画像値を決定する。図4のアーキテクチャから、実行レーンアレイ405が垂直に近接する実行レーンおよび水平に近接する実行レーンを含むので、重なり合うステンシルが垂直に配置されるだけでなく水平にも配置されることは明らかである。
【0036】
データ計算ユニット401のいくつかの注目すべきアーキテクチャ上の特徴には、実行レーンアレイ405よりも広い寸法を有するシフトレジスタ構造406が含まれる。すなわち、実行レーンアレイ405の外側にレジスタ409の「ハロー」が存在する。ハロー409は、実行レーンアレイの2つの側に存在するように示されているが、実現例に応じて、実行レーンアレイ405の2つ未満(1つ)またはそれ以上(3つまたは4つ)の側に存在してもよい。ハロー405は、データが実行レーン405の「下で」シフトしているときに、実行レーンアレイ405の境界の外側にこぼれ出るデータのための「スピルオーバ」空間を提供する働きをする。単純なケースとして、実行レーンアレイ405の右端
を中心とする5×5のステンシルは、ステンシルの最も左側のピクセルが処理されるとき、さらに右側に4つのハローレジスタ位置を必要とすることになる。図面を簡単にするために、図4は、名目上の実施例において、どちらの側(右、底)のレジスタでも水平方向接続および垂直方向接続の両方を有するであろうとき、ハローの右側のレジスタを、水平方向シフト接続を有するだけとして、およびハローの底側のレジスタを、垂直方向シフト接続を有するだけとして示す。
【0037】
アレイの各行および/もしくは各列またはその一部分に結合されるランダムアクセスメモリ407によって追加のスピルオーバールームが提供される(例えば、ランダムアクセスメモリは、4つの実行レーン行状と2つの実行レーン列状にまたがる実行レーンアレイの「領域」に割り当てられてもよい。簡略化のために、アプリケーションの残りの部分は、主に、行および/または列に基づく割り当てスキームを指す)。ここで、実行レーンのカーネル動作が、それが(一部の画像処理ルーチンが必要とする場合がある)二次元シフトレジスタアレイ406の外にあるピクセル値を処理することを必要とする場合、画像データの面は、ハロー領域409からランダムアクセスメモリ407にさらにこぼれ出ることができる。例えば、ハードウェアが実行レーンアレイの右端の実行レーンの右側にわずか4つの記憶素子のハロー領域を含む場合の6×6ステンシルを考える。この場合、ステンシルを完全に処理するために、データをハロー409の右端からさらに右側にシフトする必要があるであろう。ハロー領域409の外側にシフトされたデータは、ランダムアクセスメモリ407にこぼれ出る。ランダムアクセスメモリ407および図3のステンシルプロセッサの他の適用例を以下でさらに説明する。
【0038】
図5aないし図5kは、上述のように実行レーンアレイ「の下で」二次元シフトレジスタアレイ内で画像データがシフトされる態様の実施例を示す。図5aにおいて見られるように、二次元シフトアレイのデータ内容は第1のアレイ507に示され、実行レーンアレイはフレーム505によって示される。また、実行レーンアレイ内の2つの近隣の実行レーン510が簡略化して示されている。この簡単な図示510では、各実行レーンは、シフトレジスタからデータを受け付け、ALU出力からデータを受け付け(例えば、サイクルにわたってアキュムレータとして動作する)、または出力データを出力先に書き込むことができるレジスタR1を含む。
【0039】
各実行レーンはまた、ローカルレジスタR2において、二次元シフトアレイにおけるそれ「の下の」内容が利用可能である。したがって、R1は実行レーンの物理レジスタであり、R2は二次元シフトレジスタアレイの物理レジスタである。実行レーンは、R1および/またはR2によって提供されるオペランドに対して動作可能なALUを含む。さらに詳細に後述するように、一実施形態では、シフトレジスタは、実際にはアレイ位置ごとに複数の(ある「深さ」の)記憶/レジスタ素子で実現されるが、シフト動作は記憶素子の1つの面に限られる(例えば、記憶素子の1つの面のみがサイクルごとにシフトすることができる)。図5aないし図5kは、それぞれの実行レーンから結果のXを格納するために使用されるとしてこれらのより深いレジスタ位置の1つを示している。例示を容易にするために、より深い結果のレジスタは、その対応するレジスタR2の下ではなく、その横に図示されている。
【0040】
図5a〜図5kは、実行レーンアレイ内に示された実行レーン位置511の対に中心位置が整列された2つのステンシルの計算に焦点を当てている。例示を容易にするために、実行レーン510の対は、実際には、以下の例によれば、それらが垂直方向の近隣実行レーンである場合に、水平方向の近隣実行レーンとして図示されている。
【0041】
図5aで最初に見られるように、実行レーンはそれらの中央のステンシル位置上に中心を配される。図5bは、両方の実行レーンによって実行されるオブジェクトコードを示す
図5bにおいて見られるように、両方の実行レーンのプログラムコードは、シフトレジスタアレイ内のデータを、1つの位置だけ下にシフトさせ、1つの位置だけ右にシフトさせる。これにより、両方の実行レーンがそれらのそれぞれのステンシルの左上隅に整列される。次に、プログラムコードは、(R2において)それらのそれぞれの位置にあるデータをR1にロードさせる。
【0042】
図5cに示すように、次にプログラムコードは、実行レーンの対に、シフトレジスタアレイ内のデータを1単位だけ左にシフトさせ、各実行レーンのそれぞれの位置の右の値を各実行レーンの位置にシフトさせる。R1の値(以前の値)は、次いで、(R2における)実行レーンの位置にシフトした新しい値とともに加算される。結果はR1に書き込まれる。図5dで見られるように、図5cについて上述したのと同じプロセスが繰り返され、結果のR1に対して、今度は上側実行レーンにおける値A+B+C、および下側実行レーンにおけるF+G+H値を含ませるようにする。この時点で、両方の実行レーンはそれらのそれぞれのステンシルの上側の行を処理している。(左側に存在する場合には)実行レーンアレイの左側でハロー領域に、またはハロー領域が存在しない場合にはランダムアクセスメモリにこぼれ出ることは、実行レーンアレイの左側には存在しないことに注目されたい。
【0043】
図5eに示すように、次に、プログラムコードは、シフトレジスタアレイ内のデータを1単位だけ上にシフトさせ、両方の実行レーンをそれらのそれぞれのステンシルの中間行の右端に整列される。両方の実行レーンのレジスタR1は、現在、ステンシルの最上行および中間行の一番右の値の合計を含む。図5fおよび図5gは、両方の実行レーンのステンシルの中間行にわたって左方向に移動する継続的な進行を示す。累積加算は、図5gの処理の終了時に、両方の実行レーンがそれらのそれぞれのステンシルの最上行の値と中間行の値との合計を含むように、継続する。
【0044】
図5hは、各実行レーンをそれの対応するステンシルの最下行に整列させる別のシフトを示す。図5iおよび図5jは、両方の実行レーンのステンシルの過程にわたって処理を完了するための継続的なシフトを示す。図5kは、各実行レーンをデータアレイにおいてそれの正しい位置に整列させ、その結果をそこに書き込むための追加のシフトを示す。
【0045】
図5a〜図5kの例では、シフト動作のためのオブジェクトコードは、(X、Y)座標で表されるシフトの方向および大きさを識別する命令フォーマットを含むことができることに留意されたい。例えば、1つの位置分の上方向シフトのためのオブジェクトコードは、オブジェクトコードでSHIFT0,+1として表現されてもよい。別の例として、1つの位置分の右方向へのシフトは、オブジェクトコードでSHIFT+1,0として表現されてもよい。様々な実施形態では、より大きい大きさのシフトも、オブジェクトコードで指定することができる(例えば、シフト0,+2)。ここで、2Dシフトレジスタハードウェアが1サイクルにつき1つの位置だけしかシフトをサポートしない場合、命令は機械によって複数のサイクル実行を要求するように解釈されてもよく、または2Dシフトレジスタハードウェアは、1サイクルにつき2つ以上の位置分シフトをサポートするように設計されてもよい。後者の実施形態はより詳細にさらに下に記載される。
【0046】
図6aは、アレイ実行レーンおよびシフトレジスタ構造の単位セルの別のより詳細な図を示す(ハロー領域のレジスタは、対応する実行レーンを含まない)。実行レーンおよび実行レーンアレイの各位置に関連するレジスタ空間は、一実施形態では、実行レーンアレイの各ノードで、図6aに示す回路系をインスタンス化することによって実施される。図6aに示すように、単位セルは、4つのレジスタR2〜R5からなるレジスタファイル602に結合される実行レーン601を含む。任意のサイクルの間、実行レーン601は、レジスタR1〜R5のいずれかから読み書きすることができる。2つの入力オペランドを
必要とする命令の場合、実行レーンはR1〜R5のいずれかからオペランドの両方を取り出すことができる。
【0047】
一実施形態では、二次元シフトレジスタ構造は、近隣のレジスタファイル間のシフトが同じ方向にあるように(例えば、すべての実行レーンは左にシフトする、すべての実行レーンは右にシフトするなど)、それの近隣のレジスタファイルが入力マルチプレクサ604を介する場合に、単一のサイクルの間に、レジスタR2〜R4のいずれか(ただ)1つの内容が、出力マルチプレクサ603を介してその近隣のレジスタファイルの1つにシフト「アウト」され、対応するものからシフト「イン」される内容でレジスタR2〜R4のいずれか(ただ)1つの内容が置き換えられることによって、実現される。同じレジスタがその内容がシフトアウトされて同じサイクルでシフトインされる内容で置き換えられるのが一般的であるかもしれないが、マルチプレクサ構成603,604は、同じサイクル中に同じレジスタファイル内で異なるシフトソースおよびシフトターゲットレジスタを可能にする。
【0048】
図6aに示すように、シフトシーケンスの間、実行レーンは、内容をそのレジスタファイル602からその左、右、上および下の近隣のレジスタファイルにシフトアウトする。同じシフトシーケンスと関連して、実行レーンは、さらに、内容をその左、右、上および下の近隣のレジスタファイルの特定のものからそれのレジスタファイルにシフトする。再び、シフトアウトターゲットおよびシフトインソースは、すべての実行レーンについて同じシフト方向と整合しなければならない(例えば、シフトアウトが右隣に対する場合、シフトインは左隣からでなければならない)。
【0049】
一実施形態では、1サイクルにつき1つの実行レーンにつき1つのレジスタの内容だけをシフトすることが許されるが、他の実施形態では、2つ以上のレジスタの内容をシフトイン/アウトすることが許されてもよい。例えば、図6aに示されたマルチプレクサ回路系603,604の第2の例が図6aの設計に組み込まれる場合、同じサイクルの間に2つのレジスタの内容がシフトアウト/インされてもよい。もちろん、1つのレジスタの内容だけがサイクルごとにシフトされることが許される実施形態では、数学的演算間のシフトのためにより多くのクロックサイクルを消費することによって、複数のレジスタからのシフトが数学的演算間に起こってもよい(例えば、2つのレジスタの内容が、数学的演算間で2つのシフト演算を消費することによって数学的演算間でシフトされてもよい)。
【0050】
実行レーンのレジスタファイルのすべての内容未満がシフトシーケンス中にシフトアウトされる場合、各実行レーンのシフトアウトされないレジスタの内容は適所に残る(シフトしない)ことに留意されたい。したがって、シフトインされる内容と置き換えられないシフトされない内容は、シフトサイクルにわたって実行レーンにローカルに維持される。各実行レーンで見られるメモリユニット(「M」)は、実行レーンアレイ内の実行レーンの行および/または列に関連付けられるランダムアクセスメモリ空間からデータをロード/に格納するために使用される。ここで、Mユニットは、実行レーンの自身のレジスタ空間からロード/に格納できないデータをロード/格納するためによく使用されるという点で、標準的なMユニットとして機能する。様々な実施形態では、Mユニットの主な動作は、ローカルレジスタからメモリにデータを書き込み、メモリからデータを読み出してそれをローカルレジスタに書き込むことである。
【0051】
ハードウェア実行レーン601のALUユニットによってサポートされるISAオペコードに関して、様々な実施形態において、ハードウェアALUによってサポートされる数学的オペコードは、仮想実行レーンによってサポートされる数学的オペコード(例えば、ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOT)と一体的に結び付けられる(例えば実
質的に同じである)。上述のように、メモリアクセス命令は、実行レーン601によって実行され、データをそれらの関連付けられるランダムアクセスメモリからフェッチ/に格納することができる。さらに、ハードウェア実行レーン601は、シフト演算命令(右、左、上、下)をサポートし、二次元シフトレジスタ構造内でデータをシフトする。上述したように、プログラム制御命令は主にステンシルプロセッサのスカラープロセッサによって実行される。
【0052】
図7aは、二次元レジスタアレイ構造の論理的(および潜在的には物理的な)設計の「トップダウン」図の一実施形態を示す。図7aの「トップダウン」図は、図6の単位セル設計の実施形態に本質的に従っており、特定のアレイ位置の各レジスタファイルが、その左、右、上および下の近隣の単位セル位置のレジスタファイルに結合されている。すなわち、例えば、図7aに見られるように、レジスタファイルAは、レジスタファイルB、C、DおよびEに結合される。
【0053】
図7bは、二次元レジスタアレイ構造の論理的(および潜在的に物理的な)設計の「トップダウン」図の別の実施形態を示す。図7bに見られるように、単位セルは、最も近い垂直および水平方向の近隣に結合されるだけでなく、「第2に」最も近い垂直および水平方向の近隣にも結合される。例えば、図7bに見られるように、単位セルAは、単位セルB、C、DおよびEに結合されるだけでなく、単位セルF、G、HおよびIにも結合される。図示および表示を容易にするために、単位セルAだけが、最も近い近隣結合および第2に最も近い近隣結合の両方を有するのに必要な接続の全セットを有するものとして示されている。単位セルA以外では、1つおきの単位セルだけが、任意の特定の行または列に沿って第2に最も近い近隣結合を示す(例えば、単位セルBは、第2に最も近い近隣結合を全く示さない)。読者は、好ましい実施形態が、例えば、コア内の、第2に最も近い近隣結合をサポートするようアレイ縁部から十分離れている全ての単位セルに対して単位セルAの結合を含むであろうことを理解するであろう。
【0054】
第2に最も近い接続を有することにより、レジスタアレイを介したレジスタ値のより高速な伝搬が可能になる。例えば、レジスタ値を4つの位置だけ離れた単位セルに移動する必要がある場合、図7bのアレイ構造は2サイクルで移動を達成することができるが、図7bのアレイ構造は4サイクルだけで同じ移動を達成することができる。図7bの実施形態は、最も近い近隣接続も有することに留意されたい。したがって、図7bの構造に対する実行レーン命令セットは、図7aの構造のための実行レーン命令セットよりも拡張的であり得る(前者は1ホップおよび2ホップMOV命令を有するが、後者は1ホップMOV命令しか持たない)。
【0055】
異なる番号のホップ移動の数および組合せ、ならびに対応するアレイ構造の実施形態は、迅速なレジスタ値の移動の必要性とアレイ構造配線密度の許容差との間の適切なトレードオフのバランスに応じて、実施形態ごとに大きく異なり得ることを指摘することが適切である。一部の実施形態は、第3および/または第4に最も近い近隣接続をサポートしてもよく、他の接続はサポートしなくてもよい(第4に最も近い近隣接続の場合、例えば、単位セルDは、図7bの単位セルJに直接結合されるであろう)。いくつかの実施形態は、最も近い近隣接続および第3に最も近いかまたはそれより遠い接続などのみを有してもよい。おそらく、より精巧な実施形態は、斜め接続(例えば、単位セルAを図7bの単位セルKおよびそれの他の3つの近隣コーナー単位セルと接続すること)をサポートすることさえできる。当業者であれば、単位セル間の様々な拡張された接続のいずれでも、図6の入力マルチプレクサ構造604への入力のソースを拡張し、出力マルチプレクサ構造603からのファンアウトを拡張することによって、容易に達成されることを認識するであろう。
【0056】
図8aは、二次元レジスタアレイ構造内で行または列に沿ったレジスタの例示的な論理配置を示す(図示を容易にするため、レジスタアレイは8×8の寸法しか持たないが、実際には寸法ははるかに大きくてもよい)。ここで、処理されているアレイにおける近隣のピクセルは、数値的に近隣の単位セルに位置する(例えば、アレイにおける近隣のピクセルの対は、単位セル3および5ではなく単位セル3および4に配置される)。図8aの論理設計はまた、接続801を介して最初の論理単位セル1を最後の単位セル8に結合することによってロール能力を含む(したがって、実行レーンアレイの実行レーンはロールオペコードを含むこともできる)。
【0057】
しかし、図8aの設計が論理設計を表すだけでなく、物理的設計も表す場合には、特に大きな寸法のアレイの場合に問題が生じる可能性がある。図8aのアプローチが物理的設計も表す場合、接続801は、対1および8以外の単位セル対を接続する他の配線の長さと比較して、極端に長い配線に対応する。この特定の配線長外れ値は、(すべての単位セル間のすべてのシフト時間を最も遅い1<−>8シフト時間以上になるように遅くすることにより、または任意の他の近隣の単位セル間のシフトよりも1<−>8シフト間においてより多くのサイクルを認識する複雑さを導入することにより)回路のタイミングの複雑さを引き起こす可能性がある。
【0058】
図8bは、図8aの論理設計を有するレジスタアレイ構造の行または列に対する改良された物理的設計の実施形態を示す。ここで、物理的設計は、(論理設計の場合のように)単なる論理接続に対立するものとしての回路構造の実際のレイアウトに対応する。図8bに見られるように、物理的設計は、レイアウトの論理にトロイド設計を課すことによって、他の単位セル間において1<−>8接続に必要とされる余分な長さを償却する。例えば、単位セル1は論理設計を保存するために単位セル2に物理的に接続されているが、単位セル8は物理的にそれらの間に座する。結果は、図8aの配線801の長さよりもはるかに短い、図8bの構造における単位セル間の最大配線長さである。したがって、図8bの構造のタイミングの複雑さは、上述した図8aの構造のタイミングの複雑さを回避する。一実施形態では、すべての単位セル間のレジスタ内容のロールが単一のサイクル内で発生し得る。
【0059】
図8cは、シート生成部またはランダムアクセスメモリ802(図4のRAM407のいずれかなど)とレジスタアレイの行または列との間のデータバス構造が一種の攪拌構造803を含み、トロイド物理レイアウトを有するアレイまたは行への正しい論理接続を維持するのを示す。図8dは、任意のレジスタ値が移動する最大距離が4単位セルである4ホップシフトを実現することができる別のトロイド構造を示す。ここでは、図8dのレジスタとシート生成部またはRAMとの間に別の攪拌状のデータバスが存在するであろうことは明らかである。このように、トロイド物理レイアウトの実現の特徴は、論理的順序で配列される入力を接続するデータバスによる攪拌の存在である。
【0060】
図8eは、シフトアレイ構造の単位セルの出力マルチプレクサ804からの特別なファンアウト回路系を示す。ここで、出力マルチプレクサ804は、図6aの出力マルチプレクサ603に類似していると見ることができる。シフトアレイが、ますます多くの接続(1ホップ、2ホップなど)をサポートするように設計されるにつれ、出力マルチプレクサ804のファンアウトは増大する。マルチプレクサ804のファンアウトが増大するにつれて、電力消費はますます問題になる可能性がある。図8eは、1ホップおよび2つの接続の両方を充分にサポートするシフトレジスタアレイのための出力マルチプレクサ804を示す。ここで、図8eに見られる論理ゲートの存在なしで、マルチプレクサ804における新たな出力(例えば新しいシフトアウト値)は、8つの異なる位置(左隣、右隣、…、2ホップ下隣)にブロードキャストされるであろう。ここでは、当技術分野で理解されているように、論理回路における配線のランレングスを横切るデータの変化は、「スイッ
チング動作」に対応し、これは電力を消費する。
【0061】
マルチプレクサ804の出力で見られる8つの論理ゲートの存在は、シフト方向に対応する実際の配線上を除くそのようなデータ変化を防止するように設計される。例えば、シフト方向が右へ1ホップである場合、すぐ右隣に結合されるゲートのみが、マルチプレクサ804の出力を通過させる。すべての他の論理ゲートは、データ値が(シフト値が必要とされない)他のノードに伝搬するのを防止し、プロセスにおけるシフト動作の電力消費を低減する。
【0062】
c.実現例の実施形態
上述した様々な画像プロセッサアーキテクチャの特徴は、必ずしも従来の意味での画像処理に限定されず、したがって、画像プロセッサを再特徴付けしてもよい(またはしなくてもよい)他のアプリケーションに適用することができることを指摘することが適切である。例えば、実際のカメラ画像の処理とは対照的に、アニメーションの作成および/または生成および/またはレンダリングにおいて上述した様々な画像プロセッサアーキテクチャの特徴のいずれかが使用される場合、画像プロセッサはグラフィックス処理ユニットとして特徴づけられてもよい。さらに、上述した画像プロセッサアーキテクチャの特徴は、ビデオ処理、視覚処理、画像認識および/または機械学習などの他の技術的用途にも適用することができる。このように適用されて、画像プロセッサは、より汎用的なプロセッサ(例えば、コンピューティングシステムのCPUの一部であるか、またはその一部である)と(例えばコプロセッサとして)一体化されてもよく、またはコンピューティングシステム内のスタンドアロンプロセッサであってもよい。
【0063】
上述したハードウェア設計の実施形態は、半導体チップ内において、および/または最終的に半導体製造プロセスに向けての回路設計の記述として実施することができる。後者の場合、そのような回路記述は、より高い/挙動レベルの回路記述(例えばVHDL記述)もしくはより低いレベルの回路記述(例えばレジスタ転送レベル(RTL)記述、トランジスタレベル記述もしくはマスク記述)またはそれらの様々な組み合わせの形態をとってもよい。回路記述は、典型的には、コンピュータ可読記憶媒体(例えばCD−ROMまたは他のタイプの記憶技術)上に実施される。
【0064】
先のセクションから、上記の画像プロセッサは、(例えば、ハンドヘルド装置のカメラからのデータを処理するハンドヘルド装置のシステムオンチップ(SOC)の一部として)コンピュータシステム上のハードウェアで実施できることを認識することに関係する。画像プロセッサがハードウェア回路として実施される場合、画像プロセッサによって処理される画像データはカメラから直接受信されてもよいことに留意されたい。ここで、画像プロセッサは、別体のカメラの一部であってもよいし、一体化されたカメラを有するコンピューティングシステムの一部であってもよい。後者の場合、画像データは、カメラから直接、またはコンピューティングシステムのシステムメモリから受信することができる(例えば、カメラは、その画像データを画像プロセッサではなくシステムメモリに送信する)。先のセクションで説明した機能の多くは、(アニメーションをレンダリングする)グラフィックスプロセッサユニットにも適用可能であることにも留意されたい。
【0065】
図9は、コンピューティングシステムの例示的な図である。以下に説明するコンピューティングシステムのコンポーネントの多くは、一体化されたカメラおよび関連する画像プロセッサ(例えば、スマートフォンまたはタブレットコンピュータなどのハンドヘルドデバイス)を有するコンピューティングシステムに適用可能である。当業者は、2つの間の範囲を容易に定めることができるであろう。
【0066】
図9に見られるように、基本的なコンピューティングシステムは、中央処理ユニット9
01(例えば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア915_1〜915_Nおよびメインメモリコントローラ917を含み得る)、システムメモリ902、ディスプレイ903(例えばタッチスクリーン、フラットパネル)、ローカル有線ポイントツーポイントリンク(例えばUSB)インタフェース904、様々なネットワークI/O機能905(イーサネット(登録商標)インタフェースおよび/またはセルラーモデムサブシステムなど)、無線ローカルエリアネットワーク(例えばWiFi)インタフェース906、ワイヤレスポイントツーポイントリンク(例えばブルートゥース(登録商標))インタフェース907およびグローバルポジショニングシステムインタフェース908、様々なセンサ909_1〜909_N、1つ以上のカメラ910、バッテリ911、電力管理制御ユニット912、スピーカおよびマイクロホン913、ならびに音声コーダ/デコーダ914を含んでもよい。
【0067】
アプリケーションプロセッサまたはマルチコアプロセッサ950は、そのCPU901内における1つ以上の汎用処理コア915、1つ以上のグラフィカル処理ユニット916、メモリ管理機能917(例えばメモリコントローラ)、I/O制御機能918および画像処理ユニット919を含んでもよい。汎用処理コア915は、典型的には、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。グラフィックス処理ユニット916は、典型的には、ディスプレイ903上に提示されるグラフィックス情報を生成するために、グラフィックス集中型機能を実行する。メモリ制御機能917は、システムメモリ902とインタフェースして、システムメモリ902との間でデータの書込/読出を行う。電力管理制御ユニット912は、システム900の電力消費を全体的に制御する。
【0068】
画像処理ユニット919は、先のセクションで説明した画像処理ユニットの実施形態のいずれかに従って実現することができる。代替的にまたは組み合わせて、IPU919は、GPU916およびCPU901のいずれかまたは両方にそのコプロセッサとして結合されてもよい。さらに、様々な実施形態では、GPU916は、上で説明した画像プロセッサの特徴のいずれかを用いて実現することができる。
【0069】
タッチスクリーンディスプレイ903、通信インタフェース904〜907、GPSインタフェース908、センサ909、カメラ910、およびスピーカ/マイクコーデック913,914の各々はすべて、適切な場合には、一体化された周辺装置(例えば1つ以上のカメラ910)も含むコンピューティングシステム全体に対して様々な形態のI/O(入力および/または出力)として見ることができる。実現例によっては、これらのI/Oコンポーネントの様々なものは、アプリケーションプロセッサ/マルチコアプロセッサ950上に統合されてもよく、またはアプリケーションプロセッサ/マルチコアプロセッサ950のダイから離れて、またはそのパッケージ外に配置されてもよい。
【0070】
一実施形態では、1つ以上のカメラ910は、カメラとその視野内の対象との間の深度を測定することができる深度カメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用CPUコア(もしくはプログラムコードを実行するために命令実行パイプラインを有する他の機能ブロック)上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェアおよび/またはファームウェアは、上記の機能のいずれかを実行してもよい。
【0071】
本発明の実施形態は、上述したような様々なプロセスを含むことができる。これらのプロセスは、機械実行可能命令で実施されてもよい。これらの命令は、汎用または特殊目的のプロセッサに特定のプロセスを実行させるために使用できる。代替的に、これらのプロセスは、プロセスを実行するためのハードワイヤード論理を含む特定のハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタ
ムハードウェアコンポーネントとの任意の組み合わせによって実行されてもよい。
【0072】
本発明の要素はまた、機械実行可能命令を記憶するための機械可読媒体として提供されてもよい。機械可読媒体は、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、および光磁気ディスク、フラッシュメモリ、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体/機械可読媒体を含むが、それらに限定はされない。例えば、本発明は、搬送波または通信リンク(例えばモデムもしくはネットワーク接続)を介する他の伝搬媒体で実施されたデータ信号によって、遠隔のコンピュータ(例えばサーバ)から要求側コンピュータ(例えばクライアント)に転送され得るコンピュータプログラムとしてダウンロードすることができる。
【0073】
前述の明細書では、本発明をその特定の例示的な実施形態を参照して説明した。しかしながら、特許請求の範囲に記載される本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。したがって、明細書および図面は、限定的ではなく例示的なものとみなされるべきである。
図1
図2a
図2b
図2c
図2d
図2e
図3
図4
図5a
図5b
図5c
図5d
図5e
図5f
図5g
図5h
図5i
図5j
図5k
図6
図7a
図7b
図8a
図8b
図8c
図8d
図8e
図9