次の記載においては、開示された主題のシステム及び方法並びにそのようなシステム及び方法が動作し得る環境等に関して、多くの具体的な詳細が説明される。これは、開示された主題の十分な理解を提供するためである。しかし、開示された主題が、そのような具体的な詳細がなくとも実施され得ることや、本技術分野で周知であるいくつかの特徴が、開示された主題の複雑性を回避するため、詳細には記載されないことは、当業者には明らかなものである。追加的には、下記の例は、例示的なものであり、開示された主題の範囲内にある他のシステム及び方法があると予期されることが理解される。
コンピュータイメージングは、マシンが物理世界を撮り、これと相互作用するやり方を変換することができる。例えば、コンピュータイメージングを介して、マシンは伝統的なイメージング技術を用いて撮ること極めて難しかった画像を撮ることができる。他の例として、コンピュータイメージングを介して、マシンは、その周囲を理解し、その周囲に従った反応を示すことができる。
コンピュータイメージングを大衆市場に投入する際の課題の一つは、コンピュータイメージングが本質的かつ計算的に高くつくことである。コンピュータイメージングは、高い解像度での大量の画像及び/又は高いフレームレートでの大量の動画をしばしば用いる。このため、コンピュータイメージングは、パワフルな計算プラットフォームのサポートを必要とする。さらに、コンピュータイメージングは、例えば、スマートフォン又はタブレットコンピュータを用いたモバイル設定において、しばしば使用されるため、コンピュータイメージングは、低電力消費で動作することのできるパワフルな計算プラットフォームをしばしば必要とする。
本願は、コンピュータイメージングのための低電力で、優秀な計算プラットフォームを提供することができるコンピュータデバイスを開示し、プラットフォームの性能に寄与することができるベクトルプロセッサの特定の特徴を特定する。図1は、いくつかの実施形態に従うコンピュータデバイスの高レベルな図である。コンピュータデバイス100は、例えば、一つ以上のベクトルプロセッサ102と、一つ以上のハードウェアアクセラレータ104と、知的なメモリファブリック106(intelligent memory fabric)と、周辺デバイス108と、電力管理モジュール110と、を含むことができる。
一つ以上のベクトルプロセッサ102は、ベクトルと呼ばれるデータアレイで動作する命令を含む命令セットを実装する中央処理ユニット(CPU)を含む。より詳細には、一つ以上のベクトルプロセッサ102は、同時に大量のデータの一般的な演算オペレーションを行うように構成されることができる。いくつかの実施形態においては、一つ以上のベクトルプロセッサ102は、シングルインストラクションマルチプルデータの超長命令語(SIMD−VLIW)プロセッサを含むことができる。いくつかの実施形態においては、一つ以上のベクトルプロセッサ102は、コンピュータビジョン及びイメージングアプリケーションに関連した命令を実行するように設計されることができる。
一つ以上のハードウェアアクセラレータ104は、より汎用のCPU上で走るソフトウェアでも行うことが可能な機能と同じ機能をより高速に行うコンピュータハードウェアを含む。非ビジョン(non-vision)アプリケーションにおけるハードウェアアクセラレータの例としては、ラスタオペレータ(raster operator)を用いて複数のビットマップを一つに組み合わせるように構成されたグラフィクス処理ユニット(GPU)内のビリッティングアクセラレイション(blitting acceleration)を含む。
いくつかの実施形態においては、一つ以上のハードウェアアクセラレータ104は、画像処理及びコンピュータビジョンに合わせた構成可能なインフラストラクチャを提供することができる。ハードウェアアクセラレータ104は、アプリケーション特有の計算コアを取り巻く画像処理及びコンピュータビジョンオペレーションを加速する(accelerate)一般的なラッパーハードウェア(wrapper hardware)を含むとみなされることができる。例えば、ハードウェアアクセラレータ104は、画像フィルタオペレーションを行う専用フィルタモジュールを含むことができる。フィルタモジュールは、画像にわたってカスタマイズされたフィルタカーネル(filter kernel)を効率のよいやり方で動作させるように構成されることができる。いくつかの実施形態においては、ハードウェアアクセラレータ104は、一クロック周期で十分に計算された一つの出力画素を出力することができる。
知的なメモリファブリック106は、短い待ち時間(latency)で低電力メモリシステムを提供するように構成されることができる。画像及び動画は大量のデータを含むため、メモリと処理ユニット間に高速インタフェースを提供することは重要である。いくつか実施形態においては、知的なメモリファブリック106は、例えば、64ブロックのメモリで、それぞれが64ビットインタフェースを含むことができるものを含むことができる。そのような実施形態においては、600MHzで動作する知的なメモリファブリック106は、307.2GB/秒でデータを転送することができる。別の実施形態においては、知的なメモリファブリック106は、任意の数のブロックのメモリで、それぞれが一つ以上のインタフェースプロトコルを実装する任意の数のインタフェースを含むことができるものを含むことができる。
周辺デバイス108は、画像センサ、加速度計等の外部デバイスとデータビットを送受信するための通信チャネルを提供するように構成されることができる。周辺デバイス108は、ベクトルプロセッサ102、ハードウェアアクセラレータ104及びメモリファブリック106が外部デバイスと通信するための通信メカニズムを提供することできる。
電力管理モジュール110は、コンピュータデバイス内の指定ブロックの活動を制御するように構成されることができる。より詳細には、電力管理モジュール110は、コンピュータデバイス100内の電力島(power island)とも呼ばれる、指定ブロックの電力供給電圧を制御するように構成されることができる。例えば、電力管理モジュール110が電力島の電力供給を可能にすると、コンピュータデバイス100は、その電力島に適切な電力供給電圧を提供するようにトリガされることができる。いくつかの実施形態においては、各電力島は独立した電力ドメインを含むことができる。このため、電力島の電力供給は独立して制御されることができる。いくつかの実施形態においては、電力管理モジュール110は、コンピュータデバイス100内の一つ以上の入出力ピンを介してコンピュータデバイス100に外部付着(externally attached to)した電力島の活動も制御するように構成されることができる。
図2は、いくつかの実施形態に従うコンピュータデバイスの詳細図を示す。コンピュータデバイス100は、複数のベクトルプロセッサ102を含むことができる。この図において、コンピュータデバイス100は、12個のベクトルプロセッサ102を含む。ベクトルプロセッサ102は、プロセッサ間相互接続(IPI)202を介して互いに通信することができる。ベクトルプロセッサ102は、IPI202とアクセラレータメモリコントローラ(AMC)クロスバー204又はメモリマッププロセッサバス208を介して、メモリファブリック106及び/又はハードウェアアクセラレータ104を含む、コンピュータデバイス100内の他のコンポーネントと通信することができる。
いくつかの実施形態においては、一つ以上のベクトルプロセッサ102は、プロプリエタリ命令セットを実行するように設計されることができる。プロプリエタリ命令セットは、プロプリエタリ命令を含むことができる。プロプリエタリ命令は、命令ヘッダと一つ以上のユニット命令を含む可変長のバイナリ列である。命令ヘッダは、関連するプロプリエタリ命令用の命令長と、アクティブユニットの情報を含むことができる。ユニット命令は、固定又は可変のいずれかである多くのフィールドを含む可変長のバイナリ列であることができる。ユニット命令におけるフィールドは、命令を特定するオペコードと、ユニット命令実行の際に用いる値を特定するオペランドを含むことができる。
コンピュータデバイス100は、複数のハードウェアアクセラレータ104を含むことができる。ハードウェアアクセラレータ104は、所定の処理機能を実行するように構成された様々なアクセラレータモジュールを含むことができる。いくつかの実施形態においては、所定の処理機能はフィルタオペレーションを含むことができる。例えば、ハードウェアアクセラレータ104は、ロー(raw)画像処理モジュール、レンズシェーディング補正(LSC)モジュール、ベイヤパターンデモザイクモジュール、シャープ化フィルタモジュール、多相スカラモジュール、ハリスコーナー(Harris Corner)検出モジュール、色合成モジュール、輝度チャネルノイズ除去モジュール、彩度チャネルノイズ除去モジュール、メジアンフィルタモジュール、検索(look-up)テーブル、畳み込みモジュール、エッジ検出モジュール及び/若しくは他の好適なモジュール又はモジュールの組み合わせを含むことができる。ハードウェアアクセラレータ104は、メモリファブリック106内に存するメモリデバイス内のデータを取り出す、及び記憶するように構成されることができる。
メモリファブリック106は、コンピュータデバイス100内でメモリオペレーションをコーディネイト(coordinate)する中央メモリシステムを含むことができる。メモリファブリック106は、ベクトルプロセッサ102、ハードウェアアクセラレータ104等の処理ユニット間の不必要なデータ転送を低減するように設計されることができる。メモリファブリック106は、複数の処理ユニットが、データ及びストーリング(stalling)なしにプログラムコードメモリに並列的にアクセスすることができるように構築される。追加的に、メモリファブリック106は、ホストプロセッサが、アドバンストエクステンシブルインタフェース(AXI)等の並列バス又は他の好適なバス208を介して、メモリファブリック106内のメモリシステムにアクセスする準備をすることができる。
いくつかの実施形態においては、処理ユニットは、ロードストアユニット(LSU)ポートを通じて一周期で128ビットまで読み書きすることができ、命令ポートを通じて一周期で128ビットのプログラムコードを読むことができる。プロセッサ102及びハードウェアアクセラレータ104それぞれのためのIPI202及びAMC204のインタフェースに追加して、メモリファブリック106は、アドバンストマイクロコントローラバスアーキテクチャ(AMBA)高性能バス(AHB)及びAXIバスインタフェースを通じてメモリシステムに同時的な読み書きアクセスを提供することができる。AHB及びAXIは、処理ユニット、メモリシステム、周辺デバイスが共有バスインフラストラクチャを用いて接続されることを可能にする標準的な並列インタフェースバスである。他の任意の好適なバスが用いられることができる。いくつかの実施形態においては、メモリファブリック106は一クロック周期でピークには18x128ビットのメモリアクセスを扱うように構成されることができる。他の実施形態において、メモリファブリック106は高速インタフェースを用いて、一クロック周期で大量のビットを有する任意の数のメモリアクセスを扱うように設計されることができる。
メモリファブリック106内のメモリシステムは、複数のメモリスライスを有することができ、各メモリスライスは複数のベクトルプロセッサ102の一つに関連づけられており、他のベクトルプロセッサ102に対してそのプロセッサへの優先アクセスを与える。各メモリスライスは、複数のランダムアクセスメモリ(RAM)タイルを有することができ、各RAMタイルは読みポートと書きポートを含むことができる。いくつかの場合においては、各メモリスライスは、関連するメモリスライスへのアクセスを提供するメモリスライスコントローラを設けてよい。
プロセッサ及びRAMタイルはIPI202とも呼ばれるバスを介して互いに結合されることができる。いくつかの場合において、IPI202は、任意のベクトルプロセッサ102とメモリファブリック106内の任意のメモリスライスとを結合することができる。好適には、各RAMタイルは、そのタイルへのアクセスを許可するタイル制御ロジックブロックを含むことができる。タイル制御ロジックブロックは、タイル制御ロジック又はアービトレーション(arbitration)ブロックと呼ばれるときもある。
いくつかの実施形態において、各メモリスライスは、複数のRAMタイル又は物理的RAMブロックを含むことができる。例えば、128kBのサイズを有するメモリスライスは、4kx32ビットワードとして組織化された4つの32kBの単一ポートRAMタイル(例えば、物理的RAM要素)を有することができる。他の例としては、256kBのサイズを有するメモリスライスは、8kx32ビットワードとして組織化された8つの32kBの単一ポートRAMタイル(例えば、物理的RAM要素)を有することができる。いくつかの実施形態においては、メモリスライスは16kB位小さい容量を有することもあれば、16MB位大きい容量を有することもある。別の実施形態においては、メモリスライスは、コンピュータデバイスによって扱われる様々なアプリケーションを収容する必要性に応じた量の容量を有するように構成されることができる。
いくつかの実施形態において、RAMタイルは、単一ポートの相補型金属酸化物半導体(CMOS)RAMを含むことができる。単一ポートのCMOS RAMの利点は、概して、大体の半導体プロセスにおいて利用可能であることである。他の実施形態において、RAMタイルは、マルチポートのCMOS RAMを含むことができる。いくつかの実施形態において、各RAMタイルは、16ビット幅、32ビット幅、64ビット幅、128ビット幅又はコンピュータデバイスの特定のアプリケーションによって必要とされるだけの幅であることができる。
単一ポートのメモリデバイスの使用は、メモリサブシステムの電力及び領域効率を上げる可能性があるが、メモリシステムのバンド幅を制限する可能性がある。いくつかの実施形態において、メモリファブリックは、これらのメモリデバイスが、複数のソース(プロセッサ及びハードウェアブロック)からの複数の同時的な読み書き要求をサービスすることのできる仮想的なマルチポートのメモリサブシステムとして振る舞うことができるように設計されることができる。これは、複数の物理的RAMインスタンス(instance)を用いること、及び複数のソースをサービスするため、それらへの任意のアクセスを提供することによって達成されることができる。
いくつかの実施形態においては、各RAMタイルは、タイル制御ロジックに関連づけられることができる。タイル制御ロジックは、ベクトルプロセッサ102又はハードウェアアクセラレータ104からの要求を受けるとともに、関連するRAMタイルの個別の読み書きポートへのアクセスを提供するように構成される。例えば、ベクトルプロセッサ102がRAMタイル内のデータにアクセスする準備が整うと、ベクトルプロセッサ102がRAMタイルにメモリデータ要求を直接送る前に、ベクトルプロセッサ102は、そのRAMタイルに関連づけられたタイル制御ロジックにメモリアクセス要求を送信することができる。メモリアクセス要求は、処理要素によって要求されたデータのメモリアドレスを含むことができる。それに続き、タイル制御ロジックはメモリアクセス要求を分析し、ベクトルプロセッサ102がその要求されたRAMタイルにアクセスすることができるか否かを決定する。ベクトルプロセッサ102がその要求されたRAMタイルにアクセスできる場合には、タイル制御ロジックは、アクセス許可メッセージをベクトルプロセッサ102に送ることができ、それに続いて、ベクトルプロセッサ102はメモリデータ要求をRAMタイルに送ることができる。
いくつかの実施形態においては、タイル制御ロジックは、多くの処理ユニット(例えば、ベクトルプロセッサ及びハードウェアアクセラレータ)が同一のRAMタイルにアクセスする順序を決定し、実施するように構成される。例えば、タイル制御ロジックが衝突検出器を含むことができ、その衝突検出器は、二つ以上の処理ユニットがRAMタイルに同時にアクセスしようとするインスタンスを検出するように構成される。衝突検出器は、アクセス衝突が発生し、そのアクセス衝突は解決されるべきであることをランタイムスケジューラに報告するように構成されることができる。
メモリファブリック106は、メモリからベクトルプロセッサ102若しくはハードウェアアクセラレータ104への、又はベクトルプロセッサ102若しくはハードウェアアクセラレータ104からメモリへのデータビットを転送するメモリバスを含むこともできる。メモリファブリック106は、ベクトルプロセッサ102、ハードウェアアクセラレータ104及びメモリ間のデータ転送をコーディネイトするダイレクトメモリアクセス(DMA)コントローラを含むこともできる。
周辺デバイス108は、複数の異機種環境にある画像センサ、加速度計等の外部デバイスとデータビットを送受信する通信チャネルを提供するように構成されることができる。周辺デバイス108は、ベクトルプロセッサ102、ハードウェアアクセラレータ104及びメモリファブリック106が外部デバイスと通信するための通信メカニズムを提供することができる。
伝統的に、周辺デバイスの機能は固定的であり、ハードコード(hard-code)されている。例えば、モバイルインダストリプロセッサインタフェース(MIPI)の周辺デバイスは、SPI、I2C、I2S、その他の好適な規格等低速(lower-rate)のデジタルインタフェースも実装する外部デバイスと適合する(interface with)ことしかできなかった。
しかし、本開示のいくつかの実施形態においては、周辺デバイス108の機能はソフトウェアを用いて規定されてもよい。より詳細には、周辺デバイス108は、SPI、I2C、I2S、その他の好適なプロトコル等の標準インタフェースプロトコルの機能をエミュレートすることができるエミュレーションモジュールを含むことができる。
電力管理モジュール110は、コンピュータデバイス100内のブロックの活動を制御するように構成される。より詳細には、電力管理モジュール110は、電力島(power island)とも呼ばれる、指定ブロックの電力供給電圧を制御するように構成されることができる。例えば、電力管理モジュール110が電力島の電力供給を可能にすると、コンピュータデバイス100は、その電力島に適切な電力供給電圧を提供するように構成される。電力管理モジュール110は、レジスタ内又はバス上の信号線にイネイブル信号(enable signal)を印加することによって、電力島の電力供給を可能にするように構成されることができる。いくつかの実施形態においては、電力管理モジュール110は、コンピュータデバイス100内の一つ以上の入出力ピンを介して外部デバイスの活動を制御するように構成されることもできる。
いくつかの実施形態においては、電力島は常にパワーオン(powered-on)されていることができる(例えば、電力供給電圧が電力島に常に供給されている)。そのような電力島は、常時パワーオン電力島と呼ばれることができる。いくつかの実施形態においては、常時パワーオン電力島は、例えば、汎用入出力(GPIO)ピン、外部インタフェース及び/又は低周波数タイマ若しくはパワーオンリセット等の内部機能ブロックからの信号を監視するのに用いられることができる。このように、コンピュータデバイス100は、イベント又は一連のイベントに対応し、そのイベント又はそれら一連のイベントに対応するのに必要とされる電力島のみを適応的にパワーオンすることができる。
ハードウェアアクセラレータ104、メモリファブリック106、周辺デバイス108及び電力管理モジュール110に関するさらなる詳細については、代理人整理番号第2209599.125US2で特定される、「LOW POWER COMPUTATIONAL IMAGING」と題する、米国特許出願番号未定のもの及び代理人整理番号第2209599.125US3で特定される、「APPARATUS, SYSTEMS, AND METHODS FOR LOW POWER COMPUTATIONAL IMAGING」と題する、米国特許出願番号未定のもので提供される。これらの出願のいずれも本願と同日に出願されるとともに、それらの全ては参照により本願に援用される。
図3は、本開示の実装に従うベクトルプロセッサを含むコンピュータビジョンシステムアーキテクチャのさらなる詳細を示す。ストリーミングハイブリッドアーキテクチャベクトルエンジン(SHAVE)プロセッサ300が開示されており、図示の実施形態において、それはグラフィック処理システムのメモリ及び回路コンポーネントと通信している。SHAVEプロセッサ300は、本開示でさらに記載される様々なハードウェアロジックを介して、コンピュータビジョン計算をリアルタイムで実行するように構成された特殊な(specialized)グラフィックプロセッサである。図3に図示されている、プロセッサ300の外部にあるコンポーネントには、高速アクセスメモリリソースを提供するレベル2(L2)キャッシュ350、レベル1のキャッシュ及びより長い期間でのメモリのためのスタティックRAM(SRAM)354、スタックダイ(stacked die)の特定用途向け集積回路(ASIC)パッケージ及びASICとメモリコンポーネントとの間のインタフェースのためのダブルデータレート(DDR)コントローラ358が含まれる。
プロセッサ300は、本開示で図示された実施形態においては、8つの機能ユニット302a〜302h(functional Units)を備えた、可変長命令システムを集合的に容易化する多数のハードウェアコンポーネントを含む。この実装で用いられた機能ユニット302a〜302hの各々は、以下にさらに記載される。
機能ユニット302は、各機能ユニット及びその機能ユニットが典型的に必要とするこれらのリソースに関連づけられた命令に基づいて、プロセッサ300の内部及び外部のいずれにもあるメモリ内の異なるロケーションへの様々なポートを有する。より詳細には、いくつかの実装において、機能ユニット302は、ベクトルレジストリファイル(VRF)304及び整数レジストリファイル(IRF)306の2つの汎用レジストリファイルへのポートを含む。
ベクトルレジストリファイル304は、512バイト(32x128ビットワード)の高速アクセスの汎用ストレージを提供する。それは、異なるユニット命令における変数に割り当てられたポートセットを通じて、並列的な6つの読み出しアクセスと6つの書き込みアクセスまでをサポートする。これは、異なる命令を実行する二つの機能ユニットが同一のポートに割り当てられる場合に、所定のオペレーションが並列的に行われるのを制限することができる。
同様に、整数レジストリファイル306は、128バイト(32x32ビットワード)の高速アクセスの汎用ストレージを提供する。それは、機能ユニットに割り当てられたポートセットを通じて、並列的な12つの読み出しアクセスと6つの書き込みアクセスまでをサポートする。これも、所定の命令が並列的に実行される性能を制限する。
利用可能なアクセスポートとともに、レジストリファイル304、306の各々のサイズ及び構成をカスタマイズしてもよく、本開示で与えられた値は例示的なものであると当業者であれば理解するものである。例えば、別の実装においては、2つではなく3つのレジストリファイルが用いられてもよい。アクセスポートの数及び優先度は、同様に当業者によって選択されてよい。
8つの機能ユニットの各々の概要を、メモリがアクセスするポートの記載及び関連する機能の一つ以上の例とともに与える。本開示で説明される実施形態は、8つの機能ユニットを用いるが、より多い又はより少ない機能ユニットが本開示の観点に従って実装されることができる。
述語評価ユニット(PEU)302aは、「if、then、else」コマンド等の、述語論理(logical predicates)を備えた条件付きコマンド(conditional commands)を評価するロジックである。PEU命令は、概して、先行詞(antecedent)のための比較命令(CMU)と、述語(predicate)のための一つ以上の他の命令(VAU、SAU、IAU、BRU等)と、を含む。PEUそれ自体には、レジストリファイルのための読み出し又は書き込みポートは割り当てられない。
分岐ユニット(BRU)302bは、命令の異なる部分にジャンプする、命令をループする、最後の命令を繰り返すための様々な命令を有する。BRUには、IRFに対して1つの読み出しポートと1つの書き込みポートが割り当てられており、それらは、分岐命令に関連づけられたアドレスに主に用いられる。
ロードストアユニット0及びロードストアユニット1(LSU0及びLSU1)302c及び302dは、それぞれメモリにデータをロードする及びメモリからデータをロードする様々な命令を含む。即時ロード(immediate load)、移動ロード(displacement load)、インデクスロード(indexed load)及びストア等の様々な特定のオペレーションがLSU機能ユニット下で実行される。LSU機能ユニットは、以下にさらに記載されるようにベクトル要素のインラインでのスウィズル(in-line swizzle)を許容する複数のコマンドも含む。LSU0及びLSU1のそれぞれは、IRFに対する3つの読み出しポートと2つの書き込みポート及びVRFに対する1つの読み出しポート及び1つの書き込みポートへのアクセスを含む。追加的に、LSU0及びLSU1のそれぞれは、SRAM354に関連づけられた読み書きポートへのアクセスを含む。
整数演算ユニット(IAU)302eは、整数としてのビットを扱う演算オペレーションを実行する命令を含む。IAUには、IRFに対して3つの読み出しポートと一つの書き込みポートが割り当てられており、それにより、IAUは、整数演算を実行するための3つの値までを読み出し、整数の結果を書き込むことができる。
スカラ演算ユニット(SAU)302fは、必要に応じて、単一の32ビット値、2つの16ビット値又は4つの8ビット値として読み出される32ビットの結果を与える演算オペレーション(加算、減算、スカラ乗算等)を実行する命令を含む。SAUは、スカラ値となるベクトル和のオペレーションを含む。SAUオペレーションは、いくつかの実装においては、浮動小数点数及び固定小数点数、整数並びにスケールされた整数を含む様々な値の形式に対応する(accommodate)。SAUには、IRFに対して2つの読み出しポートと1つの書き込みポートが割り当てられている。VRFに対して一つの読み出しポートも割り当てられており、ベクトル値のスカラオペレーションに対応する。
ベクトル演算ユニット(VAU)302gは、ベクトルとなる、4つの32ビットの結果までのオペレーションを実行する命令を含む。4つの32ビット領域は、32ビット要素の4つのベクトル、16ビット要素の8つのベクトル、又はさらには8ビット要素の16つのベクトルとして読み出されることができる。VAUオペレーションは、たすき掛け(cross-multiplication)、要素平均化、エンフォースド(enforced)飽和点を有する機能等、ビジュアル処理に典型的に使用される様々な標準的な行列演算子(matrix operators)を含む。VAUには、VRFに対する2つの読み出しポートと1つの書き込みポートが割り当てられている。
比較ユニット(CMU)302hは、等価関係、他のテスト(より大きい、より小さい、等しい、データ形式比較等)等の比較オペレーションを実行する命令を含む。CMUは、データ形式変換も行い、IRFとVRFとの間でデータを動かすことができる。CMU命令は、異なる不確実性に対するコードを生成するためPEU命令と連動してしばしば用いられる。「if/then」命令は、条件付き(contingent)命令を進めるべきか否かを決定するために一つ以上のCMUテストの結果に依存するのである。CMUには、IRFに対して3つの読み出しポートと2つの書き込みポートが割り当てられており、また、VRFに対して4つの読み出しポートと4つの書き込みポートが割り当てられている。これにより、CMUは、16要素ベクトル比較を含む、システムにより登録された任意の値の比較オペレーションを実行することができる。
要するに、8つの機能ユニットは、192ビットもの可変長のプロセッサ命令を許容する。各プロセッサ命令は、命令ヘッダと0と8の間のユニット命令を含む可変長バイナリ列である。
命令ヘッダは、プロセッサ命令の一部として並列的に行われる各ユニット命令のビット長を含む、プロセッサ命令の全長を決定するための十分な情報を提供する。これは、各ユニット命令を多くとも3つの可能なビットサイズに限定することによって実行される(他の実装としては、より長いヘッダを用いることで異なるビットサイズを追加することができるのではあるが)。
図のように、3つのプロセッサヘッダ400、410及び420が図4に示される。第一プロセッサヘッダ400は、並列的に実行される2つの命令に対するヘッダを表し、これは、ヘッダの先頭4ビットによって表されている。4ビットコードで並列的に表れる2つのヘッダの最もよく見られる13個の組み合わせが与えられ、ある一つの4ビットコードは特別な命令のために予約される。最後の2つの利用可能な4ビットコードは、以下に記載されるようにより長い8ビット及び16ビットコードのはじめの4桁である。
ヘッダ400内に示される特定の4ビットコード402aはCUM及びIAU命令に翻訳(translate)される。次の2ビットは、CMU命令のためのオペコード404aを表し、これは、その長さを示し、CMU命令が用いられるいくらかの情報も提供してよい。同様に、次の2ビットは、IAU命令のためのオペコード404bを表す。オペコードのいずれかが00であった場合は、その形式の命令はプロセッサ命令の一部として与えられないことを示し、このため、このヘッダは、例えば、CMUのオペコードフィールド404aに00を置くことによって、単一のIAU命令を表すのに選択されることもできる。全てにおいて、ヘッダ400は8ビット長であり、プロセッサ命令全体のビット長を決定するのに十分な情報を与える。
命令ヘッダ410は、並列的に4つまで実行される命令を特定するのに用いられる、そのヘッダ内に8ビットコードを含む。特定の4ビットワード412aは、この実装においては、1110に対応し、4つの命令ヘッダの全てに用いられる。4つの命令の15個の組み合わせが、412bに示されるように、次の4ビットとして表れる。この特定の場合において、コードワード412は、VAU、CMU、LSU0及びIAU命令に、それぞれ翻訳される。次の8ビットは、順に4つの命令の其々に対するオペコード414a〜414dである。示されるように、IAUオペコード414dは00にセットされており、これは、VAU、CMU、LSU0命令のみが現にこのヘッダによって表される。プロセッサ命令ヘッダ410は、このため、プロセッサ命令ヘッダは16ビットであり、これは、各ユニット命令の特定と長さとともに、プロセッサ命令全体の長さを特定するのに十分である。
命令ヘッダ420は、残りの場合を表し、最も長い必要ヘッダを表す。このヘッダ420は、8個全ての命令のオペコードのためのビットを含むように翻訳される4ビットコードを含み、この実装においては、1111である。上記のように、任意のオペコード424a〜424hは、依然として00にセットされてよい。ヘッダ420においては、VAU(424a)、LSU1(424d)及びBRU(424g)のオペコードは00にセットされているため、CMU(424b)、LSU0(424c)、SAU(424e)、IAU(424f)及びPEU(424h)命令のみが現に存在すると示されている。
また、パディング(padding)部426は、同一の実装において追加されてよい。命令パディング426は、可変長であり、命令が128ビットのメモリ境界で終了するように付け加えられてよい。アラインメントプロセス(alignment process)が命令パディング426の長さを制御してよい。
図5は、追加のデータライン(lines of data)をフェッチするメカニズムを含むキャッシュシステム500の図を示す。コネクションマトリクスメモリ502(connection matrix memory)は、命令キャッシュ504(2kBでよい)にデータを供給し、今度はそれが、命令分離バッファ506にデータラインを供給する。命令分離バッファ506は、メモリ側での固定幅のラインが供給され(一つの実装においては、128ビットである。他のサイズも可能ではあるが。)、プロセッサ側に可変幅の命令を供給する。フェッチモジュール508は、バッファ506のレベルを監視し、キャッシュ504からバッファ506へ別の128ビット命令ラインのために信号をいつ送るべきかを決定する。概して、これは、閾値によって実行される。分離バッファ506内にある未処理の命令が所定のレベルを超える(複数の命令(in instruction)又はビット数のいずれか)場合、バッファ526は十分に一杯であると見なされる。バッファ506が閾値レベルを下回ったときは、フェッチモジュール508は、バッファ506にロードされる別の128ビットのデータのために命令キャッシュ504に信号を送る。
分離バッファ506をオーバロード(overload)しない一つの理由は、命令内にある不連続性、特にジャンプ命令(分岐ユニット内の命令である、BRU.JMPにより与えられる)が存在するからである。ジャンプ命令は、それに続く命令が引き出されるメモリロケーションを変更するため、ジャンプ命令が次に続く命令でバッファを一杯にしておくことは非効率である。これにより、ジャンプ命令に続く(subsequent to)命令は捨てられる可能性がある。
しかし、分岐命令が実行されている間に限られた数の命令を含むことが慣習的であり、かつ望ましい。これらは、分岐遅延ライン命令として知られている。含める分岐遅延命令の理想的な数は、分岐命令によってもたらされる待ち時間のサイクル数に等しいものである。例えば、分岐命令が6サイクルの待ち時間をもたらす場合、6サイクルの命令(理想的には、6つの命令)が処理のためにバッファ内で利用可能であるべきである。しかし、命令が可変長であるときは、本開示で記載されたプロセッサ命令でそうであるように、分岐遅延命令の数は、バッファ内に含められる必要のあるビット数に即座に翻訳されない。
分岐命令に対するバッファ管理を改善するためには、図6に示されるように、追加のフィールドを分岐命令そのもののビット内に含めることができる。異なるBRUオペコードによって与えられたBRU命令の3つのサイズのそれぞれについての一つを含む、BRU命令に対して所定の選択ビットマップ(bit map)が示される。
BRU.BRA命令600が示され、命令ヘッダから24ビットである。命令ポインタ相対ジャンプ(instruction pointer-relative jump)である、この特定の命令BRAは、分岐ユニットオペコード602の使用によって分かる(この場合は「00」)。即座のオフセットフィールド604は、命令内のポインタの新たな位置を示し、8ビットフィールド606は、遅延命令のサイズ全体を与える(この場合においては、136ビット)。
BRU.JMP命令610が示され、命令ヘッダから16ビットである。レジスタ間接命令ポインタジャンプ(register-indirect instruction pointer jump)である、この特定の命令JMPは、分岐ユニットオペコード612の使用によって分かる(この場合は「001」)。5桁フィールド614は整数レジストリファイル(registry file)内の新たなアドレスを示し、8ビットフィード616は、遅延命令のサイズ全体を与える(この場合においては、132ビット)。
BRU.RPL命令620が示され、命令ヘッダから20ビットである。この特定の命令RPLは、システムに可変回数だけ命令ブロックをループするように指示する。これは、分岐ユニットオペコード622の使用によって分かる(この場合は「11」)。RPL命令は2つの5桁引数624a、624bをとり、それぞれ整数レジストリファイル内のアドレスを表す。第一リストレジストリロケーション624aで見つかった整数値は、命令をループする回数を示す。第二リストレジストリロケーション624bで見つかった整数値は、ループ最終アドレスを示す。8ビットフィールド626は、遅延命令のサイズ全体を与える(この場合においては、124ビット)。
分岐遅延をもたらす分岐命令に対してビットサイズフィールドを含めることで、フェッチモジュールは、図7に示すように、バッファの管理のための改善したプロセスを実行することができる。
図7に示される方法700は、バッファが、上述したようなフェッチモジュールにより管理され得る一つのやり方である。そのフェッチモジュールは、バッファのレベルを問い合わせる(702)。いくつかの実装においては、問い合わせは、フェッチモジュール以外のソースにより実行されてよく、あるいは、問い合わせが全く必要でなくてもよい(バッファが、そのレベルとフェッチモジュールに指示(prompting)なく周期的に報告する)。
フェッチモジュールは、バッファ内で利用可能なデータレベルを表す情報を受ける(704)。これは、命令で表されてもよいのであるが、理想的には、ビット又はバイトデータで表される。いずれにしても、システムに対して値を求める(evaluate)のに引き出されたが、値が求められていない命令を表す。
なんら分岐命令が解釈されて(interpreted)いない(判定ブロック706のNO)場合、バッファレベル閾値はデフォルト値と比較される(708)。デフォルト値は、ユーザによりマニュアルでセットされてよく、システムパフォーマンスの経験的測定に基づいた自動プロセスを通じて得てよい(arrived at)。バッファレベルが閾値を超える場合、フェッチモジュールは再度バッファに問い合わせる前に適切な間隔待機することができる(712)。そうでない場合、データの別のライン(いくつかの実装においては、128ビット)がキャッシュ710からフェッチされて、さらなるレベル問い合わせが行われる。
分岐命令が解釈された(判定ブロック706のYES)場合、システムがメモリ内の新たなスポットからフェッチ命令を開始する間に分岐遅延命令が解釈されるべきであるので、遅延命令のためのバイトサイズが分岐命令のヘッダから決定される(714)。その後、バッファレベルがバイトサイズ閾値と比較される(716)。バッファレベルが閾値を超える場合は、システムは分岐先(branching destination)から命令をフェッチする(718)。バッファレベルがバイトサイズ閾値を下回る場合、別の命令ラインが十分な分岐遅延命令を供給するためフェッチされる(710)。
汎用ハードウェアオペレーション
本開示で記載される8つの機能ユニットは、図示され、上述されたようにプロセッサ上に組み立てられる。いくつかの実装においては、メモリ内の1つ以上の値のオペレーションを含む命令は、値のデータ型に関わらず同一の下位ロジックを用いるように設計されてよい。例えば、一つの実装においては、本開示で開示された命令は、チップのハードウェアに書き込まれ、同一のハードウェア及びデータパスが固定小数点、浮動小数点、整数、U8F値のオペレーションを行うのに用いられてよい。さらに、同一のハードワイヤードオペレーションロジックが任意のこれらのサポートされたデータ型の32ビット、16ビット及び8ビット値のオペレーションを行うのに用いられてよい。このようにして、これらのロジックコンポーネントが柔軟に再利用されるため、プロセッサの設置面積(footprint)全体が低減する。
例として、図8は、複数のデータ型及び複数の精度レベルを収容(accommodate)するようにセットされることのできるスカラ演算、SAU.ADDに対するビットマップを示す。命令800は、それぞれIRFメモリ内のロケーションへの参照である3つの5桁フィールド804a、804b、804cが続く5桁オペコード802を含む。ADDオペレーションは、804aにより示されたIRFロケーション内に記憶された値と、804cによりしめされたIRFロケーション内に記憶された値を引数にして、804bによって示されたIRFロケーション内に結果を記憶する。単一ビット806は、第二オペランドロケーション804cが、IRFロケーションではなくポイントオフセット(pointed offset)として特定されることができるように含まれる。
残りのビット808及び810は、異なるタイプ及びサイズを収容する。ビット808は、「1」で浮動小数点を、「0」で整数を示すとともに、サイズが2のビット810は32ビット、16ビット又は8ビットを示す。このようにして、複数のデータフォーマットが同一のハードウェアロジック内で同一のオペレーションを用いる。
図9は、オペレーションを実行する方法900のフローチャートである。そのようなオペレーションを表す命令を読み込むと、システムは、適切なレジストリファイルから指定された値をフェッチする(902)。
システムは、オペランドのデータ型を決定する(904)。これは、レジストリ内のストレージから明らかであるか、又は別の方法でシステムに知らされる。あるいは、オペレーションヘッダがデータ型を特定するための一つ以上のフィールドを有してよい。
システムは、オペレーションを行い、結果を得る(906)。結果は、通常、オペランドと同一の形式であるが、いくつかの実装においては、結果が所定の方法でフォーマットされてよく、予測される結果の型に合致するように再フォーマットされる必要があるかもしれない(908)。命令がそのように要求する場合は、結果はレジストリに記憶される、又はすぐに使用するためキャッシュ若しくは一時的なメモリに保持されてよい。
コンデンスルックアップテーブル(Condensed Look-up Table)
所定のデータの効率的な処理のため、一般的に用いられる機能についてはルックアップテーブルを含でおくことが適切である。しかし、特定のデータ型の特定の機能は、特定のテーブルで見つかる値に合わせた圧縮スキーム(Compression scheme)を用いることで、メモリ内により効率的に記憶されることができる。
例えば、16ビット浮動小数点の値に対して底を2とする対数は、典型的には、0と1の間の値についてのテーブルを含み、そのテーブルの大きい小数(large fraction)は、値の小数部(fraction part)のかなりの数の先頭ビットの繰り返しを含む。図10は、ルックアップテーブルのはじめの5ビットが、先頭ビットの15の繰り返しまでを符号化するのに用いられてよい。小数点の後ろのはじめの5つの場所を符号化するというよりは、代わりにこれらの5桁は、小数点の後ろの先頭の桁と、その桁が、反対の桁が現れるまで繰り返される数を表す。ゆえに、パターン「111…10」及び「000…01」は、先頭の桁の15の繰り返しまでに対して、符号化された5つのビットに置き換えられる。
図11は、底を2とする対数オペレーションに対して浮動小数点の小数部に、ルックアップテーブルを翻訳するフローチャートを表す。ここで、単一の入力変数が底を2とする対数である結果値に変換されることになり、5つではなく4つの符号化されたビットを必要とするように特定された閾値を用いる。
システムは、入力変数の小数部を抽出する(1102)。小数部は閾値と比較され(1104)、先頭が0(1106a)か先頭が1(1106b)を備えたエントリであるか否かを決定する。適切なエントリがルックアップテーブルに見つかり(1108)、先頭桁の適切な反復回数が、エントリの初めの4ビットに従って見つかる。エントリの残りのビットは、結果のリマインダとして付け加えられる(1112)。
このコンデンスルックアップテーブルは、いくつかの実装において、最悪の場合の標準的なルックアップテーブルに必要とされる空間の40%程度節約する。
並列的に機能ユニット命令を実行すると、インライン(in-line)でより効率的に実行されるビジュアル処理に共通した所定のオペレーションが許容される。例えば、ビジュアル処理において所定の共通オペレーションとは、ベクトル内で二つ以上のエレメントを交換すること(通常「スウィズル」と知られている)、特定のベクトル要素を1又は0に置換すること、一つ以上の要素を反転させる(inverting)こと、を含む。特定の例としては、逆ベクトル化は、転位(transposition)(スウィズル)及び反転のいずれも含むビジュアル処理オペレーションの一部であることが多い。しかし、メモリ内のベクトル要素が実際に変更されてしまうのは望ましくないことが多い。変更したベクトルが特定のオペレーションに必要とされているのであって、オリジナルのベクトルはその後に用いられるのである。
いくつかの実装においては、システムは、メモリに内在している値を妨げることなく、主要なデータパス内で発生する、ベクトル要素のためのインラインでのスウィズル、反転及び置換をサポートすることを含んでよい。
図12は、VRF入力とともにVAU、CMU又はSAU機能で第一オペランドとして用いられる4要素のベクトルに対する任意の置換及び反転をともなうインラインでのスウィズルを提供する、ロードストア機能オペレータ、LUS.SWZM4に対するビットマップである。機能を特定するオペコード1202、ユニットフィールド1204、機能がワードではなくバイトのスウィズルに用いられるようにするビット1206に続いて、命令は、4つのエレメントのどれが4つのスロットのいずれかにあるかを示す4つのフィールド1208a〜1208dに加えて、置換又は反転をマークするのに用いられる4つのフィールド1210a〜1210dを含む。
スウィズルオペレーションが、オリジナルのベクトル1212a及びインラインでスウィズルされたベクトル1212bによって図示されている。フィールド1208a〜1208dのうち、第一及び第三要素はそのスポットを維持する一方で、第二及び第四要素は位置を交換している。フィールド1210a〜1210dのうち、第二及び第四要素はスウィズルされた位置に従って複製され(reproduced)(コード「00」)、第一要素は反転され(コード「01」)、第三要素は0に置換されている(コード「10」)。結果ベクトル1212bは、LSU.SWZM4のインラインでのスウィズルオペレーションを含む特定のユニット命令において、オリジナルのベクトル1212aの代わりに用いられるが、オリジナルのベクトル1212aのそのものは、メモリ内で変更されたり、置換されたりしない。
図13は、本開示に従う、ベクトルをスウィズルし、変更する例示のインラインでの方法1300を示す。この特定の実装においては、LSU.SWZM4オペレーションに関して上述された各要素に対する第一及び第二フィールドに基づく。オリジナルのベクトルが取得され(1302)、所定のステップが、ベクトルの各要素(工程がある要素に行われている間の「ターゲット」要素)に対して実行される。
第二フィールド内のターゲット要素の値に基づいて、システムは、1若しくは0をターゲット要素に代入する(1308)又は指定要素の値を特定し、それをターゲット要素に複製する(1310、1312)。前者の場合(1又は0の代入)、システムは、データ型に気づいている。つまり、1又は0の値は、ベクトル要素のデータ型に応じてフォーマットされる(固定小数点、浮動小数点、整数、スケールされた整数等)。後者の場合(何もない又は反転)、システムが次の要素の変更に進む時点で、さらなる工程においてターゲットを反転するか否かを決定する(1314、1316)。
一旦、ベクトル内の全ての要素が特定されたようにスイッチされた、及び/又は変更されたら、新たなベクトルが適切なオペレーションによって用いられる(1318)。オリジナルのベクトルは、スウィズルされたベクトルによって上書きされず、代わりに、特定の命令において呼ばれた何らかの(複数の)機能において引数としてのみ用いられるのみである。
いくつかの実施形態において、並列コンピュータデバイス100は、電子デバイス内に存する。図14は、いくつかの実施形態に従うコンピュータデバイスを含む電子デバイスを示す。電子デバイス1400は、プロセッサ1402と、メモリ1404と、一つ以上のインタフェース1406と、コンピュータデバイス100と、を含むことができる。
電子デバイス1400は、コンピュータ読み取り可能媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブルリードオンリーメモリ(PROM)、リードオンリーメモリ(ROM)等のメモリ1404を有することができる。電子デバイス1400は、メモリ内に記憶されることができる、命令を処理しかつソフトウェアを動作させる一つ以上のプロセッサ1402を備えて構成されることができる。プロセッサ1402は、メモリ1404及び他のデバイスと通信するためのインタフェース1406とも通信することができる。プロセッサ1402は、CPU、アプリケーションプロセッサ及びフラッシュメモリを組み合わせたシステムオンチップ等の任意の適用可能なプロセッサ又は縮小命令セットコンピュータ(RISC)プロセッサであることができる。
メモリ1404は、非一時的なコンピュータ読み取り可能媒体、フラッシュメモリ、磁気ディスクドライブ、光学ドライブ、プログラマブルリードオンリーメモリ(PROM)、リードオンリーメモリ(ROM)、その他のメモリ又はメモリの組み合わせであることができる。ソフトウェアは、コンピュータ命令又はコンピュータコードを実行することができるプロセッサ上で動作することができる。プロセッサは、特定用途向け集積回路(ASIC)、プログラマブルロジックアレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、その他の集積回路を用いてハードウェアで実装されてもよい。
インタフェース1406は、ハードウェア又はソフトウェアで実装されることができる。インタフェース1406は、テレビへのリモート制御等、ローカルソース及びネットワークからのデータ及び制御情報のいずれもを受けるのに用いられることできる。電子デバイスは、キーボード、タッチスクリーン、トラックボール、タッチパッド、マウス等の様々なユーザインタフェースを提供することもできる。電子デバイスは、いくつかの実施形態においては、スピーカ及びディスプレイデバイスを含んでもよい。
いくつかの実施形態においては、コンピュータデバイス100内のベクトルプロセッサ102及びハードウェアアクセラレータ104等の処理ユニットは、コンピュータ命令又はコンピュータコードを実行することができる集積回路を含むことができる。プロセッサは、特定用途向け集積回路(ASIC)、プログラマブルロジックアレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、その他の集積回路を用いてハードウェアで実装されてもよい。
いくつかの実施形態においては、コンピュータデバイス100は、システムオンチップとして実装されることができる。別の実施形態においては、並列コンピュータデバイス内の一つ以上のブロックが別々のチップとして実装されることができ、並列コンピュータデバイスがシステムインパッケージ(SIP)でパッケージされることができる。いくつかの実施形態においては、並列コンピュータデバイス100はデータ処理アプリケーションに用いられることができる。データ処理アプリケーションは、画像処理アプリケーション及び/又は動画処理アプリケーションを含むことができる。画像処理アプリケーションは、画像フィルタリングプロセスを含む画像処理プロセスを含むことができる。動画処理アプリケーションは、動画復号化オペレーション、動画符号化オペレーション及び、動画内の動き又は物体を検出する動画分析オペレーションを含むことができる。本発明の追加的なアプリケーションは、画像列、複数の物体又は動画に基づいたマシンラーニング及び分類と、深度可能(depth enabled)カメラを含む複数のカメラビューからのジオメトリを抽出し、ワイヤフレームジエオメトリ(例えば、ポイントクラウドを介して)がその後のGPUによる頂点シェーディング(vertex shading)のために抽出されることができる複数のビューから特徴を抽出するゲームアプリケーションを含む拡張現実アプリケーションと、を含む。
電子デバイス1400は、携帯電話等のモバイルデバイスを含むことができる。モバイルデバイスは、複数のアクセス技術を用いた複数の無線アクセスネットワーク及び無線通信ネットワークと通信することができる。モバイルデバイスは、文書処理、ウェブブラウズ、ゲーム、e-book能力、オペレーティングシステム、フルキーボード等の進化した能力を提示する。モバイルデバイスは、Symbian(登録商標) OS、iPhone(登録商標) OS、RIM’s BlackBerry(登録商標)、Windows Mobile(登録商標)、Linux(登録商標)、Palm(登録商標) WebOS、Android(登録商標)等のオペレーティングシステムで動作することができる。スクリーンは、データをモバイルデバイスに入力するのに用いられることができるタッチスクリーンであってよく、スクリーンはフルキーボードの代わりに用いられることができる。モバイルデバイスは、アプリケーションを動作させる又は通信ネットワーク内のサーバによって提供されるアプリケーションと通信する能力を有してもよい。モバイルデバイスは、ネットワーク上のこれらのアプリケーションからアップデート及び他の情報を受信することができる。
電子デバイス1400は、テレビ(TV)、ビデオプロジェクタ、セットトップボックス又はセットトップユニット、デジタルビデオレコーダ(DVR)、コンピュータ、ネットブック、ラップトップ、タブレットコンピュータ、ネットワークと通信することができる他の聴覚/視覚イクイップメント等の多くの他の装置を収容することができる。電子デバイスは、全地球測位システム、プロファイル情報、又はスタック若しくはメモリ内に他のロケーション情報を保持することもできる。
複数の異なるアレンジメントが本開示において記載されているが、それぞれの特徴が有利的には様々な形式で組み合わせられてよく、それにより利点を得るものと理解される。
前述の明細書においては、本願は特定の例を参照して記載されている。しかし、様々な修正及ぶ変更が、添付の特許請求の範囲に明記されるように、発明の広い範囲を逸脱することなく本願においてなされてよいことは明らかである。例えば、接続は、例えば、中間ノードを介した、各ノード、ユニット、デバイスからの信号を転送するのに適した任意のタイプの接続であることができる。従って、黙示的に又は明示的にそうであるとされない限り、接続は、例えば、直接接続又は間接接続であってよい。
本開示で示されたアーキテクチャは例示的に過ぎず、事実、同一の機能を達成する多くの他のアーキテクチャが実装されることができると理解されるものである。抽象的ではあるが依然として確定された意味においては、同一の機能を達成するためのコンポーネントの任意のアレンジメントは、所望の機能が達成されるように効果的に関連づけられる(associated)。つまり、特定の機能を達成するため、本開示において組み合わせられた任意の2つのコンポーネントは、アーキテクチャ又は中間コンポーネントに関わらず、その所望の機能が達成されるように互いに「関連付けられた」とみることができる。同様に、そのように関連づけられた2つのコンポーネントは、所望の機能を達成するため、「動作可能に接続された」又は「動作可能に結合された」とみることもできる。
さらに、当業者であれば、上述されたオペレーションの機能間の境界は例示に過ぎないと理解するものである。複数のオペレーションの機能は、単一のオペレーションに組み合わせられてよく、及び/又は単一のオペレーションの機能は、追加のオペレーションに分散されてよい。さらに、別の実施形態が特定のオペレーションの複数のインスタンスを含んでよく、オペレーションの順序が種々の他の実施形態で変更されてよい。
他の修正、バリエーション及び変更も可能である。従って、明細書及び図面は、限定的な意味ではなく例示的なものとみなされる。
特許請求の範囲において、丸括弧の間にある任意の符号は、請求項を限定するものと解釈されるべきではない。文言「含む(comprising)」は、請求項内に挙げられたもの以外の他の要素又は工程の存在を排除しない。さらに、本開示で用いられるような文言「ある(a or an)」は、一つ以上として定義される。また、請求項内にある「少なくとも一つ」、「一つ以上」等の導入句の使用は、同一の請求項が「一つ以上」又は「少なくとも一つ」の導入句と「ある(a or an)」等の非限定的な冠詞を含む場合も含め、他のクレーム要素が非限定的冠詞「ある(a or an)」を導入したものとすると、そのように導入されたクレーム要素を含む特定の請求項が、ただ一つしかそのような要素を含まない発明に限定されることを示唆していると解釈されるべきではない。明示される場合を除き、「第一」、「第二」等の文言は、そのような文言が記載する要素同士を任意に区別するのに用いられる。つまり、これらの文言は、そのような要素の経時性又は他の優先順位付けを示すことを必ずしも意図していない。所定の手段が相互に異なる請求項に規定されるという事実だけでは、これらの手段の組み合わせが効果を有するように用いられることができないということを示さない。