(57)【要約】      （修正有）【課題】効率的な低電力ベクトルプロセッサを提供する。【解決手段】ハードウェアロジック回路を用いてデータを処理する方法において、第一可変長の命令は、第一オペレーションを表す第一オペコード値を有し、第一可変長の命令のデータ型フィールドは、一つ以上の第一オペランドが整数のデータ型のものであることを示す第一値を有する。第二可変長の命令は、第一オペレーションを表す、第一可変長の命令と同じ第一オペコード値を有し、第二可変長の命令のデータ型フィールドは、一つ以上の第二オペランドが浮動小数点のデータ型のものであることを示す、第一値とは異なる第二値を有する。【選択図】なし【特許請求の範囲】
【請求項１】
ハードウェアロジック回路を用いてデータを処理するための方法であって、
前記ハードウェアロジック回路に関連付けられたプロセッサを用いて、第一オペレーションを表す第一可変長の命令にアクセスする工程であって、該第一可変長の命令は、整数のデータ型の一つ以上の第一オペランドを参照し、該第一可変長の命令は、該第一オペレーションを表す第一オペコード値を有し、該第一可変長の命令のデータ型フィールドは、該一つ以上の第一オペランドが該整数のデータ型のものであることを示す第一値を有する、アクセスする工程と、
前記ハードウェアロジック回路を用いて、前記整数のデータ型の前記一つ以上の第一オペランドに対して前記第一オペレーションを実行する工程と、
前記プロセッサを用いて、前記第一オペレーションを表す第二可変長の命令にアクセスする工程であって、該第二可変長の命令は、浮動小数点のデータ型の一つ以上の第二オペランドを参照し、該第二可変長の命令は、前記第一オペレーションを表す、前記第一可変長の命令と同じ前記第一オペコード値を有し、前記第二可変長の命令のデータ型フィールドは、該一つ以上の第二オペランドが該浮動小数点のデータ型のものであることを示す、前記第一値とは異なる第二値を有する、アクセスする工程と、
前記ハードウェアロジック回路を用いて、前記浮動小数点のデータ型の前記一つ以上の第二オペランドに対して前記第一オペレーションを実行する工程と、を含む方法。
【請求項２】
前記ハードウェアロジック回路は、二つ以上の異なるサイズのオペランドに対して前記第一オペレーションを実行する、請求項１に記載の方法。
【請求項３】
前記ハードウェアロジック回路は、（１）前記整数のデータ型の前記一つ以上の第一オペランド、（２）前記浮動小数点のデータ型の前記一つ以上の第二オペランド、（３）固定小数点のデータ型の一つ以上の第三オペランド、又は（４）スケールされた整数のデータ型の一つ以上の第四オペランドのうち、少なくとも一つに対して前記第一オペレーションを実行する、請求項１に記載の方法。
【請求項４】
前記第一可変長の命令のデータサイズフィールドは、前記一つ以上の第一オペランドの第一サイズを示す第三値を有し、前記第二可変長の命令のデータサイズフィールドは、前記一つ以上の第二オペランドの第二サイズを示す第四値を有する、請求項１に記載の方法。
【請求項５】
前記一つ以上の第二オペランドの前記第二サイズは、前記一つ以上の第一オペランドの前記第一サイズと異なる、請求項４に記載の方法。
【請求項６】
前記整数のデータ型とは異なるデータ型になるように、前記一つ以上の第一オペランドに対する前記第一オペレーションを行った結果を再フォーマットする工程をさらに含む、請求項１に記載の方法。
【請求項７】
前記浮動小数点のデータ型とは異なるデータ型になるように、前記一つ以上の第二オペランドに対する前記第一オペレーションを行った結果を再フォーマットする工程をさらに含む、請求項１に記載の方法。
【請求項８】
複数の可変長の命令を記憶するメモリと、
ハードウェアロジック回路を含むベクトルプロセッサと、を含み、該ベクトルプロセッサは、
第一オペレーションを表す第一オペコード値を有する第一可変長の命令にアクセスすることであって、該第一可変長の命令は、整数のデータ型の一つ以上の第一オペランドを参照し、該第一可変長の命令のデータ型フィールドは、該一つ以上の第一オペランドが該整数のデータ型のものであることを示す第一値を有する、アクセスすることと、
前記ハードウェアロジック回路を用いて、前記整数のデータ型の前記一つ以上の第一オペランドに対して前記第一オペレーションを実行することと、
前記第一オペレーションを表す、同じ前記第一オペコード値を有する第二可変長の命令にアクセスすることであって、該第二可変長の命令は、浮動小数点のデータ型の一つ以上の第二オペランドを参照し、前記第二可変長の命令のデータ型フィールドは、該一つ以上の第二オペランドが該浮動小数点のデータ型のものであることを示す、前記第一値とは異なる第二値を有する、アクセスすることと、
前記ハードウェアロジック回路を用いて、前記浮動小数点のデータ型の前記一つ以上の第二オペランドに対して前記第一オペレーションを実行することと、を行う、装置。
【請求項９】
前記ハードウェアロジック回路は、二つ以上の異なるサイズのオペランドに対して前記第一オペレーションを実行する、請求項８に記載の装置。
【請求項１０】
前記ハードウェアロジック回路は、（１）前記整数のデータ型の前記一つ以上の第一オペランド、（２）前記浮動小数点のデータ型の前記一つ以上の第二オペランド、（３）固定小数点のデータ型の一つ以上の第三オペランド、又は（４）スケールされた整数のデータ型の一つ以上の第四オペランドのうち、少なくとも一つに対して前記第一オペレーションを実行する、請求項８に記載の装置。
【請求項１１】
前記第一可変長の命令のデータサイズフィールドは、前記一つ以上の第一オペランドの第一サイズを示す第三値を有し、前記第二可変長の命令のデータサイズフィールドは、前記一つ以上の第二オペランドの第二サイズを示す第四値を有する、請求項８に記載の装置。
【請求項１２】
前記一つ以上の第二オペランドの前記第二サイズは、前記一つ以上の第一オペランドの前記第一サイズと異なる、請求項１１に記載の装置。
【請求項１３】
前記ハードウェアロジック回路は、
前記整数のデータ型とは異なるデータ型になるように、前記一つ以上の第一オペランドに対する前記第一オペレーションを行った結果を再フォーマットすることと、
前記浮動小数点のデータ型とは異なるデータ型になるように、前記一つ以上の第二オペランドに対する第一オペレーションを行った結果を再フォーマットすることと、を行う、請求項８に記載の装置。
【請求項１４】
プロセッサによって実行されると、該プロセッサに、少なくとも
第一オペレーションを表す第一オペコード値を有する第一可変長の命令にアクセスすることであって、該第一可変長の命令は、整数のデータ型の一つ以上の第一オペランドを参照し、該第一可変長の命令のデータ型フィールドは、該一つ以上の第一オペランドが該整数のデータ型のものであることを示す第一値を有する、アクセスすることと、
ハードウェアロジックを用いて、前記整数のデータ型の一つ以上の前記第一オペランドに対して前記第一オペレーションを実行することと、
前記第一オペレーションを表す、同じ前記第一オペコード値を有する第二可変長の命令にアクセスすることであって、該第二可変長の命令は、浮動小数点のデータ型の一つ以上の第二オペランドを参照し、前記第二可変長の命令のデータ型フィールドは、該一つ以上の第二オペランドが該浮動小数点のデータ型のものであることを示す、前記第一値とは異なる第二値を有する、アクセスすることと、
同じ前記ハードウェアロジックを用いて、前記浮動小数点のデータ型の前記一つ以上の第二オペランドに対して前記第一オペレーションを実行することと、を行わせる、
コンピュータ読み取り可能命令を含む、コンピュータ読み取り可能メモリ。
【請求項１５】
前記第一オペランド及び前記第二オペランドは、二つ以上の異なるサイズを有する、請求項１４に記載のコンピュータ読み取り可能メモリ。
【請求項１６】
前記ハードウェアロジックは、（１）前記整数のデータ型の前記一つ以上の第一オペランド、（２）前記浮動小数点のデータ型の前記一つ以上の第二オペランド、（３）固定小数点のデータ型の一つ以上の第三オペランド、又は（４）スケールされた整数のデータ型の一つ以上の第四オペランドのうち、少なくとも一つに対して前記第一オペレーションを実行する、請求項１４に記載のコンピュータ読み取り可能メモリ。
【請求項１７】
前記第一可変長の命令のデータサイズフィールドは、前記一つ以上の第一オペランドの第一サイズを示す第三値を有し、前記第二可変長の命令のデータサイズフィールドは、前記一つ以上の第二オペランドの第二サイズを示す第四値を有する、請求項１４に記載のコンピュータ読み取り可能メモリ。
【請求項１８】
前記一つ以上の第二オペランドの前記第二サイズは、前記一つ以上の第一オペランドの前記第一サイズと異なる、請求項１７に記載のコンピュータ読み取り可能メモリ。
【請求項１９】
前記ハードウェアロジックは、
前記整数のデータ型とは異なるデータ型になるように、前記一つ以上の第一オペランドに対する前記第一オペレーションを行った結果を再フォーマットする、
前記浮動小数点のデータ型とは異なるデータ型になるように、前記一つ以上の第二オペランドに対する第一オペレーションを行った結果を再フォーマットする、請求項１４に記載のコンピュータ読み取り可能メモリ。
【請求項２０】
複数の可変長の命令を記憶するメモリと、
第一オペレーションを表す第一オペコード値を有する第一可変長の命令にアクセスし、該第一オペレーションを表す、同じ前記第一オペコード値を有する第二可変長の命令にアクセスするための手段であって、該第一可変長の命令は、整数のデータ型の一つ以上の第一オペランドを参照し、該第二可変長の命令は、浮動小数点のデータ型の一つ以上の第二オペランドを参照し、該第一可変長の命令のデータ型フィールドは、該一つ以上の第一オペランドが該整数のデータ型のものであることを示す第一値を有し、前記第二可変長の命令のデータ型フィールドは、該一つ以上の第二オペランドが該浮動小数点のデータ型のものであることを示す、前記第一値とは異なる第二値を有する、手段と、
（ｉ）前記整数のデータ型の一つ以上の前記第一オペランドに対する前記第一オペレーションと、（ｉｉ）前記浮動小数点のデータ型の前記一つ以上の第二オペランドに対する前記第一オペレーションとを実行するための手段と、を含むコンピューティングシステム。
【請求項２１】
前記実行するための手段は、二つ以上の異なるサイズのオペランドに対して前記第一オペレーションを実行する、請求項２０に記載のコンピューティングシステム。
【請求項２２】
前記実行するための手段は、（１）前記整数のデータ型の前記一つ以上の第一オペランド、（２）前記浮動小数点のデータ型の前記一つ以上の第二オペランド、（３）固定小数点のデータ型の一つ以上の第三オペランド、又は（４）スケールされた整数のデータ型の一つ以上の第四オペランドのうち、少なくとも一つに対して前記第一オペレーションを実行する、請求項２０に記載のコンピューティングシステム。
【請求項２３】
前記第一可変長の命令のデータサイズフィールドは、前記一つ以上の第一オペランドの第一サイズを示す第三値を有し、前記第二可変長の命令のデータサイズフィールドは、前記一つ以上の第二オペランドの第二サイズを示す第四値を有する、請求項２０に記載のコンピューティングシステム。
【請求項２４】
前記一つ以上の第二オペランドの前記第二サイズは、前記一つ以上の第一オペランドの前記第一サイズと異なる、請求項２３に記載のコンピューティングシステム。
【請求項２５】
前記実行するための手段は、
前記整数のデータ型とは異なるデータ型になるように、前記一つ以上の第一オペランドに対する前記第一オペレーションを行った結果を再フォーマットし、
前記浮動小数点のデータ型とは異なるデータ型になるように、前記一つ以上の第二オペランドに対する第一オペレーションを行った結果を再フォーマットする、請求項２０に記載のコンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２０１４年８月１２日に出願された、同時係属の米国特許出願第１４／４５７，９２９号及び２０１４年７月３０日出願された、同時係属の米国特許出願第６２／０３０，９１３号の優先権を主張し、それらの内容は全て参照により援用される。
【０００２】
本願は、概して、コンピュータビジョン処理に関連し、より詳細には、効率的な低電力ベクトルプロセッサについてである。
【背景技術】
【０００３】
コンピュータイメージングは、画像及び動画に基づいた、今までにないユーザ経験と情報を提供することのできる新たなイメージングパラダイムである。例えば、コンピュータイメージングは、画像及び／又は動画を処理することができ、シーンの深度図を提供する、シーンのパノラマビューを提供する、画像及び／又は動画から顔を抽出する、画像及び／又は動画からテキスト、特徴及びメタデータを抽出する、並びに物体及びシーン認識特徴に基づいた自動視覚認識能力でさえも提供する。
【０００４】
コンピュータイメージングは、興味深い性能を提供することができるが、広く採用されてはいない。コンピュータイメージングの採用が遅いのは、コンピュータイメージングが基本的なデータ処理課題を伴うという事実によるものである可能性がある。しばしば、画像解像度及び動画フレームレートが高いのである。このため、コンピュータイメージングは、概して、数百ギガフロップのコンピュータリソースを必要とし、特に、そのパフォーマンスが低電力消費で高いメモリ帯域幅によって維持可能であり、バックアップされなくてはならない場合には、標準的なプロセッサではそれを得ることは難しい可能性がある。さらに、コンピュータイメージングは、概して、待ち時間に対して敏感である。ユーザは、カメラが物体を認識するのに数分も待たないので、コンピュータイメージングのカメラは、概して、画像及び動画を迅速に処理するように設計されており、それがさらに、コンピュータイメージングの計算要件（computational  requirement）に負荷となっている。
【０００５】
残念ながら、カスタマイズされたハードウェアでコンピュータイメージング技術を実装することは難しい。コンピュータイメージングの分野は相対的に初期段階にあるため、実装技術は常に変化している。このため、実装技術についての変更はハードウェア全体の再設計を必要とするため、ハードウェアで完全にコンピュータイメージングをカスタマイズするのは難しいのである。したがって、概して、フレキシブルなハードウェアアーキテクチャ及びフレキシブルなハードウェアインフラストラクチャを提供することが望ましい。
【０００６】
同時に、そのような動画及び画像処理に対する要望が、電力消費が肝要な検討事項であるポータブル電子デバイス、例えば、タブレットコンピュータ及びモバイルデバイスから来ている。結果として、概して、制約された電力量であっても動作することのできるフレキシブルなコンピュータイメージングインフラストラクチャの必要性がある。
【発明の概要】
【０００７】
開示された主題に従って、低電力コンピュータイメージングのためのベクトルプロセッサが提供されたシステム及び方法が提供される。
【０００８】
開示された主題は、コンピュータに実装された、可変長の命令用バッファを管理する方法であって、第一参照ロケーションから可変長の命令データをキャッシングする工程と、第一時間において、命令用バッファ内で利用可能な未処理データの第一レベルとデフォルト閾値とを比較する工程と、前記未処理データの第一レベルが前記デフォルト閾値を満たさないことに基づいて、キャッシュされた前記命令データから固定幅のデータを前記命令用バッファ内にロードする工程と、前記第一参照ロケーションとは異なる第二参照ロケーションを参照する分岐命令を処理する工程であって、該分岐命令は、分岐遅延サイズを示すヘッダを含む、工程と、前記分岐命令が処理された後に、第二時間において、前記命令用バッファ内で利用可能な未処理データの第二レベルと前記分岐遅延サイズとを比較する工程と、前記未処理データの第二レベルが前記分岐遅延サイズを満たさないことに基づいて、キャッシュされた前記命令データから固定幅のデータを前記命令用バッファ内にロードする工程と、を含むことができる方法を含む。
【０００９】
いくつかの実施形態においては、当該方法は、前記命令用バッファ内の未処理データから可変長の命令を分離し、分離された該命令を出力して、前記命令用バッファ内の未処理データのレベルを下げる工程を、さらに含むことができる。分離された前記命令は、ベクトルプロセッサに出力される。
【００１０】
開示された主題は、可変長の命令を管理するシステムであって、メモリからの可変長の命令を記憶するキャッシュと、前記キャッシュからロードされたデータを命令に分離するバッファと、フェッチ部と、を含むシステムも含む。前記キャッシュは、特定のメモリロケーションから命令をロードするように構成される。前記バッファは、前記キャッシュから固定長のデータラインを受けて、可変長の命令を出力するように構成される。前記フェッチ部は、前記バッファ内の未処理データのレベルを決定し、追加データを前記バッファにロードするように前記キャッシュに指示し、第一時間において、前記バッファ内で利用可能な未処理データの第一レベルとデフォルト閾値とを比較して、前記追加データを前記バッファにロードするように前記キャッシュにいつ指示するかを決定し、当該システムが分岐命令を特定した後に、分岐命令ヘッダから分岐遅延サイズを決定し、当該システムが前記分岐命令を特定した後に、前記デフォルト閾値の代わりに、第二時間において、前記バッファ内で利用可能な未処理データの第二レベルと前記分岐遅延サイズとを比較して、追加データを前記バッファにロードするように前記キャッシュにいつ指示するかを決定するように構成される。
【００１１】
開示された主題は、コンピュータに実装された、データのハードウェア処理の方法であって、第一可変長の命令を受ける工程であって、該命令は、第一オペレーションを行うことを示し、かつ一つ以上の第一オペランドを参照する、工程と、前記一つ以上の第一オペランドの第一データ型を決定する工程と、第一ハードウェアロジック回路を用いて、前記第一データ型の第一オペランドの前記第一オペレーションを行う工程と、第二可変長の命令を受ける工程であって、該命令は、第一オペレーションを行うことを示し、かつ一つ以上の第二オペランドを参照する、工程と、前記一つ以上の第二オペランドの第二データ型を決定する工程であって、該第二データ型は前記第一データ型とは異なる、工程と、前記第一ハードウェアロジック回路を用いて、前記第二データ型の第二オペランドの前記第一オペレーションを行う工程と、を含むことができる方法も含む。  前記第一ハードウェアロジックは、複数のサイズのオペランドの前記第一オペレーションを実行する動作が可能である。  前記第一ハードウェアロジックは、浮動小数点、固定小数点、整数及びスケールされた整数のデータ型のオペランドの前記第一オペレーションを実行する動作が可能である。
【００１２】
開示された主題は、オペレーションの結果のエントリのルックアップテーブルを記憶する工程であって、該ルックアップテーブルは、所定の精度レベルでの小数結果を含み、該ルックアップテーブルは、各エントリに対して、複数の符号化ビットと複数の未符号化ビットを含む、工程と、前記オペレーションを含む命令に応じて、前記ルックアップテーブルにある特定の値に対応する特定のエントリを検索する工程と、前記複数の符号化ビットを復号化して、前記小数結果の一部を生成する工程と、少なくとも前記複数の未符号化ビットを生成された前記小数結果に付加する工程と、生成された前記小数結果に基づいた前記オペレーションの結果を返す工程と、を含むことができる、コンピュータに実装された方法を含む。  前記オペレーションは、対数オペレーション等のユニタリオペレーションであることができる。
【００１３】
いくつかの実施形態においては、前記複数の符号化ビットは、前記小数結果のうちの特定桁を繰り返す回数を表すことができる。  前記特定桁は、前記ルックアップテーブルのエントリに記憶されることができる。  あるいは、前記特定桁は、前記ルックアップテーブルのエントリに記憶されないことができ、当該方法は、前記特定桁を決定するために、前記特定値を閾値と比較する工程をさらに含むことができる。
【００１４】
開示された主題は、コンピュータに実装された、インラインでのベクトル変更のための方法であって、第一メモリロケーションで参照されるベクトルの変更形式で実行されるオペレーションを含む可変長命令を受ける工程と、前記可変長命令によって特定される通りに変更ベクトルを生成する工程と、前記変更ベクトルで前記オペレーションを実行する工程と、を含むことができるコンピュータ実装方法も含む。前記オペレーションが行われた後、前記第一メモリロケーションにある前記ベクトルは当初の変更ない形式である。  前記変更は、スウィズルされたベクトル要素、反転されたベクトル要素及び／又は代替値を含むことができる。  少なくとも一つのベクトル要素は、スウィズルと反転の両方がなされることができる。
【００１５】
他の実施形態に従い、少なくとも一つの、プロセッサ読み取り可能記憶媒体と、該少なくとも一つの媒体に記憶された命令と、を含む製品が開示される。前記命令は、少なくとも一つのプロセッサによって前記少なくとも一つの媒体から読み取られることができるように構成されることができ、それにより、前記少なくとも一つのプロセッサが上記実施形態のいずれかの任意又は全ての工程を実行するように動作するようにする。
【００１６】
他の実施形態に従い、本技術はネットワークに通信可能に結合された一つ以上のプロセッサを含むシステムとして実現されてよい。ここで、前記一つ以上のプロセッサは、上記実施形態のいずれかに関して記載された、任意又は全ての工程を実行するように構成される。
【００１７】
本発明はこれから、添付の図面に示されるように特定の実施形態を参照してより詳細に記載される。本開示は、特定の実施形態を参照して以下に記載されるが、本開示はそれに限られないと理解するべきである。本開示の教示を入手することのできる当業者であれば、本開示で記載される本開示の範囲内で、本開示が実質的な有用性を有することに関して、他の分野での利用や、追加的な実装、修正及び実施形態を認識するものである。
【図面の簡単な説明】
【００１８】
開示された主題の様々な目的、特徴及び効果は、次の図面に関連して考慮される、開示された主題の次の発明を実施するための形態を参照することで、より十分に理解されることができる。ここで、類似する参照番号は、類似する要素を特定する。添付の図面は概略的であり、縮尺通りに描かれることが意図されていない。明確性のため、全てのコンポーネントが全ての図面でラベル付けされているわけではない。開示された主題の各実施形態の全てのコンポーネントが示されているわけでもない。図示は、必ずしも、当業者が開示された主題を理解することができるようにすることが必要ではない。
【００１９】
【図１】図１は、いくつかの実施形態に従うコンピュータデバイスのハイレベルな図である。
【００２０】
【図２】図２は、いくつかの実施形態に従うコンピュータデバイスの詳細図である。
【００２１】
【図３】図３は、いくつかの実施形態に従うベクトルプロセッサを示す。
【００２２】
【図４】図４は、いくつかの実施形態に従う、三つの異なる可変長命令のヘッダを描く。
【００２３】
【図５】図５は、いくつかの実施形態に従う、命令用バッファ管理システムを示すブロック図である。
【００２４】
【図６】図６は、いくつかの実施形態に従う、三つの異なる機能ユニット命令を描く。
【００２５】
【図７】図７は、いくつかの実施形態に従う、バッファ管理方法を示すフローチャートである。
【００２６】
【図８】図８は、いくつかの実施形態に従う機能ユニット命令を描く。
【００２７】
【図９】図９は、いくつかの実施形態に従う、オペレーションの汎用ハードウェアによる実行方法を示すフローチャートである。
【００２８】
【図１０】図１０は、いくつかの実施形態に従う、圧縮ルックアップテーブルのエントリを示すチャートである。
【００２９】
【図１１】図１１は、いくつかの実施形態に従う、圧縮ルックアップテーブルを用いる方法を示すフローチャートである。
【００３０】
【図１２】図１２は、スウィズル（swizzle）命令を描き、ベクトルへの命令を示す。
【００３１】
【図１３】図１３は、いくつかの実施形態に従う、インライン（in-line）でのベクトル変更の方法を示すフローチャートである。
【００３２】
【図１４】図１４は、いくつかの実施形態に従うコンピュータデバイスを含む電子デバイスを示す。
【発明を実施するための形態】
【００３３】
次の記載においては、開示された主題のシステム及び方法並びにそのようなシステム及び方法が動作し得る環境等に関して、多くの具体的な詳細が説明される。これは、開示された主題の十分な理解を提供するためである。しかし、開示された主題が、そのような具体的な詳細がなくとも実施され得ることや、本技術分野で周知であるいくつかの特徴が、開示された主題の複雑性を回避するため、詳細には記載されないことは、当業者には明らかなものである。追加的には、下記の例は、例示的なものであり、開示された主題の範囲内にある他のシステム及び方法があると予期されることが理解される。
【００３４】
コンピュータイメージングは、マシンが物理世界を撮り、これと相互作用するやり方を変換することができる。例えば、コンピュータイメージングを介して、マシンは伝統的なイメージング技術を用いて撮ること極めて難しかった画像を撮ることができる。他の例として、コンピュータイメージングを介して、マシンは、その周囲を理解し、その周囲に従った反応を示すことができる。
【００３５】
コンピュータイメージングを大衆市場に投入する際の課題の一つは、コンピュータイメージングが本質的かつ計算的に高くつくことである。コンピュータイメージングは、高い解像度での大量の画像及び／又は高いフレームレートでの大量の動画をしばしば用いる。このため、コンピュータイメージングは、パワフルな計算プラットフォームのサポートを必要とする。さらに、コンピュータイメージングは、例えば、スマートフォン又はタブレットコンピュータを用いたモバイル設定において、しばしば使用されるため、コンピュータイメージングは、低電力消費で動作することのできるパワフルな計算プラットフォームをしばしば必要とする。
【００３６】
本願は、コンピュータイメージングのための低電力で、優秀な計算プラットフォームを提供することができるコンピュータデバイスを開示し、プラットフォームの性能に寄与することができるベクトルプロセッサの特定の特徴を特定する。図１は、いくつかの実施形態に従うコンピュータデバイスの高レベルな図である。コンピュータデバイス１００は、例えば、一つ以上のベクトルプロセッサ１０２と、一つ以上のハードウェアアクセラレータ１０４と、知的なメモリファブリック１０６（intelligent  memory  fabric）と、周辺デバイス１０８と、電力管理モジュール１１０と、を含むことができる。
【００３７】
一つ以上のベクトルプロセッサ１０２は、ベクトルと呼ばれるデータアレイで動作する命令を含む命令セットを実装する中央処理ユニット（ＣＰＵ）を含む。より詳細には、一つ以上のベクトルプロセッサ１０２は、同時に大量のデータの一般的な演算オペレーションを行うように構成されることができる。いくつかの実施形態においては、一つ以上のベクトルプロセッサ１０２は、シングルインストラクションマルチプルデータの超長命令語（ＳＩＭＤ−ＶＬＩＷ）プロセッサを含むことができる。いくつかの実施形態においては、一つ以上のベクトルプロセッサ１０２は、コンピュータビジョン及びイメージングアプリケーションに関連した命令を実行するように設計されることができる。
【００３８】
一つ以上のハードウェアアクセラレータ１０４は、より汎用のＣＰＵ上で走るソフトウェアでも行うことが可能な機能と同じ機能をより高速に行うコンピュータハードウェアを含む。非ビジョン（non-vision）アプリケーションにおけるハードウェアアクセラレータの例としては、ラスタオペレータ（raster  operator）を用いて複数のビットマップを一つに組み合わせるように構成されたグラフィクス処理ユニット（ＧＰＵ）内のビリッティングアクセラレイション（blitting  acceleration）を含む。
【００３９】
いくつかの実施形態においては、一つ以上のハードウェアアクセラレータ１０４は、画像処理及びコンピュータビジョンに合わせた構成可能なインフラストラクチャを提供することができる。ハードウェアアクセラレータ１０４は、アプリケーション特有の計算コアを取り巻く画像処理及びコンピュータビジョンオペレーションを加速する（accelerate）一般的なラッパーハードウェア（wrapper  hardware）を含むとみなされることができる。例えば、ハードウェアアクセラレータ１０４は、画像フィルタオペレーションを行う専用フィルタモジュールを含むことができる。フィルタモジュールは、画像にわたってカスタマイズされたフィルタカーネル（filter  kernel）を効率のよいやり方で動作させるように構成されることができる。いくつかの実施形態においては、ハードウェアアクセラレータ１０４は、一クロック周期で十分に計算された一つの出力画素を出力することができる。
【００４０】
知的なメモリファブリック１０６は、短い待ち時間（latency）で低電力メモリシステムを提供するように構成されることができる。画像及び動画は大量のデータを含むため、メモリと処理ユニット間に高速インタフェースを提供することは重要である。いくつか実施形態においては、知的なメモリファブリック１０６は、例えば、６４ブロックのメモリで、それぞれが６４ビットインタフェースを含むことができるものを含むことができる。そのような実施形態においては、６００ＭＨｚで動作する知的なメモリファブリック１０６は、３０７．２ＧＢ／秒でデータを転送することができる。別の実施形態においては、知的なメモリファブリック１０６は、任意の数のブロックのメモリで、それぞれが一つ以上のインタフェースプロトコルを実装する任意の数のインタフェースを含むことができるものを含むことができる。
【００４１】
周辺デバイス１０８は、画像センサ、加速度計等の外部デバイスとデータビットを送受信するための通信チャネルを提供するように構成されることができる。周辺デバイス１０８は、ベクトルプロセッサ１０２、ハードウェアアクセラレータ１０４及びメモリファブリック１０６が外部デバイスと通信するための通信メカニズムを提供することできる。
【００４２】
電力管理モジュール１１０は、コンピュータデバイス内の指定ブロックの活動を制御するように構成されることができる。より詳細には、電力管理モジュール１１０は、コンピュータデバイス１００内の電力島（power  island）とも呼ばれる、指定ブロックの電力供給電圧を制御するように構成されることができる。例えば、電力管理モジュール１１０が電力島の電力供給を可能にすると、コンピュータデバイス１００は、その電力島に適切な電力供給電圧を提供するようにトリガされることができる。いくつかの実施形態においては、各電力島は独立した電力ドメインを含むことができる。このため、電力島の電力供給は独立して制御されることができる。いくつかの実施形態においては、電力管理モジュール１１０は、コンピュータデバイス１００内の一つ以上の入出力ピンを介してコンピュータデバイス１００に外部付着（externally  attached  to）した電力島の活動も制御するように構成されることができる。
【００４３】
図２は、いくつかの実施形態に従うコンピュータデバイスの詳細図を示す。コンピュータデバイス１００は、複数のベクトルプロセッサ１０２を含むことができる。この図において、コンピュータデバイス１００は、１２個のベクトルプロセッサ１０２を含む。ベクトルプロセッサ１０２は、プロセッサ間相互接続（ＩＰＩ）２０２を介して互いに通信することができる。ベクトルプロセッサ１０２は、ＩＰＩ２０２とアクセラレータメモリコントローラ（ＡＭＣ）クロスバー２０４又はメモリマッププロセッサバス２０８を介して、メモリファブリック１０６及び／又はハードウェアアクセラレータ１０４を含む、コンピュータデバイス１００内の他のコンポーネントと通信することができる。
【００４４】
いくつかの実施形態においては、一つ以上のベクトルプロセッサ１０２は、プロプリエタリ命令セットを実行するように設計されることができる。プロプリエタリ命令セットは、プロプリエタリ命令を含むことができる。プロプリエタリ命令は、命令ヘッダと一つ以上のユニット命令を含む可変長のバイナリ列である。命令ヘッダは、関連するプロプリエタリ命令用の命令長と、アクティブユニットの情報を含むことができる。ユニット命令は、固定又は可変のいずれかである多くのフィールドを含む可変長のバイナリ列であることができる。ユニット命令におけるフィールドは、命令を特定するオペコードと、ユニット命令実行の際に用いる値を特定するオペランドを含むことができる。
【００４５】
コンピュータデバイス１００は、複数のハードウェアアクセラレータ１０４を含むことができる。ハードウェアアクセラレータ１０４は、所定の処理機能を実行するように構成された様々なアクセラレータモジュールを含むことができる。いくつかの実施形態においては、所定の処理機能はフィルタオペレーションを含むことができる。例えば、ハードウェアアクセラレータ１０４は、ロー（raw）画像処理モジュール、レンズシェーディング補正（ＬＳＣ）モジュール、ベイヤパターンデモザイクモジュール、シャープ化フィルタモジュール、多相スカラモジュール、ハリスコーナー（Harris  Corner）検出モジュール、色合成モジュール、輝度チャネルノイズ除去モジュール、彩度チャネルノイズ除去モジュール、メジアンフィルタモジュール、検索（look-up）テーブル、畳み込みモジュール、エッジ検出モジュール及び／若しくは他の好適なモジュール又はモジュールの組み合わせを含むことができる。ハードウェアアクセラレータ１０４は、メモリファブリック１０６内に存するメモリデバイス内のデータを取り出す、及び記憶するように構成されることができる。
【００４６】
メモリファブリック１０６は、コンピュータデバイス１００内でメモリオペレーションをコーディネイト（coordinate）する中央メモリシステムを含むことができる。メモリファブリック１０６は、ベクトルプロセッサ１０２、ハードウェアアクセラレータ１０４等の処理ユニット間の不必要なデータ転送を低減するように設計されることができる。メモリファブリック１０６は、複数の処理ユニットが、データ及びストーリング（stalling）なしにプログラムコードメモリに並列的にアクセスすることができるように構築される。追加的に、メモリファブリック１０６は、ホストプロセッサが、アドバンストエクステンシブルインタフェース（ＡＸＩ）等の並列バス又は他の好適なバス２０８を介して、メモリファブリック１０６内のメモリシステムにアクセスする準備をすることができる。
【００４７】
いくつかの実施形態においては、処理ユニットは、ロードストアユニット（ＬＳＵ）ポートを通じて一周期で１２８ビットまで読み書きすることができ、命令ポートを通じて一周期で１２８ビットのプログラムコードを読むことができる。プロセッサ１０２及びハードウェアアクセラレータ１０４それぞれのためのＩＰＩ２０２及びＡＭＣ２０４のインタフェースに追加して、メモリファブリック１０６は、アドバンストマイクロコントローラバスアーキテクチャ（ＡＭＢＡ）高性能バス（ＡＨＢ）及びＡＸＩバスインタフェースを通じてメモリシステムに同時的な読み書きアクセスを提供することができる。ＡＨＢ及びＡＸＩは、処理ユニット、メモリシステム、周辺デバイスが共有バスインフラストラクチャを用いて接続されることを可能にする標準的な並列インタフェースバスである。他の任意の好適なバスが用いられることができる。いくつかの実施形態においては、メモリファブリック１０６は一クロック周期でピークには１８ｘ１２８ビットのメモリアクセスを扱うように構成されることができる。他の実施形態において、メモリファブリック１０６は高速インタフェースを用いて、一クロック周期で大量のビットを有する任意の数のメモリアクセスを扱うように設計されることができる。
【００４８】
メモリファブリック１０６内のメモリシステムは、複数のメモリスライスを有することができ、各メモリスライスは複数のベクトルプロセッサ１０２の一つに関連づけられており、他のベクトルプロセッサ１０２に対してそのプロセッサへの優先アクセスを与える。各メモリスライスは、複数のランダムアクセスメモリ（ＲＡＭ）タイルを有することができ、各ＲＡＭタイルは読みポートと書きポートを含むことができる。いくつかの場合においては、各メモリスライスは、関連するメモリスライスへのアクセスを提供するメモリスライスコントローラを設けてよい。
【００４９】
プロセッサ及びＲＡＭタイルはＩＰＩ２０２とも呼ばれるバスを介して互いに結合されることができる。いくつかの場合において、ＩＰＩ２０２は、任意のベクトルプロセッサ１０２とメモリファブリック１０６内の任意のメモリスライスとを結合することができる。好適には、各ＲＡＭタイルは、そのタイルへのアクセスを許可するタイル制御ロジックブロックを含むことができる。タイル制御ロジックブロックは、タイル制御ロジック又はアービトレーション（arbitration）ブロックと呼ばれるときもある。
【００５０】
いくつかの実施形態において、各メモリスライスは、複数のＲＡＭタイル又は物理的ＲＡＭブロックを含むことができる。例えば、１２８ｋＢのサイズを有するメモリスライスは、４ｋｘ３２ビットワードとして組織化された４つの３２ｋＢの単一ポートＲＡＭタイル（例えば、物理的ＲＡＭ要素）を有することができる。他の例としては、２５６ｋＢのサイズを有するメモリスライスは、８ｋｘ３２ビットワードとして組織化された８つの３２ｋＢの単一ポートＲＡＭタイル（例えば、物理的ＲＡＭ要素）を有することができる。いくつかの実施形態においては、メモリスライスは１６ｋＢ位小さい容量を有することもあれば、１６ＭＢ位大きい容量を有することもある。別の実施形態においては、メモリスライスは、コンピュータデバイスによって扱われる様々なアプリケーションを収容する必要性に応じた量の容量を有するように構成されることができる。
【００５１】
いくつかの実施形態において、ＲＡＭタイルは、単一ポートの相補型金属酸化物半導体（ＣＭＯＳ）ＲＡＭを含むことができる。単一ポートのＣＭＯＳ  ＲＡＭの利点は、概して、大体の半導体プロセスにおいて利用可能であることである。他の実施形態において、ＲＡＭタイルは、マルチポートのＣＭＯＳ  ＲＡＭを含むことができる。いくつかの実施形態において、各ＲＡＭタイルは、１６ビット幅、３２ビット幅、６４ビット幅、１２８ビット幅又はコンピュータデバイスの特定のアプリケーションによって必要とされるだけの幅であることができる。
【００５２】
単一ポートのメモリデバイスの使用は、メモリサブシステムの電力及び領域効率を上げる可能性があるが、メモリシステムのバンド幅を制限する可能性がある。いくつかの実施形態において、メモリファブリックは、これらのメモリデバイスが、複数のソース（プロセッサ及びハードウェアブロック）からの複数の同時的な読み書き要求をサービスすることのできる仮想的なマルチポートのメモリサブシステムとして振る舞うことができるように設計されることができる。これは、複数の物理的ＲＡＭインスタンス（instance）を用いること、及び複数のソースをサービスするため、それらへの任意のアクセスを提供することによって達成されることができる。
【００５３】
いくつかの実施形態においては、各ＲＡＭタイルは、タイル制御ロジックに関連づけられることができる。タイル制御ロジックは、ベクトルプロセッサ１０２又はハードウェアアクセラレータ１０４からの要求を受けるとともに、関連するＲＡＭタイルの個別の読み書きポートへのアクセスを提供するように構成される。例えば、ベクトルプロセッサ１０２がＲＡＭタイル内のデータにアクセスする準備が整うと、ベクトルプロセッサ１０２がＲＡＭタイルにメモリデータ要求を直接送る前に、ベクトルプロセッサ１０２は、そのＲＡＭタイルに関連づけられたタイル制御ロジックにメモリアクセス要求を送信することができる。メモリアクセス要求は、処理要素によって要求されたデータのメモリアドレスを含むことができる。それに続き、タイル制御ロジックはメモリアクセス要求を分析し、ベクトルプロセッサ１０２がその要求されたＲＡＭタイルにアクセスすることができるか否かを決定する。ベクトルプロセッサ１０２がその要求されたＲＡＭタイルにアクセスできる場合には、タイル制御ロジックは、アクセス許可メッセージをベクトルプロセッサ１０２に送ることができ、それに続いて、ベクトルプロセッサ１０２はメモリデータ要求をＲＡＭタイルに送ることができる。
【００５４】
いくつかの実施形態においては、タイル制御ロジックは、多くの処理ユニット（例えば、ベクトルプロセッサ及びハードウェアアクセラレータ）が同一のＲＡＭタイルにアクセスする順序を決定し、実施するように構成される。例えば、タイル制御ロジックが衝突検出器を含むことができ、その衝突検出器は、二つ以上の処理ユニットがＲＡＭタイルに同時にアクセスしようとするインスタンスを検出するように構成される。衝突検出器は、アクセス衝突が発生し、そのアクセス衝突は解決されるべきであることをランタイムスケジューラに報告するように構成されることができる。
【００５５】
メモリファブリック１０６は、メモリからベクトルプロセッサ１０２若しくはハードウェアアクセラレータ１０４への、又はベクトルプロセッサ１０２若しくはハードウェアアクセラレータ１０４からメモリへのデータビットを転送するメモリバスを含むこともできる。メモリファブリック１０６は、ベクトルプロセッサ１０２、ハードウェアアクセラレータ１０４及びメモリ間のデータ転送をコーディネイトするダイレクトメモリアクセス（ＤＭＡ）コントローラを含むこともできる。
【００５６】
周辺デバイス１０８は、複数の異機種環境にある画像センサ、加速度計等の外部デバイスとデータビットを送受信する通信チャネルを提供するように構成されることができる。周辺デバイス１０８は、ベクトルプロセッサ１０２、ハードウェアアクセラレータ１０４及びメモリファブリック１０６が外部デバイスと通信するための通信メカニズムを提供することができる。
【００５７】
伝統的に、周辺デバイスの機能は固定的であり、ハードコード（hard-code）されている。例えば、モバイルインダストリプロセッサインタフェース（ＭＩＰＩ）の周辺デバイスは、ＳＰＩ、Ｉ２Ｃ、Ｉ２Ｓ、その他の好適な規格等低速（lower-rate）のデジタルインタフェースも実装する外部デバイスと適合する（interface  with）ことしかできなかった。
【００５８】
しかし、本開示のいくつかの実施形態においては、周辺デバイス１０８の機能はソフトウェアを用いて規定されてもよい。より詳細には、周辺デバイス１０８は、ＳＰＩ、Ｉ２Ｃ、Ｉ２Ｓ、その他の好適なプロトコル等の標準インタフェースプロトコルの機能をエミュレートすることができるエミュレーションモジュールを含むことができる。
【００５９】
電力管理モジュール１１０は、コンピュータデバイス１００内のブロックの活動を制御するように構成される。より詳細には、電力管理モジュール１１０は、電力島（power  island）とも呼ばれる、指定ブロックの電力供給電圧を制御するように構成されることができる。例えば、電力管理モジュール１１０が電力島の電力供給を可能にすると、コンピュータデバイス１００は、その電力島に適切な電力供給電圧を提供するように構成される。電力管理モジュール１１０は、レジスタ内又はバス上の信号線にイネイブル信号（enable  signal）を印加することによって、電力島の電力供給を可能にするように構成されることができる。いくつかの実施形態においては、電力管理モジュール１１０は、コンピュータデバイス１００内の一つ以上の入出力ピンを介して外部デバイスの活動を制御するように構成されることもできる。
【００６０】
いくつかの実施形態においては、電力島は常にパワーオン（powered-on）されていることができる（例えば、電力供給電圧が電力島に常に供給されている）。そのような電力島は、常時パワーオン電力島と呼ばれることができる。いくつかの実施形態においては、常時パワーオン電力島は、例えば、汎用入出力（ＧＰＩＯ）ピン、外部インタフェース及び／又は低周波数タイマ若しくはパワーオンリセット等の内部機能ブロックからの信号を監視するのに用いられることができる。このように、コンピュータデバイス１００は、イベント又は一連のイベントに対応し、そのイベント又はそれら一連のイベントに対応するのに必要とされる電力島のみを適応的にパワーオンすることができる。
【００６１】
ハードウェアアクセラレータ１０４、メモリファブリック１０６、周辺デバイス１０８及び電力管理モジュール１１０に関するさらなる詳細については、代理人整理番号第2209599.125US2で特定される、「LOW  POWER  COMPUTATIONAL  IMAGING」と題する、米国特許出願番号未定のもの及び代理人整理番号第2209599.125US3で特定される、「APPARATUS,  SYSTEMS,  AND  METHODS  FOR  LOW  POWER  COMPUTATIONAL  IMAGING」と題する、米国特許出願番号未定のもので提供される。これらの出願のいずれも本願と同日に出願されるとともに、それらの全ては参照により本願に援用される。
【００６２】
図３は、本開示の実装に従うベクトルプロセッサを含むコンピュータビジョンシステムアーキテクチャのさらなる詳細を示す。ストリーミングハイブリッドアーキテクチャベクトルエンジン（ＳＨＡＶＥ）プロセッサ３００が開示されており、図示の実施形態において、それはグラフィック処理システムのメモリ及び回路コンポーネントと通信している。ＳＨＡＶＥプロセッサ３００は、本開示でさらに記載される様々なハードウェアロジックを介して、コンピュータビジョン計算をリアルタイムで実行するように構成された特殊な（specialized）グラフィックプロセッサである。図３に図示されている、プロセッサ３００の外部にあるコンポーネントには、高速アクセスメモリリソースを提供するレベル２（Ｌ２）キャッシュ３５０、レベル１のキャッシュ及びより長い期間でのメモリのためのスタティックＲＡＭ（ＳＲＡＭ）３５４、スタックダイ（stacked  die）の特定用途向け集積回路（ＡＳＩＣ）パッケージ及びＡＳＩＣとメモリコンポーネントとの間のインタフェースのためのダブルデータレート（ＤＤＲ）コントローラ３５８が含まれる。
【００６３】
プロセッサ３００は、本開示で図示された実施形態においては、８つの機能ユニット３０２ａ〜３０２ｈ（functional  Units）を備えた、可変長命令システムを集合的に容易化する多数のハードウェアコンポーネントを含む。この実装で用いられた機能ユニット３０２ａ〜３０２ｈの各々は、以下にさらに記載される。
【００６４】
機能ユニット３０２は、各機能ユニット及びその機能ユニットが典型的に必要とするこれらのリソースに関連づけられた命令に基づいて、プロセッサ３００の内部及び外部のいずれにもあるメモリ内の異なるロケーションへの様々なポートを有する。より詳細には、いくつかの実装において、機能ユニット３０２は、ベクトルレジストリファイル（ＶＲＦ）３０４及び整数レジストリファイル（ＩＲＦ）３０６の２つの汎用レジストリファイルへのポートを含む。
【００６５】
ベクトルレジストリファイル３０４は、５１２バイト（３２ｘ１２８ビットワード）の高速アクセスの汎用ストレージを提供する。それは、異なるユニット命令における変数に割り当てられたポートセットを通じて、並列的な６つの読み出しアクセスと６つの書き込みアクセスまでをサポートする。これは、異なる命令を実行する二つの機能ユニットが同一のポートに割り当てられる場合に、所定のオペレーションが並列的に行われるのを制限することができる。
【００６６】
同様に、整数レジストリファイル３０６は、１２８バイト（３２ｘ３２ビットワード）の高速アクセスの汎用ストレージを提供する。それは、機能ユニットに割り当てられたポートセットを通じて、並列的な１２つの読み出しアクセスと６つの書き込みアクセスまでをサポートする。これも、所定の命令が並列的に実行される性能を制限する。
【００６７】
利用可能なアクセスポートとともに、レジストリファイル３０４、３０６の各々のサイズ及び構成をカスタマイズしてもよく、本開示で与えられた値は例示的なものであると当業者であれば理解するものである。例えば、別の実装においては、２つではなく３つのレジストリファイルが用いられてもよい。アクセスポートの数及び優先度は、同様に当業者によって選択されてよい。
【００６８】
８つの機能ユニットの各々の概要を、メモリがアクセスするポートの記載及び関連する機能の一つ以上の例とともに与える。本開示で説明される実施形態は、８つの機能ユニットを用いるが、より多い又はより少ない機能ユニットが本開示の観点に従って実装されることができる。
【００６９】
述語評価ユニット（ＰＥＵ）３０２ａは、「if、then、else」コマンド等の、述語論理（logical  predicates）を備えた条件付きコマンド（conditional  commands）を評価するロジックである。ＰＥＵ命令は、概して、先行詞（antecedent）のための比較命令（ＣＭＵ）と、述語（predicate）のための一つ以上の他の命令（ＶＡＵ、ＳＡＵ、ＩＡＵ、ＢＲＵ等）と、を含む。ＰＥＵそれ自体には、レジストリファイルのための読み出し又は書き込みポートは割り当てられない。
【００７０】
分岐ユニット（ＢＲＵ）３０２ｂは、命令の異なる部分にジャンプする、命令をループする、最後の命令を繰り返すための様々な命令を有する。ＢＲＵには、ＩＲＦに対して１つの読み出しポートと１つの書き込みポートが割り当てられており、それらは、分岐命令に関連づけられたアドレスに主に用いられる。
【００７１】
ロードストアユニット０及びロードストアユニット１（ＬＳＵ０及びＬＳＵ１）３０２ｃ及び３０２ｄは、それぞれメモリにデータをロードする及びメモリからデータをロードする様々な命令を含む。即時ロード（immediate  load）、移動ロード（displacement  load）、インデクスロード（indexed  load）及びストア等の様々な特定のオペレーションがＬＳＵ機能ユニット下で実行される。ＬＳＵ機能ユニットは、以下にさらに記載されるようにベクトル要素のインラインでのスウィズル（in-line  swizzle）を許容する複数のコマンドも含む。ＬＳＵ０及びＬＳＵ１のそれぞれは、ＩＲＦに対する３つの読み出しポートと２つの書き込みポート及びＶＲＦに対する１つの読み出しポート及び１つの書き込みポートへのアクセスを含む。追加的に、ＬＳＵ０及びＬＳＵ１のそれぞれは、ＳＲＡＭ３５４に関連づけられた読み書きポートへのアクセスを含む。
【００７２】
整数演算ユニット（ＩＡＵ）３０２ｅは、整数としてのビットを扱う演算オペレーションを実行する命令を含む。ＩＡＵには、ＩＲＦに対して３つの読み出しポートと一つの書き込みポートが割り当てられており、それにより、ＩＡＵは、整数演算を実行するための３つの値までを読み出し、整数の結果を書き込むことができる。
【００７３】
スカラ演算ユニット（ＳＡＵ）３０２ｆは、必要に応じて、単一の３２ビット値、２つの１６ビット値又は４つの８ビット値として読み出される３２ビットの結果を与える演算オペレーション（加算、減算、スカラ乗算等）を実行する命令を含む。ＳＡＵは、スカラ値となるベクトル和のオペレーションを含む。ＳＡＵオペレーションは、いくつかの実装においては、浮動小数点数及び固定小数点数、整数並びにスケールされた整数を含む様々な値の形式に対応する（accommodate）。ＳＡＵには、ＩＲＦに対して２つの読み出しポートと１つの書き込みポートが割り当てられている。ＶＲＦに対して一つの読み出しポートも割り当てられており、ベクトル値のスカラオペレーションに対応する。
【００７４】
ベクトル演算ユニット（ＶＡＵ）３０２ｇは、ベクトルとなる、４つの３２ビットの結果までのオペレーションを実行する命令を含む。４つの３２ビット領域は、３２ビット要素の４つのベクトル、１６ビット要素の８つのベクトル、又はさらには８ビット要素の１６つのベクトルとして読み出されることができる。ＶＡＵオペレーションは、たすき掛け（cross-multiplication）、要素平均化、エンフォースド（enforced）飽和点を有する機能等、ビジュアル処理に典型的に使用される様々な標準的な行列演算子（matrix  operators）を含む。ＶＡＵには、ＶＲＦに対する２つの読み出しポートと１つの書き込みポートが割り当てられている。
【００７５】
比較ユニット（ＣＭＵ）３０２ｈは、等価関係、他のテスト（より大きい、より小さい、等しい、データ形式比較等）等の比較オペレーションを実行する命令を含む。ＣＭＵは、データ形式変換も行い、ＩＲＦとＶＲＦとの間でデータを動かすことができる。ＣＭＵ命令は、異なる不確実性に対するコードを生成するためＰＥＵ命令と連動してしばしば用いられる。「if/then」命令は、条件付き（contingent）命令を進めるべきか否かを決定するために一つ以上のＣＭＵテストの結果に依存するのである。ＣＭＵには、ＩＲＦに対して３つの読み出しポートと２つの書き込みポートが割り当てられており、また、ＶＲＦに対して４つの読み出しポートと４つの書き込みポートが割り当てられている。これにより、ＣＭＵは、１６要素ベクトル比較を含む、システムにより登録された任意の値の比較オペレーションを実行することができる。
【００７６】
要するに、８つの機能ユニットは、１９２ビットもの可変長のプロセッサ命令を許容する。各プロセッサ命令は、命令ヘッダと０と８の間のユニット命令を含む可変長バイナリ列である。
【００７７】
命令ヘッダは、プロセッサ命令の一部として並列的に行われる各ユニット命令のビット長を含む、プロセッサ命令の全長を決定するための十分な情報を提供する。これは、各ユニット命令を多くとも３つの可能なビットサイズに限定することによって実行される（他の実装としては、より長いヘッダを用いることで異なるビットサイズを追加することができるのではあるが）。
【００７８】
図のように、３つのプロセッサヘッダ４００、４１０及び４２０が図４に示される。第一プロセッサヘッダ４００は、並列的に実行される２つの命令に対するヘッダを表し、これは、ヘッダの先頭４ビットによって表されている。４ビットコードで並列的に表れる２つのヘッダの最もよく見られる１３個の組み合わせが与えられ、ある一つの４ビットコードは特別な命令のために予約される。最後の２つの利用可能な４ビットコードは、以下に記載されるようにより長い８ビット及び１６ビットコードのはじめの４桁である。
【００７９】
ヘッダ４００内に示される特定の４ビットコード４０２ａはＣＵＭ及びＩＡＵ命令に翻訳（translate）される。次の２ビットは、ＣＭＵ命令のためのオペコード４０４ａを表し、これは、その長さを示し、ＣＭＵ命令が用いられるいくらかの情報も提供してよい。同様に、次の２ビットは、ＩＡＵ命令のためのオペコード４０４ｂを表す。オペコードのいずれかが００であった場合は、その形式の命令はプロセッサ命令の一部として与えられないことを示し、このため、このヘッダは、例えば、ＣＭＵのオペコードフィールド４０４ａに００を置くことによって、単一のＩＡＵ命令を表すのに選択されることもできる。全てにおいて、ヘッダ４００は８ビット長であり、プロセッサ命令全体のビット長を決定するのに十分な情報を与える。
【００８０】
命令ヘッダ４１０は、並列的に４つまで実行される命令を特定するのに用いられる、そのヘッダ内に８ビットコードを含む。特定の４ビットワード４１２ａは、この実装においては、１１１０に対応し、４つの命令ヘッダの全てに用いられる。４つの命令の１５個の組み合わせが、４１２ｂに示されるように、次の４ビットとして表れる。この特定の場合において、コードワード４１２は、ＶＡＵ、ＣＭＵ、ＬＳＵ０及びＩＡＵ命令に、それぞれ翻訳される。次の８ビットは、順に４つの命令の其々に対するオペコード４１４ａ〜４１４ｄである。示されるように、ＩＡＵオペコード４１４ｄは００にセットされており、これは、ＶＡＵ、ＣＭＵ、ＬＳＵ０命令のみが現にこのヘッダによって表される。プロセッサ命令ヘッダ４１０は、このため、プロセッサ命令ヘッダは１６ビットであり、これは、各ユニット命令の特定と長さとともに、プロセッサ命令全体の長さを特定するのに十分である。
【００８１】
命令ヘッダ４２０は、残りの場合を表し、最も長い必要ヘッダを表す。このヘッダ４２０は、８個全ての命令のオペコードのためのビットを含むように翻訳される４ビットコードを含み、この実装においては、１１１１である。上記のように、任意のオペコード４２４ａ〜４２４ｈは、依然として００にセットされてよい。ヘッダ４２０においては、ＶＡＵ（４２４ａ）、ＬＳＵ１（４２４ｄ）及びＢＲＵ（４２４ｇ）のオペコードは００にセットされているため、ＣＭＵ（４２４ｂ）、ＬＳＵ０（４２４ｃ）、ＳＡＵ（４２４ｅ）、ＩＡＵ（４２４ｆ）及びＰＥＵ（４２４ｈ）命令のみが現に存在すると示されている。
【００８２】
また、パディング（padding）部４２６は、同一の実装において追加されてよい。命令パディング４２６は、可変長であり、命令が１２８ビットのメモリ境界で終了するように付け加えられてよい。アラインメントプロセス（alignment  process）が命令パディング４２６の長さを制御してよい。
【００８３】
図５は、追加のデータライン（lines  of  data）をフェッチするメカニズムを含むキャッシュシステム５００の図を示す。コネクションマトリクスメモリ５０２（connection  matrix  memory）は、命令キャッシュ５０４（２ｋＢでよい）にデータを供給し、今度はそれが、命令分離バッファ５０６にデータラインを供給する。命令分離バッファ５０６は、メモリ側での固定幅のラインが供給され（一つの実装においては、１２８ビットである。他のサイズも可能ではあるが。）、プロセッサ側に可変幅の命令を供給する。フェッチモジュール５０８は、バッファ５０６のレベルを監視し、キャッシュ５０４からバッファ５０６へ別の１２８ビット命令ラインのために信号をいつ送るべきかを決定する。概して、これは、閾値によって実行される。分離バッファ５０６内にある未処理の命令が所定のレベルを超える（複数の命令（in  instruction）又はビット数のいずれか）場合、バッファ５２６は十分に一杯であると見なされる。バッファ５０６が閾値レベルを下回ったときは、フェッチモジュール５０８は、バッファ５０６にロードされる別の１２８ビットのデータのために命令キャッシュ５０４に信号を送る。
【００８４】
分離バッファ５０６をオーバロード（overload）しない一つの理由は、命令内にある不連続性、特にジャンプ命令（分岐ユニット内の命令である、ＢＲＵ．ＪＭＰにより与えられる）が存在するからである。ジャンプ命令は、それに続く命令が引き出されるメモリロケーションを変更するため、ジャンプ命令が次に続く命令でバッファを一杯にしておくことは非効率である。これにより、ジャンプ命令に続く（subsequent  to）命令は捨てられる可能性がある。
【００８５】
しかし、分岐命令が実行されている間に限られた数の命令を含むことが慣習的であり、かつ望ましい。これらは、分岐遅延ライン命令として知られている。含める分岐遅延命令の理想的な数は、分岐命令によってもたらされる待ち時間のサイクル数に等しいものである。例えば、分岐命令が６サイクルの待ち時間をもたらす場合、６サイクルの命令（理想的には、６つの命令）が処理のためにバッファ内で利用可能であるべきである。しかし、命令が可変長であるときは、本開示で記載されたプロセッサ命令でそうであるように、分岐遅延命令の数は、バッファ内に含められる必要のあるビット数に即座に翻訳されない。
【００８６】
分岐命令に対するバッファ管理を改善するためには、図６に示されるように、追加のフィールドを分岐命令そのもののビット内に含めることができる。異なるＢＲＵオペコードによって与えられたＢＲＵ命令の３つのサイズのそれぞれについての一つを含む、ＢＲＵ命令に対して所定の選択ビットマップ（bit  map）が示される。
【００８７】
ＢＲＵ．ＢＲＡ命令６００が示され、命令ヘッダから２４ビットである。命令ポインタ相対ジャンプ（instruction  pointer-relative  jump）である、この特定の命令ＢＲＡは、分岐ユニットオペコード６０２の使用によって分かる（この場合は「００」）。即座のオフセットフィールド６０４は、命令内のポインタの新たな位置を示し、８ビットフィールド６０６は、遅延命令のサイズ全体を与える(この場合においては、１３６ビット)。
【００８８】
ＢＲＵ．ＪＭＰ命令６１０が示され、命令ヘッダから１６ビットである。レジスタ間接命令ポインタジャンプ（register-indirect  instruction  pointer  jump）である、この特定の命令ＪＭＰは、分岐ユニットオペコード６１２の使用によって分かる（この場合は「００１」）。５桁フィールド６１４は整数レジストリファイル（registry  file）内の新たなアドレスを示し、８ビットフィード６１６は、遅延命令のサイズ全体を与える（この場合においては、１３２ビット）。
【００８９】
ＢＲＵ．ＲＰＬ命令６２０が示され、命令ヘッダから２０ビットである。この特定の命令ＲＰＬは、システムに可変回数だけ命令ブロックをループするように指示する。これは、分岐ユニットオペコード６２２の使用によって分かる（この場合は「１１」）。ＲＰＬ命令は２つの５桁引数６２４ａ、６２４ｂをとり、それぞれ整数レジストリファイル内のアドレスを表す。第一リストレジストリロケーション６２４ａで見つかった整数値は、命令をループする回数を示す。第二リストレジストリロケーション６２４ｂで見つかった整数値は、ループ最終アドレスを示す。８ビットフィールド６２６は、遅延命令のサイズ全体を与える（この場合においては、１２４ビット）。
【００９０】
分岐遅延をもたらす分岐命令に対してビットサイズフィールドを含めることで、フェッチモジュールは、図７に示すように、バッファの管理のための改善したプロセスを実行することができる。
【００９１】
図７に示される方法７００は、バッファが、上述したようなフェッチモジュールにより管理され得る一つのやり方である。そのフェッチモジュールは、バッファのレベルを問い合わせる（７０２）。いくつかの実装においては、問い合わせは、フェッチモジュール以外のソースにより実行されてよく、あるいは、問い合わせが全く必要でなくてもよい（バッファが、そのレベルとフェッチモジュールに指示（prompting）なく周期的に報告する）。
【００９２】
フェッチモジュールは、バッファ内で利用可能なデータレベルを表す情報を受ける（７０４）。これは、命令で表されてもよいのであるが、理想的には、ビット又はバイトデータで表される。いずれにしても、システムに対して値を求める（evaluate）のに引き出されたが、値が求められていない命令を表す。
【００９３】
なんら分岐命令が解釈されて（interpreted）いない（判定ブロック７０６のＮＯ）場合、バッファレベル閾値はデフォルト値と比較される（７０８）。デフォルト値は、ユーザによりマニュアルでセットされてよく、システムパフォーマンスの経験的測定に基づいた自動プロセスを通じて得てよい（arrived  at）。バッファレベルが閾値を超える場合、フェッチモジュールは再度バッファに問い合わせる前に適切な間隔待機することができる（７１２）。そうでない場合、データの別のライン（いくつかの実装においては、１２８ビット）がキャッシュ７１０からフェッチされて、さらなるレベル問い合わせが行われる。
【００９４】
分岐命令が解釈された（判定ブロック７０６のＹＥＳ）場合、システムがメモリ内の新たなスポットからフェッチ命令を開始する間に分岐遅延命令が解釈されるべきであるので、遅延命令のためのバイトサイズが分岐命令のヘッダから決定される（７１４）。その後、バッファレベルがバイトサイズ閾値と比較される（７１６）。バッファレベルが閾値を超える場合は、システムは分岐先（branching  destination）から命令をフェッチする（７１８）。バッファレベルがバイトサイズ閾値を下回る場合、別の命令ラインが十分な分岐遅延命令を供給するためフェッチされる（７１０）。
【００９５】
汎用ハードウェアオペレーション
本開示で記載される８つの機能ユニットは、図示され、上述されたようにプロセッサ上に組み立てられる。いくつかの実装においては、メモリ内の１つ以上の値のオペレーションを含む命令は、値のデータ型に関わらず同一の下位ロジックを用いるように設計されてよい。例えば、一つの実装においては、本開示で開示された命令は、チップのハードウェアに書き込まれ、同一のハードウェア及びデータパスが固定小数点、浮動小数点、整数、Ｕ８Ｆ値のオペレーションを行うのに用いられてよい。さらに、同一のハードワイヤードオペレーションロジックが任意のこれらのサポートされたデータ型の３２ビット、１６ビット及び８ビット値のオペレーションを行うのに用いられてよい。このようにして、これらのロジックコンポーネントが柔軟に再利用されるため、プロセッサの設置面積（footprint）全体が低減する。
【００９６】
例として、図８は、複数のデータ型及び複数の精度レベルを収容（accommodate）するようにセットされることのできるスカラ演算、ＳＡＵ．ＡＤＤに対するビットマップを示す。命令８００は、それぞれＩＲＦメモリ内のロケーションへの参照である３つの５桁フィールド８０４ａ、８０４ｂ、８０４ｃが続く５桁オペコード８０２を含む。ＡＤＤオペレーションは、８０４ａにより示されたＩＲＦロケーション内に記憶された値と、８０４ｃによりしめされたＩＲＦロケーション内に記憶された値を引数にして、８０４ｂによって示されたＩＲＦロケーション内に結果を記憶する。単一ビット８０６は、第二オペランドロケーション８０４ｃが、ＩＲＦロケーションではなくポイントオフセット（pointed  offset）として特定されることができるように含まれる。
【００９７】
残りのビット８０８及び８１０は、異なるタイプ及びサイズを収容する。ビット８０８は、「１」で浮動小数点を、「０」で整数を示すとともに、サイズが２のビット８１０は３２ビット、１６ビット又は８ビットを示す。このようにして、複数のデータフォーマットが同一のハードウェアロジック内で同一のオペレーションを用いる。
【００９８】
図９は、オペレーションを実行する方法９００のフローチャートである。そのようなオペレーションを表す命令を読み込むと、システムは、適切なレジストリファイルから指定された値をフェッチする（９０２）。
【００９９】
システムは、オペランドのデータ型を決定する（９０４）。これは、レジストリ内のストレージから明らかであるか、又は別の方法でシステムに知らされる。あるいは、オペレーションヘッダがデータ型を特定するための一つ以上のフィールドを有してよい。
【０１００】
システムは、オペレーションを行い、結果を得る（９０６）。結果は、通常、オペランドと同一の形式であるが、いくつかの実装においては、結果が所定の方法でフォーマットされてよく、予測される結果の型に合致するように再フォーマットされる必要があるかもしれない（９０８）。命令がそのように要求する場合は、結果はレジストリに記憶される、又はすぐに使用するためキャッシュ若しくは一時的なメモリに保持されてよい。
【０１０１】
コンデンスルックアップテーブル（Condensed  Look-up  Table）
所定のデータの効率的な処理のため、一般的に用いられる機能についてはルックアップテーブルを含でおくことが適切である。しかし、特定のデータ型の特定の機能は、特定のテーブルで見つかる値に合わせた圧縮スキーム（Compression  scheme）を用いることで、メモリ内により効率的に記憶されることができる。
【０１０２】
例えば、１６ビット浮動小数点の値に対して底を２とする対数は、典型的には、０と１の間の値についてのテーブルを含み、そのテーブルの大きい小数（large  fraction）は、値の小数部（fraction  part）のかなりの数の先頭ビットの繰り返しを含む。図１０は、ルックアップテーブルのはじめの５ビットが、先頭ビットの１５の繰り返しまでを符号化するのに用いられてよい。小数点の後ろのはじめの５つの場所を符号化するというよりは、代わりにこれらの５桁は、小数点の後ろの先頭の桁と、その桁が、反対の桁が現れるまで繰り返される数を表す。ゆえに、パターン「１１１…１０」及び「０００…０１」は、先頭の桁の１５の繰り返しまでに対して、符号化された５つのビットに置き換えられる。
【０１０３】
図１１は、底を２とする対数オペレーションに対して浮動小数点の小数部に、ルックアップテーブルを翻訳するフローチャートを表す。ここで、単一の入力変数が底を２とする対数である結果値に変換されることになり、５つではなく４つの符号化されたビットを必要とするように特定された閾値を用いる。
【０１０４】
システムは、入力変数の小数部を抽出する（１１０２）。小数部は閾値と比較され（１１０４）、先頭が０（１１０６ａ）か先頭が１（１１０６ｂ）を備えたエントリであるか否かを決定する。適切なエントリがルックアップテーブルに見つかり（１１０８）、先頭桁の適切な反復回数が、エントリの初めの４ビットに従って見つかる。エントリの残りのビットは、結果のリマインダとして付け加えられる（１１１２）。
【０１０５】
このコンデンスルックアップテーブルは、いくつかの実装において、最悪の場合の標準的なルックアップテーブルに必要とされる空間の４０％程度節約する。
【０１０６】
並列的に機能ユニット命令を実行すると、インライン（in-line）でより効率的に実行されるビジュアル処理に共通した所定のオペレーションが許容される。例えば、ビジュアル処理において所定の共通オペレーションとは、ベクトル内で二つ以上のエレメントを交換すること（通常「スウィズル」と知られている）、特定のベクトル要素を１又は０に置換すること、一つ以上の要素を反転させる（inverting）こと、を含む。特定の例としては、逆ベクトル化は、転位（transposition）（スウィズル）及び反転のいずれも含むビジュアル処理オペレーションの一部であることが多い。しかし、メモリ内のベクトル要素が実際に変更されてしまうのは望ましくないことが多い。変更したベクトルが特定のオペレーションに必要とされているのであって、オリジナルのベクトルはその後に用いられるのである。
【０１０７】
いくつかの実装においては、システムは、メモリに内在している値を妨げることなく、主要なデータパス内で発生する、ベクトル要素のためのインラインでのスウィズル、反転及び置換をサポートすることを含んでよい。
【０１０８】
図１２は、ＶＲＦ入力とともにＶＡＵ、ＣＭＵ又はＳＡＵ機能で第一オペランドとして用いられる４要素のベクトルに対する任意の置換及び反転をともなうインラインでのスウィズルを提供する、ロードストア機能オペレータ、ＬＵＳ．ＳＷＺＭ４に対するビットマップである。機能を特定するオペコード１２０２、ユニットフィールド１２０４、機能がワードではなくバイトのスウィズルに用いられるようにするビット１２０６に続いて、命令は、４つのエレメントのどれが４つのスロットのいずれかにあるかを示す４つのフィールド１２０８ａ〜１２０８ｄに加えて、置換又は反転をマークするのに用いられる４つのフィールド１２１０ａ〜１２１０ｄを含む。
【０１０９】
スウィズルオペレーションが、オリジナルのベクトル１２１２ａ及びインラインでスウィズルされたベクトル１２１２ｂによって図示されている。フィールド１２０８ａ〜１２０８ｄのうち、第一及び第三要素はそのスポットを維持する一方で、第二及び第四要素は位置を交換している。フィールド１２１０ａ〜１２１０ｄのうち、第二及び第四要素はスウィズルされた位置に従って複製され（reproduced）（コード「００」）、第一要素は反転され（コード「０１」）、第三要素は０に置換されている（コード「１０」）。結果ベクトル１２１２ｂは、ＬＳＵ．ＳＷＺＭ４のインラインでのスウィズルオペレーションを含む特定のユニット命令において、オリジナルのベクトル１２１２ａの代わりに用いられるが、オリジナルのベクトル１２１２ａのそのものは、メモリ内で変更されたり、置換されたりしない。
【０１１０】
図１３は、本開示に従う、ベクトルをスウィズルし、変更する例示のインラインでの方法１３００を示す。この特定の実装においては、ＬＳＵ．ＳＷＺＭ４オペレーションに関して上述された各要素に対する第一及び第二フィールドに基づく。オリジナルのベクトルが取得され（１３０２）、所定のステップが、ベクトルの各要素（工程がある要素に行われている間の「ターゲット」要素）に対して実行される。
【０１１１】
第二フィールド内のターゲット要素の値に基づいて、システムは、１若しくは０をターゲット要素に代入する（１３０８）又は指定要素の値を特定し、それをターゲット要素に複製する（１３１０、１３１２）。前者の場合（１又は０の代入）、システムは、データ型に気づいている。つまり、１又は０の値は、ベクトル要素のデータ型に応じてフォーマットされる（固定小数点、浮動小数点、整数、スケールされた整数等）。後者の場合（何もない又は反転）、システムが次の要素の変更に進む時点で、さらなる工程においてターゲットを反転するか否かを決定する（１３１４、１３１６）。
【０１１２】
一旦、ベクトル内の全ての要素が特定されたようにスイッチされた、及び／又は変更されたら、新たなベクトルが適切なオペレーションによって用いられる（１３１８）。オリジナルのベクトルは、スウィズルされたベクトルによって上書きされず、代わりに、特定の命令において呼ばれた何らかの（複数の）機能において引数としてのみ用いられるのみである。
【０１１３】
いくつかの実施形態において、並列コンピュータデバイス１００は、電子デバイス内に存する。図１４は、いくつかの実施形態に従うコンピュータデバイスを含む電子デバイスを示す。電子デバイス１４００は、プロセッサ１４０２と、メモリ１４０４と、一つ以上のインタフェース１４０６と、コンピュータデバイス１００と、を含むことができる。
【０１１４】
電子デバイス１４００は、コンピュータ読み取り可能媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブルリードオンリーメモリ（ＰＲＯＭ）、リードオンリーメモリ（ＲＯＭ）等のメモリ１４０４を有することができる。電子デバイス１４００は、メモリ内に記憶されることができる、命令を処理しかつソフトウェアを動作させる一つ以上のプロセッサ１４０２を備えて構成されることができる。プロセッサ１４０２は、メモリ１４０４及び他のデバイスと通信するためのインタフェース１４０６とも通信することができる。プロセッサ１４０２は、ＣＰＵ、アプリケーションプロセッサ及びフラッシュメモリを組み合わせたシステムオンチップ等の任意の適用可能なプロセッサ又は縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサであることができる。
【０１１５】
メモリ１４０４は、非一時的なコンピュータ読み取り可能媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブルリードオンリーメモリ（ＰＲＯＭ）、リードオンリーメモリ（ＲＯＭ）、その他のメモリ又はメモリの組み合わせであることができる。ソフトウェアは、コンピュータ命令又はコンピュータコードを実行することができるプロセッサ上で動作することができる。プロセッサは、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックアレイ（ＰＬＡ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、その他の集積回路を用いてハードウェアで実装されてもよい。
【０１１６】
インタフェース１４０６は、ハードウェア又はソフトウェアで実装されることができる。インタフェース１４０６は、テレビへのリモート制御等、ローカルソース及びネットワークからのデータ及び制御情報のいずれもを受けるのに用いられることできる。電子デバイスは、キーボード、タッチスクリーン、トラックボール、タッチパッド、マウス等の様々なユーザインタフェースを提供することもできる。電子デバイスは、いくつかの実施形態においては、スピーカ及びディスプレイデバイスを含んでもよい。
【０１１７】
いくつかの実施形態においては、コンピュータデバイス１００内のベクトルプロセッサ１０２及びハードウェアアクセラレータ１０４等の処理ユニットは、コンピュータ命令又はコンピュータコードを実行することができる集積回路を含むことができる。プロセッサは、特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジックアレイ（ＰＬＡ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、その他の集積回路を用いてハードウェアで実装されてもよい。
【０１１８】
いくつかの実施形態においては、コンピュータデバイス１００は、システムオンチップとして実装されることができる。別の実施形態においては、並列コンピュータデバイス内の一つ以上のブロックが別々のチップとして実装されることができ、並列コンピュータデバイスがシステムインパッケージ（ＳＩＰ）でパッケージされることができる。いくつかの実施形態においては、並列コンピュータデバイス１００はデータ処理アプリケーションに用いられることができる。データ処理アプリケーションは、画像処理アプリケーション及び／又は動画処理アプリケーションを含むことができる。画像処理アプリケーションは、画像フィルタリングプロセスを含む画像処理プロセスを含むことができる。動画処理アプリケーションは、動画復号化オペレーション、動画符号化オペレーション及び、動画内の動き又は物体を検出する動画分析オペレーションを含むことができる。本発明の追加的なアプリケーションは、画像列、複数の物体又は動画に基づいたマシンラーニング及び分類と、深度可能（depth  enabled）カメラを含む複数のカメラビューからのジオメトリを抽出し、ワイヤフレームジエオメトリ（例えば、ポイントクラウドを介して）がその後のＧＰＵによる頂点シェーディング（vertex  shading）のために抽出されることができる複数のビューから特徴を抽出するゲームアプリケーションを含む拡張現実アプリケーションと、を含む。
【０１１９】
電子デバイス１４００は、携帯電話等のモバイルデバイスを含むことができる。モバイルデバイスは、複数のアクセス技術を用いた複数の無線アクセスネットワーク及び無線通信ネットワークと通信することができる。モバイルデバイスは、文書処理、ウェブブラウズ、ゲーム、e-book能力、オペレーティングシステム、フルキーボード等の進化した能力を提示する。モバイルデバイスは、Symbian（登録商標）  OS、iPhone（登録商標）  OS、RIM’s  BlackBerry（登録商標）、Windows  Mobile（登録商標）、Linux（登録商標）、Palm（登録商標）  WebOS、Android（登録商標）等のオペレーティングシステムで動作することができる。スクリーンは、データをモバイルデバイスに入力するのに用いられることができるタッチスクリーンであってよく、スクリーンはフルキーボードの代わりに用いられることができる。モバイルデバイスは、アプリケーションを動作させる又は通信ネットワーク内のサーバによって提供されるアプリケーションと通信する能力を有してもよい。モバイルデバイスは、ネットワーク上のこれらのアプリケーションからアップデート及び他の情報を受信することができる。
【０１２０】
電子デバイス１４００は、テレビ（ＴＶ）、ビデオプロジェクタ、セットトップボックス又はセットトップユニット、デジタルビデオレコーダ（ＤＶＲ）、コンピュータ、ネットブック、ラップトップ、タブレットコンピュータ、ネットワークと通信することができる他の聴覚／視覚イクイップメント等の多くの他の装置を収容することができる。電子デバイスは、全地球測位システム、プロファイル情報、又はスタック若しくはメモリ内に他のロケーション情報を保持することもできる。
【０１２１】
複数の異なるアレンジメントが本開示において記載されているが、それぞれの特徴が有利的には様々な形式で組み合わせられてよく、それにより利点を得るものと理解される。
【０１２２】
前述の明細書においては、本願は特定の例を参照して記載されている。しかし、様々な修正及ぶ変更が、添付の特許請求の範囲に明記されるように、発明の広い範囲を逸脱することなく本願においてなされてよいことは明らかである。例えば、接続は、例えば、中間ノードを介した、各ノード、ユニット、デバイスからの信号を転送するのに適した任意のタイプの接続であることができる。従って、黙示的に又は明示的にそうであるとされない限り、接続は、例えば、直接接続又は間接接続であってよい。
【０１２３】
本開示で示されたアーキテクチャは例示的に過ぎず、事実、同一の機能を達成する多くの他のアーキテクチャが実装されることができると理解されるものである。抽象的ではあるが依然として確定された意味においては、同一の機能を達成するためのコンポーネントの任意のアレンジメントは、所望の機能が達成されるように効果的に関連づけられる（associated）。つまり、特定の機能を達成するため、本開示において組み合わせられた任意の２つのコンポーネントは、アーキテクチャ又は中間コンポーネントに関わらず、その所望の機能が達成されるように互いに「関連付けられた」とみることができる。同様に、そのように関連づけられた２つのコンポーネントは、所望の機能を達成するため、「動作可能に接続された」又は「動作可能に結合された」とみることもできる。
【０１２４】
さらに、当業者であれば、上述されたオペレーションの機能間の境界は例示に過ぎないと理解するものである。複数のオペレーションの機能は、単一のオペレーションに組み合わせられてよく、及び／又は単一のオペレーションの機能は、追加のオペレーションに分散されてよい。さらに、別の実施形態が特定のオペレーションの複数のインスタンスを含んでよく、オペレーションの順序が種々の他の実施形態で変更されてよい。
【０１２５】
他の修正、バリエーション及び変更も可能である。従って、明細書及び図面は、限定的な意味ではなく例示的なものとみなされる。
【０１２６】
特許請求の範囲において、丸括弧の間にある任意の符号は、請求項を限定するものと解釈されるべきではない。文言「含む（comprising）」は、請求項内に挙げられたもの以外の他の要素又は工程の存在を排除しない。さらに、本開示で用いられるような文言「ある（a  or  an）」は、一つ以上として定義される。また、請求項内にある「少なくとも一つ」、「一つ以上」等の導入句の使用は、同一の請求項が「一つ以上」又は「少なくとも一つ」の導入句と「ある（a  or  an）」等の非限定的な冠詞を含む場合も含め、他のクレーム要素が非限定的冠詞「ある（a  or  an）」を導入したものとすると、そのように導入されたクレーム要素を含む特定の請求項が、ただ一つしかそのような要素を含まない発明に限定されることを示唆していると解釈されるべきではない。明示される場合を除き、「第一」、「第二」等の文言は、そのような文言が記載する要素同士を任意に区別するのに用いられる。つまり、これらの文言は、そのような要素の経時性又は他の優先順位付けを示すことを必ずしも意図していない。所定の手段が相互に異なる請求項に規定されるという事実だけでは、これらの手段の組み合わせが効果を有するように用いられることができないということを示さない。
【図１】
2019109926.tif 000002
【図２】
2019109926.tif 000003
【図３】
2019109926.tif 000004
【図４】
2019109926.tif 000005
【図５】
2019109926.tif 000006
【図６】
2019109926.tif 000007
【図７】
2019109926.tif 000008
【図８】
2019109926.tif 000009
【図９】
2019109926.tif 000010
【図１０】
2019109926.tif 000011
【図１１】
2019109926.tif 000012
【図１２】
2019109926.tif 000013
【図１３】
2019109926.tif 000014
【図１４】
2019109926.tif 000015
【外国語明細書】
2019109926000001.pdf