(57)【特許請求の範囲】
【請求項１】
処理ユニットの配列を備える画像プロセッサであって、前記処理ユニットの前記配列の各処理ユニットは、
４つの入力ポートおよび２つの出力ポートと、
並列に２つの全幅ALU演算を実行するように構成された第１のALU(arithmetic-logic unit)および第２のALUと、
積和論理ユニットとを具備し、
前記第１のALUが、入力ポートの第１のペアからデータを受信し、第１の全幅ALU演算を実行し、前記２つの出力ポートの第１の出力ポートに第１の全幅出力を提供するように構成され、
前記第２のALUが、入力ポートの第２のペアからデータを受信し、第２の全幅ALU演算を実行し、前記２つの出力ポートの第２の出力ポートに第２の全幅出力を提供するように構成され、
前記積和論理ユニットが、前記４つの入力ポートの３つ以上からデータを受信することであって、前記データは、第１の入力ポートから受信された第１の積オペランドと、第２の入力ポートから受信された第２の積オペランドと、１つまたは複数の他の入力ポートから受信された和項とを含む、受信することと、前記第１の積オペランドと前記第２の積オペランドの乗算および前記乗算の結果と前記和項との和演算とを含む積和演算を実行することと、および、前記和項が２つの他の入力ポートから受信された場合に、前記２つの出力ポートの両方にわたって２倍幅出力を提供することとを行うように構成される、画像プロセッサ。
【請求項２】
各処理ユニットのサイクル時間が前記積和演算の実行時間に基づく、請求項１に記載の画像プロセッサ。
【請求項３】
各処理ユニットの前記第１のALUおよび前記第２のALUは、２倍幅ALU演算を実行するよ
うにさらに構成され、
前記第１のALUが入力ポートの前記第１のペアからデータを受信し、前記２倍幅ALU演算の下半分に対応する第３の全幅ALU演算を実行し、かつ前記２つの出力ポートの一方に前
記２倍幅ALU演算の前記下半分の結果を提供するように構成され、
前記第２のALUが入力ポートの前記第２のペアからデータを受信し、前記２倍幅ALU演算の上半分に対応する第４の全幅ALU演算を実行し、かつ前記２つの出力ポートのもう一方
に前記２倍幅ALU演算の前記上半分の結果を提供するように構成され、
前記第１のALUが、前記第３の全幅ALU演算から生成された桁上げ項を、前記第２のALU
に提供するように構成される、請求項１に記載の画像プロセッサ。
【請求項４】
各処理ユニットの前記第１のALUおよび前記第２のALUは、並列に４つの半幅ALU演算を
実行するようにさらに構成され、
前記第１のALUおよび前記第２のALUはそれぞれ、入力ポートのそれぞれのペアから入力オペランドを受信し、前記入力オペランドの各々の下半分について第１の半幅演算を実行し、前記入力オペランドの各々の上半分について第２の半幅演算を実行し、かつ前記２つの出力ポートのうち対応する出力ポートにその結果を提供するように構成される、請求項１に記載の画像プロセッサ。
【請求項５】
各処理ユニットの前記第１のALUおよび前記第２のALUは、演算のペアを直列に実行するように構成され、前記ALUの一方は、演算の前記ペアのうちのもう一方への入力としての
もう一方の前記ALUへの入力として演算の前記ペアのうちの一方の結果を提供するように
構成される、請求項１に記載の画像プロセッサ。
【請求項６】
各処理ユニットの前記第１のALUおよび前記第２のALUは、
第１の演算の結果に基づいて順次実行される第２の演算を含む融合演算を実行するようにさらに構成され、
前記第１のALUが、入力ポートの前記第１のペアからデータを受信し、前記第１の演算
を実行し、かつ前記第２のALUに前記第１の演算の結果を提供するように構成され、
前記第２のALUが、前記入力ポートの前記第２のペアの一方の入力ポートからデータを
受信し、前記第１のALUから前記第１の演算の前記結果を受信し、前記第２の演算を実行
し、かつ前記２つの出力ポートのうちの一方に前記第２の演算の結果を提供するように構成される、請求項１に記載の画像プロセッサ。
【請求項７】
各処理ユニットは、第１の入力ポートからの入力と前記第１のALUによって生成された
結果からなる入力とのいずれかを選択し、前記第２のALUへの入力として前記選択された
入力を提供するように構成されたマルチプレクサを具備する、請求項６に記載の画像プロセッサ。
【請求項８】
各処理ユニットは、１つまたは２つのALU演算を表すオペコードを指定する命令を受信
するように構成され、前記オペコードが１つのALU演算を表す場合には、前記処理ユニッ
トが、前記第１のALUおよび第２のALUに同じ演算を実行させ、前記オペコードが２つのALU演算を表す場合には、前記処理ユニットが前記第１のALUおよび第２のALUに互いに異な
る演算を実行させるように構成される、請求項１に記載の画像プロセッサ。
【請求項９】
各処理ユニットは、前記第１のALUと前記第２のALUとマルチプレクサとを使用して反復的除算処理を実行するように構成され、
前記第１のALUは、前記４つの入力ポートのうちの第１の入力ポートからのデータを１
ビット左シフトしたものと第２の入力ポートからのデータのうち１ビットデータとからなる、前記反復的除算処理の分子に由来するデータを受信し、前記４つの入力ポートのうちの第３の入力ポートを介して前記反復的除算処理の除数を受信し、前記分子に由来するデータから前記除数を減算する第１の減算演算を実行するように構成され、
前記マルチプレクサは、前記第１の減算演算の結果の符号に基づいて、第１の入力と、第２の入力とのいずれかを選択するものであり、
前記第１の入力は、前記第１の入力ポートからのデータを２ビット左シフトしたものと
、前記第２の入力ポートからの前記１ビットデータと、前記第２の入力ポートからのデータのうちの別の１ビットデータとからなり、
前記第２の入力は、前記第１の減算演算の結果を１ビット左シフトしたものと、前記第２の入力ポートからの前記別の１ビットデータとからなり、
前記第２のALUは、前記マルチプレクサが選択した入力データを受信し、前記マルチプ
レクサが選択した入力のデータから前記除数を減算する第２の減算演算を実行するように構成される、請求項１に記載の画像プロセッサ。
【請求項１０】
処理ユニットのアレイを備える画像プロセッサの処理ユニットによって実装される方法であって、前記方法は、
前記処理ユニットの第１のALU(arithmetic-logic unit)および第２のALUによって、並
列に第１の全幅ALU演算と第２の全幅ALU演算を実行するステップであって、
前記第１のALUによって、前記処理ユニットの入力ポートの第１のペアからデータを
受信するステップと、
前記第１のALUによって、前記処理ユニットの入力ポートの前記第１のペアから受信
した前記データを使用して前記第１の全幅ALU演算を実行するステップと、
前記第１のALUによって、前記処理ユニットの第１の出力ポートに第１の全幅出力を
提供するステップと、
前記第２のALUによって、前記処理ユニットの入力ポートの第２のペアからデータを
受信するステップと、
前記第２のALUによって、前記処理ユニットの入力ポートの前記第２のペアから受信
した前記データを使用して前記第２の全幅ALU演算を実行するステップと、
前記第２のALUによって、前記処理ユニットの第２の出力ポートに第２の全幅出力を
提供するステップと
を含むステップと、
処理ユニットの積和論理ユニットによって、積和演算を実行するステップであって、
前記積和論理ユニットによって、前記処理ユニットの３つ以上の入力ポートからデータを受信するステップであって、前記データが第１の入力ポートから受信された第１の積オペランド、第２の入力ポートから受信された第２の積オペランド、および１つまたは複数の他の入力ポートから受信された和項を含むステップと、
前記積和論理ユニットによって、前記第１の積オペランドと前記第２の積オペランドの乗算および前記乗算の結果と前記和項との和演算を含む積和演算を実行するステップと、
前記積和論理ユニットによって、前記和項が２つの他の入力ポートから受信された場合に、前記処理ユニットの２つの出力ポートにわたって２倍幅出力を提供するステップと
を含むステップと
を有する方法。
【請求項１１】
各処理ユニットのサイクル時間が前記積和演算の実行時間に基づく、請求項１０に記載の方法。
【請求項１２】
前記処理ユニットの前記第１のALUおよび前記第２のALUによって、２倍幅ALU演算を実
行するステップをさらに含み、前記２倍幅ALU演算を実行するステップは、
前記第１のALUによって、入力ポートの前記第１のペアからデータを受信するステップ
と、
前記第１のALUによって、前記２倍幅ALU演算の下半分に対応する第３の全幅ALU演算を
実行するステップと、
前記第１のALUによって、前記処理ユニットの２つの出力ポートの一方に前記２倍幅ALU演算の前記下半分の結果を提供するステップと、
前記第２のALUに対して前記第１のALUによって、前記第３の全幅ALU演算の実行により
生成された桁上げ項を提供するステップと、
前記第２のALUによって、入力ポートの前記第２のペアからのデータと前記第１のALUからの前記桁上げ項とを受信するステップと、
前記第２のALUによって、前記２倍幅ALU演算の上半分に対応する第４の全幅ALU演算を
実行するステップと、
前記第２のALUによって、前記処理ユニットの前記２つの出力ポートのもう一方に前記
２倍幅ALU演算の前記上半分の結果を提供するステップと
を含む、請求項１０に記載の方法。
【請求項１３】
前記処理ユニットの前記第１のALUおよび前記第２のALUによって、並列に４つの半幅ALU演算を実行するステップをさらに含み、前記４つの半幅ALU演算を実行するステップは、
前記第１のALUおよび前記第２のALUによって、前記処理ユニットの入力ポートのそれぞれのペアから入力オペランドを受信するステップと、
前記第１のALUおよび前記第２のALUによって、前記入力オペランドの各々の下半分について第１の半幅演算を実行するステップと、
前記第１のALUおよび前記第２のALUによって、前記入力オペランドの各々の上半分について第２の半幅演算を実行するステップと、
前記第１のALUおよび前記第２のALUによって、前記処理ユニットの２つの出力ポートのうち対応する出力ポートに結果を提供するステップと
を含む、請求項１０に記載の方法。
【請求項１４】
前記処理ユニットの前記第１のALUおよび前記第２のALUによって、演算のペアを直列に実行するステップであって、前記ALUの一方によって、演算の前記ペアのうちのもう一方
への入力としてのもう一方の前記ALUへの入力として演算の前記ペアのうちの一方の結果
を提供するステップを含む、ステップをさらに含む、請求項１０に記載の方法。
【請求項１５】
前記処理ユニットの前記第１のALUおよび前記第２のALUによって、第１の演算の結果に基づいて順次実行される第２の演算を含む融合演算を実行するステップをさらに含み、前記融合演算を実行するステップは、
前記第１のALUによって、入力ポートの前記第１のペアからデータを受信するステップ
と、
前記第１のALUによって、前記第１の演算を実行するステップと、
前記第１のALUによって、前記第２のALUに前記第１の演算の結果を提供するステップと、
前記第２のALUによって、前記入力ポートの前記第２のペアの一方の入力ポートからデ
ータを受信するステップと、
前記第２のALUによって、前記第１のALUから前記第１の演算の前記結果を受信するステップと、
前記第２のALUによって、前記第２の演算を実行するステップと、
前記第２のALUによって、前記２つの出力ポートのうちの一方に前記第２の演算の結果
を提供するステップとを含む、請求項１４に記載の方法。
【請求項１６】
前記処理ユニットがマルチプレクサを備え、前記方法が、
前記マルチプレクサによって、第１の入力ポートからの入力と前記第１のALUによって
生成された結果からなる入力とのいずれかを選択するステップと、
前記マルチプレクサによって、前記第２のALUへの入力として前記選択された入力を提
供するステップと
をさらに含む、請求項１５に記載の方法。
【請求項１７】
前記処理ユニットによって、１つまたは２つのALU演算を表すオペコードを指定する命
令を受信するステップと、
前記オペコードが１つのALU演算を表すと決定されることに基づいて、前記第１のALUおよび前記第２のALUに同じ演算を実行させるステップと
をさらに含む、請求項１０に記載の方法。
【請求項１８】
前記処理ユニットによって、１つまたは２つのALU演算を表すオペコードを指定する命
令を受信するステップと、
前記オペコードが２つのALU演算を表すと決定されることに基づいて、前記第１のALUおよび前記第２のALUに異なる演算を実行させるステップと
をさらに含む、請求項１０に記載の方法。
【請求項１９】
前記第１のALUと前記第２のALUとマルチプレクサとを使用して反復的除算処理を実行するステップをさらに有し、
前記反復的除算処理を実行するステップは、
前記第１のALUによって、前記第１の入力ポートからのデータを１ビット左シフトし
たものと前記第２の入力ポートからのデータのうちの１ビットデータとからなる、前記反復的除算処理の分子に由来するデータを受信するステップと、
前記第１のALUによって、第３の入力ポートからの前記反復的除算処理の除数を受信
するステップと、
前記第１のALUによって、前記分子に由来するデータから前記除数を減算する第１の
減算演算を実行するステップと、
前記マルチプレクサによって、前記第１の減算演算の結果の符号に基づいて、第１の入力と、第２の入力とのいずれかを選択するステップと、を含み、前記第１の入力は、前記第１の入力ポートからのデータを２ビット左シフトしたものと、前記第２の入力ポートからの前記１ビットデータと、前記第２の入力ポートからのデータのうちの別の１ビットデータとからなり、前記第２の入力は、前記第１の減算演算の結果を１ビット左シフトしたものと、前記第２の入力ポートからの前記別の１ビットデータとからなり、
前記反復的除算処理を実行するステップは、
前記第２のALUによって、前記選択するステップにより選択された入力のデータを受
信するステップと、
前記第２のALUによって、前記選択するステップにより選択された入力のデータから
前記除数を減算する第２の減算演算を実行するステップと、をさらに含む、請求項１０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、一般にコンピューティング科学に関し、より詳細には、画像プロセッサ用多機能実行レーンに関する。
【背景技術】
【０００２】
画像処理は、一般的には、配列へと編成されたピクセル値の処理を伴う。ここで、空間的に編成された2次元配列は、画像の2次元性を捕らえる(さらなる次元としては、時間(たとえば、2次元画像のシーケンス)およびデータタイプ(たとえば、色)があり得る)。一般的なシナリオでは、配列化されたピクセル値は、モーションの画像を捕らえるために静止画像またはフレームのシーケンスを生成したカメラによって提供される。従来の画像プロセッサは、一般的には、2つの両極のいずれかに位置付けられる。
【０００３】
第1の極は、汎用プロセッサまたは汎用様プロセッサ(たとえば、ベクトル命令拡張を有する汎用プロセッサ)上で実行されるソフトウェアプログラムとして画像処理タスクを行う。第1の極は、一般的には、非常に多用途なアプリケーションソフトウェア開発プラットフォームを提供するが、関連付けられたオーバヘッド(たとえば、命令のフェッチおよび復号、オンチップデータおよびオフチップデータの処理、投機的実行)と組み合わされたそのよりきめの細かいデータ構造の使用は、最終的に、プログラムコードの実行中にデータの単位あたり、より大量のエネルギーが消費されるという結果になる。
【０００４】
第2の、反対の極は、データのはるかに大きなブロックに固定関数ハードワイヤード回路を適用する。カスタム設計回路に直接的に適用されるデータのより大きな(よりきめの細かいものとは反対に)ブロックの使用は、データの単位あたりの電力消費量を大きく減少させる。しかしながら、カスタム設計固定関数回路の使用は、一般に、プロセッサが行うことができるタスクの限られたセットという結果になる。したがって、広く多用途なプログラミング環境(第1の極と関連付けられた)は、第2の極では欠けている。
【０００５】
データの単位あたりの改善された電力効率と、非常に多用途なアプリケーションソフトウェア開発機会とを組み合わせて両方とも提供する技術プラットフォームは、解決策として望ましいがまだ見つかっていない。
【発明の概要】
【課題を解決するための手段】
【０００６】
積和算出ユニットと第1のALU論理ユニットと第2のALU論理ユニットとを有する実行ユニットを含む装置が説明される。ALUユニットは、第1の命令、第2の命令、第3の命令、および第4の命令を行う。第1の命令は積和命令である。第2の命令は、同時に動作する第1のALU論理ユニットおよび第2のALU論理ユニットを用いて並列ALU演算を行って第2の命令の異なるそれぞれの出力結果を生じさせることができる。第3の命令は、ALU論理ユニットの他方の出力から動作するALU論理ユニットのうちの一方を用いて逐次的ALU演算を行って第3の命令の出力結果を決定することができる。第4の命令は、第1のALU論理ユニットおよび第2のALU論理が反復中に交互に演算して商桁値を決定する反復除算演算を行う。
【０００７】
画像プロセッサの実行ユニットを備える装置が説明される。ALUユニットは、第1の命令を実行するための手段を備え、この第1の命令は積和命令である。ALUユニットは、同時に動作する第1のALU論理ユニットおよび第2のALU論理ユニットを用いて並列ALU演算を行って第2の命令の異なるそれぞれの出力結果を生じさせることを含む、第2の命令を実行するための手段を備える。ALUユニットは、ALU論理ユニットの他方の出力から動作するALU論理ユニットのうちの一方を用いて逐次的ALU演算を行って第3の命令の出力結果を決定することを含む、第3の命令を実行するための手段を備える。ALUユニットは、第1のALU論理ユニットおよび第2のALU論理ユニットが第1の除算結果桁値および第2の除算結果桁値を決定するように動作する反復的除算演算を行うことを含む、第4の命令を実行するための手段を備える。
【０００８】
以下の説明および添付の図面は、本発明の実施形態を示すために使用される。
【図面の簡単な説明】
【０００９】
【図１】画像プロセッサのステンシルプロセッサ構成要素を示す図である。
【図２】実行レーンのインスタンスおよびその2次元シフトレジスタへの結合を示す図である。
【図３】図2の実行レーンの一実施形態によって行われる機能の相対的遅延を示す図である。
【図４】多機能実行レーンのための設計を示す図である。
【図５ａ】反復除算演算を行う回路および方法を示す図である。
【図５ｂ】反復除算演算を行う回路および方法を示す図である。
【図６】図3〜図5a、図5bを参照しながら説明される実行レーンによって行われる方法を示す図である。
【図７】コンピューティングシステムの一実施形態を示す図である。
【発明を実施するための形態】
【００１０】
図1は、ステンシルプロセッサアーキテクチャ100の一実施形態を示す。ステンシルプロセッサとは、以下の説明からより明確にされるように、画像データのステンシルを処理するように最適化または設計されたプロセッサである。1つまたは複数のステンシルプロセッサは、プロセッサによって処理される画像上でステンシルベースのタスクを行う画像プロセッサに統合されてよい。図1において見られるように、ステンシルプロセッサは、データ算出ユニット101と、スカラプロセッサ102と、関連付けられたメモリ103と、I/Oユニット104とを含む。データ算出ユニット101は、実行レーンの配列105と、2次元シフト配列構造106と、配列の特定の行または列と関連付けられた別個のランダムアクセスメモリ107とを含む。
【００１１】
I/Oユニット104は、受信された画像データの入力「シート」をデータ算出ユニット101にロードし、ステンシルプロセッサからの外部データ算出ユニットからのデータの出力シートを記憶することを担当する。一実施形態では、データ算出ユニット101へのシートデータのロードは、受信されたシートを画像データの行/列へと解析し、その画像データの行/列を2次元シフトレジスタ構造106または実行レーン配列の行/列のそれぞれのランダムアクセスメモリ107へとロードすることを伴う(以下でより詳細に説明される)。
【００１２】
シートが最初にメモリ107にロードされる場合、実行レーン配列105内の個々の実行レーンは、適宜(たとえば、シートのデータに対する演算の直前のロード命令として)シートデータをランダムアクセスメモリ107から2次元シフトレジスタ構造106へとロードしてよい。レジスタ構造106へのデータのシートのロード(シートジェネレータから直接的であるにせよ、メモリ107からであるにせよ)が完了すると、実行レーン配列105の実行レーンは、データに影響し、最終的には、完成したデータをステンシルプロセッサから外部に、またはランダムアクセスメモリ107へと「ライトバック」する。後で、I/Oユニット104がランダムアクセスメモリ107からデータをフェッチして出力シートを形成する場合、その出力シートは、ステンシルプロセッサから外部に書き込まれる。
【００１３】
スカラプロセッサ102は、命令メモリ103からステンシルプロセッサのプログラムコードの命令を読み出し、実行レーン配列105内の実行レーンに命令を出すプログラムコントローラ109を含む。一実施形態では、単一の同じ命令が、データ算出ユニット101からSIMDに似た挙動を実施するために、配列105内のすべての実行レーンにブロードキャストされる。一実施形態では、スカラメモリ103から読み出され、実行レーン配列105の実行レーンに出される命令の命令フォーマットとしては、命令ごとに複数のオペコードを含む超長命令語(VLIW)タイプのフォーマットがある。さらなる実施形態では、VLIWフォーマットは、各実行レーンのALUによって行われる数学関数を指示するALUオペコードと、メモリオペコード(特定の実行レーンまたは実行レーンのセットに対するメモリ演算を指示する)の両方を含む。
【００１４】
「実行レーン」という用語は、命令を実行することが可能な1つまたは複数の実行ユニットのセット(たとえば、命令を実行することができる論理回路)を指す。しかしながら、実行レーンは、さまざまな実施形態では、単に実行ユニットを越えてよりプロセッサに似た機能を含むことができる。たとえば、1つまたは複数の実行ユニットの他に、実行レーンは、受信された命令を復号する論理回路も含んでもよいし、よりMIMDに似た設計では、命令をフェッチおよび復号する論理回路も含んでもよい。MIMDに似た手法に関して、集中型プログラム制御手法が主に本明細書で説明されているが、より分散型の手法が、さまざまな代替実施形態において実施されてよい(たとえば、プログラムコードと、配列105の各実行レーン内のプログラムコントローラとを含む)。
【００１５】
実行レーン配列105、プログラムコントローラ109、および2次元シフトレジスタ構造106の組み合わせは、広く適合可能な/構成可能なハードウェアプラットフォームに、広範囲のプログラム可能な機能を提供する。たとえば、個々の実行レーンが多種多様の機能を行うことができ、任意の出力配列場所に近接した入力画像データに容易にアクセスすることができると仮定すれば、アプリケーションソフトウェア開発者は、広範囲の異なる機能能力ならびに寸法(たとえば、ステンシルサイズ)を有するカーネルをプログラムすることができる。
【００１６】
演算中、実行レーン配列105および2次元シフトレジスタ106のため、画像の複数のステンシルは、並列に影響され得る(当技術分野で理解されるように、ステンシルは、一般的に、画像内のピクセルの連続したN×MまたはN×M×Cグループとして実施される(ここで、NはMに等しくすることができる))。ここで、たとえば、2次元シフト配列が、ステンシルのためのタスクを実行している実行レーンに結合されたレジスタ空間に各ステンシルのデータを順次渡すために、そのデータをシフトする間、各実行レーンは、演算を実行して、画像データ内のデータに値する特定のステンシルのための処理を行う。2次元シフトレジスタ106は、実行レーン配列105よりも大きい寸法であってもよい(たとえば、実行レーン配列が寸法X×Xである場合、2次元シフトレジスタ106は、寸法Y×Yであってよく、ここでY>X)ことに留意されたい。ここで、ステンシルを完全に処理するために、ステンシルの左端が実行レーンによって処理されているとき、シフトレジスタ106内のデータは、実行レーン配列105の右端から「押し出す」。シフトレジスタ106の余分な寸法は、実行レーン配列の端から押し出されたデータを吸収することができる。
【００１７】
実行レーン配列105によって影響される画像データのためのデータストアとして機能することは別として、ランダムアクセスメモリ107は、1つまたは複数のルックアップテーブルを保持し得る。さまざまな実施形態では、1つまたは複数のスカラルックアップテーブルは、スカラメモリ103内でインスタンス化されてもよい。
【００１８】
スカラルックアップは、同じインデックスからの同じルックアップテーブルからの同じデータ値を実行レーン配列105内の実行レーンの各々に渡すことを伴う。さまざまな実施形態では、上記で説明されたVLIW命令フォーマットは、スカラプロセッサによって行われたルックアップ演算をスカラルックアップテーブルへと向けるスカラオペコードも含むように拡張される。オペコードとともに使用するために指定されたインデックスは、即値オペランドであってもよいし、何らかの他のデータ記憶場所からフェッチされてもよい。ともかく、一実施形態では、スカラメモリ内のスカラルックアップテーブルからのルックアップは、同じクロックサイクル中に同じデータ値を実行レーン配列105内のすべての実行レーンにブロードキャストすることを本質的に伴う。
【００１９】
図2は、実行レーン201内のALU実行ユニット205のためのユニットセルおよび対応するローカルシフトレジスタ構造の別の、より詳細な記述を示す。実行レーンおよび実行レーン配列内の各場所と関連付けられたレジスタ空間は、一実施形態では、図2における実行レーン配列の各ノードにおいて見られる回路をインスタンス化することによって実施される。図2において見られるように、ユニットセルは、4つのレジスタR1からR4からなるレジスタファイル202に結合された実行レーン201を含む。任意のサイクル中に、ALU実行ユニットは、レジスタR1からR4のいずれかから読み出され、レジスタR1からR4のいずれかに書き込んでよい。
【００２０】
一実施形態では、2次元シフトレジスタ構造は、単一サイクル中に、レジスタR1からR3のうちの1つ(のみ)のいずれかの内容をその隣接物のレジスタファイルのうちの1つに出力マルチプレクサ203を通してシフト「アウト」を可能にすることと、隣接物間のシフトが同じ方向である(たとえば、すべての実行レーンが左にシフトする、すべての実行レーンが右にシフトする、など)ようにレジスタR1からR3の1つ(のみ)のいずれかの内容をその隣接物の対応するものから入力マルチプレクサ204を通してシフト「イン」される内容と置き換えさせることによって実施される。さまざまな実施形態では、実行レーン自体が、それら自体のそれぞれのシフト命令を実行して、シフトレジスタの内容の大規模SIMD2次元シフトを実施する。同じレジスタがその内容をシフトアウトさせ、同じサイクル上でシフトインされた内容と置き換えさせることは一般的であり得るが、マルチプレクサ構成203、204は、同じサイクル中に同じレジスタファイル内の異なるシフトソースおよびシフトターゲットレジスタを可能にする。
【００２１】
図2に示されるように、シフトシーケンス中に、実行レーンが、そのレジスタファイル202からその左隣接物、右隣接物、上隣接物、および下隣接物の各々に内容をシフトアウトすることに留意されたい。同じシフトシーケンスに関連して、実行レーンはまた、内容を、その左隣接物、右隣接物、上隣接物、および下隣接物のうちの特定の隣接物からそのレジスタファイルへとシフトする。同じく、シフトアウトターゲットおよびシフトインソースは、すべての実行レーンに対して同じシフト方向に一致するべきである(たとえば、シフトアウトが右隣接物に対してである場合、シフトインは、左隣接物からであるべきである)。
【００２２】
一実施形態では、サイクルごとの実行レーンにつき1つのレジスタのみの内容がシフトされることが許可されるが、他の実施形態は、複数のレジスタの内容をシフトイン/シフトアウトすることを可能にする。たとえば、図2において見られるマルチプレクサ回路203、204の第2のインスタンスが図2の設計に組み込まれる場合、2つのレジスタの内容が同じサイクル中にシフトアウト/シフトインされてよい。もちろん、サイクルごとに1つのレジスタのみの内容がシフトされることが可能である実施形態では、複数のレジスタからのシフトが、数学演算間のシフトのためにより多くのクロックサイクルを消費することによって数学演算間で行われてよい(たとえば、2つのレジスタの内容は、数学演算間で2つのシフト演算を消費することによって、数学演算間でシフトされてよい)。
【００２３】
実行レーンのレジスタファイルの部分的な内容がシフトシーケンス中にシフトアウトされる場合、各実行レーンのシフトアウトされないレジスタの内容は所定の位置にあるままである(シフトしない)ことに留意されたい。したがって、シフトインされた内容と置き換えられないシフトされないすべての内容は、シフトサイクルにわたって実行レーンに対してローカルに存続する。例示的な容易さのために図2に示されていないメモリ実行ユニットはまた、実行レーン配列内の実行レーンの行および/または列と関連付けられたランダムアクセスメモリ空間からデータをロードする、またはランダムアクセスメモリ空間にデータを記憶するために、各実行レーン201内に存在してもよい。ここで、メモリユニットは、実行レーン自体のレジスタ空間からロードできない、または実行レーン自体のレジスト空間に記憶できないデータをロード/記憶するために使用されることが多いので、標準的なMユニットとして機能する。さまざまな実施形態では、Mユニットの主な演算は、ローカルレジスタからメモリへとデータを書き込むことと、メモリからデータを読み出し、そのデータをローカルレジスタに書き込むことである。
【００２４】
ハードウェア実行レーン201のALUユニット205によってサポートされるISAオペコードに関して、さまざまな実施形態では、ALUユニット205によってサポートされる数学オペコードとしては、以下のALU演算、すなわち、加算(ADD)、減算(SUB)、移動(MOV)、乗算(MUL)、積和(MAD)、絶対値(ABS)、除算(DIV)、左シフト(SHL)、右シフト(SHR)、最小値または最大値を返す(MIN/MAX)、選択(SEL)、論理AND(AND)、論理OR(OR)、論理XOR(XOR)、先行ゼロ計数(CLZまたはLZC)、および論理補数(NOT)、のいずれかであってよい。以下で図3〜図5を参照しながらより詳細に説明されるALUユニット205またはその一部分の一実施形態。すぐ上で説明されたように、メモリアクセス命令は、関連付けられたランダムアクセスメモリからデータをフェッチする、または関連付けられたランダムアクセスメモリにデータを記憶するために実行レーン201によって実行可能である。さらに、ハードウェア実行レーン201は、2次元シフトレジスタ構造内のデータをシフトするために、シフトオペ命令(右、左、上、下)をサポートする。上記で説明されたように、プログラム制御命令は、主にステンシルプロセッサのスカラプロセッサによって実行される。
【００２５】
図3は、すぐ上で説明された実行レーンの実行ユニットまたはその一部分のための消費時間マップを示す。具体的には、図3は、実行ユニットによって実行可能ないくつかの異なる命令の各々によって消費される時間の量をマップアウトする。図3において見られるように、実行ユニットは、1)積和命令(MAD)301、2)並列な2つの全幅ALU演算(FW)または4つの半幅(HW)ALU演算302、3)2倍幅(2XW)ALU演算303、4)((C op D) op B)という形の融合演算304、および5)反復除算(DIV)演算306を行うことができる。
【００２６】
図3において見られるように、MAD演算301は、単独で、実行ユニットが実行することができるさまざまな命令の中で最も多くの時間を消費する。したがって、設計観点は、実行ユニットが、たとえば、並列に複数のALU演算(演算302など)を、および/また連続して複数のALU演算(演算304など)を行うために、MAD演算を行う論理の他に、複数のALU論理ユニットとともに拡張可能であるということである。
【００２７】
図4は、図3に示される異なる命令をサポートすることができる実行ユニット405のための設計の一実施形態を示す。図4において見られるように、実行ユニット405は、第1のALU論理ユニット401と、第2のALU論理ユニット402と、ならびに積和論理ユニット403とを含む。レジスタファイルからの入力は、A、B、C、Dとラベルされるが、レジスタファイルにライトバックされる出力はXおよびYとラベルされる。したがって、実行ユニット405は、4つの入力ポート、2つの出力ポートの実行ユニットである。
【００２８】
積和論理ユニット403は、一実施形態では、完全積和命令を行う。すなわち、積和論理ユニット403は関数(A*B)+(C,D)を行い、ここで、Aは全幅入力オペランド、Bは全幅オペランド、(C,D)は、2倍幅和項を形成するための2つの全幅オペランドの連結である。たとえば、全幅が16ビットに対応する場合、Aは16ビットであり、Bも16ビットであり、和項は32ビットである。当技術分野で理解されるように、2つの全幅値の積和は、2倍幅結果を生じることができる。したがって、MAD演算の結果はX出力ポート、Y出力ポートにわたって書き込まれ、ここで、たとえば、Xは結果の上半分を含み、Yは結果の下半分を含む。さらなる実施形態では、積和ユニット403は、半幅積和をサポートする。ここで、たとえば、Aの下半分は第1の被乗数として使用され、Bの下半分は第2の被乗数として使用され、CまたはDのどちらか(連結ではないが)が加数として使用される。
【００２９】
上記で図3に関して言及されたように、MAD演算の実行は、一般的なALU論理ユニットよりも多くの時間を消費することがある。したがって、実行ユニットは、ALU演算の並列実行だけでなく逐次ALU演算も提供するために、ALU論理ユニット401、402のペアを含む。
【００３０】
ここで、図3および図4を参照すると、デュアル並列FW演算302に対して、第1のALU論理ユニット401は第1の全幅ALU演算(A op B)を行い、第2のALUは、第1の全幅ALU演算と並列に、第2の全幅ALU演算(C op D)を行う。同じく、一実施形態では、全幅演算は16ビットに対応する。ここで、第1のALU論理ユニット401は、(A op B)の結果をレジスタXへと書き込み、第2のALU論理ユニット402は、(C op D)の結果をレジスタYへと書き込む。
【００３１】
一実施形態では、デュアル並列全幅ALU演算302を実行するための命令フォーマットとしては、デュアル全幅演算および宛先レジスタを指定するオペコードがある。さらなる実施形態では、オペコードは、デュアル並列全幅演算を指定することの他に、1つまたは2つのALU演算も指定する。オペコードが1つの演算のみを指定する場合、ALU論理ユニット401と402の両方は、同じ演算を行う。対照的に、オペコードが第1の異なるALU演算および第2の異なるALU演算を指定する場合、第1のALU論理ユニット401は演算のうちの1つを行い、第2のALU論理ユニット402は演算の第2のものを行う。
【００３２】
演算302の半幅(HW)特徴に関して、4つの半幅ALU演算が並列に行われる。ここで、入力A、B、C、およびDの各々は、2つの別個の入力オペランドを各々含むと理解される。すなわち、たとえば、Aの上半分は第1の入力オペランドに対応し、Aの下半分は第2の入力オペランドに対応し、Bの上半分は第3の入力オペランドに対応し、Bの下半分は第4の入力オペランドに対応する、などである。
【００３３】
したがって、ALU論理ユニット401は2つのALU演算を並列に取り扱い、ALU論理ユニット402は2つのALU演算を並列に取り扱う。したがって、実行中に、すべての4つの半幅演算が並列に行われる。演算302の終了時に、ALU論理ユニット401は2つの半幅結果をレジスタXへと書き込み、ALU論理ユニット402は2つの半幅結果をレジスタYへと書き込む。したがって、レジスタXおよびY内に4つの別個の半幅結果が存在する。
【００３４】
一実施形態では、命令フォーマットは、並列半幅演算が行われ得ると指定するだけでなく、どのALU演算が行われ得るかも指定する。さまざまな実施形態では、命令フォーマットは、すべての4つの演算が同じであり、1つの演算のみを指定してもよい、および/またはすべての4つの演算が異なると指定し、4つの異なる演算を指定してもよい。後者の場合、あるいは、すべての4つの演算に対して同じ演算を実施するために、命令フォーマットは、同じ演算を4回指定してよい。これらの命令フォーマット手法のさまざまな組み合わせも可能である。
【００３５】
図3の2倍幅ALU演算303に関しては、一実施形態では、実行ユニット405は演算(A,C) op (B,D)を行い、ここで、(A,C)は、第1の2倍幅入力オペランドを形成する入力AおよびCの連結、(B,D)は、第2の2倍幅入力オペランドを形成する入力BおよびDの連結である。ここで、桁上げ項は、全幅から2倍幅に前方に演算を桁上げするために、桁上げ線404に沿って第1のALU論理ユニット401から第2のALU論理ユニット402に渡されてよい。
【００３６】
すなわち、一実施形態では、C項およびD項は、2つの2倍幅入力オペランドの下位の順序付けられた半分を表す。第2のALU論理ユニット402は、2つの下半分に対して指定された演算(たとえば、ADD)を行い、生成される結果は、2倍幅結果全体の下半分に対応する。したがって、第2のALU論理ユニット402からの結果はレジスタYに書き込まれる。下半分に対する演算は、入力オペランドの2つのそれぞれの上半分AおよびCの演算を継続する第1のALU論理ユニット401に桁上げされる桁上げ項を生成してよい。第1のALU論理ユニット401からの結果は、出力レジスタXに書き込まれる結果全体の上半分に対応する。第1のALU論理ユニット401による上半分に対する演算は、第2のALU論理ユニット402から桁上げ項を受け取るまで開始することができない場合があるので、ALU論理ユニット402、401の演算は、並列ではなく逐次的である。したがって、図3において見られるように、2倍幅演算303は、並列全/半幅演算302の約2倍の長さを要する場合がある。
【００３７】
それにもかかわらず、MAD演算301は、2つの連続したALU論理ユニット演算よりも多くの時間を消費することができるので、機械が、その最も長い伝搬遅延演算によって消費される期間へのできる限り多くの関数の挿入を試行することができる実行ユニット405のまわりに構築可能である。したがって、一実施形態では、実行ユニット405のサイクル時間は、MAD命令301の実行時間に対応する。一実施形態では、2倍幅演算のための命令フォーマットは、行われることになる演算だけでなく、演算が2倍幅演算であることも指定する。
【００３８】
融合演算304に関して、実行ユニット405は、演算(C op D) op Bを行う。ここで、すぐ上で説明された2倍幅ALU演算303のように、第2の演算が第1の演算の結果に影響するので、デュアルALU論理ユニット401、402は順次演算する。ここで、第2のALU論理ユニット402は、全幅入力CおよびDに対して初期演算を行う。第2のALU論理402の結果は、結果レジスタ空間に書き込まれる代わりに、マルチプレクサ406を介して第1のALU論理ユニット401の入力へと多重送信される。次いで、第1のALU論理ユニット401が、第2の演算を行い、結果をレジスタXへと書き込む。
【００３９】
さらなる実施形態では、半幅融合演算も行われ得る。ここで、演算は、入力オペランドの半分のみが利用されることを除いて、上記で説明されたとおりである。すなわち、たとえば、(C op D) op Bを計算する際、Cの下半分およびDの下半分のみが、第1の演算に対する半幅結果を決定するために使用され、次いで、Bの下半分のみが、第2の演算を行うために第1の演算の半幅結果とともに使用される。結果は、レジスタX内に半幅値として書き込まれる。さらに、2つの半幅融合演算が並列に行われ得る。ここで、演算は、すぐ上で説明されたように、オペランドの上位半分を除き、同じ論理演算を用いて同時に行われる。結果は、レジスタXに書き込まれる2つの半幅値である。
【００４０】
一実施形態では、融合演算のための命令フォーマットは、融合演算が行われ得ると指定し、2つの演算を指定する。同じ演算が2回行われ得る場合、一実施形態では、命令は、演算を1回のみ指定する、または演算を2回指定する。さらなる実施形態では、融合演算および行われることになっている演算を指定することは別として、命令フォーマットは、全幅演算が行われ得るか半幅演算が行われ得るかをさらに指定してよい。
【００４１】
図3の演算306は、反復除算演算も実行ユニットによって行われ得ることを示す。特に、以下でより詳細に説明されるように、さまざまな実施形態では、ALU論理ユニット401と402の両方は、反復除算演算中に並列に協力して関与する。
【００４２】
図5aおよび図5bは、図3の反復除算命令306を実行するための一実施形態に関係する。図5aは、反復除算命令の実行を可能にするために図4の実行ユニット回路405に追加されることになっているさらなる回路を示す(図4の同じALU論理ユニット401、402であると理解されるALU論理ユニット501、502を除く)。図5bは、反復除算命令の実行中の実行ユニットのマイクロシーケンス演算の一実施形態を示す。以下の説明からより明確であるように、命令の単一実行は、本質的に、分子(除算される値)の先頭桁を除数(分子が除算される値)によって除算するために試行が行われる長除法の動作(atomic act)に類似している2回の反復を行う。
【００４３】
簡単にするために、16ビット除算が説明される(当業者は、本教示を異なる幅の実施形態に拡張することができるであろう)。2つの長除法動作を行う本明細書において説明される実施形態では、命令の8回の逐次実行が、16ビット除数によって16ビット分子を完全に除算するために使用される。すなわち、各長除法動作は、分子の次の上位ビットの処理に対応する。2つのそのような上位ビットは、命令の単一実行中に処理される。したがって、分子のすべてのビットを処理するために、命令の8つの逐次実行は、完全除算を完全に行うために必要とされる。第1の命令の出力はレジスタファイルに書き込まれ、次の以後の命令のための入力として使用される。
【００４４】
図5aを参照すると、分子入力はB入力において提供され、除数はD入力のところに存在する。同じく、本実施形態では、B入力オペランドとD入力オペランドの両方が16ビットである。A入力オペランドおよびB入力オペランドの連結A,B(Aオペランドも16ビットである)である「パックされた」32ビットデータ構造「PACK」は、完全除算プロセスの初期データ構造としてみなされる。初期条件として、Aは16個のゼロ(000…0)の文字列に設定され、Bは分子値である。
【００４５】
図5aおよび図5bを参照すると、第1のマイクロシーケンス中に、PACKデータ構造の左シフトが、PACKの最上位語(「PACK msw」)と呼ばれる、A[14:0]、B[15]データ構造を生じさせるために行われる。次いで、除数Dが、PACK mswから第2のALU論理ユニット502の分だけ減算される511。この演算は、除数が最初に分子の先頭桁を割る長除法に対応する。一実施形態では、ALU論理ユニット501、502は実際には3つの入力ALUであり、図4によって示唆される2つの入力ALUではない(第3の入力は、反復除算演算の場合の除数Dのために予約される)ことに留意されたい。
【００４６】
次いで、減算511の結果の符号512に応じて、異なるデータ処理手順が続く。重要なことに、第1の商結果ビット(すなわち、除算結果の第1のビット)が、Y出力ポート509の第2のビットから最下位ビットに書き込まれるように段階的に行われる(「NEXT B[1]」)。減算の結果が負の場合、商結果ビットB[1]は0に設定される513。減算の結果が正の場合、商結果ビットB[1]は1に設定される514。このビットの設定は、除数値が分子の第1の桁を割り切り可能であるかどうかを確立することによって商結果の第1の桁が決定される、長除法におけるプロセスに対応する。
【００４７】
さらに、2つの異なるデータ構造が作られ、マルチプレクサ506(図4のマルチプレクサ406と同じマルチプレクサであってよい)のそれぞれの入力ポート(「1」、「2」)に提示される。第1のデータ構造は、Pack msw(A[13:0],B[15],B[14])の左シフトに対応し、マルチプレクサ506の入力1において提示される。このデータ構造の作成は、除数が最上位隣接物を割り切らない場合に分子の次の桁がその最上位隣接物に加えられる、長除法におけるプロセスに対応する。
【００４８】
第2の作られたデータ構造は、ビットB[14]が加えられた第2のALU論理ユニット502によってちょうど行われた減算511の結果の左シフトに対応し、マルチプレクサ506の第2の入力(「2」)において提示される。このデータ構造の作成は、除数が分子の第1の桁を割り、それによって、分子の第1の桁と除数の倍数との差の結果への次の除算がセットアップされる、長除法の状況に対応する。
【００４９】
次いで、第2のALU論理ユニット502によって行われた減算の結果が正の結果をもたらすか負の結果をもたらすかに応じて、第1のデータ構造または第2のデータ構造が、マルチプレクサ506によって選択される。減算が負の結果をもたらした(除数が分子の次の上位桁を割り切ることができないことに対応する)場合、第1のデータ構造が選択される513。減算が正の結果をもたらした(除数が分子の次の上位桁を割り切ることができることに対応する)場合、第2のデータ構造が選択される514。
【００５０】
マルチプレクサ506の出力は、ここで、PACKデータ構造(new PACK msw)の新しい最上位語であることが理解され、除数が割り切りを試行する予定である長除法シーケンスにおける次の値に対応する。したがって、第1のALU論理ユニット501は、new PACK msw値から除数Dを減算する515。Y出力B[0]の最下位ビット510は、第1のALU501からの減算結果の符号に応じて1または0として書き込まれるように段階的に行われ、商結果517、518における次の桁を表す。
【００５１】
第2のマルチプレクサ508は、第1のALU論理ユニットの減算515の符号に応じて516、第1のデータ構造および第2のデータ構造から選択する。第2のマルチプレクサ508の入力「1」において提示される第1のデータ構造は、new PACK msw値に対応する。第2のマルチプレクサ508の入力「2」において提示される第2のデータ構造は、第1のALU論理ユニット501によって行われる減算の結果に対応する。2つのデータ構造のうちのどちらが選択されるかは、第1のALU501によって行われる減算515の結果の符号に依存する。減算の結果が負の場合、マルチプレクサは、new PACK msw値を選択する517。減算の結果が正の場合、マルチプレクサは、new PACK msw-D値を選択する518。
【００５２】
第2のマルチプレクサ508の出力は、X出力からレジスタファイルに書き込まれるNEXT A値に対応する。Y出力(B[15:0])において提示される値は、2つの行われたばかりの反復によって消費されたその2つの最上位ビット(B[13:0])より少なく、Bオペランドの先頭端において構成される。Bのこれらの剰余ビットの、2つの新しく計算された商桁結果との連結は、新しいBオペランドNEXT Bとしてレジスタファイルに書き込まれる。次の反復のために、前の命令からのX出力がAオペランドに読み込まれ、前の命令からのY出力がBオペランドに読み込まれる。次いで、元のBオペランドのすべての桁が処理される(同じく、16ビットの場合、Bオペランドは、命令の8つの逐次実行を消費する)まで、プロセスが繰り返す。すべての反復が終結すると、最終的な商がY出力からレジスタファイルに書き込まれ、剰余は、X出力からレジスタファイルに書き込まれるNEXT A値において表される。
【００５３】
図6は、上記で説明されたALUユニットによって行われる方法の一実施形態を示す。図6において見られるように、方法は、画像プロセッサのALUユニットで以下を行うことを含む。第1の命令を実行すること、この第1の命令は積和命令である601。同時に動作する第1のALU論理ユニットおよび第2のALU論理ユニットを用いて並列ALU演算を行って第2の命令の異なるそれぞれの出力結果を生じさせることを含む、第2の命令を実行すること602。ALU論理ユニットの他方の出力から動作するALU論理ユニットのうちの一方を用いて逐次的ALU演算を行って第3の命令の出力結果を決定することを含む、第3の命令を実行すること603。第1のALU論理ユニットおよび第2のALU論理ユニットが第1の除算結果桁値および第2の除算結果桁値を決定するように動作する反復的除算演算を行うことを含む、第4の命令を実行すること604。
【００５４】
上記で説明されたさまざまな画像プロセッサアーキテクチャ特徴は、必ずしも従来の意味での画像処理に限定されず、したがって、画像プロセッサを再度特徴付けさせ得る(または特徴付けさせなくてもよい)他の適用例に適用されてよいことを指摘することが適切である。たとえば、上記で説明されたさまざまな画像プロセッサアーキテクチャ特徴のいずれかが、実際のカメラ画像の処理とは反対に、アニメーションの作成および/または生成および/またはレンダリングにおいて使用された場合、画像プロセッサは、グラフィックス処理ユニットと特徴付けられてよい。さらに、上記で説明された画像プロセッサアーキテクチャの特徴は、ビデオ処理、映像処理、画像認識、および/または機械学習などの他の技術的適用例に適用されてよい。このように適用されると、画像プロセッサは、より汎用的なプロセッサ(たとえば、これに対するコプロセッサとして)と統合されてもよいし(たとえば、コンピューティングシステムのCPUまたはその一部である)、コンピューティングシステム内のスタンドアロンプロセッサであってもよい。
【００５５】
上記で説明したハードウェア設計実施形態は、半導体チップ内で、および/または半導体製造プロセスに対する最終的なターゲティングのための回路設計の記述として、実施されてよい。後者の場合、そのような回路記述は、(たとえば、VHDLまたはVerilog)レジスタ転送レベル(RTL)回路記述、ゲートレベル回路記述、トランジスタレベル回路記述、またはマスク記述、またはそれらのさまざまな組み合わせの形をとってよい。回路記述は、一般的には、コンピュータ可読記憶媒体(CD-ROMまたは他のタイプの記憶技術など)上で実施される。
【００５６】
先行するセクションから、上記で説明された画像プロセッサはコンピュータシステム上のハードウェア内で(たとえば、ハンドヘルドデバイスのカメラからのデータを処理する、ハンドヘルドデバイスのシステムオンチップ(SOC)の一部として)実施され得ることを認識することが適切である。画像プロセッサがハードウェア回路として実施される場合、画像プロセッサによって処理される画像データは、カメラから直接的に受信可能であることに留意されたい。ここで、画像プロセッサは、別個のカメラの一部であってもよいし、統合されたカメラを有するコンピューティングシステムの一部であってもよい。後者の場合、画像データは、カメラから、またはコンピューティングシステムのシステムメモリから直接的に受信されてよい(たとえば、カメラは、その画像データを、画像プロセッサではなくシステムメモリに送信する)。先行するセクションにおいて説明された特徴の多くが、グラフィックスプロセッサユニット(アニメーションをレンダリングする)に適用得ることにも留意されたい。
【００５７】
図7は、コンピューティングシステムの例示的な記述を提供する。以下で説明されるコンピューティングシステムの構成要素の多くは、統合されたカメラと関連付けられた画像プロセッサを有するコンピューティングシステム(たとえば、スマートフォンまたはタブレットコンピュータなどのハンドヘルドデバイス)に適用可能である。当業者は、この2つを容易に詳しく説明することができよう。
【００５８】
図7において見られるように、基本的なコンピューティングシステムは、中央処理装置701(たとえば、複数の汎用処理コア715_1から715_Nと、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置されたメインメモリコントローラ717とを含んでよい)と、システムメモリ702と、ディスプレイ703(たとえば、タッチスクリーン、フラットパネル)と、ローカルワイヤードポイントツーポイントリンク(たとえば、USB)インタフェース704と、さまざまなネットワークI/O機能705(イーサネット(登録商標)インタフェースおよび/またはセルラーモデムサブシステムなど)と、ワイヤレスローカルエリアネットワーク(たとえば、WiFi)インタフェース706と、ワイヤレスポイントツーポイントリンク(たとえば、ブルートゥース(登録商標))インタフェース707と、全地球測位システムインタフェース708と、さまざまなセンサ709_1から709_Nと、1つまたは複数のカメラ710と、バッテリ711と、電力管理制御ユニット712と、スピーカおよびマイクロホン713と、オーディオコーダ/デコーダ714とを含んでよい。
【００５９】
アプリケーションプロセッサまたはマルチコアプロセッサ750は、そのCPU701内の1つまたは複数の汎用処理コア715と、1つまたは複数のグラフィカル処理ユニット716と、メモリ管理機能717(たとえば、メモリコントローラ)と、I/O制御機能718と、画像処理ユニット719とを含んでよい。汎用処理コア715は、一般的には、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。グラフィックス処理ユニット716は、一般的には、たとえば、ディスプレイ703上に提示されたグラフィックス情報を生成するために、グラフィックスを多く使用する機能を実行する。メモリ制御機能717は、システムメモリ702にデータを書き込む、またはシステムメモリ702からデータを読み取るためにシステムメモリ702とインタフェースする。電力管理制御ユニット712は、一般に、システム700の電力消費を制御する。
【００６０】
画像処理ユニット719は、上記で先行するセクションにおいて十分に説明された画像処理ユニット実施形態のいずれかに従って実施されてよい。代替的に、または組み合わせて、IPU719は、GPU716とCPU701のどちらかまたは両方に、そのコプロセッサとして結合されてよい。さらに、さまざまな実施形態では、GPU716は、上記で十分に説明された画像プロセッサ特徴のいずれかとともに実施されてよい。
【００６１】
タッチスクリーンディスプレイ703、通信インタフェース704〜707、GPSインタフェース708、センサ709、カメラ710、およびスピーカ/マイクロホンコーデック713、714の各々はすべて、適切な場合には統合された周辺デバイス(たとえば、1つまたは複数のカメラ710)も含むコンピューティングシステム全体に対するさまざまな形のI/O(入力および/または出力)として見なされてよい。実装形態に応じて、これらのI/O構成要素のうちのさまざまな構成要素が、アプリケーションプロセッサ/マルチコアプロセッサ750上で統合されてもよいし、ダイから離れて、またはアプリケーションプロセッサ/マルチコアプロセッサ750のパッケージの外部に設置されてもよい。
【００６２】
一実施形態では、1つまたは複数のカメラ710は、カメラとその視野内の物体と間の深度を測定することが可能なデプスカメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用CPUコア(またはプログラムコードを実行するための命令実行パイプラインを有する他の機能ブロック)上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェア、および/またはファームウェアは、上記で説明された機能のいずれかを行ってよい。
【００６３】
本発明の実施形態は、上記に記載されたさまざまなプロセスを含んでよい。プロセスは、機械実行可能命令内で実施されてよい。命令は、汎用プロセッサまたは専用プロセッサに特定のプロセスを行わせるために使用可能である。あるいは、これらのプロセスは、プロセスを行うためのハードワイヤード論理を含む特定のハードウェア構成要素によって行われてもよいし、プログラムされたコンピュータ構成要素とカスタムハードウェア構成要素の任意の組み合わせによって行われてもよい。
【００６４】
本発明の要素はまた、機械実行可能命令を記憶するための機械可読媒体として提供されてよい。機械可読媒体としては、限定するものではないが、フロッピー(登録商標)ディスケット、光ディスク、CD-ROM、および光磁気ディスク、フラッシュメモリ、ROM、RAM、EPROM、EEPROM、磁気カードもしくは光学カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体/機械可読媒体があり得る。たとえば、本発明は、通信リンク(たとえば、モデムまたはネットワーク接続)を介して搬送波または他の伝搬媒体内で実施されたデータ信号によってリモートコンピュータ(たとえば、サーバ)から要求元コンピュータ(たとえば、クライアント)に転送され得るコンピュータプログラムとしてダウンロードされてよい。
【００６５】
前述の明細書では、本発明は、その特定の例示的な実施形態に関して説明されてきた。しかしながら、それに対して、添付の特許請求の範囲に記載される本発明のより広い趣旨および範囲から逸脱することなく、さまざまな修正および変更がなされてよいことは明らかである。したがって、明細書および図面は、制限的な意味ではなく例示的な意味で見なされるべきである。
【符号の説明】
【００６６】
1  入力
100  ステンシルプロセッサアーキテクチャ
101  データ算出ユニット
102  スカラプロセッサ
103  メモリ、命令メモリ、スカラメモリ
104  I/Oユニット
105  配列、実行レーン配列
106  2次元シフト配列構造、2次元シフトレジスタ構造、レジスタ構造、2次元シフトレジスタ、シフトレジスタ
107  ランダムアクセスメモリ、メモリ
109  プログラムコントローラ
201  実行レーン、ハードウェア実行レーン
202  レジスタファイル
203  出力マルチプレクサ、マルチプレクサ構成、マルチプレクサ回路
204  マルチプレクサ構成、マルチプレクサ回路、入力マルチプレクサ
205  ALU実行ユニット、ALUユニット
301  積和(MAD)演算、MAD演算、MAD命令
302  演算、デュアル並列FW演算、デュアル並列全幅ALU演算、半幅演算
303  2倍幅ALU演算
304  演算、融合演算
306  演算、反復除算命令
401  第1のALU論理ユニット、論理ユニット、ALU論理ユニット
402  第2のALU論理ユニット、論理ユニット、ALU論理ユニット、第2のALU論理
403  積和論理ユニット、積和ユニット
404  桁上げ線
405  実行ユニット、実行ユニット回路
406  マルチプレクサ
501  第1のALU論理ユニット、論理ユニット、第1のALU
502  第2のALU論理ユニット、論理ユニット
506  マルチプレクサ
508  第2のマルチプレクサ
509  Y出力ポート
510  最下位ビット
511  減算
515  減算
517  商結果
518  商結果
700  システム
701  CPU、中央処理装置
702  システムメモリ
703  タッチスクリーンディスプレイ、ディスプレイ
704  通信インタフェース、インタフェース
705  ネットワークI/O機能
706  通信インタフェース、インタフェース
707  通信インタフェース、インタフェース
708  GPSインタフェース、全地球測位システムインタフェース
709  センサ
709_1  センサ
709_N  センサ
710  カメラ
711  バッテリ
712  電力管理制御ユニット
713  マイクロホン、マイクロホンコーデック
714  デコーダ、マイクロホンコーデック
715  汎用処理コア
715_1  汎用処理コア
715_N  汎用処理コア
716  グラフィカル処理ユニット、グラフィックス処理ユニット
717  メモリ制御機能、メモリ管理機能、メインメモリコントローラ
718  I/O制御機能
719  画像処理ユニット
750  マルチコアプロセッサ
【図１】
0006789287.tif 000002
【図２】
0006789287.tif 000003
【図３】
0006789287.tif 000004
【図４】
0006789287.tif 000005
【図５ａ】
0006789287.tif 000006
【図５ｂ】
0006789287.tif 000007
【図６】
0006789287.tif 000008
【図７】
0006789287.tif 000009