JP2023021912A - システム・オン・チップの分離式ルックアップ・テーブル・アクセラレータを使用してテーブルのルックアップを高速化すること - Google Patents

システム・オン・チップの分離式ルックアップ・テーブル・アクセラレータを使用してテーブルのルックアップを高速化すること Download PDF

Info

Publication number
JP2023021912A
JP2023021912A JP2022088299A JP2022088299A JP2023021912A JP 2023021912 A JP2023021912 A JP 2023021912A JP 2022088299 A JP2022088299 A JP 2022088299A JP 2022088299 A JP2022088299 A JP 2022088299A JP 2023021912 A JP2023021912 A JP 2023021912A
Authority
JP
Japan
Prior art keywords
memory
data
indices
accelerator
values
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2022088299A
Other languages
English (en)
Inventor
ピー シン ラヴィ
P Singh Ravi
- ユー ハン チン
Han Chin-Yuu
サンカラン ジャガディーシュ
Sankaran Jagadeesh
イタニ アーマド
Itani Ahmad
- テ シー イェン
Yen-Te Shih
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of JP2023021912A publication Critical patent/JP2023021912A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/02Digital function generators
    • G06F1/03Digital function generators working, at least partly, by table look-up
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources

Abstract

【課題】VPUの性能及びスループットを高めるために最適化されたVPU及び関連する構成要素を提供する。【解決手段】VPUは、最小/最大収集器、自動ストア・プレディケーション機能、レーン間共有を可能にするSIMDデータ・パス構成、ストライド・パラメータ機能を含む転置ロード/ストア、並べ替え及びゼロ挿入機能を含むロード、2ポイント及び2×2ポイントのルックアップを可能にする、ハードウェア、論理機構、及びメモリのレイアウト機能、並びにメモリ・バンクごとのロード・キャッシングの能力を含む。分離式アクセラレータが、VPUの処理タスクをオフロードするために使用され、ハードウェア・シーケンサが、DMAシステムに含まれ、DMA及びVPUは、動的領域ベースのデータ移動動作を実行するための処理コントローラなしに動作することを可能にするVPU設定モードを実行する。【選択図】図9A

Description

ベクトル処理ユニット(VPU:vector processing unit)は、単一命令複数データ(SIMD:single instruction multiple data)演算を並列に実行するために使用される。VPUの一般的な用途には、画像処理、コンピュータ・ビジョン、信号処理、深層学習(たとえば、畳込み演算に対して)及び/又は類似のものなどの演算が含まれる。
いくつかのコンピュータ・ビジョンのアプリケーションでは、たとえば、中間値のダイナミック・レンジが、よく理解されている。したがって、異常を検出するために、計算された値が、このダイナミック・レンジと比較され得る。ただし、この最小値及び最大値を検出及び分析する従来の解決策には、すべての値をメモリに書き込み、その後、メモリ内の値の分析を実行することが含まれ、追加の処理サイクルが必要となる。さらに、ロードから使用するまでレイテンシがあるにもかかわらず、高スループットを達成するために、クロック・レートの高いプロセッサに、ソフトウェア・パイプライン及び/又はループ展開を実行させる場合がある。しかし、元の反復回数が展開ファクタで割り切れない場合、展開されたループの完了後に何回かの反復が残り得ることにより、最終の反復での値を計算するために、追加の剰余分のループが必要となる。この剰余のループは、たとえば、展開されて最適な性能を実現することができないので、剰余のループが、システムのコード・サイズ及びレイテンシを増加させる。従来の単一命令複数データ(SIMD)の演算では、各SIMDユニットは、SIMDユニット自体のデータ・レーンで並列に、互いに独立して演算することができる。いくつかのアーキテクチャは、隣り合う隣接物間での共有を可能にし得るが、この制限された共有は限定的であり、演算の実施態様では、多くの場合、処理のために各データ・レーンに同じオペランドをコピーする必要がある。加えて、ベクトルSIMDプロセッサでは、すべてのメモリ読取り動作で、たとえばベクトル処理幅に等しい、標準の又は一貫した単位を使用する必要があり得るが、これは、メモリ・バンクがワイドである場合に非効率的であり得る。たとえば、64バイトのメモリ幅を有する要素4から67までを読み取る場合、たとえば、1回は0から63まで、もう1回は64から67までの、2回のメモリ読取りが必要となり得る。しかし、これは、多くの追加の値、たとえば値0~3及び値68~127が、現在の演算にこれらの値が必要ない場合でさえも読み取られるということになる。従来の命令セットでは、追加のデータ操作が必要な場合、データが読み出されてレジスタにストアされた後、追加の命令を使用して、レジスタ内のメモリ・データに対して演算することができる。たとえば、これには、データをロードし、データに対して置換を実行し、次いで再構成されたデータを使用して演算を実行する必要があり得る。したがって、データ操作に追加のサイクルが必要となり、レイテンシが増加する。既存のVPUを使用してテーブルのルックアップを実行する場合、それぞれのただ1つの値が複製されたテーブルから引き出され得るように、テーブルが複製され得るか、又は同じバンク内の同じテーブルから複数の値を読み取ることができるように、追加の読取りポートが、各メモリ・バンクに追加され得る。しかし、値ごとにテーブルを複製するには、追加のメモリ及び処理が必要であり、さらなる読取りポートを追加するには、チップ上に追加のスペースが必要である。従来のVPUでは、VPUが、高度に最適化されたコードのより小さなセットを実行するようプログラミングされるため、プログラマは、ローカル・データ・メモリの中身を管理できるので、データ・キャッシュが実装されない場合がある。しかし、そうすることにより、次の反復のデータに、1つ又は複数の以前に読み取られた演算とのオーバラップが含まれている場合でさえも、各アクセスで、各メモリ・バンクから値を読み取る必要がある。
VPUなどのプロセッサの性能を最適化するために、命令セット・アーキテクチャ(ISA:instruction set architecture)を拡張して、テーブルのルックアップ、畳込み演算、及び/又は類似のものなどの、よく行われる演算を高速化する、カスタム命令を作成することができる。しかし、このようにISAを使用するには、プロセッサ自体もこうした演算を実行する必要があり、これは、この拡張命令の実行中に、プロセッサがビジー状態になることを意味する。
加えて、VPUは、ダイレクト・メモリ・アクセス(DMA:direct memory access)システムを使用して、VPUで処理するデータを取得することができる。したがって、DMAシステムは、データ移動エンジンとして動作することができるが、画像のパディング、アドレス操作、オーバラップするデータの管理、走査順序管理、フレーム・サイズ管理、及び/又は類似のものなどの、追加の動作を実行することもできる。しかし、DMAシステム及びVPUをプログラミングするためのプログラミングの複雑度は、DMAリソース、たとえば記述子、チャネル、トリガなどが増加するにつれて高まる。フレームのタイルに、空間的又は時間的な依存関係が含まれている場合、DMAリソースの動的な更新は、システムの処理の負荷となる。従来のDMAシステムでは、未知の、又はデータ依存のデータをフェッチするとき、次の処理の反復を指示する更新された情報を判断するために、処理サイクルに介入する処理コントローラ(たとえば、R5又はARM処理コア)が必要であった。たとえば、対象物又は特徴追跡では、VPUが、対象物又は特徴の次の位置を計算でき、次いで、処理コントローラが介入してメモリ・アドレス指定情報を更新し、次いで、DMAシステムをトリガして更新された情報を使用することになる。しかし、処理コントローラの介入により、レイテンシが増加し、領域に依存するデータ移動アルゴリズムによる演算には、より複雑なプログラミングが必要となる。
さらに、自律型及び半自律型機械アプリケーションなどの安全性が重要なアプリケーションにおいて、恒久的障害の検出及び切離しには、厳格な要件がある。たとえば、深層学習、コンピュータ・ビジョン、センサ処理、及び/又は他のアプリケーションを機械で実行する場合、正確なテストを可能にするためだけでなく、アプリケーションが、たとえば、短いレイテンシで適切に実行することも可能にするために、恒久的障害の検出が、定期的且つ割り当てられた時間予算内で実行される必要がある。これを行うために、短いレイテンシで、それぞれの特定のアプリケーションが実行する時間予算を満たしながらも、100パーセントの網羅率が必要となり得る。従来の手法では、内蔵自己テスト(BIST:built-in self-test)を使用して障害を識別するが、こうしたBISTの技法は、網羅率が十分でなく、システムに長すぎるレイテンシをもたらし、且つ/又は特定のアプリケーションを実行する時間予算を満たしていない。
米国特許出願第15/141,703号 米国特許出願第16/101,232号
本開示の実施例は、ベクトル処理ユニット(VPU)、VPUからオフロードされる処理を扱うために使用され得る分離式(decoupled)アクセラレータ、及びメモリとVPUとの間のデータ移動をサポートするダイレクト・メモリ・アクセス(DMA)システムの改善に関する。従来の又は既存の解決策の様々な欠点を考慮して、本開示のVPUには、VPUからメモリへのデータ・パスに含まれ、これにより最小値/最大値がメモリにストアされる前にストアされ得る、最小/最大ハードウェア収集器が含まれ得る。このようにして、最小値/最大値は、メモリ書込み動作が完了するとすぐに利用可能となり、これにより、値がメモリにストアされた後に最小/最大を判断することによるレイテンシを短縮することができる。加えて、VPUには、最終の反復を超える反復で計算される値ごとにプレディケーション・ビットをセットすることによって、プレディケーション・フラグを使用できる自動プレディケーション機能が含まれ得る。その結果、反復の各セットには、実行される同じ数の反復が含まれ得るが、プレディケーション・フラグのおかげで、反復の最終セットからの1つ又は複数の値が、メモリに書き出されない場合がある。既存の解決策のデータ・レーン間での共有における制限を考慮して、本開示のSIMDアーキテクチャは、それぞれが複数のレーンを含むプロセッサ内のスライスを規定でき、レーンのそれぞれが、互いに通信するよう設定され得る。したがって、あるレーンからのオペランドが、他のレーンによって使用され得、これにより、オペランドのそれぞれを、処理のために各レーンにコピーする必要がなくなる。ただ1つのワイド・メモリ・バンクからのロードの非効率性を考慮して、VPUには、より小さなビットの位置合わせ、たとえば、メモリ・バンクがそれぞれ16ビットである場合に、16ビットの位置合わせを可能にする、複数のより小さなメモリ・バンクが含まれ得る。このようにして、値4から67を読み取る実例は、0~63及び64~127の2回のメモリ読取りではなく、ただ1回のメモリ読取りで実行され得る。このメモリ・バンク構成に加えて、VPUには、バンクの競合が起こらず、サイクルごとにより多くのデータを読取り又は書込みできるように、メモリ・バンク内でストアされた値をオフセットできる、転置ロード(transposed load)及び/又はストア機能が含まれ得る。従来の命令セットのデータ操作の欠点を考慮して、並べ替え又はデータ操作パターンに従ってメモリからデータを取得するために、並べ替え命令を含むロードを使用して、メモリ・アドレスと共に並べ替えパターンをローカル・メモリに送信することができる。したがって、データ操作及びデータのロードが同じサイクルで実行され得、これによりレイテンシが短縮される。値ごとにテーブルを複製すること、又はテーブル・ルックアップのために読取りポートを追加することの欠点に対処するために、テーブルごと且つサイクルごとに、2ポイント又は4ポイントがそれぞれルックアップされ得るように、2ポイント又は2×2ポイントのルックアップが実行され得る。これを実現するために、テーブルのオフセット記憶パターン、メモリごとのバンク・アドレス・バス、並びに関連する論理機構及びルーティングを使用して、2ポイント又は4ポイントの並列ルックアップが可能であり得る。実施例では、各メモリ・バンクには、所与の動作に応じてイネーブル又はディスエーブルされ得る、関連するデータ・キャッシュが含まれ得る。たとえば、反復間に多くのデータのオーバラップが存在する場合のフィルタ処理動作では、データ・キャッシュを使用して、各バンクから最小限の読取りだけが要求されるように、1つ又は複数の以前のルックアップからの値をストアすることができ、これによりシステムのエネルギー及び電力を節約する。
VPU又は他のプロセッサ・タイプでの従来のISAの欠点に対処するために、本開示のシステム及び方法は、共有メモリを介してVPUによって設定され且つVPUと通信できる、分離式アクセラレータを使用することができるが、VPUが、アクセラレータと並行して他のタスクの処理を続行するのを可能にするために、VPUとは無関係に特定のタスクを実行することができる。たとえば、分離式ルックアップ・テーブル(DLUT:decoupled lookup table)アクセラレータを使用して、テーブルのルックアップを実行するときに、システムの性能を高めることができる。このようにして、VPUが、メモリ・バンクの、ライン内の競合検出及び解決を実行するのではなく、DLUT用アクセラレータが、競合を識別し、競合を回避し、システムのスループットを向上させることができる。
従来のDMAシステムの欠点を考慮して、本開示のシステム及び方法には、ハードウェア・シーケンサ用の一連のコマンドを含む、フレーム・データに対して演算するハードウェア・シーケンサが含まれ得る。たとえば、ハードウェア・シーケンサは、タイル・レベルではなくフレーム・レベルで演算することができ、DMAエンジンのためのシーケンスを実行し、DMAエンジンをプログラミングしてパディング、アドレス操作などの、同じ演算を実行するプログラミングの複雑さを、取り除くことができる。いくつかの実施例では、DMAシステムには、DMAエンジンが、次のタイルをロードするためにDMAをトリガするようVPUに要求するのではなく、ベクトル・メモリ(VMEM:vector memory)へのタイルの移動を制御する、DMAトリガ・モードが含まれ得る。したがって、コマンド・シーケンスが逆になり、DMAがVPUのトリガになる。DMAシステムにおける領域依存のデータの移動動作の欠点を考慮して、DMAシステムは、DMA及びVPUを使用して、処理コントローラの介入を必要とせずに、密結合型のループで動作することができる。たとえば、VPUは、追跡されている様々な特徴及び/又は対象物について、VMEM内の位置情報を更新することができ、DMAは、この更新された情報を使用して、処理するためにVPUに供給される次のデータが、特徴又は対象物の次の位置に対応するように、記述子メモリ内の記述子を更新することができる。このプロセスは、処理が完了するまで繰り返され、これにより、処理コントローラの介入が不要になり、システムのレイテンシが短縮され得る。
加えて、BISTに対する従来の手法の欠陥を考慮して、本システム及び方法は、たとえば、システム・オン・チップ(SoC:system on a chip)のプログラム可能なビジョン・アクセラレータ(PVA:programmable vision accelerator)の障害検出を実行するために、多入力シグネチャ・レジスタ(MISR:multiple input signature register)でのBISTを実行することができる。たとえば、本開示の様々な実施例では、PVAには、1つ又は複数のDMAシステム、並びにR5プロセッサ、ARMプロセッサ、CPU、及び/又は類似のものなどの、1つ又は複数の処理コントローラ(又は制御プロセッサ)を使用して制御される、1つ又は複数のVPUが含まれ得る。したがって、PVAの各構成要素にテストが必要であり得、本システム及び方法は、MISRでのBISTを実行して、恒久的な障害を100パーセント検出する。このようにして、恒久的な障害検出を実行して、制御論理機構とデータ論理機構との両方のブロックを100パーセント網羅し、レイテンシを減らすために、安全プロセッサに直接エラーを報告し、特定のアプリケーションをカスタマイズして関連する実行時間予算を満たすことができる。
ベクトル処理ユニット(VPU)を改善する本システム及び方法は、添付図面の以下の図を参照して、下記で詳細に説明される。
本開示のいくつかの実施例による、例示的な最小/最大収集システムの図である。 本開示のいくつかの実施例による、最小/最大収集方法を示す流れ図である。 本開示のいくつかの実施例による、自動プレディケーション機能を備えたアドレス生成ユニットを有するプロセッサを含む、例示的なシステムの図である。 本開示のいくつかの実施例による、経時的な状態変化のシーケンスを示す表である。 本開示のいくつかの実施例による、自動ストア・プレディケーションの方法を示す流れ図である。 本開示のいくつかの実施例による、例示的な単一命令複数データ(SIMD)データ・パス構成の説明図である。 本開示のいくつかの実施例による、フィルタ処理演算のための、SIMDアーキテクチャのスライス間でのオペランドの共有を示す図である。 本開示のいくつかの実施例による、ドット積演算のための、SIMDアーキテクチャのスライス間でのオペランドの共有を示す図である。 本開示のいくつかの実施例による、ペイロードをソートする演算のための、SIMDアーキテクチャのスライス間でのオペランドの共有を示す図である。 本開示のいくつかの実施例による、SIMDアーキテクチャのレーンにわたって共有されるオペランドを使用して、出力を計算する方法の流れ図である。 本開示のいくつかの実施例による、メモリからの読取り及びメモリへの書込みのための転置ロードの論理図、及び論理図に対応する転置ロードのメモリ・バンクの図である。 本開示のいくつかの実施例による、メモリからの読取り及びメモリへの書込みのための、様々なライン・ピッチ及びストライド・パラメータを有する転置ロードの論理図、及び論理図に対応する転置ロードのメモリ・バンクの図である。 本開示のいくつかの実施例による、ストライド・パラメータを有する転置ロードの、書込み動作を設定する方法を示す流れ図である。 本開示のいくつかの実施例による、ストライド・パラメータを有する転置ロードの、書込み動作を実行する方法を示す流れ図である。 本開示のいくつかの実施例による、SIMDアーキテクチャにおける、様々な機能のためのデータ及び係数のレイアウトの表である。 本開示のいくつかの実施例による、SIMDアーキテクチャにおける、様々な機能のためのデータ及び係数のレイアウトの表である。 本開示のいくつかの実施例による、並べ替え及びゼロ挿入を含むロードを実行するための、ハードウェア・アーキテクチャを示す図である。 本開示のいくつかの実施例による、図5Cのハードウェア・アーキテクチャの例示的な使用法を示す図である。 本開示のいくつかの実施例による、並べ替えを含むロードの方法を示す流れ図である。 本開示のいくつかの実施例による、1ポイントのルックアップのための、16ウェイ並列テーブル構成を示す図である。 本開示のいくつかの実施例による、2ポイントのルックアップのための、8ウェイ並列テーブル構成を示す図である。 本開示のいくつかの実施例による、2×2ポイントのルックアップのための、2ウェイ並列ワード・タイプ・テーブルの論理図である。 本開示のいくつかの実施例による、図6Cの2×2ポイントのルックアップのための、2ウェイ並列ワード・タイプ・テーブルのメモリの図である。 本開示のいくつかの実施例による、レーンのペアを、データのインタリーブ動作を含む水平ブレンディングを使用して処理するための、レイアウトを示す図である。 本開示のいくつかの実施例による、データのインタリーブ動作を含む水平ブレンディングの、中間及び最終結果を示す図である。 本開示のいくつかの実施例による、複数ポイントのルックアップを実行する方法の流れ図である。 本開示のいくつかの実施例による、データ及び係数の配列の要素を示す図である。 本開示のいくつかの実施例による、メモリ・バンク用のデータ・キャッシュを使用する、データ・オペランドに必要な読取り動作を示す図である。 本開示のいくつかの実施例による、メモリ・バンク用のデータ・キャッシュを使用する、係数オペランドに必要な読取り動作を示す図である。 本開示のいくつかの実施例による、ロード・キャッシュと共に使用するメモリ・バンクの構成を示す図である。 本開示のいくつかの実施例による、メモリ・バンクのデータ・キャッシュを使用するためのハードウェア・アーキテクチャを示す図である。 本開示のいくつかの実施例による、メモリ・バンク用データ・キャッシュを使用する方法の流れ図である。 本開示のいくつかの実施例による、1つ又は複数の分離式アクセラレータを含むシステムを示す図である。 本開示のいくつかの実施例による、1つ又は複数の演算を実行するために、分離式アクセラレータを使用する方法の流れ図である。 本開示のいくつかの実施例による、分離式ルックアップ・テーブルのアクセラレータを含むシステムを示す図である。 本開示のいくつかの実施例による、様々な演算を実行するときの、分離式ルックアップ・テーブルのアクセラレータの、様々な構成要素が行う措置を示す表である。 本開示のいくつかの実施例による、1つ又は複数の演算を実行するために、分離式ルックアップ・テーブルのアクセラレータを使用する方法の流れ図である。 本開示のいくつかの実施例による、パディングされる値を用いてフレームをパディングすることを示す、視覚化した図である。 本開示のいくつかの実施例による、フレームの記述子に対するアドレス操作を示す、視覚化した図である。 本開示のいくつかの実施例による、フレームのタイル間でオーバラップするデータを示す、視覚化した図である。 本開示のいくつかの実施例による、様々なラスタ走査順序を示す、視覚化した図である。 本開示のいくつかの実施例による、立方体の走査順序を示す、視覚化した図である。 本開示のいくつかの実施例による、様々な垂直マイニング走査順序を示す、視覚化した図である。 本開示のいくつかの実施例による、ピラミッド型の設定における様々な画像サイズを示す、視覚化した図である。 本開示のいくつかの実施例による、ハードウェア・シーケンサを含むダイレクト・メモリ・アクセス(DMA)システムの図である。 本開示のいくつかの実施例による、図10HのDMAシステムのハードウェア・シーケンサ制御のための、シーケンス処理(sequencing)コマンドをストアするフレーム・フォーマットの図である。 本開示のいくつかの実施例による、ラスタ・スキャン・シーケンスのための、図10Iのフレーム・フォーマットの実例の図である。 本開示のいくつかの実施例による、ラスタ・スキャン・シーケンスにおいてハードウェアでシーケンス処理し、図10Jの例示的なフレーム・フォーマットを使用してフレーム・アドレスを処理する、例示的なタイル構造体の図である。 本開示のいくつかの実施例による、DMAシステムにおいてハードウェア・シーケンサを使用する方法の流れ図である。 本開示のいくつかの実施例による、ベクトル処理ユニット(VPU)を使用してダイレクト・メモリ・アクセス(DMA)システムを設定するプロセスに関する、データ・フローの図である。 本開示のいくつかの実施例による、VPUによってベクトル・メモリ(VMEM)に書き込まれ、DMAシステムによって読み取られる、VPU設定フォーマットを示す表である。 本開示のいくつかの実施例による、VPUを使用してDMAシステムを設定する方法の流れ図である。 本開示のいくつかの実施例による、プログラム可能なビジョン・アクセラレータ(PVA)の巡回冗長検査(CRC:cyclic redundancy check)計算を実行する、内蔵自己テスト(BIST)システムの図である。 本開示のいくつかの実施例による、PVAの並列チャネルCRC計算のための、BISTシステムの図である。 本開示のいくつかの実施例による、PVAでの恒久的な障害を検出するための、BISTを実行する方法の流れ図である。 本開示のいくつかの実施例による、例示的な自律型車両の図である。 本開示のいくつかの実施例による、図13Aの例示的な自律型車両の、カメラ位置及び視野の実例の図である。 本開示のいくつかの実施例による、図13Aの例示的な自律型車両の、例示的なシステム・アーキテクチャのブロック図である。 本開示のいくつかの実施例による、クラウド・ベースのサーバと図13Aの例示的な自律型車両との間で通信するシステムの図である。 本開示のいくつかの実施例を実施する際に使用するのに好適な、例示的なコンピュータ処理デバイスのブロック図である。 本開示のいくつかの実施例を実施する際に使用するのに好適な、例示的なデータ・センタのブロック図である。
ベクトル処理ユニット(VPU)、ダイレクト・メモリ・アクセス(DMA)コントローラ、及びハードウェア・アクセラレータ(たとえば、VPU及びDMAの1つ又は複数のペアを含むPVAなどの、プログラム可能なビジョン・アクセラレータ(PVA))などの、システム・オン・チップ(SoC)の様々な構成要素に関する、システム及び方法が開示される。たとえば、本開示の様々な実施例では、PVAには、1つ又は複数のDMAシステム、並びにR5プロセッサ、ARMプロセッサ、CPU、及び/又は類似のものなどの、1つ又は複数の処理コントローラ(又は制御プロセッサ)を使用して制御される、1つ又は複数のVPUが含まれ得る。SoCの様々な構成要素を含む本開示では、例示的な自律型車両1300(或いは、本明細書では「車両1300」又は「自我車両1300」と呼ばれ、その実例が、図13A~図13Dに関連して説明される)に関連して説明され得るが、これは限定することを意図するものではない。たとえば、本明細書で説明されるシステム及び方法は、非自律型車両、半自律型車両(たとえば、1つ又は複数の高度運転者支援システム(ADAS:advanced driver assistance system)における)、操縦式及び非操縦式ロボット若しくはロボットのプラットフォーム、倉庫車両、オフロード車両、1台若しくは複数台のトレーラに連結された車両、飛行船、ボート、シャトル、緊急対応車両、オートバイ、電気若しくは電動自転車、航空機、建設車両、水中クラフト、ドローン、並びに/又は他の車両タイプで使用され得るが、これらに限定されるものではない。加えて、本開示は、コンピュータ・ビジョン、機械学習、人工知能、画像処理、及び/又は類似のものに関連して説明され得るが、これは限定することを意図するものではなく、本明細書で説明されるシステム及び方法は、拡張現実、仮想現実、混合現実、ロボット工学、セキュリティ及び監視、自律型又は半自律型機械アプリケーション、並びに/或いはベクトル処理ユニット(VPU)、ダイレクト・メモリ・アクセス(DMA)システム、命令セット・アーキテクチャ(ISA)、プログラム可能なビジョン・アクセラレータ(PVA)、分離式アクセラレータ、分離式ルックアップ・テーブル、ハードウェア・シーケンサ、単一入力複数データ(SIMD)アーキテクチャ、及び/又はSoCの他の1つ若しくは複数の構成要素が使用され得る、他の任意の技術スペースで使用され得る。さらに、本明細書で説明される構成要素及び関連するプロセスは、SoCに関して説明され得るが、これは限定することを意図するものではなく、この構成要素は、独立型の構成要素として、システムの個別の構成要素として、及び/又はSoC上に統合された構成要素として実装され得る。いくつかの実施例では、本開示のシステム、構成要素、特徴、機能、及び/又は方法は、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/又は図15の例示的なデータ・センタ1500に統合され得る。
異常検出のための最小/最大ハードウェア収集器
たとえば、コンピュータ・ビジョンのアプリケーションにおいて、また特に、安全性が重要なビジョン・アプリケーションにおいて、中間結果のダイナミック・レンジを計算することは、重要なタスクである。たとえば、中間計算でノイズ又はエラーを検出するために、値の既知又は予想されるダイナミック・レンジの値を使用して、この範囲外にある値を識別することができる。かかる実例では、値が、既知又は予想されるダイナミック・レンジ外にある場合、この値は、ノイズ、エラー、及び/又は別の問題に相当するものとして、フラグが立てられ得る。したがって、データの異常を検出するために、中間結果の最小値(最小)及び最大値(最大)を収集することが望ましい場合がある。実際には、この異常は、イメージ・センサのノイズ、アルゴリズムのコーナ・ケース、又はメモリ若しくは相互接続でのデータ破損によって引き起こされる可能性があるが、これらに限定されるものではない。これらの問題を考慮して、このデータの異常値を検出するために、最小値/最大値の収集は効果的な方法である。最小/最大は、特定のアルゴリズムでも使用される。
特定の実例では、自立型車両のアプリケーションにおいて、無限大又は数値でないなど、実行時の例外が、無効な値になるか、又はエラーを生じさせ、障害か、さもなければ望ましからざる結果を引き起こす可能性がある。これを考慮して、自立型車両プラットフォームの一部として実行されるアルゴリズムは、評価され、処理中に得られる可能性のある値、すなわち中間値又はその他の、範囲が判断され得る。値の範囲が既知になると、実際に計算された値が既知の範囲と比較され、最小又は最大閾値外の値が、エラーとして、フラグを立てられ得る。エラーがフラグを立てられた場合、所与の反復に関してデータを無視する、問題を識別して修正するなど、処理の変更が実行され得る。このようにして、起こり得る実行時の例外は、自律型車両が考慮し、依拠はしないので、実行時の例外は許されない。
別の実例として、最小/最大収集を特定のアルゴリズムで使用して、中間結果を特定の数値範囲に正規化し、処理、たとえば、ブロック浮動小数点の精度をより高めることができる。この正規化プロセスには、配列の最小値及び/又は最大値を収集する、ダイナミック・レンジ収集ステップと、配列にスケーリング・ファクタを適用する調整ステップとが含まれ得る。しかし、従来のプロセスでは、最小/最大値を収集するには、すべての値をメモリに書き出し、次いで、値を最小/最大について分析し、スケーリングするよう調整する必要がある。
したがって、最小/最大を評価するこうした従来の手法は、ソフトウェアで実行され、追加の処理サイクルを必要とする。たとえば、アルゴリズム自体が稼働して値を計算することができ、次いでソフトウェアが実行されて最小値/最大値を判断し、最小/最大を値の既知の範囲と比較して、異常を識別することができる。このソフトウェアでは、中間結果の配列の要素を読み取り、次いで最小/最大演算を実行する、追加の命令を実行する必要がある。その結果、アルゴリズムが完了するまで実行され、次いで、アルゴリズムの出力の最小/最大を計算する追加のプロセスが実行されるので、異常を検出するためのシステムの実行時間が長くなる。これにより、最小値/最大値が計算されて閾値と比較されるまで、下流の処理が遅延し得るか、又は最小/最大の評価が行われている間に、下流のタスクが、エラーを含むデータの計算を実行開始する可能性がある。これにより、この追加サイクルが異常データを識別するために実行されるので、実行時間が長くなるだけでなく、システムの処理要件及びエネルギー消費量も増加する。
図1Aを参照すると、図1Aは、本開示のいくつかの実施例による、最小/最大収集のための例示的なプロセッサ・アーキテクチャ100である。本明細書で説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行される、本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能が、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、アーキテクチャ100には、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/又は図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/又は機能が含まれ得る。
本明細書で説明されているような従来の最小/最大評価プロセスの欠陥を考慮して、本開示には、ハードウェアを使用する最小/最大収集のシステム及び方法が含まれる。たとえば、計算の際に、計算した値が、メモリ106、たとえばローカル・メモリに書き出され、同じアルゴリズム又は別のアルゴリズム内の下流の計算に使用され得る。実行時間及び処理を減らすために、最小/最大収集ハードウェア(たとえば、最小/最大収集器104)を使用して、たとえば、値がメモリ106から読み出されるのを待ち、次いで最小値/最大値を分析するのではなく、最小値/最大値がメモリ106に書き出される前又は書き出されるときに、最小値/最大値を取り込むことができる。たとえば、イネーブル・ビットを使用して、最小/最大収集器104の最小/最大収集機能をイネーブルすることができ、最小/最大収集器104は、イネーブルされると、プロセッサ102を使用して値が計算され、メモリ106に書き出されるときに(たとえば、メモリ106に記憶する前、又はメモリ106に記憶すると同時に)、最小値/最大値を更新することができる。実施例では、イネーブル・ビットは、最小/最大収集器104が、特定のタイプの配列の最小/最大を収集するよう設定されるように、計算されている配列のタイプ、たとえば、符号付き又は符号なしを、示すことができる。たとえば、イネーブル・ビット又は別のタイプの制御フィーチャを使用して、最小/最大収集器104をディスエーブルし、且つ/又は符号なし最小値/最大値を収集するか、若しくは符号付き最小値/最大値を収集するよう、最小/最大収集器104を設定することができる。データをストアするデータ・パスには、最小値/最大値を更新又は維持するために、プロセッサ102を使用して計算され、レジスタ・ファイルに記憶されるように、値を読み取る、最小/最大収集器104の最小/最大収集論理機構が含まれ得る。
たとえば、演算中、現在の最小値及び/又は現在の最大値は、最小/最大収集器104内に維持され得、また現在の最小及び/又は現在の最大は、新しい、より小さい最小値及び/又は新しい、より大きい最大値がメモリ106に書き出されたときに、更新され得る。新しく計算された値が最小より大きく、且つ/又は最大より小さい場合、現在の最小及び/又は最大は、最小/最大収集器104によって維持され得る。このようにして、最小/最大収集器104は、各値が完全に計算全体にわたって計算されるときに、現在の最小値及び/又は最大値を維持することができる。所与の反復にわたる計算が完了すると、最小値/最大値は、最小/最大収集器104ですぐに使用可能となり、ソフトウェア及び/又はハードウェアを使用して、これらのストアされた値を、異常が存在するかどうかを判断するために実行される、特定のアルゴリズム又は計算に関連する最小及び/又は最大閾値と比較することができる。たとえば、収集された最小値/最大値を評価するために読み取ることを可能にする仕組みが含まれ得る。したがって、以前の手法と比較すると、アルゴリズムが完全に実行された後、最小値/最大値はすぐに使用可能なので、最小/最大を演算するための別のサイクルは不要である。さらに、実施例では、最小/最大収集器104(たとえば、ハードウェア及び/又は論理機構を含む)は、特定のデータ項目が、たとえば、レーンごとのストア・プレディケーションによってメモリ106へのストアが禁止されている場合に、最小/最大収集がその特定のデータ項目を除外することができるように、ストア・プレディケーションを認識することができる。たとえば、アドレス生成器からのアドレスがストア・プレディケーション・フラグを含んでいる場合、計算された値は、メモリ106にストアすることだけでなく、最小/最大収集器104を更新することも取り消され得る。
いくつかの実施例では、最小/最大収集器104は、2016年4月28日に出願され、その全体が参照により本明細書に組み込まれる、米国特許出願第15/141,703号で説明されているアドレス生成器などのアドレス生成器を含む、システムのフィーチャとして実装され得る。アドレス生成器は、ベクトル処理ユニット(VPU)、中央処理ユニット(CPU:central processing unit)、グラフィックス処理ユニット(GPU:graphics processing unit)、デジタル信号プロセッサ(DSP:digital signal processor)、データ処理ユニット(DPU:data processing unit)、及び/又は別の処理ユニット・タイプ(図13A~図13D、図14、及び/又は図15に関して説明されているものなど)など、任意のタイプのプロセッサ又は他の処理ユニットに含まれ得る。いくつかの実施例では、1つ又は複数のVPUが、プログラム可能なビジョン・アクセラレータ(PVA)に、及び/又はシステム・オン・チップ(SoC)の一部として含まれ得る。
非限定的な実例として、特定のセンサ・タイプ又はアルゴリズムの入力は、16ビット単位に制限され得る。この特定のセンサ及び/又はアルゴリズムのダイナミック・レンジを判断するために、センサ入力を処理するアルゴリズムに関連する演算が評価され得る。かかる実例では、最初の演算が2つの16ビットの数値を加算することであると仮定すると、最初の中間結果は17ビットの数値となる。次いで、17ビットの数値に5ビットの数値を掛けて、22ビットの数値を生成することができる。これがアルゴリズムの終わりである場合、出力が22ビットを超えてはならないと判断され得る。同様に、最小値が評価され得る。したがって、展開中に、最小値/最大値がこの既知の範囲(たとえば22ビット)外となる場合、出力にフラグが立てられ得る。
いくつかの実施例では、ストア・データのパス(たとえば、プロセッサ102とメモリ106との間)には、メモリ106にストアされた値を、ある上限と下限との間若しくは閾値にするか、又は何らかの特定の規則に基づいて丸める、飽和及び/又は丸め論理機構108が含まれ得る。したがって、従来の手法では、最小/最大の評価は、飽和及び/又は丸めの後に行われ得る。異常が存在する場合、飽和及び/又は丸めによって異常が隠される可能性がある、たとえば、低い値及び/又は高い値が、飽和論理機構が設定されている上限と下限との間で飽和している可能性があるので、こうした従来の手法では異常が検出されない場合がある。
しかし、特定の実施態様では、たとえば飽和した最小値/最大値に加えて、又は飽和した最小値/最大値の代わりに、飽和していない、丸められていない、又は絶対的な最小値/最大値が、価値があるか、又は望ましい場合がある。したがって、本開示の最小/最大収集器104は、異常検出で使用するために、生又は不飽和データから(たとえば、飽和/丸め論理機構108を使用して値が操作される前に)、最小値/最大値を収集することができる。実施例では、データの平均値、又はデータの平均絶対値の収集が実行され得る。平均値は、たとえば、要素を合計し、アドレス生成器の設定レジスタから合計を読み戻し、ストアされたデータ項目の数(アプリケーションが知っている可能性がある)で除算を実行することによって、計算され得る。このようにして、絶対値の最小/最大、値の合計、及び/又は絶対値の合計が、プロセッサのストア・データ・パスに追加され得、その結果得られた統計値の設定及び収集が、実行され得る。たとえば、アドレス生成器の設定フィーチャ・セットに追加され得るか、又は別個に管理され得る。いくつかの実施例では、最小/最大収集器104は、飽和、丸め、又は飽和/丸め論理機構108を使用する他の計算の前及び/又は後に、値を収集することができる。
ここで図1Bを参照すると、本明細書で説明される方法110の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法110はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法110は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。方法110は、図1Aのアーキテクチャ100に関して説明されているが、任意の1つのシステム又はシステムの任意の組合せによって実行され得、本明細書で説明されているものを含むが、これに限定されるものではない。
図1Bは、本開示のいくつかの実施例による、最小/最大収集方法110を示す流れ図である。方法110は、ブロックB102において、1つ又は複数の値を計算するステップを含む。たとえば、1つ又は複数のアルゴリズム、たとえば、ニューラル・ネットワーク、コンピュータ・ビジョン・アルゴリズム、フィルタ処理アルゴリズムなどを実行する場合、1つ又は複数の値が、プロセッサ102を使用して計算され得る。
方法110は、ブロックB104において、1つ又は複数の値のうちの値を、現在ストアされている最小値及び現在ストアされている最大値と比較するステップを含む。たとえば、最小/最大収集器104は、メモリ106にストアされるべき任意の数の値のうちの各値、たとえば、レジスタ・ファイルにある値を、現在ストアされている最小値及び現在ストアされている最大値(たとえば、現在、ハードウェアの最小/最大収集器104でストアされている)と、比較することができる。かかる実例では、値が計算され、値がメモリにストアされる前又は同時に、最小/最大収集器は、値を、現在ストアされている最小値及び/又は最大値と比較することができる。1つ又は複数の実施例では、最小/最大収集器は、1つ又は複数の値を計算するハードウェア・ユニットと、1つ又は複数の値をストアするメモリ・ユニットとの間の、データ・パスの途中に含まれ得る。
方法110は、ブロックB106において、値が、現在ストアされている最大値よりも大きい、又は現在ストアされている最小値よりも小さい、のいずれかであるかどうかを判断するステップを含む。たとえば、システム(たとえば、ハードウェア最小/最大収集器104)は、ブロックB104での比較に基づいて、メモリにストアされるべき各値が、現在ストアされている最大値よりも大きいか、又は現在ストアされている最小値よりも小さいかを、判断することができる。
方法110は、ブロックB108において、現在ストアされている最小値よりも小さい値に基づいて、現在ストアされている最小値をこの値に更新するステップを含む。たとえば、メモリにストアされるべき計算値が、ハードウェアの最小/最大収集器に現在ストアされている最小値より小さい場合、ハードウェアの最小/最大収集器は、現在ストアされている最小値を計算値に更新することができる。
方法110は、ブロックB110において、現在ストアされている最大値よりも大きい値に基づいて、現在ストアされている最大値をこの値に更新するステップを含む。たとえば、メモリにストアされるべき計算値が、ハードウェアの最小/最大収集器に現在ストアされている最大値より大きい場合、ハードウェアの最小/最大収集器は、現在ストアされている最大値を計算値に更新することができる。
このようにして、いくつかの数(たとえば、すべて)の値がストアされると、最小/最大が、最小/最大収集器の現在ストアされている値から最小/最大を読み出すことによってすぐに使用可能になるように、最小/最大は、値をストアしている間に動的に更新され得る。
自動ストア・プレディケーション
高いクロック・レートのプロセッサの中でも、一般的な実施態様は、プロセッサを複数のパイプラインのステージに設定することである。その結果、ローカル・メモリからレジスタをロードする命令が発行されてから、レジスタが別の命令を演算するのに使用可能となるまでの間に、レイテンシ、たとえば、ロードから使用するまでのレイテンシが生じる可能性がある。ロードから使用するまでレイテンシがあるにもかかわらず、高スループットを達成するために、プロセッサのコンパイラ及びアプリケーション開発では、ソフトウェア・パイプライン及び/又はループ展開が使用され得る。たとえば、ソフトウェア・パイプラインを使用して、ループの複数の反復の実行をオーバラップさせることができ、またループ展開を使用して、ループ本体の中身を何度も繰り返すことによって、ループ本体を拡張することができる。また、これらの技法により、スケジュール内のアイドル・サイクルがより少なく、理想的にはゼロになるように、ループの中身の複数の反復を同時に実行することが可能となり得る。ループ展開を実行する場合、コンパイラは、ループ相互作用の回数を展開ファクタで除算することができる。たとえば、コンパイラは、元の反復回数が展開ファクタの倍数であると仮定することができ、これにより、展開されるループは、同等の機能的挙動で実行され得る。かかる実例では、元の反復回数が60回で、ループが6倍で展開されるべき場合、展開されるループは、10回の反復で実行され得る。しかし、元のループの反復回数が64回で、通常の整数除算の場合、64/6も10になるため、ループが十分な回数実行されないことになり(たとえば、余りの4回の反復は実行され得ない)、展開後に異なるコードの挙動が生じ、アプリケーションで障害を引き起こす可能性がある。いくつかの技法では、反復回数を実際に、確実に展開ファクタの倍数にするために、アサーション・ステートメントが追加される。
ループ本体におけるステップ又は演算の集合は、狭い範囲の最適な又は所望の展開ファクタを有することができる。たとえば、展開ファクタは、様々なレイテンシによるギャップを埋めて最高性能を実現させるために、スケジューリングするループのコードの最小数のコピーで下限が定められ得、さらに、たとえば、余分なレジスタの溢流(register spilling)(スタックへの保存及びスタックからの復元)を引き起こし、スケジューリングが最適化されない可能性がある、レジスタ・ファイルの能力の限界により、スケジューリングする最大数のコピーで、上限が定められる得る。さらなる実例として、2のいくつかの累乗(たとえば、2、4、8など)の反復回数が可能となる、タイルの幅とタイルの高さとの組合せの選択が実行可能であることにより、2の累乗での展開が、多くのアプリケーションで受入可能である。しかし、実施例では、ループ本体はまた、最適に6回又は7回展開され得るが、4回又は8回での展開は、それほど効率的ではない可能性がある。いずれにせよ、最適なスケジューリングを実現させるためのループ展開により、反復回数に不都合な制限が生じる場合がある。したがって、この問題に対処するための従来の技法は、性能低下及びコード・サイズの増加を引き起こす場合がある。
たとえば、反復回数の制限は不都合なため、プログラマは、反復回数にかかる制限があってはならない場合に、2種類のループ、たとえば、「倍数」ループ及び「剰余」ループを書くことができる。実例として、以下の、説明に役立つ例示的なコード・セグメントは、下記を示している。コード1 - ループ展開なしのベクトル加算ループ。コード2 - 反復回数が6の倍数である場合にのみ機能し得る、6によるループ展開を伴う同じループ。コード3 - 任意の反復回数で機能する2種類ループの解決策であるが、剰余のループは展開されないため、より効率が低く、また追加のループ及び反復回数の算出により、コード・サイズもより大きくなる。
コード1
Figure 2023021912000002
コード2
Figure 2023021912000003
コード3
Figure 2023021912000004
本開示のベクトル処理ユニット(VPU)を使用して、コード1は、反復ごとに6サイクルを達成することができ、コード2は、反復ごとに1サイクルを達成することができ、コード3の性能は、反復回数によって異なり得る。反復回数(niter)が、niter=60(6の倍数であるため、剰余分は実行されない)の場合、コード3は、反復ごとに1.0サイクルを達成することができ、niter=64(剰余のループが4回実行される)の場合、コード3は平均して、反復ごとに1.3125サイクル(たとえば、(60*1+4*6)/64=84/64=1.3125)を達成することができる。
図2Aを参照すると、図2Aは、本開示のいくつかの実施例による、自動プレディケーション能力を有するアドレス生成ユニットを含む、プロセッサ202(VPUなど)を含む例示的なシステム200である。本明細書で説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。本明細書で説明される、エンティティによって実行される様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、プロセッサ202は、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/若しくは図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/若しくは機能に含まれ得るか、且つ/又はこれらを含むことができる。
本開示の実施例では、コード・セグメント内のロード及びストアは、プロセッサ202(たとえば、VPU)のアドレス生成器204を使用することができる。たとえば、各ロード及びストアにおいて、アドレス生成器(agen)の引数(agen_a,agen_b,agen_c)が、ロード/ストア関数に供給され得る。引数は、特定のロード及び/又はストア動作のアドレス算出に使用され得るパラメータ、たとえば、アドレス・ポインタ、反復回数、現在のループ変数値などを含む、アドレス生成器のレジスタを識別することができる。いくつかの実施例では、VPUは、各アドレス生成器のレジスタが、6つ(又は他の値)のアドレス指定の次元をサポートし、したがって6回(又は他の値)の反復回数及び6つ(又は他の値)のループ変数を含むよう設計され得る。
ループ展開を伴う反復回数の制限を考慮して、本開示のシステム及び方法には、アドレス生成器204によるストアの自動プレディケーション用論理機構(たとえば、プレディケーション・フラグ又はビット208)を有する、アドレス生成器204が含まれ得る。たとえば、プレディケーションを使用して、何かを実行するか(否か)などの、条件付き実行の指示を提供することができる。プレディケーション・ビット208の値(たとえば、ストアする場合は0、若しくはストアを止める場合は1、又はその逆)を使用して、命令が実行されるかどうかを示すことができる。実行は、実際の反復の実行を参照することはできないが、反復の実行によって得られた値がメモリにストアされるかどうかを参照することができる。したがって、実施例では、プレディケーション・フラグのために実行されていない命令が、実行はされているが、実行の結果により、メモリ206の状態を変化させることを止められているか又は妨げられている、命令又は反復を参照することができる。プレディケーションには、命令レベルのプレディケーション及びレーン・レベルのプレディケーションが含まれ得る。命令レベルのプレディケーションは、命令全体を実行する必要があるかどうかを示すために使用され得、一方レーン・レベルのプレディケーションは、データのどのレーンを実行する必要があるかどうかを示すために使用され得る。
いくつかの実施例では、ループ変数が反復回数をゼロにした後、その後のどんなストア命令の実行も自動的にプレディケーションがオフされて、メモリ206へのさらなる書込みを禁止する。このように、自動ストア・プレディケーションのフィーチャは、たとえば6の倍数(又は別の展開ファクタ)ではない反復回数を、次の6の倍数に切り上げて、6の倍数(又は別の展開ファクタ)ではない反復回数を変更しないことにより、コードを明確に書くことを可能にし得る。ファクタ6が使用されているが、これは限定することを意図するものではなく、本開示の範囲から逸脱することなく、任意の展開ファクタが使用され得る。下記のコード4には、自動ストア・プレディケーションを使用したベクトル加算の実例が含まれている。
コード4
Figure 2023021912000005
コード4は、元の反復回数(niter)が64回の場合、展開されたループを反復ごとに1.03125サイクル(たとえば、11×6/64=1.03125)で、11回実行することができる。展開ファクタの倍数である反復回数の制限を考慮する別のやり方は、ループでの必要なプレディケーション・フラグを算出し、ストア命令においてプレディケーション・フラグを供給することである。たとえば、下記に示すコード5は、プレディケーション・フラグ算出の例示的な実施態様を示している。
コード5
Figure 2023021912000006
コード5は、本開示のVPUで反復ごとに1.5サイクルにコンパイルされ得るので、自動プレディケーションには、ループで算出されたプレディケーションに勝る、性能上の利点が含まれ得る。実施例では、VPUには、7ウェイ超長命令語(VLIW:very long instruction word)の命令方式が含まれ得、プレディケーションの算出に必要なスカラ演算のために、サイクルごとに2つのスカラ・スロットが含まれ得る。ループに、反復ごとにより多くのベクトル演算がある場合、プレディケーションの算出が、使用可能なスロット内に収まり、性能劣化を引き起こし得ないように、十分なスカラ・スロットが含まれ得る。リアルタイムでプレディケーションを算出するのに性能への影響がない計算ループでも、自動プレディケーションを使用すると、依然としてコード・サイズ及びエネルギー消費における利点があり得る。
したがって、ソフトウェアを使用して、何回かの反復(たとえば、N1~N6)を設定することができ、ソフトウェアは、アドレス生成器ベースのロード/ストアの実行を、通常はループで生じさせることができる。アドレス生成器のハードウェアは、ループ変数(たとえば、変数I1~I6)を維持することができ、またアドレス・ポインタを適切に進めることができる。アドレス生成器ベースのロード/ストアが、事前設定された反復回数にわたって実行されたとき、アドレス・ポインタは、最後の有効なアドレスで動かなくなり得、自動プレディケーションをオフにして(たとえば、プレディケーション・フラグをセットすることにより)、後続のメモリへのストアを阻止することができる。したがって、アドレス生成器204には、「自動プレディケーション・オフ」の内部ブール状態が含まれ得、ループ変数反復論理機構は、自動プレディケーションがオフになることをサポートするよう設定され得る。たとえば、図2Bに関して、アドレス発生器が初期化されると、ループ変数I1~I6に加えて、パラメータ自動プレディケーション・オフ(「auto_pred_off」)(たとえば、プレディケーション・ビット208)の値が初期化又は「0」にリセットされ得る。ループ変数が、プログラミングされた反復回数をゼロにした後、auto_pred_offは、「1」に更新され得る。次いで、どの後続のストア命令の実行も、プレディケーション・ビットが「1」である結果として自動的にプレディケーションがオフされ得、メモリへのこれ以上の書込みが止められ得る。
図2Bの実例では、アドレス生成器の、レジスタN1~N6の反復回数は、N1=4、N2=2、N3=N4=N5=N6=1とプログラミングされ得る。したがって、プログラミングされた反復回数の合計は4*2*1*1*1*1=8であり得、その結果、図2Bに示されているシーケンスが実行され得る。図示されているように、初期状態及び続く7回の実行(たとえば、最初の8回の反復)は、auto_pred_offビット値0に対応することができ、8回目及び9回目の実行(たとえば、最後の2回の反復)は、auto_pred_offビット値1に対応する、したがって、9回目及び10回目の実行の結果がメモリにストアされるのを阻止することができる。
実際には、VPUは、同時に機能するいくつかの数の、たとえば8個、16個などのベクトル・ユニットを処理するよう設定され得、したがって、VPUは、配列が、ベクトル・ユニットの数の倍数であることを必要とし得る。配列がベクトル・ユニットの数の倍数である場合、このセット・アップは適切に機能する。しかし、一般的に、配列はベクトル単位の倍数ではない可能性があり(たとえば、同じサイズの配列に従ってデータが計算される保証がないので)、その結果、処理が常に同じサイズのバッチに対して実行されるように、配列がパディングされる。たとえば、残りの反復には値「0」がパディングされ得るが、これには、依然として、パディングされた値を処理するために、ソフトウェアでの追加のサイクルが必要となる。したがって、追加されたデータは無駄な計算となり、また、単一命令複数データ(SIMD)のソフトウェアでよく見られる問題であるが、ソフトウェアが複雑になるので、パディングは非効率的であり得る。したがって、この問題を考慮して、自動ストア・プレディケーションが使用され得る。
非限定的な実例では、16個のバッチが使用される場合、16個のうちの多くのバッチは配列から生成され得、残りの値は、プレディケーション・フラグを使用してプレディケーションがオフされた16個のバッチ内の残余又は残りのスペースと共に、最終バッチに含まれ得る。具体的な実例では、配列サイズが82の場合、16個の完全な5セットが生成され得、最後の反復に残りの2つの要素が含まれ得、他の14個は自動的にプレディケーションがオフされ得るため、14個の値でバッチをパディングする無駄な計算、及びパディングされたデータの不要な計算の実行が最小限に抑えられる。さらなる実例として、ベクトル処理の粒度に32の幅が含まれ、配列に100個の要素がある場合、3つの完全な32要素のベクトルが処理され得、残りの4つの要素は、32レーンのうちの4つで処理され得(たとえば、プレディケーション・フラグがオンになり得る)、他の28レーンは、プレディケーションがオフになり得る。このようにして、プログラマは、サンプル内のユニット数の倍数ではない配列を、ベクトル化することができ得る。たとえば、ハードウェアは、すべてのストアについて、実際にメモリに書き込む要素の数を計算し、この情報をストア・ユニットに通知することができる。したがって、パディングされた又は追加の要素に対して数学を実行し、ストアできる場合でも、この余分な計算及び記憶は非効率的である。これによって、余分な読取りが不要となり、パディングされた値からメモリへの計算値の書込みが行われない(たとえば、止められるか又は妨げられる)ように、プレディケーション・フラグがセットされ得る。この自動プレディケーションは、命令レベルで行われ得、さらにレーン・レベルのプレディケーションを実行するよう、ソフトウェアが追加され得る。
加えて、自動プレディケーションについて、アドレス生成器がいくつかの反復をプログラムすることができるので、追加情報は不要であり得、したがってアドレス生成器は、自動プレディケーションをサポートするためのメモリを有し、ストアのプレディケーション及びプレディケーション・オフを自動的に動かすためのソフトウェア命令が追加され得る。このように、ハードウェアは、最後の反復で、たとえばプレディケーションが、オフになっているか、さもなければ信号通知オフになっていることにより、いつ完全な結果をストアするか、又はいつ完全な結果より少ない結果をストアするかを判断することができ、これは、性能を維持しながらも、コストがゼロで実行され得る。ソフトウェアしか使用されない場合、プロセスには余分なサイクルが必要になり、したがってプロセスが遅くなる。
いくつかの実施例では、プレディケーションは、レーンごとのレベルで使用され得、その結果、これらの実施態様は、ループ展開ファクタの倍数ではない反復回数を使うことができるばかりでなく、ベクトル幅の倍数ではないどんな課題のサイズも効率的に扱われ得る。かかる実施例では、レーンごとのプレディケーションは、情報がリアルタイムで計算されるという利点を提供できるベクトル・レジスタを使用して駆動され得、ベクトル・レジスタを使用することにより、ベクトル・レジスタからスカラ・プレディケーション・レジスタにコピーし、次いでスカラ・プレディケーション・レジスタを使用することで、レーンごとにプレディケーション・フラグを使用する必要性がなくなるという、ショートカットが実現され得る。たとえば、レーンごとのプレディケーションは、レーンごとのプレディケーション情報がループで計算されるときに有益であり得る、ベクトル・レジスタによって実行され得、計算はベクトル化され得る。
たとえば、100を超える任意の値の999との置き換えなど、配列内の特定の値の置き換えが実行されるべき場合、コードは、下記のように書かれ得る。
Figure 2023021912000007
このコードは機能的には正しいものであり得るが、性能低下を引き起こす可能性がある。したがって、コードは、たとえば、以下のコードを組み込むことによって、レーンごとのプレディケーションでベクトル化され得る。
Figure 2023021912000008
プレディケーションの算出がこのようにベクトル化され、レーンごとのプレディケーションがスカラ・プレディケーション・レジスタを介してのみ伝達され得る場合、プレディケーション情報をベクトル・レジスタからスカラ・プレディケーション・レジスタにコピーする必要があるため、実行時間が長くなる。
しかし、下記のコードに示されているように、本明細書で説明されているベクトル・レジスタのフィーチャによって直接駆動されるレーンごとのプレディケーションを使用し、この実例では、ビットパッキングを実行して、ベクトル・レーン0からスカラ・レジスタにプレディケーション・マスクを移動させるよりも、優れた性能を実現させることができる。
Figure 2023021912000009
ここで図2Cを参照すると、本明細書で説明される方法220の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法220はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法220は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。方法220は、図2Aのシステム200に関して説明されているが、本明細書で説明されているものを含むが、これに限定されるものではない任意の1つのシステム又はシステムの任意の組合せによって実行され得る。
図2Cは、本開示のいくつかの実施例による、自動ストア・プレディケーションの方法220を示す流れ図である。方法220は、ブロックB202において、反復の総数を判断するステップを含む。たとえば、アドレス生成器204は、所与の命令に対して実行されるべき反復の総数を、判断することができる。
方法220は、ブロックB204において、反復の総数を、複数の反復のセットに分けるステップを含む。たとえば、アドレス生成器204は、ループの反復回数を含むループ本体を生成するために、展開ファクタで反復を分けることができる。
方法220は、ブロックB206において、複数の反復のセットのうちのある反復のセットが、複数の反復のセットのうちの他の反復のセットに対応する第2の反復回数よりも少ない、第1の反復回数を含むことを判断するステップを含み、たとえば、アドレス生成器204は、展開ファクタで反復を分けた後、ある反復のセットが、他のセットよりも少ない反復を含むことを、判断することができる。たとえば、展開ファクタが6で、反復回数が62回の場合、11セットの反復が存在し得る。すなわち、10セットが6回の反復を含み、1セットが2回の反復を含む。したがって、アドレス生成器204は、残りの2回の反復を含む反復のセットの、2回の反復が実行する必要があり、他の4回はプレディケーションをオフする必要があると判断することができる。
方法220は、ブロックB208において、反復のセットの実行中に、反復のセットの少なくとも1回の反復に対応する、プレディケーション・フラグを生成するステップを含む。たとえば、反復のセットが、他の反復のセットと同じ回数の反復の完全なセットを含まないと判断すると、アドレス生成器204は、プレディケーション・フラグをイネーブルして(プレディケーション・オフ・ビット208の値を変更する)、余りの反復の結果をメモリにストア又は書き込む必要があることを示すことができる。
方法220は、ブロックB210において、少なくとも部分的にプレディケーション・フラグに基づいて、反復のセットの少なくとも1つの反復に対応する値を、メモリに書き込むことを止めるステップを含む。たとえば、プレディケーション・フラグがセットされていることに基づいて、計算された値が、メモリに書き込まれるのが止められるか、又は計算され得る。
ベクトル・プロセッサ用に改善されたSIMDデータ・パス構成
従来の単一命令複数データ(SIMD)アーキテクチャでは、各SIMD処理ユニットは並列に、SIMDユニット自体のデータ・レーンで互いに独立して演算する。一部の機械では、各SIMD処理ユニットが、近傍の隣接物(たとえば、線形配列の処理ユニットのときの左の隣接物及び右の隣接物、又は2次元(2D:two-dimensional)配列又は処理ユニットの際の、北、南、東、及び西の隣接物)と、直接通信することが可能である。ただし、隣接するデータ・パス間だけの通信は制限があり、少なくない数の入力オペランドを必要とする演算の実施態様にはコストがかかる。一実例として、畳込みは、画像処理、コンピュータ・ビジョン、機械学習などにおける一般的な演算である。畳込み中に、非限定的な実例では、3つのデータ・オペランド及び3つの係数オペランドを必要とする、3タップの1次元(1D:one-dimensional)フィルタ処理など、様々なフィルタが、隣接するピクセルに施され得る。これらのオペランドをSIMDアーキテクチャのデータ・レーン間で共有できない場合、その特定のレーンの結果を作り出すには、6つのオペランドを各データ・レーンに持ってくる必要がある。これを考慮すると、いくつかの一般的な手法では、レジスタ・ファイルに複数の読取りポートを実装するが、これには、SIMDアーキテクチャ用の追加の表面積ばかりでなく、演算するための追加の電力も必要である。
従来のSIMDアーキテクチャの欠陥を考慮して、本開示のSIMDアーキテクチャは、グループとしての複数のレーンで構成される、ベクトル処理ユニット(VPU)などのプロセッサで、スライスを規定することにより、レーン間の通信を可能にし得る。非限定的な実例では、プロセッサにおいて、SIMDレーン構成には、たとえば、48ビット(拡張ワード)の8レーン、24ビット(拡張ハーフワード)の16レーン、又は12ビット(拡張バイト)の32レーンに分割され得る、384ビットのデータ・パスを含む階層的構成が含まれ得る。かかる実例では、各バイトは、4ビットだけ拡張され得る。個々のレーン上の通信の第1の層は、SIMDスライスと呼ばれる場合があり、(たとえば、これに限定されるものではないが)96ビット幅であり得、2つの拡張ワード・レーン(たとえば、2つの48ビット・レーン)、4つの拡張ハーフワード・レーン(たとえば、4つの24ビット・レーン)、又は8つの拡張バイト・レーン(たとえば、8つの12ビット・レーン)からなる。非限定的な実施例では、プロセッサ・データ・パス全体に4つのSIMDスライスが含まれ得、通信の第2の層は、4つ(又は他の数の)すべてのSIMDスライスとすべてのレーンとの間で、グローバルであり得る。このようにして、各スライスのレーン間でオペランドの共有が実現され得、これは、フィルタ処理、ドット積、ペイロードのソートなどの命令で、有用であり得る。SIMDアーキテクチャは、図13A~図13Dの例示的な自律型車両1300のプロセッサ、図14の例示的なコンピュータ処理デバイス1400、及び/又は図15の例示的なデータ・センタ1500などの、VPU又は他のプロセッサ・タイプに含まれ得る。
SIMDの命令セット・アーキテクチャ(ISA)は、SIMDアーキテクチャの物理的ルーティングにより、スライス内のいくつかの数(たとえば、8つ)のレーン間の共有を可能にし得る。たとえば、図3Aに示されているように、各スライス内で、32ビットのワード・データ・タイプ、16ビットのハーフワード・データ・タイプ、及び8ビットのバイト・データ・タイプ間の通信が可能であり得る。結果として、図3Bに示されているフィルタ処理演算などの実例では、4つの入力オペランド及び4つの係数がある場合、8ビット×8ビットの乗算及び累積がハーフワードで実行され得、係数は、相異なるレーンからのデータと共に共有され得る。本開示のSIMDアーキテクチャでは、わずか3つの入力オペランドを使用して実行できる、同じ計算を実行するのに、従来のSIMDアーキテクチャでは、各レーンは8つのオペランドすべてをロードする必要があろう。その結果、そして各読取りポートが、表面積及びエネルギー消費の増加に関連しているので、3つの読み取りポートだけで済ますことにより、かかる命令を実行するためのスペース及びエネルギーが節約される。演算中は、スライス内のレーン間で共有されるため、4つのアキュムレータ、たとえば0、1、2、及び3には、下記の計算結果が入力され得る。
ACC[0] += D[0] * C[0] + D[1] * C[1] + D[2] * C[2] + D[3] * C[3]
ACC[1] += D[1] * C[0] + D[2] * C[1] + D[3] * C[2] + D[4] * C[3]
ACC[2] += D[2] * C[0] + D[3] * C[1] + D[4] * C[2] + D[5] * C[3]
ACC[3] += D[3] * C[0] + D[4] * C[1] + D[5] * C[2] + D[6] * C[3]
例示されているように、たとえば、ACC[0]は、D[1]、D[2]、及びD[3]を含む、src1aの他のレーンにアクセスすることができ、またC[1]、C[2]、及びC[3]を含む、src2の他のレーンにもアクセスすることができる。同様に、他のアキュムレータ(ACC:accumulator)は、src1及びsrc2の様々なレーンにアクセスすることができる。レーン間の共有が制限されているか又は最小限である従来のベクトル・プロセッサでは、このタイプの演算は不可能であろう。これらの計算には、たとえば、各アキュムレータが、前のアキュムレータに対してスライディング・ウィンドウを動かした結果を含む、スライディング・ウィンドウ手法が含まれ得る。たとえば、第1のアキュムレータは、D[0]、D[1]、D[2]、及びD[3]に対して演算し、第2のアキュムレータは、D[1]、D[2]、D[3]、及びD[4]に対して演算し、以下同様である。各アキュムレータは、同じ係数C[0]、C[1]、C[2]、及びC[3]を使用する。これは、SIMDアーキテクチャのスライスのレーン間で共有される、物理的ルーティングのおかげで可能となる。
本開示のSIMDアーキテクチャの別の例示的な実施態様として、図3Cに関して、ベクトル乗算の演算におけるドット積が、レーン共有を使用して実行され得る。かかる実例では、2つのインデックス、たとえばD[0][0]は、データがどのレーンに属するか、及びデータが何の出力のセットに属するか、を示している。ドット積の計算では、各レーンは、独自のレーンからのデータ・オペランドだけを使用するが、係数はレーン間で共有される。したがって、各レーンからの出力は、ドット積演算中のある時点で、4つの係数すべてを使用することができる。演算中は、スライス内のレーン間で共有されるため、4つのアキュムレータ、たとえば0、1、2、及び3には、下記の計算結果が入力され得る。
ACC[0] += D[0][0] * C[0] + D[1][0] * C[1] + D[2][0] * C[2] + D[3][0] * C[3]
ACC[1] += D[0][1] * C[0] + D[1][1] * C[1] + D[2][1] * C[2] + D[3][1] * C[3]
ACC[2] += D[0][2] * C[0] + D[1][2] * C[1] + D[2][2] * C[2] + D[3][2] * C[3]
ACC[3] += D[0][3] * C[0] + D[1][3] * C[1] + D[2][3] * C[2] + D[3][3] * C[3]
本開示のSIMDアーキテクチャから恩恵を受けることができる別の例示的な演算として、図3Dの2ポイント・ソート演算が実行され得る。2ポイント・ソートでは、2つの値を使用してペイロードをソートする。この2ポイント・ソートは、スライス内のレーンのペア間の通信を利用し、たとえば、様々なコンピュータ・ビジョンのアプリケーションで有用である。たとえば、レーン0にはアイテム0のキーがあり、またレーン1には対応するペイロードがある、などで、ペイロードは、たとえば下記のコードのように、キー/ペイロードのペアごとに、キーの比較に従ってソートされ得る。
Figure 2023021912000010
ここで図3Eを参照すると、本明細書で説明される方法300の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法300はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法300は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。方法300は、本開示のSIMDアーキテクチャに関して説明されているが、本明細書で説明されているものを含むが、これに限定されるものではない任意の1つのシステム又はシステムの任意の組合せによって実行され得る。
図3Eは、本開示のいくつかの実施例による、SIMDアーキテクチャのレーンにわたって共有されるオペランドを使用して、出力を計算する方法300の流れ図を含む。方法300は、ブロックB302において、プロセッサのビット幅を、それぞれが第1のビット幅よりも小さい第2のビット幅を含む、複数のデータ・スライスに分割するステップを含み、複数のデータ・スライスのうちの各データ・スライスは、それぞれが第2のビット幅よりも小さい第3のビット幅を含む、複数のレーンを含む。たとえば、ベクトル・プロセッサは、いくつかの数(たとえば、4つ)のスライスに分割され得、各スライスには、いくつかの数のレーンが含まれ得る。
方法300は、ブロックB304において、複数のレーンのうちの第1のレーンが、第1のベクトルの第1のオペランドを含み、複数のレーンのうちの第2のレーンが、第1のベクトルの第2のオペランドを含むように、第1のベクトルを第1のベクトル・レジスタにロードするステップを含む。たとえば、図3Bに関して、第1のベクトルの第1のデータ・オペランドD[0]が、第1のレーンにロードされ得、第1のベクトルに対応する第2のデータ・オペランドD[1]が、第2のレーンにロードされ得る。
方法300は、ブロックB306において、複数のレーンのうちの第1のレーンが、第2のベクトルの第3のオペランドを含み、複数のレーンのうちの第2のレーンが、第2のベクトルの第4のオペランドを含むように、第2のベクトルを第2のベクトル・レジスタにロードするステップを含む。たとえば、図3Bに関して、第3の第1の係数オペランドC[0]が、第1のレーンにロードされ得、第3のベクトルに対応する第2の係数オペランドC[1]が、第2のレーンにロードされ得る。
方法300は、ブロックB308において、命令を使用して、第1のオペランド、第2のオペランド、第3のオペランド、及び第4のオペランドに少なくとも部分的に基づいて、出力を計算するステップを含む。たとえば、図3Bに関して、第1のアキュムレータ(ACC[0])は、他のものに加えて、D[0]、D[1]、C[0]、及びC[1]の値が含まれる、ACC[0]+=D[0]*C[0]+D[1]*C[1]+D[2]*C[2]+D[3]*C[3]の計算結果を受信することができる。この計算は、各スライスのレーン間の内部共有及びルーティングのおかげで行われ得る。
方法300は、ブロックB310において、出力をレジスタにストアするステップを含む。たとえば、図3Bに関して、計算された出力は、アキュムレータ・レジスタACC[0]にストアされ得、次いで、メモリにストアされ得る。
ストライド・パラメータを用いた転置ロード及びストア動作
従来のベクトル単一命令多重データ(SIMD)プロセッサでは、ローカル・データ・メモリは、ベクトル処理幅に一致するようサイズ決めされ得る。たとえば、8ビットの32レーン、16ビットの16レーン、又は32ビットの8レーンを処理できる256ビットのベクトルSIMDプロセッサの場合、ローカル・データ・メモリには、たとえば、256ビットの幅のメモリ又は512ビットの幅(たとえば、処理ビット幅の2倍の幅)のメモリが含まれ得る。かかる実例では、ローカル・データ・メモリは、全幅のメモリ・ワードを有するただ1つのメモリ・バンクとして構成される。しかし、全幅のメモリ・ワードのただ1つのバンクを有するワイド・ベクトルSIMDプロセッサは、特にメモリ・アクセスの位置がずれている場合に、非効率的であり得る。たとえば、バイト・アドレスが4から67である、16要素の32ビット配列について配列をロードするために、プロセッサは、2回のメモリ読取り、たとえば、1つの読取りアドレス0から63(現在の演算には必要のないデータを含むアドレス0から3を含む)及び2つ目の読取りアドレス64から127(現在の演算には必要のないデータを含むアドレス68から127を含む)のメモリ読取りを必要とし得る。したがって、本開示のバンク構成のメモリ・アーキテクチャがなければ、アクセス・パターンは、複数回のロード又はストアによって達成される場合があり、その結果、計算カーネルの速度が低下し、性能が低下し、且つ電力消費が増加する可能性がある。
これを考慮して、その代わりに、ただ1つのワイド・メモリ・バンクが、16ビットのメモリ・バンク(たとえば、クロック・サイクル当たり512ビットのメモリ帯域幅を提供する、32バンクの16ビット・メモリ)など、複数のメモリ・バンクとして構成され得る。このようにして、読取り及び/又は書込み動作は、任意の16ビットの位置合わせの範囲内で行われ、これにより、上記の実例で説明されたような、余分な読取り/書込み動作の量を減らすことができる。かかるメモリ構成では、アドレス4から67の読取りに必要なメモリの読取りはただ1回だけであり得る。より小さな個々のメモリ・バンクを含むメモリ・バンク構成に加えて、転置ロード及び/又はストア機能が実装され得る。たとえば、レーン・オフセット・パラメータKを使用して、メモリの後続の各レーンに適用される、行アドレスのオフセットを規定することができる。レーン・サイズは、データ要素のサイズ、たとえば8ビット、16ビット、32ビットなどに対応することができる。2D配列が、W*K+1個の要素のライン・ピッチでメモリにストアされている場合、ずらされたアクセス・パターンは、垂直パターンに変換され得、ここでKは、オフセット・パラメータであり、Wは、64/レーン・サイズ(又はデータ要素のサイズ)である。たとえば、32ビットのデータ要素では、ライン・ピッチは16*K+1となり得る。いくつかの実施例では、SIMDプロセッサは、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/若しくは図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/若しくは機能のうちの1つの構成要素として含まれ得るか、且つ/又はこれらを含むことができる。
実例として、図4Aに関して、表400には、転置ロードの論理図、及び256ビットを超える17のライン・ピッチを有する転置ロードのメモリ・バンクの図の例示が含まれ得る。メモリ・バンクは、メモリ・バンクの図で18個の個別の16ビット・バンクで終了しているが、これは、例示を目的としているにすぎない。たとえば、メモリ・バンクは、たとえば、各メモリ・バンクが16ビット幅であり得る場合、合計256ビット、合計512ビット、又は他のいくつかの数の合計ビットであり得る。17のライン・ピッチの転置されたロードを使用するメモリ・バンクの図では、配列の強調表示された値のそれぞれを取得するために、ただ1回のロード動作が実行され得る。
この技法を使用する転置ロードは、多くの演算に有益であるが、一部のコンピュータ・ビジョン・アルゴリズムなどの特定のアルゴリズムは、図4Aに関して説明された転置ロード技法を用いても、ただ1回の読取り及び/又は書込みでは達成できないデータ・パターンへのアクセスが必要な場合がある。実例として、高さ16の垂直ベクトルをロードするのではなく、高さ8×2要素幅のサブマトリックス、高さ4×4要素幅のマトリックス、又は別のマトリックス若しくはサブマトリックスのサイズのロードが必要な場合がある、インスタンスがあり得る。ドット積演算では、たとえば累積が、1度に16ビットずつ、16要素の2行に向けられ得、したがってストアするときに、2行が1回のメモリ書込みトランザクションとして書き出され得るような、適切なライン・ピッチのT16転置ストアのオプションが望ましい場合がある。これを考慮して、ストライド・パラメータが、転置ロード及び/又はストアで使用され得る。いくつかの実施例では、ストライド・パラメータには、T2、T4、T8、T32などと呼ばれ得る、2、4、8、32などのストライドなど、2の累乗のストライド(これは、制限することを意図するものではないが)が含まれ得る。ストライド・パラメータを用いた様々な転置ロードの実例が、転置ロードの論理図及びメモリ・バンクの図を含む図4Bの表410に例示されている。図4Bに反映された図4Aの実例には、ストライド・パラメータ1が含まれているが、他のストライド・パラメータは2の倍数である。たとえば、ライン・ピッチが18のT2では、ただ1回のロード・トランザクションを使用して値のそれぞれを取得できるように、2要素幅×高さ8のマトリックスを転置ロードとしてストアすることが可能である。同様に、ライン・ピッチが20でストライドが4のT4では、ただ1回のロード・トランザクションを使用して値のそれぞれを取得できるように、4要素幅×高さ4のマトリックスがストアされ得、以下同様である。ロード・トランザクションとして説明されているが、このタイプのフォーマットは、転置及びストライド・パラメータに従ってデータをメモリにストアする、ストア・トランザクションにも同様に使用され得る。
かかる実例では、ライン・ピッチの制約は、ストライドに応じて調整され得る。ワード・タイプTの転置アクセスでは、ライン・ピッチは16K+1であり得、ワード・タイプT2の転置アクセスでは(たとえば、ストライド2では)、ライン・ピッチは16K+2であり得、ワード・タイプT4の転置アクセスでは(たとえば、ストライド4では)、ライン・ピッチは16K+4であり得、以下同様である。したがって、ライン・ピッチは16K+ストライド値、又は16K+1+(T-1)に等しくなり得、ここで、Tはストライド・パラメータである。
演算中、VPUのVMEMのアーキテクチャ及びVPUの命令セット・アーキテクチャ(ISA)は、データの読取り又は書込みが、ただ1回の読取り動作で論理図の列に構成されることを可能にするために、ストライド・パラメータの有無にかかわらず、転置ロード及び/又はストア動作を実行するよう設定され得る。たとえば、ISAは、書込みタイプ(たとえば、ストライド・パラメータの有無にかかわらず、転置書込み動作)、ライン・ピッチの値(たとえば、16*K+1のKの値)、及び/又はストライド・パラメータ値の指示からデータを読み取るか又は指示へデータを書き込むために(たとえば、レジスタ・ファイルからデータを読み取るか又は書き込むために)、開始アドレスを示す情報を受信するよう設定され得る。値16は、特定の実施態様のデータ要素の数に対応するが、値16(又はW)は、様々な実施例において異なる場合があることに留意されたい。したがって、ISAは、転置書込み動作に従ってデータをメモリに書き込むときに、VMEMに書き込む開始アドレス、ライン・ピッチ、及び/又はストライド・パラメータを受信することができる。結果として、値を書き込むときに、値を単一のメモリ・バンクの、データのただ1つの列に書き出すのではなく、データは、たとえば図4A及び図4Bに例示されているように、転置又はオフセットに従って書き出され得る。ストライド・パラメータが使用される場合、ストライドの最初の値が、続いてストライドに対応する数の次の要素がメモリに書き込まれ得、次いで、値のそれぞれがただ1つのサイクルでメモリに書き込まれ得るように、次の値のセットをメモリ・バンクに書き込むのに、ライン・ピッチが適用され得る。同様に、読取り動作中に、データが転置ストアに従って構成又は書き出されている場合、ISAは、開始アドレス、ロード・タイプ(たとえば、ストライド・パラメータの有無にかかわらず、転置ロード)、ライン・ピッチの値(たとえば、Kの値)、及びストライド・パラメータ値(たとえば、バイト、ハーフワードなどのデータ・タイプのインジケータ)を受信することができる。ISAは、次いで、ただ1つの読取りサイクルでデータの1つの列(又は複数の列)を取得するために、転置ロード命令(及び/又はストライド・パラメータ)に従って、様々なメモリ・バンクからデータにアクセスすることができる。このようにして、各メモリ・バンクから1つの要素を取得することにより、ただ1回の読取り動作によって、シングル・ベクトルが戻され得る。
ここで図4C~図4Dを参照すると、本明細書で説明される方法420及び430の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法420及び430はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法420及び430は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。方法420及び430は、本開示のSIMDアーキテクチャに関して説明されているが、本明細書で説明されているものを含むが、これに限定されるものではない任意の1つのシステム又はシステムの任意の組合せによって実行され得る。
図4Cは、本開示のいくつかの実施例による、ストライド・パラメータを使用して転置ストア動作を設定する方法420の流れ図を含む。方法420は、ブロックB402において、マトリックスの大きさを判断するステップを含む。たとえば、マトリックスの幅が判断され得る。
方法420は、ブロックB404において、大きさに基づいて、マトリックスをストアするためのストライド・パラメータ及びライン・ピッチを判断するステップを含む。たとえば、ライン・ピッチは、16K+ストライド値を使用して判断され得、ストライド値は、マトリックスの幅に基づいて判断され得る。
方法420は、ブロックB406において、ストライド・パラメータ及びライン・ピッチを使用して、マトリックスの値をメモリにストアするステップを含む。たとえば、ライン・ピッチ及びストライドが判断されると、メモリからマトリックスの値を読み取るときに、ライン・ピッチ及びストライド・パラメータ値がバンクの競合をもたらすことのないように、マトリックスの値がメモリにストアされ得る。
ここで図4Dを参照すると、図4Dは、本開示のいくつかの実施例による、ストライド・パラメータを使用して転置ストア動作を設定する方法430の流れ図を含む。方法430は、ブロックB408において、複数のメモリ・バンクのうちの1つのメモリ・バンク内の、ライン・ピッチ及び開始メモリ・アドレスを表すデータを受信するステップを含み、開始メモリ・アドレスは、配列の列に対応する、複数の要素のうちの1つの要素に対応する。
方法430は、ブロックB410において、ただ1回の読取り動作で、複数のメモリ・バンクから複数の要素を読み取るステップを含み、複数の要素のうちの各要素は、少なくとも部分的にライン・ピッチに基づいて、複数のメモリ・バンクのうちのそれぞれのメモリ・バンクから読み取られる。
ただ1つの命令での、並べ替え(permute)及びゼロ挿入を含むロード
従来のプロセッサ命令セットでは、ロード命令は、何らかのインデックスづけ計算によってメモリ・アドレスを形成し、ローカル・メモリから要求されたメモリ・データを読み取り、メモリ・データをレジスタに置くことができる。アプリケーションで追加のデータ操作が必要な場合、追加の命令を使用して、レジスタ内のメモリ・データに対して演算することができる。場合によっては、データ演算に、単純なデータ再構成が含まれ得る。従来のプロセッサでは、レジスタ・ファイルでの、この単純なデータ操作でさえ、追加の命令が必要であり、そうするとレイテンシが増える。たとえば、従来のシステムでは、データをロードし、ロードされたデータに対して置換を実行し、次いで再構成されたデータを使用して1つ又は演算を実行することができる。このデータを再構成する能力によってロード命令が強化されると、処理時間がいくらか節約され得、計算カーネルがより高い性能及びより低い電力消費で実行され得る。
これらの欠点を考慮して、本開示のシステム及び方法は、ローカル・メモリにメモリ・アドレスと共に並べ替えパターンを送信する、並べ替え命令を含むロードを追加する。その結果、位置がずれているロードを扱うために使用される、既存のデータのルーティング及び多重化を使用して、大量の追加の論理機構なしに、置換を実行することができる。さもなければ費やされるはずである命令、たとえば、ダブル・ベクトル入力及びダブル・ベクトル出力の並べ替えを実行するのに用いられる、5つの命令を節約することに加えて、並べ替え演算の全体的なレイテンシが低減され得る。たとえば、ロードから使用するまでのレイテンシ及び計算のレイテンシ(たとえば、置換を実行するため)ではなく、ロードから使用するまでのレイテンシが、唯一のレイテンシである。いくつかの実施例では、本明細書で説明される並べ替え及び/又はゼロ挿入を含むロードは、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/若しくは図15の例示的なデータ・センタ1500の構成要素、特徴、及び/若しくは機能に含まれ得るか又はそれらと同様であり得る。
したがって、置換フィーチャを含むロードは、メモリからロードされたデータを、演算するために、所望のフォーマットへ操作するのに有用であり得る。実例として、様々なフィルタ処理及びドット積命令に必要な係数データには、ロード及び置換によって実施され得る特定の繰返しパターンが含まれ得る。図3Cに関して説明されたようなフィルタ処理演算に関して、係数0、1、2、及び3は、たとえば、図5Aに例示されているように、ベクトル幅(たとえば、16ビット)にわたって繰り返され得る。かかる実例では、最初のレジスタへの書き出しはD[0]~D[15]で開始でき、次いで、スライディング・ウィンドウ4を使用して、次のレジスタをD[0]~D[19]で開始することができ、以下同様である。このフィルタ処理の実例では、係数C[0]~C[3]がベクトル幅にわたって繰り返され得るため、置換を含むロードは、データのすべてをロードし、次いで、置換を実行し、次いで、ベクトルをレジスタに書き込むのではなく、ロードから直接この順序で係数を書き込むときに有用であり得る。したがって、この実例では、係数データの置換パターンには、{0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3)が含まれ得る。この同じ実例では、データ・オペランドの置換パターンは、{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}であり得る。したがって、データ・オペランド及び係数オペランドは、順番に読み出されて、次いで計算するためにレジスタに書き込まれる前に並べ替えられるのではなく、置換順序に従って読み出され得る。図5Bに例示されているような別の実例として、フィルタ処理命令には、ダブル・ベクトルの係数オペランドが含まれ得、したがって、{0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7}などの置換パターンが含まれ得る。並べ替えパターンは、静的若しくは固定であってもよく、又は並べ替えパターンを柔軟且つ動的にすることが可能となるように、動作中にアルゴリズム的に計算されてもよい。パターンが、繰り返されるパターンである場合、繰り返される要素の第1のインスタンスがロードされ、次いで、複製され、実施例では次いで、SIMDユニットのSIMDレーンに書き出され得る。
場合によっては、メモリ・データの特定の部分をゼロの値にマスクすることが好ましい場合がある。たとえば、ソフトウェア開発における視覚化をより容易にするため、又は消費エネルギーをより少なくするために(たとえば、不規則なデータ値を残す場合と比較して)、未使用のエントリにゼロが挿入され得る。他の実例では、データの各チャンクの長さが固定されていない場合など、データ構造体のデータのチャンクを画定するために、ゼロが挿入され得る。かかる実例では、ゼロの値は、2つのデータ・チャンク間のギャップを示すことができる。一定サイズの画像パッチを処理するときに、たとえば、各画像パッチからいくつかの可変長情報(たとえば、特徴点の位置)が抽出される場合、ゼロを使用して、抽出された情報に対応しないデータの残りをパディングすることができる。
実際には、置換インデックスには通常、読み出される情報に、たとえば、0~31又は0~15の範囲においてそれぞれ、32個又は16個の要素が含まれ得る。読み出される情報にゼロの値を含めるために、デスティネーション・レジスタの対応するレーンにゼロを書き込むために、負のインデックス値が、並べ替え演算を含むロードに含まれ得る。したがって、書込み動作中に、たとえば、SIMDアーキテクチャの対応するレーンに、ゼロではなくて負の値が書き込まれ得る。
一実例として、幅30×高さ30の画像パッチは、1度に16個の連続したエントリを使用するベクトル演算によって処理され得る。幅30は16で割り切れないので、各行は、2回のベクトル演算で処理され、1回目は16エントリの完全なベクトル幅を処理し、2回目は14エントリの部分的なベクトル幅を処理し得る。かかる実例において、2回目の14エントリのベクトルのロードが、現在メモリに存在し得る不規則なデータ値の代わりに、最後の2つのベクトル・レーンを埋めるためにゼロでパディングされることは、有益であり得る。
1つ又は複数の実施例では、SIMDアーキテクチャの所望のレーン位置に、たとえば、さもなければこのレーン位置にゼロを書き込むのに必要な処理時間を節約するために、パディングされるゼロが挿入され得る。16レーンが存在する場合、通常の置換パターンは16レーンのインデックス、たとえば0~15で構成され得る。かかる実例では、{100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115}の値が存在し、置換パターンとして与えられるインデックスは{0,1,2,3,4,5,6,7,8,9,10,11,12,13,-1,-1}である場合、最終的にデスティネーション・レジスタにロードされる値は{100,101,102,103,104,105,106,107,108,109,110,111,112,113,0,0}となる。したがって、2つの-1の値は、負の値を含む置換パターンに基づいて、デスティネーション・レジスタで自動的に0に変換される。以前の手法では、-1、-1にはそれぞれ14、15が含まれ、メモリの14、15の値が、レジスタに書き出されることになる。しかしこれには、0の値を含む場合と比較して追加の処理時間が必要となる可能性がある、不規則な値が含まれ得る。
置換フィーチャを含むロードを実施するために、メモリ論理機構でのルーティング及び多重化、たとえば、位置合わせされていないメモリのロードを実行するために使用されるのと同様のルーティング及び論理機構が、使用され得る。たとえば、任意の16ビット・アドレスからの全メモリ幅(たとえば、32×16ビット)(又は任意の32ビット・アドレスからの16×32ビット・レーン)のロードをサポートするために、メモリ論理機構には、任意のデスティネーション・レジスタ・レーンにルーティングするために、メモリ・データの32レーンのいずれかを選択する、多重化論理機構が含まれ得る。たとえば、位置が合っていないメモリのロードでは、論理機構は、下記のように駆動され得る。
Figure 2023021912000011

実施例では、レーンの総数は、モジュロ演算子(%)を使用してラップ・アラウンドされ得る。したがって、たとえば、開始レーンがレーン3である場合、レーン3,4,5,・・・,31,0,1,2が、レジスタ・レーンへの出力として使用されることになる。
置換フィーチャを含むロードでは、この同じ論理機構が実質的に再利用され得るが、置換演算を実行するために、修正された論理機構が含まれ得る。修正された論理機構の実例が、下記に含まれる。
Figure 2023021912000012
一実例として、図5Cに関して、クロスバー510(たとえば、クロスバー・スイッチ)を備えたハードウェア構造体500(VPU、SIMDユニット、SoC、又は他のデバイス・タイプの一部として含まれ得る)を使用して、メモリ512の任意の位置からデータを取り出し、それぞれのマルチプレクサ(mux)514A~514Nを介して、SIMD内の任意のレーンにデータを駆動することができる。このようにして、16個の入力(又は他の幅のメモリ又はレジスタ)のいずれかを、16個の出力位置又はレーンのいずれかに書き込むことが可能であり得る。これは、位置が合っていないアクセスのときに役立つ場合があり、これによりロード動作は、任意のアドレスから開始し、次いで下流で整列され得る。たとえば、メモリ内のデータが位置2~18から読み取られる場合、データは2~18から読み出されるが、レーン0~16に位置合わせされ得る(たとえば、2がレーン0へ行き、3がレーン1へ行き、以下同様である)。これは、0、16、32などの16の倍数の位置でベクトルのロードを開始する必要がある、従来のシステムでは不可能であった。任意のメモリのインデックスからのデータが、図5Cのこの構造体内では、たとえばVPUのSIMDユニットの任意のレーンに出力され得るときに、置換も完了され得る。マルチプレクサ518を使用して、レーンごとに並べ替え制御を導入又は挿入し、開始位置(位置合わせされているか、又は位置がずれている場合がある)及び並べ替えパターンに基づいて、どのメモリ位置からデータを読み取るかを、クロスバー510のマルチプレクサ514に通知することができる。したがって、位置合わせされた位置から単にデータを引き出すのではなく、並べ替えパターンを使用して、各マルチプレクサ514が適切なデータをSIMDユニットのレーンのそれぞれに送信するように、メモリ読取り位置を更新することができる。加えて、マルチプレクサ516を使用して、並べ替えパターンに対して、負の値又はゼロ挿入を示す他の値(たとえば、負の値以外の値を使用して、ゼロ挿入が行われる場合)を含む、ゼロを挿入することができる。したがって、メモリ・アクセス位置がマルチプレクサ518からクロスバー510に送信され、メモリ・アクセスからの値がゼロ挿入のためにマルチプレクサ516に送信されると、並べ替えパターンの負の値に相当する値が、それぞれのSIMDレーン用の値をパディングするために、ゼロの値に変換され得る。図5Cには4セットのレーン、マルチプレクサ、及びメモリ・インデックスしか示されていないが、これは限定することを意図するものではなく、本開示の範囲から逸脱することなく任意の数のセットが含まれ得る。
図5Dは、ハードウェア・アーキテクチャ500の例示的な使用法を示している。たとえば、図5Dの例示は、以下の情報に基づき得る。
Figure 2023021912000013
加えて、以下のCのコードは、図5C及び図5Dのハードウェア・アーキテクチャの論理回路を表すことができる。
Figure 2023021912000014

したがって、図5Dの実例では、マルチプレクサ518のビット値1は、ロード並べ替えの値を選択する必要があることを示すことができ、これらの値{3,1,3,・・・,2}は、クロスバー510のそれぞれのマルチプレクサ514に伝送され得る。したがって、{103,101,103,・・・,102}の値は、メモリから読み出されてマルチプレクサ516に送信され得、並べ替えパターンには3番目の値に-1が含まれ得るので、103の値が、ゼロ挿入によって0に変換され得る。したがって、最終値{103,101,0,・・・,102}が、ベクトル・レジスタに読み戻され得る。
ここで図5Eを参照すると、本明細書で説明される方法550の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法550はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法550は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、方法550は、実例として、図5Cのハードウェア構造体に関して説明されている。しかし、この方法550は、追加的又は代替的に、本明細書に説明されているものを含むがこれに限定されるものではない、任意のシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図5Eは、本開示のいくつかの実施例による、並べ替え演算を含むロードを実行する方法550を示す流れ図である。方法550は、ブロックB502において、メモリからデータをロードする並べ替えパターンを判断するステップを含む。たとえば、並べ替えパターンは静的であってもよく、又は動的に計算されてもよい。並べ替えパターンは、位置合わせされた(たとえば、0から16又は0から32)、位置がずれている(たとえば、2から18)、繰り返す(たとえば、0,1,2,3,0,1,2,3,・・・以下同様)、及び/又は別のパターン・タイプであり得る。
方法550は、ブロックB504において、少なくとも部分的に並べ替えパターンに基づいて、複数のレーンのうちの各レーンのメモリ・アドレス位置を判断するを含む。たとえば、並べ替えパターンは、特定のレーン又はレジスタに向けたデータを、どのメモリ・アドレス位置からロードする必要があるかを示すことができる。並べ替えパターンは、並べ替えパターンに従って適切なメモリ・アドレスがクロスバー512に送信されるように、マルチプレクサ518を使用して実装され得る。
方法550は、ブロックB506において、メモリ・アドレス位置に少なくとも部分的に基づいて、複数のレーンのうちの各レーンに値をロードするステップを含む。たとえば、メモリ・アドレス位置に基づいて、クロスバー512におけるマルチプレクサ514は、1つ又は複数のベクトル・レジスタ内の1つ又は複数のレーンに書き込むために、メモリから対応する値を取得することができる。いくつかの実施例では、マルチプレクサ516はまた、並べ替えパターンの負の値(又はゼロでパディングすることを示す他の値)に関連する値を、ゼロに変換するために使用され得る。したがって、1つ又は複数の負の値が並べ替えパターンに含まれている場合、メモリからロードされた値は、ベクトル・レジスタに書き込まれる前に、ゼロに変換され得る。
方法550は、ブロックB508において、値及び少なくとも1つの命令を使用して、複数のレーンのうちの各レーン内で、1つ又は複数の演算を実行するステップを含む。たとえば、SIMDユニットのベクトル・レジスタ又は処理レーンが入力されると、1つ又は複数の演算、たとえば算術命令、論理命令、シフト/回転命令、ビット演算命令、比較命令、変換命令、定数生成命令、及び/又は類似のものが、1つ又は複数の処理レーンに対応する1つ又は複数の処理ユニットを使用して、実行され得る。
テーブル・ルックアップを実行する、ブレンディングを含む複数ポイント・ルックアップ
ベクトルSIMD計算する従来のプロセッサでは、ローカル・メモリに、ベクトルSIMDのビット幅と一致するビット幅が含まれ得る。結果として、こうしたプロセッサは、一般に、ビット幅に対応する読取り及び/又は書込みの位置合わせ及び粒度しか、サポートすることができない。しかし、テーブル・ルックアップは、たとえば、デジタル信号処理(DSP)、及び様々な非線形関数を実装するような、組込み環境のコンピュータ・ビジョンにおいて、一般的な技法である。たとえば、平方根、対数、正弦関数及び余弦関数では、テーブル・ルックアップを実行する必要があり得る。これらの機能を実行するために、入力空間が、1次元(1D)グリッドで均等にサンプリングされ得、出力が、これらの入力ポイントで1Dのテーブルに記録され得る。しかし、非線形関数がテーブル・ルックアップで実施される場合、テーブルのサイズ(たとえば、テーブルのエントリ数)と精度との間に、トレードオフが生じることが多い。大きなテーブル・サイズを必要とせずに精度を向上させるために、補間ルックアップが実行され得、線形補間では、2ポイントを小数インデックスの周囲でルックアップし、又は2次補間では、3ポイントを分数インデックスの周囲でルックアップする。
実例として、正弦関数がルックアップ・テーブルを使用して実施され、正弦の値が整数の度数で表にされる場合、table[0]=sin(0度)、table[1]=sin(1度)、table[2]=sin(2deg)であり、以下同様である。かかる実例では、評価がsin(1.7度)である場合、table[1]*0.3+table[2]*0.7として小数を使用して、2つの整数の度数のエントリ間で線形に補間が行われ得る。この実例では、table[2]である第2のエントリは、小数を重みとして受け取り、第1のエントリは1から小数を引いたものを受け取り、したがって、小数が1.0に、すなわち第2のエントリが対応する位置により近いほど、第2のエントリは一層大きく重みづけされる。
別の実例として、画像又は画像のパッチが再サンプリングされ得、これは、ある小数のピクセル座標の周囲の利用可能なピクセルをルックアップし、次いで、補間ルックアップを実行することを必要とし得る。かかる実例では、テーブルには、画像パッチが含まれ得、2次元であり得る。この場合、双1次補間を実行して、2次元で、それぞれ線形に補間することができる。実例として、位置Y=5.1、X=7.6でのパッチは、下記の計算に従って補間され得る。
(patch[5][7] * 0.4 + patch[5][8] * 0.6) * 0.9 + (patch[6][7] * 0.4 + patch[6][8] * 0.6) * 0.1
しかし、従来のプロセッサでこのタイプの補間ルックアップを実行すると、各テーブルの値ごとに個別のルックアップを実行する必要があるので、コストがかかる。このプロセスをスピード・アップするために、テーブルの相異なるインスタンスを使用して、同時に任意の数のルックアップを可能にするように、テーブルが複製され得る。たとえば、上記の実例では、5、6、7、及び8でパッチをルックアップする場合、4つのテーブルでの並列ルックアップを可能にするために、テーブルは、少なくとも4回複製され得る。たとえば、VPUなどのプロセッサが、32ウェイの並列処理をサポートしている場合、テーブルは、32回複製され得る。しかし、テーブルを複製するとサイクル当たりのスループットが向上し得る一方で、複製には追加のメモリ容量及び使用量も必要であり、特定の実施態様では使用できないか、又は最適ではない場合がある。
これを考慮して、本明細書で説明されるシステム及び方法は、2ポイント及び/又はツー・バイ・ツー(2×2)ポイントのルックアップ演算を使用して、メモリ空間を節約しながらも、スループットを高める(又は、たとえば、32ウェイ並列処理のスループットに一致させる)。たとえば、メモリ・バンクごとのアドレス・バス、並びに関連する論理機構及びルーティングを使用して、2ポイント又は2×2ポイント(たとえば、4ポイント)の並列ルックアップが、より少ないメモリ使用量で実行され得る。したがって、テーブルへのただ1回のルックアップで、2ポイント・ルックアップにおける2ポイント、又は2×2ポイント・ルックアップにおける4ポイントが得られ得る。これは、ハードウェアのセット・アップ、たとえば、バンク・アドレス、論理機構、ルーティングなど、及びバンクの競合なしに複数のデータを読み出すことを可能にする、メモリに記憶するパターンに基づいて、実現され得る。上記のような、これらのフィーチャがなければ、たとえば32ウェイの並列ルックアップを実現させるために、テーブルを32回複製する必要があろう。たとえば、この32ウェイの並列ルックアップは、下記のCのコードを使用して実行され得る。
Figure 2023021912000015
この実例では、ループのルックアップ部分は、2サイクルの間(ルックアップ及びブレンディングがそれぞれ、メモリ及びベクトルの数学スロット(math slot)で実行され、反復ごとに2サイクルにパイプラインされる)、サイクルごとに32回のルックアップを実行し、32個の出力を生成するよう補間され得る。したがって、全体にわたるルックアップ/補間は、1サイクル当たり16出力であり、テーブルを32回複製する必要がある。
さらなる実例として、図6Aに関して、インデックス・ベクトル{0,1,2,3,4,5,4,3,・・・}で1ポイントのルックアップを実行するための、16ウェイの並列テーブル構成が示されている。かかる実例では、従来のアーキテクチャ及びメモリ・レイアウト技法を使用して、各メモリ・バンクから2つのエントリを読み取るために、第1のルックアップ及び第2のルックアップを、順番に実行する必要があろう。たとえば、第1のメモリ・バンクT0には、ルックアップ演算で読み出されるべきT0[0]及びT0[1]の値が含まれるが、これらの値は両方とも同じメモリ・バンクT0(ただ1つの読取りポートだけを含み得る)にあるので、第1の値T0[0]が最初のパスで読み取られ、第2の値T0[1]が続いて起こる2回目のパスで読み取られる。かかるメモリ・レイアウトでは、同じメモリ・バンクで2回の読取りが行われると、バンクの競合が生じ、処理の遅延がもたらされ、且つ/又はアルゴリズム若しくは他の計算が間違って実行される可能性がある。
しかし、本開示のアーキテクチャを使用すると、同じ32回のルックアップに必要なテーブルの複製が、2ポイントのルックアップではわずか16回、又は2×2ポイントのルックアップではわずか8回であり得る。たとえば、2ポイントのルックアップでは、わずか16回のテーブルの複製により、クロック・サイクル当たり16個の出力の、同じ性能が実現され、したがって、メモリの占有領域が2分の1に低減され得る。命令の16ウェイ並列の変形例では、第1のエントリがシングル・ベクトルの下位に、第2のエントリがシングル・ベクトルの上位にある、ダブル・ベクトルを返すことができる。Cのコードでは、この16ウェイ並列ルックアップ及び補間は、下記のように表され得る。
Figure 2023021912000016
かかる実例では、ループのルックアップ及び補間の部分は、ただ1つのクロック・サイクルしか必要とせず(ルックアップ及びブレンディングがそれぞれ、メモリ及びベクトルの数学スロットで実行され、反復ごとに1サイクルにパイプラインされる)、16個の出力を生成するよう補間され得る。したがって、ルックアップ/補間は、1サイクル当たり16個の出力である。実例として、図6Bに関して、インデックス・ベクトル{0,1,2,3,4,5,4,3,・・・}で2ポイントのルックアップを実行するための、8ウェイ並列テーブル構成が示されている。かかる実例では、各メモリ・バンクT0、T1、T2などに、ルックアップ演算中に読み出されるべき値がただ1つしか含まれていないので、バンクの競合の可能性があるため、2回のパスのそれぞれで、8つの値しか読み出され得ない図6Aの実例とは違って、16個の値すべてが、ただ1回のパスで読み出され得る。これを行うために、実施例では、ルックアップのための命令には、インデックス、及びインデックスばかりでなく、インデックスに加えてさらに1つの位置も取得することを含む、パターンが含まれ得る。したがって、命令が、2ポイントのルックアップのための2つの値を読み取らせ、この値が、このフォーマットでルックアップ・テーブルに書き込まれ、バンクの競合なしに、このただ1回の読取りが実行されることを可能にし得る。
一実例として、ベクトル演算を実行するとき、VPUの各レーンは、メモリから取得されるピクセル値のセットを処理することができる。場合によっては、レーンが、同じメモリ・バンクからの複数の値を処理することがあり、これは、メモリ・バンクにただ1つの読取りポートしか含まれ得ないので、バンクが競合するという結果になり得る。したがって、本開示の方法及びシステムは、バンクの競合が起きないように、メモリ・バンクにわたって値を分散し、たとえば、VPUのただ1つの処理レーンの値のそれぞれが、ただ1つの読取りサイクルで、対応する各値にアクセスすることができる。
2Dの双1次補間ルックアップが実行される従来のシステムでは、テーブルの32回のコピーにより、クロック・サイクル当たり8個の出力の最適スループットを可能にする、4回のルックアップ(たとえば、2×2)が、出力ごとに必要である。2×2ポイントのルックアップでは、8回のテーブルの複製によって1サイクル当たり8個の出力を実現し(32回と比較して)、したがって、並列サブテーブルに必要なメモリの占有領域を4分の1に低減することができる。たとえば、2×2ポイントのルックアップでは、2Dテーブルの1つの行から2つのエントリが、次いで次の行から2つのエントリが、読み取られ得る。どんなメモリ・バンク内でのメモリ・バンクの競合をも回避するために、2Dテーブルのライン・ピッチは、m*k+2に制限され得、ここでmは、水平方向にストアされる各サブテーブルのエントリ数であり、kは、テーブルの1つの行にストアするのに十分な任意の整数である。8ウェイ並列16ビット・テーブルでは、m=32(16ビット・メモリ・ワード)/8(並列処理)=4である。2ウェイ並列32ビット・テーブルでは、m=16(32ビット・メモリ・ワード)/2(並列処理)=8である。
実例として、図6C~図6Dに関して、ライン・ピッチの制限を使用して、メモリの競合を回避することができる。かかる実例では、2×2ポイントのルックアップ用の2ウェイ並列ワード・タイプのテーブルが、ライン・ピッチ10で示されている。サブテーブル内の連続する要素の数(m)は8で、A[0][0・・・7]がサブテーブル内に連続して配置され、8k+2の式に準拠し、ここで、kは任意の整数であり得る。したがって、どのインデックス値を使用して開始する場合でも、取得されるべき2×2ポイントは、相異なるバンクに配置され得、これは、数学で保証される。たとえば、サブテーブルに対する2×2ポイントのバンク番号が、下記に概説されている。
Figure 2023021912000017

全体的に、サブテーブルに対する、index%m、(index+1)%m、(index+2)%m、(index+3)%mであるバンク番号での、2×2ルックアップによって取得されるべきエントリは4つある。m>=4である限り、バンクの競合は生じないはずである。図6C~図6Dの実例では、ルックアップには、ピクセルを行の主たる順序でストアする従来例として、Y、次いでXを使用する、(0,1)及び(1,3)の2Dインデックスが含まれ得る。図6Cには、2つの2Dテーブルの論理図が例示され、図6Dには、テーブルからの値のメモリ・レイアウト図が例示されている。論理図では、例示されているように、ルックアップは2×2であり、メモリ・レイアウト図は、これらの値のそれぞれが、ただ1つのサイクル又はパスで読み出され得るように、それぞれ相異なるメモリ・バンク(又は説明図の相異なる列)にある、4つのポイントを例示している。テーブルからの値は、このようにして、インデックス(たとえば、(0,1)及び(1,3))を使用する命令、及びメモリからただ1回のパスで値のそれぞれを読み取るための読取りパターンに基づいて、メモリにストアされ得る。したがって、このメモリ・レイアウト及び読取り命令を使用すると、サブテーブルごとに4つのエントリが、各サイクルで以下のフォーマットで返され得る。
Destination lower single vector: A[0][1], A[0][2], B[1][3], B[1][4], (rest filled with zero)
Destination higher single vector: A[1][1], A[1][2], B[2][3], B[2][4], (rest filled with zero)
図6Cでは、幅10要素×高さ3の2つの2Dテーブル、たとえば、Aテーブル及びBテーブルとして示されているが、これは限定することを意図するものではなく、テーブルは、実施例に応じて、任意の幅及び/又は高さであり得る。同様に、図6Dのメモリ・レイアウトには、幅16要素×高さ3のレイアウトが含まれているが、これは限定することを意図するものではなく、メモリの幅及び/又は高さは、実施例に応じて任意の設定であり得る。
画像パッチをサンプリングするときなどのいくつかの実施態様では、小数のピクセル間の補間が実行され得る。いくつかの実施例では、データを操作するための追加の命令なしにルックアップされた値を補間するために、インタリーブを含むベクトル水平ブレンディング(VHBlend_I)命令が実行され得、これには、レーンのペアの中でブレンディングするようデータをインタリーブする、水平ブレンディングが含まれ得る。たとえば、この命令によって、ルックアップ後の双1次補間が、同じループ内で実行され得る。この命令は、図6Eの表のレイアウトに従って、各レーンのペアを処理することができる。このようにして、Y0及びY1の計算は、下記のように計算され得る。
Y0 = x * (1 - alpha0) + y * alpha0
Y1 = z * (1 - alpha1) + w * alpha1
したがって、この命令は、レーンのペアxとyとの間、及びzとwとの間で、水平方向にブレンディングさせることができ、出力を、デスティネーション・レジスタ内で、インタリーブさせることができる。たとえば、以下のCのコード・セグメントを使用して、2×2ポイントのルックアップを使用した8ウェイ並列テーブルについての、最適な性能を実現させることができる。
Figure 2023021912000018
サブテーブルがA,B,・・・,Hと指定されている、この8ウェイ並列テーブル構成では、ループが、ルックアップ及び補間を実行することができ、反復ごとに16個の出力が得られる。かかる実例では、入力は、下記のように構成され得る。
Figure 2023021912000019

この命令の中間及び最終結果の例示的な説明図が、図6Fに示されており、これには、データのブレンディング及びインタリーブ・パターンを示す矢印が含まれている。
ここで図6Gを参照すると、本明細書で説明される方法600の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法600はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法600は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、方法600は、本明細書に説明されているものを含むがこれに限定されるものではない、任意の1つのシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図6Gは、本開示のいくつかの実施例による、複数ポイントのルックアップ(たとえば、図9A~図9Cに関して説明されるような、分離式ルックアップ・テーブル(DLUT)用アクセラレータでの、ただ1つのクロック・サイクルにおける)を実行する方法600を示す、流れ図である。方法600は、ブロックB602において、第1のメモリ・バンクの第1の物理アドレスの第1の値及び第2のメモリ・バンクの第2の物理アドレスの第2の値を含み、第1の値及び第2の値が、テーブルの論理メモリ図の同じ列に含まれるように、テーブルをメモリに複製するステップを含む。たとえば、テーブルは、システムのメモリ・アクセスの並列処理を利用するために、メモリに何回でも複製され得る。テーブルには、第1の論理アドレスの第1の値、及び第1の値と同じ列の第2の論理アドレスの第2の値が含まれ得、この設定でメモリにストアされると、2つの値が同じメモリ・バンクにストアされ得るので、バンクの競合を引き起こす場合がある。したがって、テーブルをメモリに複製するときに、書込み命令は、2つの値が同じサイクルで取得され得るように、第1の値を、隣り合う、たとえば別のメモリ・バンクの、第1の物理アドレスに、第2の値として書き込むことができる。
方法600は、ブロックB604で、メモリ内の第1の物理アドレスに対応する第1のインデックスを判断するステップを含む。たとえば、読取り動作は、値の読取りを開始する、メモリ内の第1の位置を示すインデックスを使用することができる。
方法600は、ブロックB606において、複数ポイントのルックアップに対応する読取り命令に少なくとも部分的に基づいて、ただ1つのサイクルの間に、第1の物理アドレスに位置する第1の値及び第2の物理アドレスの第2の値を読み取るステップを含む。たとえば、テーブルをメモリに複製するときに、テーブルは、同じ列又はテーブルにあるポイントのペア(たとえば、同じピクセル列の中のピクセルに対応する)が、別々のメモリ・バンクにストアされるように複製され得る。したがって、相異なるメモリ・バンクにストアされている第1のポイント及び隣り合う第2のポイントを読み取るために、ポイントのペアのうちの第1のポイントのインデックスを使用する、2ポイント・ルックアップの読出し命令を使用して、第1の値及び第2の値が、ただ1つのサイクルで、第1の値をストアする第1のメモリ・バンク及び第2の値をストアする第2のメモリ・バンクから読み取られ得る。この演算は、各テーブルの第1の値を含む高位ベクトル、及び各テーブルの第2の値を含む低位ベクトルを生成するために、複製された各テーブルの値のペアごとに実行され得、これらのベクトルは、出力を生成する命令(たとえば、補間など)に加えて、VPUのベクトル・レジスタとして使用され得る。
方法600は、ブロックB608において、第1の値及び第2の値を使用して、1つ又は複数の演算を実行するステップを含む。たとえば、第1の値及び第2の値は、VPUの1つ又は複数のレーンにロードされ得、平方根、対数、正弦及び余弦関数が実行され得、線形又は双1次補間が実行され得、及び/又は別の演算タイプが実行され得る。実例として、補間が実行され、テーブルが16回複製される場合、16個の2ポイント・ルックアップ演算が実行され、32個の値、すなわち、VPUのベクトル・レーンごとに2つの値を生成することができ、各レーンで補間が実行され、16個の結果を出力することができる。したがって、テーブルのわずか16回の複製を使用して、サイクルごとに、16個の補間出力が生成され得る。これは、値を含むテーブルを、従来のただ1ポイントのルックアップ演算のときの半分の回数(たとえば、32回ではなく16回)しか複製する必要がなく、半分のメモリ占有領域を使って、同じ32個の値のスループットを可能にし得る、2ポイント・ルックアップを使用した結果であり得る。
ベクトル・メモリ内のメモリ・バンクごとのロード・キャッシュ
従来のプロセッサでは、データ・キャッシュの幅は、たとえば、キャッシュ・ライン当たり32バイトであり得る。キャッシュ・ラインは、ハードウェアが追跡し続けるデータの単位である。たとえば、ハードウェアは、すべてのシステム・アドレス、キャッシュ・ラインが書き込まれたかどうか、いつキャッシュ・ラインを削除するかを判断するための、他のキャッシュ・ラインと比較した、そのキャッシュ・ラインが最後に読み取られた時間、などを含む、タグ・メモリ内の、キャッシュ・ラインの使用情報を追跡し続けることができる。いくつかの実施態様では、データ・キャッシュは、ローカル・メモリ又はローカル・メモリの一部であり、外部メモリに一時的にストアされている、より大きなデータ構造体をローカル・メモリにマッピングし、これによりデータを、直接外部メモリを処理すると生じる、長いメモリ・レイテンシを被ることなく処理することができる。従来のデスクトップ又はラップトップ・コンピュータでは、このタイプのデータ・キャッシュが使用されることが多い。
非限定的な実例として、プログラム可能なビジョン・アクセラレータ及び/又はVPUには、高度に最適化されたコードのより小さなセットの実行に向けた、組込み型プロセッサが含まれる。かかるプロセッサのタイプでは、プログラマが、ローカル・データ・メモリの中身を管理できるように、データ・キャッシュが実装されない場合がある。本開示のシステム及び方法には、キャッシュされるのではなく、プログラマが管理するローカル・メモリが含まれ得るが、1つ又は複数の、たとえばそれぞれのメモリ・バンクに、追加のデータ・キャッシングの能力も含まれ得る。このデータ・キャッシュは、たとえば32バイトを含む、より従来型のデータ・キャッシュと比較して、これに限定されるものではないが16ビット幅など、狭い場合がある。このデータ・キャッシュは、レイテンシを減らすという従来のデータ・キャッシュの主な目標とは違って、主に電力消費を削減するために使用され得る。
コンピュータ・ビジョン処理において、たとえば、データ・アクセス・パターンは、ある程度の局所性を有することが多い(たとえば、次の近隣に移動する前に、ある近隣にしばらく留まる)。たとえば、本明細書で説明されるVFilt4HHW命令(1度に4タップを計算する)を使用して、7×7の2Dフィルタ処理を実行する場合、データ読取りストリームは、3回のメモリ読取りについて近隣から読み取り、次いで、別の近隣に移動してさらに3回読み取り、以下同様であり得る。演算の係数読取りでは、ゼロをパディングされた値の同じ配列が使用され得(たとえば、7*2*4=56ハーフワード)、4つのハーフワードの最後のグループが読み取られるまで、1度に4つのハーフワードを進め、次いで、フィルタ処理カーネルが完了するまで、再び戻って56ハーフワード配列の先頭から開始する。
したがって、こうしたローカル・アクセス・パターンを利用し、メモリ・アクセスによる電力消費を減らすために、各メモリ・バンクで、2ウェイのセット・アソシアティブ方式(たとえば、合計64個のハーフワードを保持する)の、ロード・データ・キャッシングが実施され得る。ロード・キャッシュがイネーブルされると、最後に読み取られた読取りデータのセット(たとえば、最後、最後の2つ、最後の3つ、など)が、行アドレス、及びタグ・メモリで最後に読み取られたエントリと共に、キャッシュに記録され得る。その結果、同じメモリ・アドレスが再度読み取られると、キャッシュ・ヒットする可能性があり、ローカル・メモリからデータを再度読み取る必要がなく、キャッシュがデータを供給することができる。実施例では、ロード・キャッシュは、メモリ・ロギング論理機構とメモリ自体との間の位置にあり得、その結果、キャッシュ・ヒットするときはいつでも、電力を浪費しないために、その特定のアドレス又は値のメモリ読取りが停止されるか、又は行われないようになる。
このキャッシュ構造を使用すると、上記の7×7の2Dフィルタ処理の実例に関して、ロード・キャッシュにより、システムが、データ読取りのほぼ3分の2、及び定常状態での係数読取りのほとんどすべてをとばすことが、可能となり得る。各バンクでのデータ・キャッシュの使用法の例示が、図7A~図7Cに示されている。たとえば、VFilt4HHW命令は、場合によってはより大きい、4タップのフィルタ処理タスクを実行することができ、データの2つの単一ハーフワード・ベクトル、たとえば、データ[0~15]及びデータ[4~19]と、16要素のシングル・ベクトルを埋めるために4回繰り返される、係数の1つの単一ハーフワード・ベクトル、たとえばcoef[0~3]とを使い得る。両方のベクトル数学スロットにおいて、VFilt4HHW命令を使用する7×7の2Dフィルタの実施態様では、図7Aのデータ要素及び係数配列が使用され得る。本開示のVPUは、ダブル・ベクトルを読み取るよう設定され得るので、データ[y][0~15]及びデータ[y][16~31]が、ダブル・ベクトルとして読み取られ得る。同様に、data[y][4~19]及びdata[y][20~35]、並びにdata[y][8~23]及びdata[y][24~39]が、ダブル・ベクトルとして読み取られ得る。したがって、データ及び係数の読取りパターンはそれぞれ、データのライン・ピッチが100であり、係数のライン・ピッチが8であると仮定して、図7B~図7Cのものに対応することができる。
図7Dは、メモリ・バンクの構成を例示している。たとえば、2エントリのフル・アソシアティブ方式のキャッシングは、任意のスーパーバンク内のデータの2箇所分を保持し、データ及び係数が、相異なるスーパーバンクに配置され、キャッシングを効果的に機能させることができる。係数読取りにおいて、バンク0~3は、最初に係数要素0~3を保持することができ、要素32~35を追加し、次いで、要素64~67を読み取ることで、要素0~3が削除されることになり、パターンが繰り返されるので、要素0~3は、次の係数読取りのときに、再度読み取らなければならない。ロード・キャッシュがイネーブルされている定常状態では、係数読取りパターンのスィープごとに、4つのバンクだけが読み取られ得る。その結果、データにロード・キャッシュを使用することにより、メモリ・バンクの読取りは、(3*32-(32+4+4))/(3*32)=58.3%の節約となり得、係数では、(14*16-4)/(14*16)=98.2%の節約となり得る。
したがって、スライディング・ウィンドウを用いるコンピュータ・ビジョンのアルゴリズムなど、特定のアルゴリズムでは、ロード・キャッシュが、電力を浪費しないようにするのに有用であり得る。たとえば、ロード・キャッシュがない場合、データの多くが同じであるにも関わらず、各バンクを各サイクルで読み取る必要があろう。各反復で512ビットが読み出される実例では、最初の512ビットが読み出され得、次いで、別の512ビットが読み取られ得、以下同様である。たとえば、スライディング・ウィンドウがわずか8バイトしかない場合、各反復で新しいのは64ビットだけで、残りの448ビットは同じである。データ・キャッシュがない場合、この448ビットをデータ・バンクから再度読み出す必要があろう。しかし、メモリ・バンクごとにデータ・キャッシュを使用すると、この448ビットはロード・キャッシュから引き出すことができ、新しい64ビットだけを、他のメモリ・バンクから読み出す必要があろう。したがって、メモリ・バンクから448ビットを読み取るのに必要な電力が、節約される。ロード・キャッシュの使用によって恩恵を受け得るアルゴリズムの実例は、空間フィルタ処理演算、深層学習推論演算(畳込み演算など)、及び/又は類似のものである。
図7Eに関して、ロード・キャッシュを備えたメモリ・バンクのハードウェア・アーキテクチャ又は論理機構が例示されている。たとえば、メモリ(たとえば、ベクトル・メモリ(VMEM))の位置ずれアクセスのサポートに関して、スライディング・ウィンドウでのデータ・アクセスが高速化され得る。これは、フィルタ処理及び畳込みを含む、多くのコンピュータ・ビジョンのアルゴリズムの、重要なメモリ・アクセス・パターンである。スライディング・ウィンドウでのベクトル・ロードでは、ランダム・アクセス・メモリ(RAM:random access memory)バンク702からのデータのほとんどが、同じままである。かかる実例では、64Bのベクトル・ロードにおいて4Bだけスライドする場合、データのうちの4Bだけが変化するので、新しいデータの4B分だけがRAMバンク702から読み取られる。VMEM RAMの電力を最適化するために、「ロード・キャッシュ」と呼ばれる小さなキャッシュが、スーパーバンクごとに、各バンクに取り付けられ得、合計3つのスーパーバンク×32個のバンク=VMEMごとに96個のロード・キャッシュとなる。ロード・キャッシュのそれぞれの設定には、非限定的な実施例では、2ライン(2×2B=4B)の容量、フル・アソシアティブ方式、及び疑似の最近最も使用されていない(pLRU:pseudo least recently used)置き換えポリシが含まれ得る。
データ・キャッシュが最新のアクセスをストアする場所は、タグ記憶部706及びデータ記憶部704の2つの部分に分割される。タグ記憶部706では、以前のアクセスに対応するキャッシュされたアドレス及び制御情報がストアされ得、データ記憶部704では、以前のアクセスによるデータがストアされ得る。タグ記憶部706の制御情報には、有効フラグ(たとえば、エントリが有効であるかどうか)、ダーティ・フラグ(たとえば、エントリが修正されており、メモリに書き戻す必要があるかどうか)、及び/又は最終使用フラグ(たとえば、エントリが最近最も使用されていないポリシと置き換えられるべき場合に、どのエントリを置き換えるかを示す)が含まれ得る。キャッシュはロード・キャッシュであるので、書込みデータはキャッシュを更新しない場合があるが、有効フラグ及び最終使用フラグが、タグ記憶部706に含められ得る。有効フラグ又はビットを使用して、アドレスの一致に条件を加えることができ、どんな書込みも、エントリを無効にするはずである。アクセスするたびに、最終使用フラグが更新され得る。
本明細書で説明されているように、効果的なキャッシング方式の場合、アクセス時間を削減し、電力を節約するために、ロード・キャッシュの記憶能力は、メモリ又はRAMバンク702の記憶能力よりもはるかに低い。一実施例では、各ロード・キャッシュは、ただ1つのRAMバンク702に対応することができ、RAMバンク702は、それぞれ、2048×16ビット・メモリであり得、ロード・キャッシュは、それぞれ、23ビットのタグ記憶部706(たとえば、2エントリ×(11ビットのアドレス+1ビットの有効)+1ビットの最終使用))を備えた2×16ビットのデータ記憶部704であり得る。
演算中、オフセット722、ライン・アドレス724、及び刻み幅726を使用して、メモリ・アクセスのためのメモリ・アドレスを生成することができる。このメモリ・アドレスは、タグ記憶部706と比較するために、たとえば、いくつかの以前にアクセスしたアドレス(たとえば、2つの以前のアクセス)と比較するために、取り出され得る。タグ記憶部706の上部への矢印は、メモリ・アドレスを表すことができる。いくつかの実施例では、タグ記憶部706は、以前のアクセスによってストアされたメモリ・アドレスと比較するために、メモリ・アドレス全体を使用することができる。他の実施例では、メモリ・アドレスからのアドレス・ビットのサブセットを使用して、タグのサブセットをアドレス指定することができるので、タグのサブセットだけが、メモリ・アドレスと比較される。たとえば、より多くの以前のアクセス・タグがタグ記憶部706にストアされる場合、面積を削減し、電力を節約するために、メモリ・アドレス・ビットのサブセットを使用して、タグのサブセットだけが比較され得る。2つの以前のアクセスに対応するタグなど、タグがより少ないロード・キャッシュ設計では、以前のエントリのタグ全体が、メモリ・アドレス全体と比較され得る。「==?」判断ブロック720は、RAMバンク702の現在のメモリ・アドレスを、タグ記憶部706にストアされているアドレスと比較する。ミスがあった(たとえば、タグとメモリ・アドレスとが一致しない)場合、RAMバンク702の読取りは、読取りイネーブル708を使用してイネーブルされ得、読取りデータ・マルチプレクサ(rd data mux)712、RAMバンク702は、多段化フロップ(staging flop)716に送信するために、選択されて読み出され得る。ヒットがあった場合(たとえば、タグとメモリ・アドレスとが一致した場合)、データ記憶部704は、ヒットが、どの事前のアクセスに対応するかを示すために、0又は1(2つのエントリの実施例では)を使ってアドレス指定され得る。データ・メモリの対応するエントリは、rd data mux712を介して多段化フロップ716に送信され得る。多段化フロップ716は、読戻しデータをプロセッサ・パイプラインに返し、最終的にロード命令のデスティネーション・スカラ又はベクトル・レジスタにルーティングされ得る。
多段化フロップ714は、パリティ・チェックに対応することができる。たとえば、エラー検出及び/又はエラー訂正を可能にする、パリティ・ビット(たとえば、パリティ・ターミナル710の)を有するために、十分な大きさのメモリが必要となり得る。メモリ(たとえば、VMEM)において、エラー検出が使用され得、及び/又はエラー訂正の論理が、読戻しデータ上で実施され得る。
したがって、ロード・キャッシュには、ウェイ0及びウェイ1のタグ記憶部706のタグ・ビットが含まれ得、タグ・ビットのそれぞれには、11ビットのアドレス及び1ビットの有効ビットが含まれ得る。ロード・キャッシュには、1ビットのpLRU、及びそれぞれが16ビットのデータ及び2ビットのパリティを含む、ウェイ0及びウェイ1のデータ記憶部704のデータ・ビットがさらに含まれ得る。ロード・キャッシュは、イネーブルされると、D1ステージにおいてルックアップされ得る。電力消費量を最小限に抑えるために、ロードに関与しているRAMバンク702のロード・キャッシュだけが、イネーブルされ得る。たとえば、単一のベクトルのロードでは、32個のロード・キャッシュのうちの16個だけがルックアップされ得る。ロードのヒット時には(たとえば、ロード・キャッシュが、アクセスされるべきデータを含んでいる場合)、所与のRAMバンク702の読取りイネーブルが抑制され、これによりRAMバンク702の立上げを止めることができる。pLRU720はまた、D1ステージで更新され得る。D2ステージでは、データ及びパリティ・ビットがロード・キャッシュのヒットしたウェイから読み取られ、RAMの結果と多重化され得る。
ロード・キャッシュのミスの場合、D1ステージで、ビクティムが生じるウェイにおいて、新しいエントリ用の空きを作るために削除されるべき既存のエントリが、有効なビット及びpLRUに基づいて判断され得る。次いで、ビクティムが生じるウェイのタグが、ミスのアドレスで更新され得、RAMバンク702の読取りイネーブル708は、抑制され得ない。D2ステージでは、RAMバンク702からのデータ/パリティが、読取りデータのクロスバーに送信されるばかりでなく、データを、削除されたキャッシュ・ラインに埋める。ストアは、イネーブルされて関与しているときに、ロード・キャッシュをルックアップすることもできる。ストアのヒットにより、ヒットされたウェイは無効となり得、ストアのミスは、無視され得る。
ロード・キャッシュがヒットすると、RAMバンク702を読み取るための電力が節約される。一方、ロード・キャッシュのミスは、RAMバンク702を読み取ることで生じる電力をもたらすだけでなく、ビクティムが生じたウェイを埋めるためにロード・キャッシュをルックアップする電力も消費する。すべてのタイプのメモリ・アクセス・パターンが、特に、インデックス付きアドレス指定モードでスーパーバンクにアクセスする場合に、ロード・キャッシュで高いヒット率を得るわけではないので、ベクトル線形ロードだけが、ロード・キャッシュでルックアップされ得る。
すべてのストアが、イネーブルされると、ロード・キャッシュでルックアップされ、ロード・キャッシュが確実に、たとえばVMEM RAMバンク702のデータと、同期が外れないようにすることができる。所与のスーパーバンクについて、ロード・キャッシュの低いヒット率が予測されるアプリケーションでは、ストアのルックアップによる電力を最小限に抑えるために、下記でより詳細に説明されるように、ソフトウェアを使用して、そのスーパーバンクのRAMバンク702のロード・キャッシュを、無効にすることができる。
たとえば、いくつかの実施例では、データ・キャッシュの使用が恩恵を与えない場合がある。たとえば、アクセス・パターンが繰り返されない演算では、データ・キャッシュが有用でない場合があり、読取り前にキャッシュをチェックする余分なタスクを実行すると、適切なデータにアクセスするために、データ・バンクを読み取る必要があり得るので、時間及び/又はエネルギーを浪費する可能性がある。したがって、ロード・キャッシングをイネーブル又はディスエーブルすることができ、これにより、ロード・キャッシュのミス率が高いアクセス・パターンによる電力ペナルティを低減させることができるが、データ・キャッシュが電力を節約するために使用され得るアクセス・パターンに対して、ロード・キャッシュを使用することもできる。いくつかの実施例では、イネーブル又はディスエーブルは、アプリケーション・コードを使用してプログラミングされ得るので、プログラマは、所望のときにデータ・キャッシュをイネーブルし、望ましくないときにデータ・キャッシュをディスエーブルするように、コードをプログラミングすることができる。他の実施例では、イネーブル又はディスエーブルは、読取りパターンを分析し、オーバラップするパターンを検出するハードウェアによって実行され得る。たとえば、ハードウェアが、連続する読取り動作間のオーバラップの閾値量に関して、ロード・キャッシュをイネーブルすることができる。しかし、オーバラップが閾値よりも少ない場合は、ロード・キャッシュはディスエーブルされ得る。閾値は、非限定的な実例として、25%、40%、50%、75%、又は読取り間の様々なオーバラップの閾値量であり得る。
図7Eに関して、ロード・キャッシュがディスエーブルされているとき、タグ記憶部706にアクセスすることはできず、読取りイネーブル708は、読取りごとに、RAMバンク702への読取りがイネーブルされるように、セットされ得る。同様に、データ記憶部704にアクセスすることはできず、読取りデータ・マルチプレクサ712は、常にRAMバンク702のデータを、多段化フロップ716まで通過させることができる。
さらに、いくつかの実施例では、メモリ・バンク構造体には、複数のスーパーバンク、たとえば、3つのスーパーバンクが含まれ得、個々のスーパーバンクは、各スーパーバンク内の特定のアクセス・パターンに応じて、ロード・キャッシュをイネーブル又はディスエーブルすることができる。たとえば、3つのスーパーバンクが使用される場合、各スーパーバンクには32個のRAMメモリ・バンクが含まれ得、メモリ・バンクごとのデータ・キャッシュには、各エントリが1ワード、すなわち16ビットである場合、2つのエントリが含まれ得る。2つ以上のスーパーバンクが使用される場合、スーパーバンクは、任意のサイズ、様々なサイズ、同じサイズ、又はこれらの組合せであり得る。たとえば、第1のスーパーバンクは128KBであってもよく、第2のスーパーバンクは256KBであってもよく、第3のスーパーバンクは512KBであってもよい。
ここで図7Fを参照すると、本明細書で説明される方法750の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法750はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法750は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、この方法750は、本明細書に説明されているものを含むがこれに限定されるものではない、任意の1つのシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図7Fは、本開示のいくつかの実施例による、読取り動作のためにデータ・キャッシュを使用する方法750を示す流れ図である。方法750は、ブロックB702において、メモリ読取りアドレスを表すデータを受信するステップを含む。たとえば、いくつかのメモリ・バンクを使用する第1の読取り動作後に、1つ又は複数の追加の又は他のメモリ・バンクに加えて、メモリ・バンクのうちの1つ又は複数を含む、第2の読取り動作が実行され得る。第1の読取り動作には、それぞれのメモリ・バンクに対応するデータ・キャッシュに、読取り出力をストアすることが含まれていた可能性があるので、メモリ・バンクの別の読取りを要求するのではなく、この値が再利用され得る。したがって、次の読取り動作に対応してメモリ読取りアドレスが受信され得、ロード・キャッシュが、イネーブルされている場合に、データのいずれかがロード・キャッシュにストアされているかどうかを判断するために、アクセスされ得る。
方法750は、ブロックB704において、メモリ読取りアドレスを、ロード・キャッシュにストアされた、以前のメモリ読取りに対応したロード・キャッシュのメモリ・アドレスと、比較するステップを含む。たとえば、以前のメモリ読取り後に、メモリ読取りによるデータが、特定のRAMバンク702に対応するロード・キャッシュにストアされ得る。この情報を記憶するために、タグ記憶部706には、RAMバンク702からの1つ又は複数の以前の読取りに対応する、メモリ・アドレスが含まれ得る。
方法750は、ブロックB706において、メモリ読取りアドレスが、ロード・キャッシュのメモリ・アドレスと、少なくとも部分的にオーバラップすることを判断するステップを含む。たとえば、メモリ読取りアドレスは、タグ記憶部706にストアされた以前の読取りの、以前のメモリ読取りアドレスと比較され得る。ヒットした場合、ロード・キャッシュを使用して、現在のメモリ読取りの、メモリ読取りアドレスに対応するデータの少なくとも一部を、読み出すことができる。
方法750は、ブロックB708において、ロード・キャッシュからのメモリ読取りアドレスに対応するデータの、少なくとも一部を読み取るステップを含む。たとえば、タグ記憶部706によって判断されたロード・キャッシュのヒットにより、オーバラップするメモリ・アドレスからのデータの一部分が、ロード・キャッシュから読み出され得、残りのデータがある場合は、RAMバンク702から読み出され得る。
分離式の設定可能なアクセラレータ
リアルタイムのアプリケーションなどの特定のアプリケーションでの、プロセッサの性能を最適化するために、命令セット・アーキテクチャ(ISA)を拡張して、よく行われる演算を高速化する、カスタム命令を作成することができる。これにより、プロセッサは、特定のタスクを実行するのに必要なサイクル数を減らすことができる。ISAをカスタマイズするプロセスは、システムの性能目標が達成されるまで実行される。しかし、こうした新しい命令は、データを演算するために、プロセッサのレジスタ・ファイル内に、又はオペランドとしてメモリに直接追加され、既存のプロセッサ・コントローラばかりでなく、既存のメモリ・アドレス指定及びアクセス用ハードウェアも使用して実行される。かかる実例では、新しい命令が、プロセッサのレジスタ・ファイルの読取り/書込みオペランドの総数内に収まり(たとえば、既存のポートを再使用して)、レジスタ・ファイルの幅に収まり(たとえば、プロセッサのデータ・タイプ内に収まり)、プロセッサのパイプライン・ステージ内に収まることが望ましい。ISAに命令を首尾よく追加するためのこれらの要件によって、新しい命令を追加するための柔軟性の程度が制限される。加えて、多くのステージ(たとえば、30、40、50ステージなど)があるパイプラインを処理するISAを作成する場合、ISAの設定は複雑になる。
さらに、プロセッサは、電力損失を犠牲にして高度の柔軟性を可能にする。というのは、追加されるすべての命令が、フェッチ、デコード/ディスパッチ、レジスタ・ファイル及び/又はメモリからの読取り/への書込みなどを必要とするからである。したがって、こうしたカスタム命令を実施する、追加の機能ユニットを追加すると、レジスタ・ファイルの読取り/書込みポートが圧迫され、結果的に、必要な面積(たとえば、追加の読取り/書込みポートが必要な場合がある)、及び電力が増加する(たとえば、レジスタ・ファイルへの余分なロードが実施される場合がある)。また、組込みアプリケーションの処理パイプラインには、通常、あるステージからの出力が次のステージに入力を供給する、複数のステージがある。プロセッサで複数のスレッド(たとえば、様々な処理ステージでの)を実行するような技法により、延長時間が低減され、これによりレイテンシの短縮が実現され得る。しかし、マルチスレッドは、ハードウェアを犠牲にする。すなわちマルチスレッドにより、複数のスレッドから命令をフェッチ/デコード/ディスパッチし、各スレッドの状態ごとの状態情報(たとえば、レジスタ・ファイルでの)を保持するだけでなく、プロセッサの複数のスレッドを扱う制御ロジックを含める必要がある。これにより、プロセッサの検証及びプログラミングがより複雑になる一方で、面積及び電力の要件が増加する。したがって、処理パイプラインのレイテンシを減らすための様々な方法が存在するが、既存の方法では、プロセッサのハードウェアに追加の表面積が必要となり、追加のハードウェアによる追加の電力消費が必要となり、様々なタスクを実行するためのプロセッサのプログラミングの複雑度が増す。
1次プロセッサの設定での制限、及びマルチスレッド・プロセッサの欠陥を考慮して、本開示のシステム及び方法は、主プロセッサから分離され、ベクトル・メモリ(VMEM)などの共有メモリを介して主プロセッサと通信する、ドメイン固有のアクセラレータ又はコプロセッサに加えて、VPUのような単一スレッド・プロセッサなどの、1次又は主プロセッサの1つ又は複数のユニットを使用する。したがって、アクセラレータは、主プロセッサのサブユニットとして演算することができるが、アクセラレータは、プロセッサへ命令の実行を要求するのではなく、1度設定されると、主プロセッサの命令とは関係なしに実行することができる。たとえば、アクセラレータのアクセス命令を使用して、主プロセッサが、アクセラレータを設定及びシーケンス処理することを可能にし得、また共有メモリが、ステージ間のデータ構造体を、主プロセッサとアクセラレータとの間で共有することを可能にし得る。主プロセッサが、アクセラレータをキック・オフ又は開始させると(たとえば、共通のアクセラレータのインタフェースを介して、且つ1つ又は複数のロード/ストア命令を使用して)、主プロセッサは、自由に、別のステージを処理する(これにより、実行時間を短縮しながら、処理パイプラインの複数のステージで同時に作業する機能を実現する)か、又はアクセラレータが処理を完了するのを待つ、低電力又は最小電力状態に遷移する(たとえば、アクティブに処理していないときの電力使用を最小限に抑える)。したがって、1つ又は複数のアクセラレータのそれぞれは、主プロセッサによって設定されると、独立して、主プロセッサと同時に演算することができる。主プロセッサ及びアクセラレータは、処理中にハンドシェイク・インタフェースを介して同期することができるため、主プロセッサは、アクセラレータが、いつ処理を終了したか、且つ/又は新しいタスクの準備ができたかを認識し、逆も同様である。共有メモリは、設定メッセージ(たとえば、サイズの制約に起因して、設定命令がアクセラレータ・インタフェースを介して効率的に送信されない場合に、アクセラレータを設定する)、入力バッファ(たとえば、アクセラレータで処理するためのデータをストアする)、及び/又はアクセラレータの出力結果(たとえば、処理が完了した後、アクセラレータのたとえばレジスタ・ファイルからのデータが、共有メモリの、主プロセッサからの設定命令で示された位置に、ストアして戻され得る)をストアすることができる。したがって、アクセラレータは、トリガされると、設定パラメータ及び/又は入力データ構造体を、共有メモリから読み取ることができ、また出力結果のデータ構造体を、共有メモリに書き込むことができる。
結果として、主プロセッサ、共有メモリ、及び分離式アクセラレータのこの組み合わされたシステムは、機能の固定したハードウェアの電力消費レベルを達成しながら(たとえば、処理パイプラインの大きい計算量の処理ステージが、アクセラレータとして実装される場合があるので)、主プロセッサの複雑度を大幅に高める必要なしに(たとえば、主プロセッサは、アクセラレータをプログラムするための、追加のアクセラレータ設定又はアクセス命令しか必要としない場合があるので)、柔軟性のあるプログラム可能な主プロセッサを可能にする。たとえば、アクセラレータのパイプライン及びデータ・タイプ(たとえば、データ幅)は、主プロセッサのパイプライン及びデータ・タイプとは無関係であり得、これにより、プロセッサのレジスタ・ファイルの読取り/書込みオペランドの総数、レジスタ・ファイル幅、及びパイプラインのステージ内に収まる命令を必要とする、主プロセッサだけでは不可能な場合がある、さらなるカスタマイズ及び最適化が可能となる。
いくつかの実施例では、命令実行時に、アクセラレータの若干の電力節約を実現し、一方で、実行を主プロセッサのパイプラインに結合するために、アクセラレータと主プロセッサとが結合され得る。しかし、かかる実施例では、命令がアクセラレータと主プロセッサとの間でインタリーブされることになるので、パイプラインの相異なるステージを同時に処理する機能は低下するであろう。1つ又は複数の実施例では、アクセラレータ及び主プロセッサは、共有メモリを介して接続されるのではなく、より上位レベルの第2レベル(L2)メモリを介して結合され得る。しかし、かかる実施例では、より上位レベルの分離(たとえば、共有メモリを介した、より上位レベルとの結合の解除)は、主プロセッサとの通信のオーバヘッドを増加させる可能性がある。
分離式アクセラレータは、非限定的な実例では、特徴追跡、対象物追跡、画像ワーピング、ピラミッド作成、及び/若しくは類似のものなどのコンピュータ・ビジョンのアルゴリズムに向けた、ライダ・データ、レーダ・データ、及び/若しくは類似のものに対するマトリックス乗算若しくは他の演算などのセンサ処理に向けた、並びに/又は機械学習若しくは深層学習アプリケーションに向けた、分離式ルックアップ・テーブルのアクセラレータとして、バンクの競合を検出及び解決するための、1D、2Dなどのルックアップの実行、1D/2D補間の実行、及び/又は類似のものなど、任意のドメイン内の任意のタスクに使用され得る。したがって、本明細書で説明されている形態は、処理の一部がアクセラレータにオフロードされ得る、任意の処理パイプラインに適用され得る。
実施態様に応じて、共有メモリを介して主プロセッサと通信するチップ上に、任意の数の分離式アクセラレータが存在し得る。たとえば、システム・オン・チップ(SoC)又は他の集積回路(IC:integrated circuit)には、主プロセッサと1つ又は複数のアクセラレータが含まれ得、プログラマは、様々なアクセラレータを認識し、システムの様々なタスクのいずれかの性能を高めることができるアクセラレータを使用する、命令又はコードを書くことができる。主プロセッサは主にVPUとして説明されているが、これは限定することを意図したものではなく、主プロセッサには、本開示の範囲から逸脱することなく、CPU、GPU、DPU、又は他のプロセッサなどの、任意のプロセッサ・タイプが含まれ得る。
ここで図8Aを参照すると、図8Aは、本開示のいくつかの実施例による、1つ又は複数の分離式アクセラレータを含むシステム800を例示している。本明細書で説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行されるものとして本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、システム800は、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/若しくは図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/若しくは機能に含まれ得るか、且つ/又はそれらを含むことができる。
システム800には、VPU、CPU、GPU、DPUなどのプロセッサ802(たとえば、主プロセッサ)、分離式アクセラレータ804、及び/又は共有メモリ806(たとえば、ベクトル・メモリ又はVMEM)が含まれ得る。プロセッサ802は、プロセッサ802が実行する命令をキャッシュすることができる、命令キャッシュ(Iキャッシュ)810に結合され得る。プロセッサ802には、汎用入力/出力(GPIO:general purpose input/output)808(たとえば、入力、出力、又はその両方として使用され得、実行時に制御可能であり得る、IC上のデジタル信号ピン)、及びICコンフィギュレータ812が含まれ得る。いくつかの実施例では、図示されているように、プロセッサ802は、256ビット高度拡張可能インタフェース(AXI:advanced extensible interface)などであるがこれに限定されるものではない、AXIインタフェースを使用して、オンチップで通信することができる。ICコンフィギュレータ812を使用して、システム800を設定することができる。
プロセッサ802は、たとえば、高度周辺バス(APB:advanced peripheral bus)インタフェースなどの、コプロセッサ若しくはアクセラレータ・インタフェース、及び/又はハンドシェイク、プログラミング、若しくはイベント・インタフェースを介して、分離式アクセラレータ804と直接通信することができる。たとえば、プロセッサ802は、アクセラレータ・インタフェース(又は設定バス)を使用して、アクセラレータ804を設定し、イベント・インタフェースを使用して、アクセラレータ804の処理をキック・オフ又はトリガし、ハンドシェイク又はイベント・インタフェースを使用して、アクセラレータ804と同期することができる。したがって、各アクセラレータ804には、それぞれのアクセラレータ・インタフェース又は設定バスを介して、プロセッサ802と通信するよう設定されるべき仕組みが含まれ得る。たとえば、アクセラレータ804が、処理が完了するときに、ハンドシェイクの仕組みを介してプロセッサ802に処理の完了を示すことができるか、又はプロセッサ802が、アクセラレータ804の処理終了を待っているときに、プロセッサ802は、アクセラレータ804を定期的にポーリングして、ステータス又は終了時間を要求することができる。いくつかの実施例では、アクセラレータ・インタフェースには、設定命令がアクセラレータ804に伝送され得るように、32ビット・インタフェース(又は他の、より小さなサイズのインタフェース)が含まれ得る。しかし、いくつかの実施例では、設定メッセージはより大きくてもよく(たとえば、32ビットより大きい、又は32ビットのいくつかの倍数)、その代わりに、設定メッセージは、共有メモリ806にストアされ得、設定情報をどこで取得するかを示すために、メモリ806内の設定情報の位置が、アクセラレータ・インタフェースを介してアクセラレータ804に送信され得る。
したがって、設定バスは、アクセラレータ804を設定することができ、イベント(又はプログラミング・インタフェース)を使用して、プロセッサ802が、アクセラレータ804による処理をトリガ又は開始することを可能にし得る。アクセラレータ804は、トリガ又はキック・オフされると、独自に演算することができ、プロセッサ802は、処理が完了するか、且つ/又は別の処理タスク若しくはステージを実行するのを待つ。たとえば、アプリケーションのプログラマは、プロセッサ802及びアクセラレータ804を、それぞれが何をできるかについての知識を用いて、プログラミングすることができ、その結果、アプリケーションのプログラムは、部分に、すなわち、ある部分はプロセッサ802用に、またある部分はアクセラレータ804用に、分割され得る。したがって、処理は、実施例では、プロセッサ802とアクセラレータ804との間で並列に実行され、実行時間を短縮し、効率を高めることができる。アクセラレータ・インタフェースを介して、及び/又は共有メモリ806を介して共有される設定メッセージは、プロセッサ802によって生成され、処理するデータが共有メモリ806のどこから開始し、どれだけの量のデータを処理し、結果を共有メモリ806のどこに書き戻すかを、アクセラレータ804に示すために使用され得る。プロセッサ802は、共有メモリ806内の、アクセラレータ804が続けて演算するデータを含む指定された位置に、入力バッファを生成することができる。設定メッセージが伝送され、入力バッファが共有メモリ806にストアされると、アクセラレータ804は、イベント・インタフェース(たとえば、プログラミング・インタフェース)を介してプロセッサ802からトリガ信号を受信することができ、アクセラレータ804は、データ処理に入ることができる。アクセラレータ804がトリガされると、プロセッサ802は次いで、他の作業を実行するか、又は低電力状態に入ることができ、アクセラレータ804が処理を終了すると、アクセラレータ804は、プロセッサ802に処理の終了を示すことができ、追加の作業を待つことができる。
プロセッサ802は、アクセラレータ804が処理するための入力バッファ又は入力データ構造体をセット・アップし、入力バッファ又は入力データ構造体を、メモリ806にストアすることができる。プロセッサ802は、特にアクセラレータ804を設定し、アクセラレータ804と通信するために、ロード/ストア動作を使用してアクセラレータ804を設定することができる。設定メッセージは、アクセラレータ804の様々なレジスタ(たとえば、実施例では、256個の32ビット・レジスタ)を設定することができる。たとえば、分離式ルックアップ・テーブルのアクセラレータ(本明細書で、より詳細に説明される)では、設定情報は、ルックアップが補間を伴う1Dルックアップ、双1次補間を伴う2Dルックアップ、及び/又は別のタイプのルックアップであるかどうかを示すことができる。アクセラレータ804は、特定のモード又は機能を認識すると、適切にメモリ806からデータを読み取り、処理し、データをメモリ806に書き戻すように、レジスタを設定することができる。
いくつかの実施例では、プロセッサ802は、効率を高めるために、1度に複数のタスクを実行するように、アクセラレータ804を設定することができる。たとえば、アクセラレータ804が、様々なより小さいタスクを実行するべきである場合、アクセラレータ804を個別に設定することにより、各タスクが迅速に完了し得るので実行時間が増え、その結果プロセッサ802に対して、処理を停止すること、アクセラレータ804を別のタスク用に設定すること、などが要求され得る。これを行うために、第1のタスク・メッセージには、複数のタスクの自己連鎖を可能にする、第2のタスク・メッセージのアドレスが含まれ得る。したがって、プロセッサ802は、アクセラレータ804が、処理を完了し、アクセラレータ804がさらなる作業を受け入れる準備ができていることをプロセッサ802に示す前に、様々なタスクを連続して実行できるように、複数のタスクの設定メッセージを直ちに生成し、各タスクの設定情報及び入力バッファを生成することができる。さらに、アクセラレータ804は、効率を高めるために、アクセラレータ804が、第1のタスクが完了に近づいたときに、次のタスクのデコード及び次のタスクのためのレジスタ設定を開始できるように、タスクをオーバラップするよう設定され得る。最終的に、アクセラレータ804は、プロセッサ802及びアクセラレータ804用の別個の命令を含めることによって、プロセッサ802が通常サポートするものとは相異なるデータ・フォーマット又はタイプに対して、演算することが可能であり得る。これは、異なっている、特定の処理タスクに特化された、アクセラレータ804のレジスタのアーキテクチャ及びレイアウトの結果であり得る。
実施例では、プロセッサ802は、任意の数のメモリ・インタフェース(たとえば、512ビットの静的ランダム・アクセス・メモリ(SRAM:static random access memory)インタフェース)を介して、共有メモリ806と通信することができる。同様に、図示のように、アクセラレータ804は、任意の数のメモリ・インタフェース(たとえば、512ビットのSRAMインタフェース)を介して、共有メモリ806と通信することができる。アービタ814は、サイクルごとに、プロセッサ802及び/又はアクセラレータ804のうちのどちらが共有メモリ806にアクセスすることを許可されるかを、判断することができる。
ここで図8Bを参照すると、本明細書で説明される方法850の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法850はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法850は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、方法850は、図8Aのシステム800に関して説明されており、この方法850は、本明細書に説明されているものを含むがこれに限定されるものではない、任意の1つのシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図8Bは、本開示のいくつかの実施例による、分離式アクセラレータを使用する方法850を示す流れ図である。方法850は、ブロックB802において、処理パイプラインの1つ又は複数の第1の処理タスクの設定情報を受信するステップステップを含む。たとえば、アクセラレータ804は、プロセッサ802から設定情報を受信することができる(たとえば、設定メッセージを、アクセラレータ・インタフェースを介して)。
方法850は、ブロックB804において、設定情報に少なくとも部分的に基づいて、アクセラレータの1つ又は複数のレジスタを設定するステップを含む。たとえば、アクセラレータ804は、設定情報に基づいて、1つ又は複数のレジスタを設定することができる。
方法850は、ブロックB806において、設定情報に含まれる入力バッファの開始位置の指示に少なくとも部分的に基づいて、メモリ内の入力バッファからデータを読み取るステップを含む。たとえば、設定情報には、メモリ806のどこに入力バッファがストアされているかの指示が含まれ得、アクセラレータ804は、入力バッファからレジスタ内へデータを読み取ることができる。
方法850は、ブロックB808において、出力データを計算するために入力バッファからのデータを処理するステップを含む。たとえば、アクセラレータ804は、入力バッファからのデータを処理して、出力を生成又は計算することができる。
方法850は、ブロックB810において、メモリの、設定情報に少なくとも部分的に基づいて判断された位置に、出力データを書き込むステップを含む。たとえば、アクセラレータ804は、計算の結果をメモリ806に書き出すことができ、プロセッサ802へ、処理が完了したことを示すことができる。次いで、プロセッサ802は、出力データを使用して、処理パイプラインの1つ又は複数の第2の処理タスクを実行することができる。
分離式ルックアップ・テーブル用アクセラレータ
並列処理は、コンピュータ・ビジョンのアプリケーション、深層学習アプリケーション、センサ処理アプリケーション、及び/又は並列処理によって恩恵を受ける他のアプリケーション(たとえば、処理タスクが他の処理タスクとは無関係である場合)を含むが、これらに限定されるものではない、多くの計算タスクを高速化するために使用される。たとえば、ベクトル・プロセッサは、同じ演算の中で複数の要素を演算し、低消費電力でありながら、こうしたタイプの並列処理アルゴリズムをリアルタイムで実行するのに必要な効率を得ることができる。たとえば、コンピュータ・ビジョン又は深層学習タスクで共通する演算は、ルックアップ・テーブル、画像パッチ、又はインデックス若しくは座標位置に基づく面からのルックアップを実行することである。これを行うために、シングル・ベクトルのロード又はストア動作を使用して、複数の要素からのデータがアクセスされ得る。ルックアップされているインデックスが規則的(たとえば、水平、垂直、又は深さ方向の、連続した又は固定の整数のストライド)でない場合、メモリからの不規則なインデックス付きアクセスを引き起こす。
プロセッサは、メモリからの規則的な、しかし位置が合っていないベクトル・アクセスをサポートするために、RAMのより小さなバンクを使用して、ベクトル・メモリを構築することができる。このようにして、ハードウェアは、RAMバンクのそれぞれに対して個別に、一意のアドレスを生成することにより、ベクトル・メモリの関心アドレス指定パターンを作成することができる。メモリからの不規則なインデックス付きベクトルのロード動作では、相異なるベクトル要素のインデックスは互いに無関係であり得るので、これは、RAMの1つ又は複数のバンクで、バンクの競合を引き起こす可能性がある。バンクの競合はデータに依存しているので、静的に判断されない場合があり、これにより、コンパイラは、バンクの競合を回避したスケジューリングができない。
いくつかの従来のシステムでは、不規則なインデックス付きベクトルのロード動作をサポートするために、様々なアーキテクチャ設計が実装され得る。たとえば、複数の読取りポートが、RAMバンクに追加され得る。かかる実例では、ハードウェアが32個のベクトルを処理できる場合、各バンクに32個の読取りポートが必要となり、これにより、コスト、面積、及び電力が増加するばかりでなく、RAMバンク周辺の場所及びルートの密集度も増加することになる。別の実例には、インデックス付きルックアップのスループットを低くして、ロードごとにただ1回のスカラ・ルックアップを実行することが含まれる。しかし、これは、ベクトル実行のボトルネックを作り出し、実行時間の制限要因になる。さらなる実例には、各ベクトル・レーンが、ただ1つのバンクからデータにアクセスできるように、メモリ内でデータ構造体の多極コピー(multipole copy)を作ることが含まれる。この実例は、他の手法の一部のスループットの問題を解決する可能性があるが、メモリ容量は、データ構造体用にN倍(ここでNは、アクセスされるべきエントリの数)のスペースを占有することによって制限され、これは、コピーを作るオーバヘッドに加えて、関連するアルゴリズムの全体的な性能劣化を引き起こす可能性がある。しかし、データ構造体が小さい場合は、この方法が好適である。いくつかの実例では、競合を動的に検出し、競合しているルックアップを順番に行うことによって解決することができる。しかし、これは、バンクの競合を動的に検出して解決する必要があるので、ハードウェアの複雑度が増すという結果をもたらし得る。さらに、これらの追加のステージは、こうした演算のロードから使用までのレイテンシを増加させ、これにより、コンパイラの、コードを効率的にスケジューリングする機能に影響を与える。加えて、データに依存する実行のレイテンシがもたらされ得、これは、コンパイラが効率的にスケジューリングするためには問題となる。いくつかの実例では、これらの方法の組合せが実行され得る。
他のアーキテクチャのこれらの欠点を考慮して、本開示のシステム及び方法には、不規則なインデックス付きベクトルのロード動作をサポートするよう設定された、分離式ルックアップ・テーブル用アクセラレータが含まれる。分離式ルックアップ・テーブル用アクセラレータは、システム800のアクセラレータ804として含まれ得、共有メモリ806を介して、VPUなどのプロセッサ802と通信することができる。分離式ルックアップ・テーブル(DLUT)は、テーブルのルックアップを実行する、1Dルックアップ・モード、2Dルックアップ・モード、2Dの競合のないルックアップ・モード、補間モードを含む1Dルックアップ、補間モードを含む2Dルックアップ、テーブル再フォーマット・モード、及び/又は他のモードなどの、複数のモードをサポートすることができる。DLUTは、どのルックアップ・モードにおいても、1D(x)フォーマット又は2D(x,y)フォーマットであり得る、VMEMのインデックスの配列を受け取ることができる。各要素には、たとえば、符号なしであり得る、16ビット又は32ビットが含まれ得る。次いで、DLUTは、非限定的な実例として、2Dから1Dへのマッピング、切り捨て/丸め、整数/小数分割、及び/又は有効範囲の検出が含まれ得る、所定のインデックス算出を実行することができる。たとえば、DLUTは、重複した読取りを検出又は統合し、インデックス内のバンクの競合を検出し、要求されたテーブルのエントリをルックアップするために、VMEMに読取り要求を発行することができる。各要素には、8ビット、16ビット、又は32ビットが含まれ得、これらは符号付き又は符号なしのいずれでもよい。次いで、DLUTは、補間後の処理を、設定された通りに実行することができ、また出力を、VMEMに書き戻すことができる。これらの処理演算のそれぞれが、スループットを向上させ、レイテンシを低減し、且つ電力消費を低減するために、パイプラインで実行され得る。
結果として、DLUT用アクセラレータは、プロセッサのパイプラインでの動的な競合検出及び解決を実施する上での欠陥を克服し、コンパイラが、ラインの競合検出を行うための複雑さを回避しながら、すべてのメモリ演算での決定論的な実行レイテンシについて、効率的にスケジューリングすることを可能にする。アクセラレータは、たとえば、VPUと共有するVMEMを介する、密結合アクセラレータとして動作するので、プロセッサは、処理パイプライン又はアルゴリズムの他の別個の部分又はステージを処理し続けながら、アクセラレータを設定及びキック・オフすることができる。いくつかの実施例では、アクセラレータには、特定のルックアップ・パターンを有するパッチ用のインデックス生成をオフロードすること、ルックアップするデータに対して、オプションの1Dブレンディング及び2D補間を実行すること、及び/又はルックアップ若しくは補間なしに、テーブル再フォーマットのサポートを提供することなど、主プロセッサの負荷をさらに低減するための追加フィーチャが含まれ得る。実際には、ルックアップを実行するためのプロセッサ802及びアクセラレータ804を含むシステム全体が、様々なコンピュータ・ビジョン・アルゴリズム(たとえば、特徴追跡、対象物追跡、画像ワーピング、ピラミッド作成など)の処理を、2倍に高速化し、一方で、アルゴリズム全体をまったく主プロセッサだけで実行する場合と比較して、エネルギー消費量の50%超削減を達成することが、実証されている。
ここで図9Aを参照すると、図9Aは、本開示のいくつかの実施例による、分離式ルックアップ・テーブル(DLUT)用アクセラレータを含むシステム900を示している。本明細書で説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行されるものとして本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、システム900は、図8Aのシステム800、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/若しくは図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/若しくは機能に含まれ得るか、且つ/又はそれらを含むことができる。
システム900には、1つ又は複数のプロセッサ902(図8Aのプロセッサ802に相当し得る)、メモリ904(図8Aの共有メモリ806に相当し得る)、及び分離式ルックアップ・テーブル(DLUT)用アクセラレータ906(図8Aのアクセラレータ804のうちの1つのアクセラレータ804として含まれ得る)が含まれ得る。プロセッサ902には、実施例では、VPUが含まれ得、メモリ904には、VMEMが含まれ得る。DLUT用アクセラレータ906(又は「DLUT906」)には、プロセッサ902と通信するための処理ユニット(PU:processing unit)インタフェース(I/F:interface)908、プロセッサ902と通信するためのコントローラ912、並びにプロセッサ902からの、PUインタフェース908を介して共有される情報に基づいて、及び/又はメモリ904からの、設定メッセージ又は情報がストアされているメモリ904内の場所についてのプロセッサ902による指示に基づいて、DLUT906を設定するためのコンフィギュレータ910が含まれ得る。たとえば、PUインタフェース908及びコントローラ912は、それぞれ、システム800の高度周辺バス(APB)及びイベント又はプログラミング・インタフェースに、対応することができる。コントローラ912は、プロセッサ902をDLUT906と同期させるのを助けるために、プロセッサ902から、DLUT906が処理を開始できること、及び/又はプロセッサ902からポーリング信号を受信できることを示す、キック・オフ又はトリガのコマンド又は信号を、(たとえば、「開始」とラベルづけされた矢印を介して)受信することができる。さらに、DLUT906が、1つ又は複数の割り当てられたタスクの処理を終了したときに、プロセッサ902が、DLUT906の次のタスクのための設定を開始できるように、プロセッサ902への(たとえば、「完了」とラベルづけされた矢印を介して)信号を生成することができる。
設定する際に、プロセッサ902は、PUインタフェース908を介して直接、及び/又はPUインタフェース908を介してメモリ904内の設定情報の位置を示すことによって間接的に、DLUT906を設定することができる。後者の実例では、DLUT906は、たとえば、共有読取りポートstrm1_dm_rdを介して、メモリから設定情報を取得することができ、1つ又は複数のタスクを実行するために、ストアされた設定情報を使用して、DLUT906を設定する(たとえば、サブユニット(たとえば、IAU、CDRU、PPUなど)、及び/又はDLUT906の他の構成要素を設定する)ことができる。たとえば、プロセッサ902は、DLUT906が1つ又は複数のタスクを実行するのに必要なデータ構造体を、メモリ904内にセット・アップすることができる。たとえば、1000個の座標のルックアップでは、プロセッサ902は、1000個の座標のそれぞれに応じたデータ構造体を、メモリ904内にセット・アップすることができ、さらに、DLUT906が出力を書き込むべきバッファを、メモリ904内に割り当てることができる。プロセッサ902はまた、たとえば、補間、テーブル再フォーマットなどの有無にかかわらず、1D又は2Dルックアップなど、どの演算がDLUT906によって実行されるべきかを示すこともでき、DLUT906は、この情報を使用して、サブユニットを設定することができる。プロセッサ902によってセット・アップされる設定情報には、座標インデックスのビット幅、及びテーブルのエントリのビット幅などの指示も含まれ得る。したがって、入力バッファ及び出力バッファがメモリ904内にセット・アップされ、ビット幅、演算タイプなどの設定情報がDLUT906に送信されると、プロセッサ902は、処理を開始するために、DLUT906をキック・オフ又はトリガすることができる。結果として、プロセッサ902だけに依存するシステムとは対照的に、プロセッサ902は、DLUT906がルックアップ、補間、テーブル再フォーマット、及び/又は類似のものを実行している間に、他のタスクを実行することができ、これにより、実行時間が短縮され、効率が向上する。
演算中、DLUT906は、座標に対応するインデックスのリストをメモリ904から受信することができ、DLUT906は、インデックスに対応するテーブルから値を引き出すことができ(たとえば、値が整数値である場合)、且つ/又は小数値の周囲の値(たとえば、1Dルックアップの場合、左右の値、又は2Dルックアップの場合、左上、左下、右上、及び右下の値)を引き出して、周囲の値に関する補間又は他の演算を実行することができる。最終値が判断されると(たとえば、後処理が実行されない場合、ルックアップによって直接、又は後処理ユニット(PPU:post-processing unit)930による処理の後に)、その値は、メモリ904内の、入力バッファからのインデックスに1対1で対応する、出力バッファに書き込まれ得る。これらのタスクを効率的に実行するために、実施例では、インデックス・アドレス・ユニット(IAU:index address unit)922、競合検出及び解決ユニット(CDRU:conflict detection and resolution unit)924、制御(CTL:control)先入れ先出し(FIFO:first in first out)928、小数(FRAC:fractional)FIFO926、後処理ユニット(PPU)930、データ合体ユニット(DCU:data coalesce unit)932、及び/又は他の構成要素が使用され得る。
たとえば、インデックス(IDX:index)ストリーム916には、1つ又は複数のルックアップ・テーブルでルックアップされるべき、メモリ904から(たとえば、読取りポート、strm1_dm_rdを介して)読み出されるインデックスのストリームが含まれ得、インデックスに対応する値は、メモリ904から(たとえば、読み取りポート、strm0_dm_rdを介して)、ルックアップ・テーブル(LUT:lookup table)ストリーム918を通して読み出され得る。出力(OUT:output)ストリーム920は、DLUT906を使用して処理した後、メモリ904に書き戻される(たとえば、書込みポート、strm0_dm_wrを介して)値であり得る。
プロセッサ902は、設定する際に、インデックスに関するデータ構造体にどのようにしてアクセスするかを、IDXストリーム916に示すことができる。たとえば、メモリ904とのインタフェースが64バイト幅である1Dルックアップの場合、各サイクルで64バイトが読み出され得る。1Dルックアップが実行される場合、インデックス値ごとにただ1つの座標(たとえば、1つの(x)値)が読み出され得、2Dルックアップの場合、インデックスごとに2つの座標インデックス(たとえば、1つの(x,y)値)が読み出され得る。非限定的な実施例では、各インデックスは、16ビット又は32ビットであり得るので、それぞれ64バイトの読取りで、IDXストリーム916から8個、16個、又は32個の座標が得られる可能性がある。
IDXストリーム916のデータは、生のフォーマットで、生のインデックスとしてIAU922に送信され得、各座標は、整数値又は小数値であり得る。IAU922は、インデックスが小数値の場合、小数値を分割して、小数ビットをFRAC FIFO926に供給し、PPU930を使用してテーブル内でルックアップされた周囲の値をブレンディングするのを、助けることができる。IAU922は、次いで、CDRU924に送信するインデックスのセットを判断することができ、ここで送信されるインデックスの数は、LUTストリーム918がただ1つのサイクルで実行できるルックアップの回数に相当し得る。たとえば、LUTストリーム918が、たとえば1サイクルに32回のルックアップを実行できる場合(ルックアップ・テーブルの各値のビット幅に基づいて)、IAU922は、各反復において、32個のインデックスをCDRU924に送信することができる。IDXストリーム916からIAU922への値が整数値である場合などの、いくつかの実例では、IAU922は、どんな処理もなしに、インデックスの各セットを送信することができる。しかし、IDXストリーム916からの値が小数値である場合、IAU922は、小数値に対応するブレンディングされた値を得るために、補間又は別の演算を実行するのに必要な周囲の値のそれぞれを得るのに、どのインデックスがルックアップ・アップである必要があるか(たとえば、1D補間では2個のインデックス、又は2D補間では4個のインデックス)を判断することができる。たとえば、2Dルックアップ及び補間のための、(x,y)座標に対応する小数値が(5.3,6.2)である場合、IAU922は、ルックアップが(5,6)、(5,7)、(6,6)、及び(6,7)で行われるべきであると判断でき、次いでPPU930は、値をブレンディングして、インデックス(5.3,6.2)に対応する最終値を生成することができる。たとえば、値は均等に重みづけされてブレンディングされることがあり、又は(6,7)ではなく(5,6)により近い値が、(5.3,6.2)の最終値を計算するためにより重く重みづけされるように、双1次補間を使用してブレンディングされることがある。
ルックアップのセット(たとえば、LUTストリーム918が、各読取りサイクルに32個の値を読み取ることができる場合は、32個のルックアップ・インデックス)は、IDXストリーム916を使用して読み取られた、メモリ904の入力バッファ内のインデックスの順序に対応する適切な順序で、CDRU924に送信され得る。CDRU924は、次いで、LUTストリーム918でのルックアップ・テーブルの読取りが、IAU922から受信した順序で行われる場合に生じる、バンクの競合を識別し、インデックスの順序を変更してバンクの競合を回避することで、バンクの競合を解決することにより、競合検出及び解決を実行する。たとえば、インデックスのセットをルックアップすると、バンクの競合を引き起こし、別の(たとえば、後の又は前の)インデックスのセットが、別のルックアップ・サイクルで使用可能である場合、CDRU924は、他のルックアップ・サイクルから競合しないルックアップを見つけて、競合しないルックアップを、そのサイクルで競合するルックアップと取り替えることができる。その結果、1つ又は複数のバンクの競合が回避され、これにより、スループットを高めることができる。実例では、IAUが各サイクルに32個のインデックスを送信し、所与のサイクルに、インデックスのうちの6個にバンクの競合がある場合、CDRU924は、現在のルックアップで競合を引き起こさない別のルックアップから、最大6個のインデックスを判別でき、この32回のルックアップ、たとえば、元の32個から26回のルックアップ、及びIAU922から送信された別のセットからの6回のルックアップを、実行することができる。ルックアップのセットが決定されると(たとえば、競合を考慮した代置の有無にかかわらず)、ルックアップのセットは、LUTストリーム918を使用してメモリ904から読み出され得る。
順序が乱れたルックアップを考慮して、代置が行われる場合に、CDRU924は、CTL FIFO928を使用して、IAU922からのルックアップの各セットのルックアップの順序を、データ合体ユニットに示すことができる。たとえば、DCUは、32回のルックアップの初期セットについて、最初のサイクルで8回、次いで別のサイクルで8回、次いで別のサイクルで16回実行されたと判断することができ、次いで32回のセット全体が処理されたと判断することができ、次いで、該当する場合、32回のルックアップを、後処理のためにPPU930へ押し出すことができるか、又はメモリ904の出力バッファに書き込むために、OUTストリーム920へ直接押し出すことができる。CDRU924によって判断され、LUTストリーム918に読み出された、ルックアップの実際の順序を示すこの追加情報は、CTL FIFO928を介してDCU932に伝達され得る。したがって、CDRU924が、IAU922から受信したインデックスの順序にどのような変更を加えても、DCU932は、考慮することができる。CTL FIFO928は、IAU922、CDRU924などを通過するサイクル数が、決定論的ではなく、データに依存するので、有用であり得る。たとえば、競合は、事前にはわからず(たとえば、データが、決定論的であり得ないので)、プログラミングの結果であるので、競合を完全に回避する解決策はなく、CTL FIFO928は、競合解決の結果としてのルックアップの構成を、DCU932に示すのに役立つ。
PPU930は、ルックアップ・テーブル値について追加の演算を実行する必要がある場合など、必要に応じて、メモリ904に読み出され得るインデックスごとの最終値を計算することができる。後処理が不要な場合、PPU930は、結果を収集する以外は、不要であり得る。たとえば、通常の1D又は2Dルックアップが、ルックアップ・テーブル内の位置に直接マッピングする整数値であるインデックスに対して実行される場合、PPU930及びFRAC FIFO926は、追加の処理を実行するために使用されることはない。たとえば、1Dルックアップでの線形補間若しくは2Dルックアップでの双1次補間、及び/又は他の演算が実行される場合、PPU930及びFRAC FIFO926を使用して、収集された結果をメモリ904に書き出すために、更新された結果又は値に変換することができる。
いくつかの実施例において、DLUT906は、テーブル再フォーマット・モードで使用され得る。たとえば、IDXストリーム916及びOUTストリーム920は、アクセス及び/又は転置のために、アドレスを更新するよう使用され得る。かかる実例では、メモリ904内にバッファがあり、バッファ内のインデックスが転置されるべきである場合に、この演算は、DLUT906にオフロードされ得る(プロセッサ902のアドレス生成ユニットに転置を実行させるのではなく)。プロセッサ902からの、たとえば、アドレス生成ユニットからの設定情報は、メモリ904内のバッファから読み取るための読取りパターンと、アドレスを別のパターンでメモリ904に書き戻すための書込みパターンとを示すことができる。たとえば、プログラマが、特定のアクセス・パターンによって多くの衝突が生じることを知っている場合、プログラマは、衝突があまり生じ得ない又はまったく生じ得ないように、テーブルの再フォーマットを実行してデータをシャッフルするために、DLUT906を設定するようプロセッサ902をプログラムすることができる。
さらなる実例として、DLUT906は、範囲外の検出によるセンチネル戻り値、又は範囲外のプレディケーション・オフでの出力書込みに使用され得る。したがって、たとえば、IDXストリーム916内の座標が所与の画像パッチの外側にあり、対応する値が書き込まれてはならない場合、DLUT906は、その代わりに、センチネル値を書き出すことができ、これは、出力バッファ内の情報を処理するときに、処理において、センチネル値は信頼又は使用されるべきではないことを、プロセッサ902に示すことができる。いくつかの実施例では、このセンチネル値は、値がメモリに書き込まれるべきではないことを、プロセッサ902に示すことができ、エラー値として識別された値は、ストアされ得ない。
したがって、DLUT906は、特定のタスク又は演算を実行するために一体に機能する、サブユニットのパイプラインとして実装され得る。各サブユニットは独立して演算し、共有インタフェースを介して他のサブユニットと通信することができる。図9Bに関して、表940は、特定の演算を処理中の、DLUT906の様々なサブユニットのタスクを示している。
本明細書で説明されているDLUT用アクセラレータの結果として、プロセッサ・パイプラインは、動的な競合検出及び解決を、分離式アクセラレータにオフロードすることにより、決定論的な状態で保持される。加えて、アクセラレータは、主プロセッサ(たとえば、VPU)と無関係に、且つ主プロセッサと同時に演算できるため、実行時間が短縮される。DLUT用アクセラレータはさらに、競合の検出/解決により、1つの共通テーブルからの1D及び/又は2Dルックアップを可能にし得る。アクセラレータは、線形補間を含む1Dルックアップ、双1次補間を含む2Dルックアップ、範囲外の検出によるセンチネル戻り(1Dと2Dとの両方)、及び/又は範囲外のプレディケーション・オフでの出力書込み(1Dと2Dとの両方)など、様々な後処理演算を実行することができる。DLUT用アクセラレータは、設定可能な数の小数ビットで補間を実行するよう設定され得、8、16、及び32ビットの符号付き及び符号なしデータ・フォーマット、並びに16及び32ビットの、インデックス・フォーマットに対する1D及び2D座標など、様々なインデックス及びデータ・フォーマットをサポートすることができる。DLUT用アクセラレータは、設定可能なX/Yオフセットを使用して、グローバル座標とローカル座標との間を変換することも可能であり得る。DLUT用アクセラレータはさらに、データ・ストリーム・ユニットをサポートし、VMEMからインデックス・バッファを読み取り、VMEMからルックアップを実行し、結果(又はルックアップ若しくは補間)をVMEMに書き込むことができる。データ・ストリーム・ユニットは、線形アクセス及び転置アクセスの、最大2Dのアドレス指定をサポートすることができる。ルックアップのインデックスは、ルックアップ/補間に必要なサイクル数を最適化するために、バンクの競合を最小限に抑える、たとえば、VMEMがN回のルックアップをサポートしている場合、アクセラレータが、M×N個のインデックスを使用して、競合検出を切り抜けることができるインデックスの数を最大化できるように、順序が乱れている場合があり、また、確実に競合を生み出す重複インデックスを除外するために、重複検出が実行され得る。さらに、DLUT用アクセラレータの2Dルックアップ及び補間モードには、プログラマが1組のインデックス・データを与えるのではなく、アクセラレータ内でいくつかのパラメータから自動生成されるインデックスが含まれ得る(自動インデックス・モードと呼ばれる)。これにより、インデックスの準備が、主プロセッサからアクセラレータにオフロードされる。
ここで図9Cを参照すると、本明細書で説明される方法950の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法950はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法950は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、方法950は、図9Aのシステム900に関して説明されており、方法950は、本明細書に説明されているものを含むがこれに限定されるものではない、任意の1つのシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図9Cは、本開示のいくつかの実施例による、分離式ルックアップ・テーブル用アクセラレータを使用する方法950を示す流れ図である。方法950は、ブロックB902において、プロセッサを使用して生成される設定情報に少なくとも部分的に基づいて、DLUT用アクセラレータの1つ又は複数のサブユニットを設定するステップを含む。たとえば、DLUT906は、プロセッサ902から受信した、且つ/又はメモリ904から取得した情報を使用して、DLUT906のサブユニットを設定することができる。
方法950は、ブロックB904において、メモリから読み取られたインデックスのストリームの、インデックスの第1のセットから、バンクの競合がないインデックスの第1のサブセットを判断するステップを含む。たとえば、IAU922は、競合を処理するために、CDRU924向けのインデックスのセットを生成でき、またCDRU924は、バンクの競合がないセットの、インデックスのサブセットを判断することができる。
方法950は、ブロックB906において、メモリから読み取られたインデックスのストリームの、インデックスの第2のセットから、インデックスの第1のサブセットとのバンクの競合がないインデックスの第2のサブセットを、判断するステップを含む。たとえば、IAU922は、競合を処理するために、CDRU924向けの別のインデックスのセットを生成でき、CDRU924は、第1のセットからの競合があるインデックスのうちの1つ又は複数を、第1のインデックスのセットとの競合が生じない、インデックスの第2のセットからの1つ又は複数のインデックスと、置き換えることを判断できる。
方法950は、ブロックB908において、インデックスの第1のサブセット及びインデックスの第2のサブセットを使用して、メモリから、ただ1回の読取りサイクルで複数の値を取得するために、1つ又は複数のルックアップ・テーブルのルックアップを実行するステップを含む。たとえば、DLUT906は、インデックスのセットからの値のサブセット、及びインデックスの第1のセットからの値のサブセットと競合しないと判断された、インデックスの第2のセットからの値を使用して、値をメモリ904から、LUTストリーム918へ読み取ることができる。
方法950は、ブロックB910において、複数の値をメモリに書き込むステップを含む。たとえば、LUTストリーム918からの値は、出力ストリーム920で、メモリ904に書き込まれ得る。DCU932は、書き出される前に、データが、IDXストリーム916で入力バッファから読み出されたインデックスと1対1の順序になるように、データを再構成することができる。いくつかの実施例では、PPU930は、OUTストリーム920でメモリ904へ最終値を書き出す前に、取得された値に対して、補間などの1つ又は複数の演算を実行することができる。
ダイレクト・メモリ・アクセス・システム用ハードウェア・シーケンサ
ダイレクト・メモリ・アクセス(DMA)システムを使用して、中央処理ユニット(CPU)を必要とせずに、相異なるメモリ位置からデータを移動することができる。たとえば、DMAは、データをソースからデスティネーションへ、たとえば、外部メモリ(たとえば、DRAM)、又はL2バッファ若しくはベクトル処理ユニット(VPU)のベクトル・メモリ(VMEM)などの内部メモリなどのソースから、VPUなどのデスティネーションへ移動する、データ移動エンジンとして動作することができる。DMAシステムは、実際には、これらに限定されるものではないが、フレーム・データをパディングすること、アドレスを操作すること、オーバラップするデータを管理すること、相異なる走査順序を管理すること、及び相異なるフレーム・サイズを考慮することなど、追加の動作を実行することができる。
デジタル信号処理では、複数のDMAリソースを使用して、外部メモリとVPUなどのプロセッサとの間で、構造化されたタイル・データの移動を記述することができる。たとえば、このDMAリソースには、記述子、チャネル、トリガ、及び/又はレジスタが含まれ得る。記述子は、たとえば、ソース位置、デスティネーション位置、ライン・ピッチ、タイル幅、タイル高さ、循環バッファ配置、及び/又は類似のものなどの、タイルの移動を記述することができる。しかし、空間的及び時間的な依存関係を有する像面のタイル・データの移動は、ユーザに、余分なプログラミング・モデルの課題をもたらし、また、様々な多くのDMA設定リソースを必要とする。こうしたタイル・データの依存関係はまた、プロセッサ(たとえば、VPU)のコードの、制御コード及び制御シーケンスを複雑にする場合もある。たとえば、代表的な処理演算には、3×3フィルタ処理などのフィルタ処理が含まれ得る。このタイプの演算は、すべての出力ピクセルが、出力ピクセルの周囲の3×3ピクセルの対応する値に依存することになるので、空間依存性をもたらす。かかる演算では、値の3×3マトリックスを使用してフィルタ処理を実行でき、この演算は、空間依存演算と呼ばれ得る。実際には、プログラミングの課題を軽減するために、フレームのすべてのタイルを、同じサイズ、たとえば64×64にすることができる。しかし、64×64のタイルで3×3フィルタが使用される場合、たとえば図10Cの影付きの領域に示されているように、隣り合うタイルから上下に追加のピクセルが必要となろう。したがって、タイル全体にわたってデータを適切にフェッチできるようにするには、この情報が、DMAリソースでエンコードされる必要があり、これにより、完全なものにするために余分なプログラミングの負担が生じる。
図10A~図10Gを参照すると、図10A~図10Gは、DMAシステムを使用する場合の、データ移動に関する様々な課題を示している。たとえば、図10Aの視覚化した図1000は、フレーム・データのパディングに対応することができる。視覚化した図1000では、左上のセクション、上のセクション、右上のセクション、左のセクション、中央のセクション、右のセクション、左下のセクション、下のセクション、及び右下のセクションの、9つのセクションがあり得る。かかる実例では、各セクションに、1つ又は複数のタイルが含まれ得る。たとえば、左上のセクションには、1つのタイルが含まれ得、一方上部のセクションには、たとえば4つのタイルが含まれ得る。したがって、このセクショニングを正確に規定するために、既存の手法では、このフレームは、9つの記述子(たとえば、セクションごとに1つ)、3つのチャネル(たとえば、左の列に1つ、中央の列に1つ、及び右の列に1つ)、及び3つのトリガ(たとえば、チャネルごとに1つ)を使用して記述され得る。
パディングについて、たとえば、空間依存性のために、タイル又はフレームのセクションの境界近くのデータに対して演算を実行するとき、DMAシステムは、画像の境界の外側にあるピクセルの値をパディングするか、又は値を作り上げることがある。これは、特定の実施態様では、画像のメモリ領域の外側のデータを要求すると、障害を引き起こす可能性があるためであり得る。したがって、DMAを使用して、対応するメモリ領域から画像データをフェッチした後に、値をパディング又は作り上げて、障害が起きるのを回避することができる。パディングしないと、たとえば、フィルタ処理演算を実行する場合に、データの構造がカーネル・サイズと一致しない可能性がある。追加のパディングされた値を含むフェッチされたデータは、次いで、デスティネーション、たとえばVPUに送信され得、これによりVPUは、フェッチされたデータの設定に従ってデータを処理することが可能であり、(パディングされた)フレーム全体にわたって、同じやり方でデータを処理することができる。パディングするとき、ゼロ・パディングが使用されてもよく(たとえば、新しい各データ・ポイントが値ゼロを含む場合)、複製された値が使用されてもよく(たとえば、フェッチされたデータから、隣り合うピクセルのピクセル値を複製する)、及び/又は別のパディングの仕組みが使用されてもよい。加えて、パディングは、フレームの任意の側部に追加でき、且つ相異なる側部に様々に追加されてもよい。たとえば、図10Aでは、パディングされる領域1002は、フレームの左側、上側、又は下側よりも、右側でより大きくなり得る。パディングは、データを、メモリからVMEMなど、ソースからデスティネーションに移動する場合の、DMAプログラミングの複雑度を増加させ、より大きなパディングされたフレームを処理する場合の、VPUプログラミングの複雑度も増加させる。
ここで図10Bを参照すると、図10Bの視覚化した図1010は、DMAシステムによるアドレス操作に対応する。たとえば、連続するフレーム・データをフェッチするために、様々な記述子のアドレスが操作及びプログラミングされ得る。DMAを効果的に実行するために、データ移動のアドレスの記述は連続し得る。したがって、各記述子のアドレスが操作され得、この操作は、1つの記述子から別の記述子に引き継がれる必要がある。たとえば、図示されているように、値をパディングする場合、記述子ごとの開始アドレスが、フェッチされたデータにパディングされる値が含まれるように、操作され得る。これを行うために、プログラマは、開始アドレス及びタイル幅、並びに各セクションのタイルの数を使用し、またこの情報を使用して、次の記述子のアドレスを生成する。たとえば、第1の記述子は、図10Bの矢印で示されるように、左上で開始し、次いで上、次いで右上、次いで左、次いで中央、などというように、データをフェッチさせることができる。しかし、記述子の開始アドレスにより、データをVMEMなどのデスティネーションに移動する場合に、DMAプログラミングの複雑度が増す。
別の実例として、図10Cに関して、DMAシステムは、連続したデータ処理を確実にするために、隣り合うタイルから、垂直方向及び水平方向にオーバラップしたデータを読み取る必要があり得る。たとえば、図10Cの影付きの領域で示されるように、左上のセクションのタイル及び隣り合う上のセクションのタイルからのオーバラップするデータは、同じ演算で読み取られる必要があり得る。同様に、左上のセクションのタイル及び隣り合う左のセクションのタイルからのオーバラップするデータは、同じ演算で読み取られる必要があり得る。これを実現するには、オーバラップする部分を含めるように、記述子を更新又は移動する必要がある。たとえば、ベースの記述子には、上のセクションの先頭のアドレスが含まれ得るが、隣り合う左上のセクションのタイルからのデータを取り込むために、上のセクションの記述子を更新して(たとえば、左に移動して)、左上のタイルからのデータを取り込む必要がある。この更新により、特に記述子の数が増えるほど、さらに複雑なプログラミングが必要となる。
加えて、図10D~図10Fに関して、DMAシステムは、連続してメモリからデータを読み取るために、様々な走査順序をサポートする必要があり得る。たとえば、フィルタ処理、畳込み、マトリックス乗算、及び/又は別の演算を実行するかどうかにかかわらず、関連する走査順序は異なり得る。これを考慮して、左上から始まるラスタ走査順序(視覚化した図1030)、右上から始まるラスタ走査順序(視覚化した図1032)、左下から始まるラスタ走査順序(視覚化した図1034)、及び/又は右下から始まるラスタ走査順序(視覚化した図1036)を含む、図10Dに示されるものなど、様々な走査順序がサポートされ得る。同様に、図10Eの視覚化した図1038に関して、立方体画像のために、様々な立方体の走査順序がDMAシステムによってサポートされ得る。図10Fは、左上から始まる垂直マイニング走査順序(視覚化した図1040)、右上から始まる垂直マイニング走査順序(視覚化した図1042)、左下から始まる垂直マイニング走査順序(視覚化した図1046)、及び/又は右下から始まる垂直マイニング走査順序(視覚化した図1048)など、DMAシステムによってサポートされ得る様々な垂直マイニング走査順序を示している。これらの様々な走査順序のそれぞれをサポートして、データをメモリ(VMEMなど)に移動するために、DMAプログラミングの複雑度が増す。
図10Gに関して、DMAシステムはまた、様々なサイズを有する複数のフレーム(たとえば、ルマ/クロマの複合体又は様々なピラミッド・レベル)の移動など、様々なフレーム・サイズをサポートする必要があり得る。たとえば、VPUなどのプロセッサは、様々なサイズのフレームを処理して、最終の所望の出力を生成することができる。図10Aは、オプティカル・フロー推定演算のための、フレームのピラミッド処理に対応する例示的な視覚化した図1048を示している。かかる実例では、ピクセルの移動は、最初に、より小さいフレーム・サイズが、次いで、より小さいフレーム・サイズの出力からのキューを使用して、より大きいフレーム・サイズが、次いで、より大きいフレーム・サイズからのキューを使用して、さらにより大きいフレーム・サイズが計算され得、以下同様である。したがって、DMAシステムは、様々なフレーム・サイズのフレーム・データのフェッチをサポートできるが、この機能は、DMAシステムのさらに複雑なプログラミングを必要とする。たとえば、記述子は、相異なるフレーム・サイズごとに、プログラミング又は更新する必要がある。
DMAシステムがサポートするこれらの様々な演算のプログラミングを簡略化するために、本開示のDMAシステム及び方法は、データ移動を考慮して、DMAエンジンと組み合わせてハードウェア・シーケンサを使用することができる。たとえば、画像全体のデータ移動は、タイルのシーケンス処理(トリガ)、パディング、オーバラップ(オフセット)、走査順序、及び相異なるフレーム・サイズを扱う、簡略化されたプログラミング・モデル(たとえば、図10Iで示されるような、フレームの画像構造)を用いる、ハードウェア・シーケンス処理モードで明示的且つ完全に記述され得る。ハードウェア・シーケンサは、DMAリソースの使用量を減らし(たとえば、必要な記述子、トリガ、チャネルなどの数を減らす)、VPU制御処理のためのVPUからの制御をオフロードし、DMAプログラミングの複雑度を軽減することができる。これは、プログラム可能なローカル・メモリからの一連のコマンドの形で、画像又はフレーム記述子の図(たとえば、図10Iに示されるような)をロードすることによって実現され得る。このハードウェア・シーケンス・コマンドは、本明細書で説明されている、画像のパディング、タイルのオーバラップ又はオフセット、フレームのオフセット、画像の走査順序、及びタイルの粒度単位での画像サイズを含む、プログラミングの複雑度を増加させる演算のそれぞれを、組み込むことができる。ハードウェア・シーケンサは、記述子情報(たとえば、画像コマンドから、又は別個の記述子メモリ又はSRAMからの)に加えて、メモリから画像コマンドを読み取り、タイルの移動をシーケンス処理し、フレーム全体を走査し、塗りつぶすことができる。
ここで図10Hを参照すると、図10Hは、本開示のいくつかの実施例による、ハードウェア・シーケンサを含むDMAシステム1050を示している。本明細書で説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行されるものとして本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、システム1050は、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/若しくは図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/若しくは機能に含まれ得るか、且つ/又はこれらを含むことができる。
システム1050には、DMAエンジン1056、レジスタ制御部1058、ハードウェア(HW:hardware)シーケンサ・コントローラ1060、記述子SRAM1052、及び/又はハードウェア(HW)シーケンサ・コマンドSRAM1054が含まれ得る。既存のシステムには、DMAエンジン1056及びフレームの記述子をストアする記述子SRAM1052しか含まれていない場合がある。したがって、本明細書で説明されているように、DMAエンジン1056は、以前は、ソースからデスティネーションにデータを送信するときに、パディング、アドレス操作などの演算のすべてを実行する必要があり、またVPU又は他のソースは、DMAシステムを用いた(たとえば、プライマリ・ノードであるVPU及びセカンダリ・ノードであるDMAを用いた)ハンドシェイクによるシーケンス処理を実行する必要があった。かかる実例では、DMAエンジン1056は、タイルを1度に1つずつ取得してデスティネーションに送信するために、それぞれが1つ又は複数のタイルを含む、フレームの様々なセクションの記述子を使用して、タイル・レベルで処理することになり、後続のタイルは、次のタイルを取得するための、VPUからの指示に基づく記述子に従って取得されることになる。
しかし、図10Hのシステム1050を使用して、フレームは、フレーム・レベルで処理され得る。たとえば、以前には9つの記述子を必要とした、図10Cに示されているフレームに、ただ1つの記述子が使用され得る。したがって、実際には、DMAエンジン1056が、記述子SRAM1052(又は、より一般的には、記述子メモリ1052)から記述子をロードしようとすると、HWシーケンサ制御部1060は、記述子のロードを途中で捕らえ、複数のフレーム、タイルの行/列、及び複数の記述子を扱うために、コマンド・シーケンス処理構造体を使用することができる。これを行うために、タイル・レベルではなく、ハードウェアでタイルの行/列(走査順序に応じた)を処理することにより、より上位レベルでフレームを記述する、フレーム・フォーマット1070(図10I)が使用され得る。たとえば、タイルをパディングするのではなく、フレーム・フォーマット1070を使用してフレーム全体をパディングできるため、ただ1回のパディング・コマンドで、多くのフレームをパディングする。したがって、どこにパディングするか、どこをオーバラップするか、どのようにアドレスを自動的に操作するか、など、フレーム全体が理解され得る。加えて、DMAエンジン1056は、HWシーケンサ制御部1060の介入なしに、記述子SRAM1052から直接記述子を引き出すことができるので、従来のフォーマットは、HWシーケンサ制御部1060の恩恵を受けることができない場合がある演算について、引き続きサポートされ得る。
HWシーケンサ制御部1060は、たとえば、シーケンス処理コマンドを含むフレーム・フォーマット1070がストアされている、HWシーケンサ・コマンドSRAM1054(又はより一般的には、HWシーケンサ・コマンド・メモリ1054)を読み取る、ステート・マシンとして動作することができる。R5プロセッサ、CPU、ARMプロセッサなどの処理コントローラは、プログラミングされたコード及び/又はより上位レベルのエンジンからのセッティングを使用して、HWシーケンサ・コマンドSRAM1054及び記述子SRAM1052をプログラミング又は設定することができる。
記述子SRAM1054には、タイル寸法(たとえば、タイル幅dx、及びタイル高さdy)、画像又はフレームの開始点(たとえば、左上、右下など)、トリガのタイプ、及び/又は記述子のスキャン・タイプに関する他のマイクロ情報を規定できる、1つ又は複数の記述子が含まれ得る。
HWシーケンサ・コマンドSRAM1054は、フレーム全体、フレームのサイズ、フレームのパディングなどを規定する、フレーム・フォーマット1070をストアすることができる。たとえば、フレーム・フォーマット1070には、ヘッダ制御、オフセット制御、及びパディング制御のためのフレーム・ヘッダが含まれ得、またフレームの列又は行の、列ヘッダ及び/又は行ヘッダ(たとえば、垂直スキャン・パターンのための列ヘッダ、及びラスタ・スキャン・パターンのための行ヘッダ)が含まれ得る。フレーム・ヘッダ制御には、特定のフレームが何回繰り返されるべきかを識別するための、フレーム繰返しファクタばかりでなく、記述子の行及び/又は記述子の列の数も含まれ得る。フレーム・ヘッダ・オフセット制御には、フレーム・タイル・オフセット(たとえば、タイルからタイルへのオフセット)及びフレーム・オフセット(たとえば、3つの別個の面を含むYUVフレームが処理され得る場合など、ただ1つのチャネルを使用して読み出され得る、2つ以上のフレーム間のオフセット)が含まれ得る。フレーム・パディング・ヘッダは、フレームの左側部、フレームの上部、フレームの右側部、及び/又はフレームの下部のパディングなど、フレーム・レベルで(以前の手法でのタイルごとのレベルではなく)追加する、パディングのライン数又はピクセル数を示すことができ、これにより、タイル・レベルでフレームの各セクション内の各タイルをパディングするのではなく、フレーム全体がパディングされる。
列ヘッダは、走査順序が垂直の場合に使用され得、行ヘッダは、走査順序がラスタ又は水平の場合に使用され得る。列ヘッダ及び/又は行ヘッダには、列又は行のオフセット(たとえば、各列又は各行間のオフセットの大きさ)、列又は行の繰返しファクタ(たとえば、N-1回など、フレームにわたって、同じ列又は行の処理タイプを繰り返す回数であって、ここでNは、列又は行が処理される回数)、及び列又は行ごとに使用される記述子の数(たとえば、ただ1つの記述子を使用して、行若しくは列にわたって、同じタイルを繰り返すことができるか、又は第1の記述子を使用して行の一部を走査でき、第2の記述子を使用して行の別の部分を走査できる、など)が含まれ得る。記述子IDは、たとえば、記述子SRAM1052にストアされている記述子が引き出され、行又は列を記述するために使用され得るように、記述され得る。たとえば、記述子IDは、どの記述子を特定の列及び/又は行に使用するか、並びに何回記述子が繰り返されるか(たとえば、N-1回、ここでNは、記述子が合計で使用される回数)を示すことができる。実施例では、セットされた数(たとえば、64個)の記述子があり得、記述子IDを使用して、特定の列及び/又は行に、どの記述子が使用されるべきかを判断することができる。このようにして、ハードウェア・シーケンサ・コントローラ1060は、記述子SRAM1052からの基本の記述子の上にある、フレームの高次の構造を調べ、これにより、同じデータ転送を実施するためにDMAエンジン1056が必要とするリソースの簡略化が可能になる。加えて、HWシーケンサ制御部1060は、レイテンシを短縮するために、たとえば、レジスタ制御部1058を使用して、前もってタイルをプリフェッチすることができ、DMAエンジン1056からの要求に応じて、タイルのデータは、即座に利用可能となり得る。
演算中、HWシーケンサ制御部1060は、記述子SRAM1052からの記述子情報と共に、HWシーケンサ・コマンドSRAM1054から画像の構造(たとえば、フレーム・フォーマット1070)を読み取ることができ、DMAエンジン1056用に、フレームにわたってシーケンス処理するために、情報を組み合わせることができる。したがって、それぞれの記述子、トリガ、チャネルなどについて、DMAエンジン1056の個別のコーディングを必要とするのではなく、HWシーケンサ制御部1060が、画像構造を読み取り、記述子を取り込み、DMAエンジン1056用に、フレームにわたって、適切な記述子フォーマットでシーケンス処理することができる。レジスタ制御部1058は、実施例では、走査順序、プリフェッチ、及び/又は他のフレーム・アドレス指定制御を、制御するのを助けることができる。HWシーケンサ制御部1060は、VPUのコードをさらに簡略化し、その結果VPUは、複数のチャネルを考慮する必要がない。その代わりに、VPUは、タイル、次いで次のタイル、次いで次のタイル、などというように、要求することができる。HWシーケンサ制御部1060は、フレーム内の現在の位置を理解しているので、DMAエンジン1056のためにフェッチされるべき次のタイルを理解し、DMAエンジン1056は、この情報を内部で追跡し続ける必要はない。
したがって、システム1050は、システムが、依然として様々な記述子、トリガ、チャネルなどの使用をサポートできるが、また複雑度を軽減するために、フレーム・レベルで理解できるので、以前の手法と後方互換性があり得る。システム1050は、フレームのすべてのコーナでの、様々なピクセルのパディング・サイズでの画像のパディング、タイルの境界に沿って処理するために、VPUの、隣り合うタイルへのアクセスを可能にする、垂直方向及び/又は水平方向のタイルのオーバラップ、並びに相異なる走査順序でのフレームの走査を、サポートすることができる。加えて、システム1050は、デスティネーションであるVMEMでの、HWシーケンサ制御部1060による自動タイル・オフセット調整をサポートすることができる。フレームの記述子は、ハードウェアを介してリンクされているので、ユーザは、記述子を一体にリンクするか又はつなぎ合わせる必要がない。HWシーケンサ制御部1060は、プログラミングの複雑度をさらに増すことなしに、フレームにわたる記述子/タイル全体のアドレスのシーケンス処理を管理でき、またHWシーケンサ制御部1060は、性能を改善するために、タイルをプリフェッチすることができる。
いくつかの実施例では、記述子は、記述子SRAM1052に別個にストアされるのではなく、画像又はフレーム構造体に含まれ得る。たとえば、従来品との互換性が実装されていない場合、シーケンス処理構造体及びタイル構造体の全部が、フレーム構造体内に記述され得る。かかる実例では、図10Iのフレーム・フォーマットには、タイル幅、トリガ・タイプなどの記述子の追加情報が含まれ得、その結果、HWシーケンサ制御部1060は、記述子が記述子SRAM1052に別個にストアされている場合と同じ情報を使用可能である。
図10Jを参照すると、図10Jは、本開示のいくつかの実施例による、ラスタ・スキャン・シーケンス用に実装された場合の、図10Iのフレーム・フォーマット1070の実例である。たとえば、フレーム・フォーマット1070Aは、ただ1つのチャネル、ただ1つのトリガ、及びただ1つの記述子を使用し、ラスタ・モードでフレーム・アドレス処理する、フレーム・フォーマットの一実例である。この実例では、タイル構造は16×8であり得る。図10Kは、本開示のいくつかの実施例による、ラスタ・スキャン・シーケンスにおいてハードウェアでシーケンス処理し、例示的なフレーム・フォーマット1070Aを使用してフレーム・アドレス処理する、このタイル構造体の実例である。たとえば、タイルの行ごとに、同じ記述子(たとえば、タイルの寸法)が使用され得(視覚化した図1072において、「D1」で示されている)、これにより、同じタイルが、各行に沿って16回(C1からC16まで)用いられ、上から下まで8行(R1からR8まで)繰り返される。シーケンスには、フレーム・フォーマット1070Aに示されているように、20バイトが含まれ得、各行は、N*2+バイトを有することができ、ここで、Nは、行当たりのエントリ数を表す(図10Jに示されているように)。したがって、視覚化した図1072に示されているようにフレームをシーケンス処理するために、フレーム・フォーマット1070Aには、フレームの繰返しが含まれ得ず、記述子行の数はゼロであり得、タイル・オフセットなし、フレーム・オフセットなし、左側ピクセル(PL)、右側ピクセル(PR)、上ピクセル(PT)、及び下ピクセル(PB)の3行をフレーム・パディング、行は7回繰り返され得(合計8行に対して)、各行のオフセットはタイルの高さ(Ty)(各行がタイルの高さだけオフセットされるように)、記述子IDがD1の1つの記述子が使用され得、記述子は、各行に15回(合計16回)繰り返され得る。したがって、実際には、HWシーケンサ制御部は、記述子SRAM1052からのD1(タイルの高さ及びタイル幅を含む)に対応する記述子を使用することができ、HWシーケンサ制御SRAM1054にストアされた、フレーム・フォーマット1072の画像構造体を使用して、デスティネーションプロセッサ(たとえば、VPU)向けに、画像タイルごとに(1行当たり16個のタイル)、行ごとに(R1からR8)シーケンス処理することができる。このようにして、ただ1つの記述子、ただ1つのトリガ、及びただ1つのチャネルが使用され得、これにより、プログラミングの複雑度を低減しながらも、DMAシステム1050を、DMAシステム1050とVPUとの相互作用で、主要な又は制御する構成要素にすることも可能である。
いくつかの実施例では、HWシーケンサ制御部1060の拡張として、DMAトリガ・モードを使用して、DMAシステム1050に記述子のシーケンスを命令させることによって、VPUをプログラミングする際のソフトウェアの介入を減らすことができる。たとえば、DMAシステム1050は、外部メモリから画像を読み取り、画像をタイル状に並べ、VPU向けに、タイルをシーケンス処理することができる。VPUは、これを容易にするために、開始信号及び完了信号をアクセス可能にし得る。VPUの開始は、DMAシステム1050によって駆動され得、VPUが命令ブロックの処理を終了したとき、VPUは、完了信号をDMAシステム1050に送信することができる。したがって、DMAシステム1050(たとえば、HWシーケンサ制御部1060)及びVPUは、DMAシステム1050が1次ノードであり、VPUが2次ノードである場合、ハンドシェイクの仕組みにかかわることができる。このDMAトリガ・モードは、VPUのタイル制御のオーバヘッドを最小限に抑え、DMAエンジン1056用のプログラミング・モデルを、簡略化することができる。たとえば、DMAデータの移動をダブルバッファリングする、特定のコードは必要ない場合があり、DMAのカーネル・コードは、VPUのカーネル・コードとは無関係であり得る。したがって、タイルのシーケンス処理は、HWシーケンサ制御部1060を使用するDMAシステムが扱うので、DMAトリガ・モードは、VPUのコードを簡略化する。下記の例示的なコードは、DMAトリガを追加する前後の、VPUのコードを示している。

Figure 2023021912000020

Figure 2023021912000021
その結果、以前は、VPUが、タイルのVMEMへの移動を要求していたが、今は、HWシーケンサ制御部1060がシーケンス処理を制御するので、DMAシステム1050が、VPUをターゲットとして、タイルのVMEMへの移動をトリガすることができる。このようにして、DMAシステム1050は、VPUによって処理されるべきデータを前もってフェッチすることができ、VPUが、処理が完了したことを示すと、DMAシステム1050は、処理されるべき次のデータを、直ちに使用可能にすることができ(たとえば、VMEMで)、VPUにもこれを示すことができる。
フレームの処理を実行するとき、HWシーケンサ制御部1060は、記述子SRAM1052から記述子(タイルの寸法、トリガ・タイプなどを示すことができる)を取得することができ、またHWシーケンサ・コマンドSRAM1054から、画像構造体を取得することができる。次いで、HWシーケンサ・コマンド1060は、レジスタ制御部1058と共に、走査順序に従って、また第1の(実施例では唯一の)記述子を使用して、第1の行又は列の走査を開始することができ、次いで、2つ以上の記述子が使用されている場合は、繰返しの数(たとえば、1-N)が満たされるのに基づいて、第2の記述子に移動することができ、以下同様である。各タイルが決定されると、DMAエンジン1056は、ソース・データからタイルのデータを取得し、タイルのデータをデスティネーション・データ(たとえば、VMEM内の)に書き込むことができる。データがデータのデスティネーションに書き込まれると、プロセッサ(たとえば、VPU)は、プロセッサが処理を開始するためにデータを使用可能であることを、HWシーケンサ制御部1060から通知され得る。次いで、DMAシステム1050は、処理中に、HWシーケンサ制御部1060からのシーケンスに基づいて、データの次のタイルをフェッチし、データをデータのデスティネーションに書き込むことができ、この結果、プロセッサが、処理が完了したことを示すとき、HWシーケンサ制御部1060は、処理すべき次のデータが使用可能であることなどをVPUに示すことができ(ハンドシェイクの仕組みを介して)、以下、処理が完了するまで同様である。
ここで図10Lを参照すると、本明細書で説明される方法1080の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法1080はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法1080は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、方法1080は、図10Hのシステムに関して説明されており、方法1080は、本明細書に説明されているものを含むがこれに限定されるものではない、任意の1つのシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図10Lは、本開示のいくつかの実施例による、ハードウェア・シーケンサを含むDMAシステムのための方法1080の流れ図である。方法1080は、ブロックB1002において、記述子メモリからタイル構造体、及びHWシーケンサ・コマンド・メモリからフレームに対応するフレーム構造体を、取得するステップを含む。たとえば、HWシーケンサ制御部1060は、記述子SRAM1052から記述子を取得することができる。
方法1080は、ブロックB1004において、ソース・メモリからのフレームのタイルの取得を、シーケンス処理するステップを含む。たとえば、ハードウェア・シーケンサ制御部1060は、実施例では、レジスタ制御部1058と共に、フレーム(又は画像)構造体及び記述子からのタイルの記述に従って、DMAエンジン1056によるソース・メモリからのタイルの取得を、シーケンス処理することができる。
方法1080は、ブロックB1006において、取得したタイルに対応するデータを、デスティネーションのメモリに書き込むステップを含む。たとえば、DMAエンジン1056は、取得したタイルに対応するデータを、デスティネーション・プロセッサ(たとえば、VPU)で処理するために、デスティネーションのメモリ(たとえば、VMEM)に書き込むことができる。
方法1080は、ブロックB1008において、取得したデータがデスティネーションのメモリにストアされたという指示を、デスティネーションのメモリに関連するプロセッサに供給するステップを含む。たとえば、HWシーケンサ制御部1060は、次のタイルのデータが処理するために準備されていることを、プロセッサに示すことができる。
方法1080は、ブロックB1010において、取得したデータの処理が完了したという指示を受信するステップを含む。たとえば、処理が完了すると、プロセッサは、処理が完了したことをDMAシステム1050に示すことができ、その時点で、データの次のタイルがデスティネーションのメモリにロードされ得(又はプリロードされていてもよい)、DMAシステム1050は、プロセッサにこれを示すことができる。
VPUを使用して、領域に依存するデータの移動のためにDMAシステムを設定する
処理コントローラは、既知のデータ・パターンをフェッチするとき、ダイレクト・メモリ・アクセス(DMA)システムを設定することができ、プロセッサ(たとえば、ベクトル処理ユニット(VPU))は、DMAをトリガ及びシーケンス処理することができる。しかし、不規則な又は未知のデータ・パターンについて、様々なデータ・ポイント又は特徴を処理する場合、特徴又は対象物の位置を動的に計算するので、データ移動の再設定に課題が生じることがある。たとえば、対象物追跡アルゴリズム、特徴追跡アルゴリズム、対象物検出アルゴリズム、可変サイズの関心領域(ROI:regions of interest)を使用する深層学習アルゴリズム、及び/又は他の領域依存のデータ移動アルゴリズムでは、DMAシステムは、VPUなどのプロセッサが、処理するための適切な情報を取得できるように、アドレスとデータとのペアを動的に調整する必要がある。従来のシステムでは、対象物追跡などにおいて、未知のデータ・パターンをフェッチする場合、処理コントローラ(たとえば、プログラム可能なビジョン・アクセラレータ(PVA)を制御する、R5プロセッサ・コア)は、プロセッサ(たとえば、VPU)によって計算された、更新された情報を判断して、次の反復に向けてDMAを再設定するための、処理サイクルに介入する割込みを必要とし得る。このため、処理コントローラは、たとえば、短い応答時間が必要な追跡アルゴリズムに、余分なレイテンシをもたらす。
処理コントローラによる介入を必要とする従来のシステムの欠点を考慮して、本開示のシステム及び方法は、DMA及びプロセッサ(たとえば、VPU)を使用して、DMAが、プロセッサの出力に基づいて、DMAの記述子の再設定を可能にする、密結合型の処理ループを設定することができる。したがって、DMAは、実行時に動的に再プログラミングされ、領域に依存するデータの移動を必要とする、特定のアルゴリズムを扱うことができる。このVPU設定モードを使用して、DMAの記述子を更新し、実行時のVPUの計算に基づいて、位置を含む特徴データを追跡することができる。このため、VPUは、VMEMなどのメモリ内の、アドレスとデータとのペアのリストを指定し、次いでDMAをトリガしてDMA自体の記述子を更新し、新しく計算されたアドレスを有する領域からデータを収集することができる。VPUとDMAとの間のインタフェースに依存することにより、処理コントローラ(たとえば、R5又はARM処理コア)が、処理を開始するために最初にVPU及びDMAを設定すると、処理コントローラの介入は不要となり得る。したがって、機能記述子を更新するための、このバルクの高速な同期MMIOアクセスにより、対象物追跡、特徴追跡、対象物検出、深層学習、及び/又は領域に依存するデータの移動を伴う他のアルゴリズムのレイテンシが減少する。
ここで図11Aを参照すると、図11Aは、本開示のいくつかの実施例による、ベクトル処理ユニット(VPU)を使用してダイレクト・メモリ・アクセス(DMA)システムを設定するプロセスの、データ・フロー図1100を示している。本明細書に説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行されるものとして本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、処理1100は、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/又は図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/又は機能を含むシステムによって実行され得る。
プロセス1100を実行するシステムには、処理コントローラ1102(たとえば、R5プロセッサ、ARM処理コア、命令セット・アーキテクチャ(ISA)、X86アーキテクチャなど)、ダイレクト・メモリ・アクセス(DMA)システム1104、ベクトル処理ユニット(VPU)1108(又は別のプロセッサ・タイプ)、ベクトル・メモリ(VMEM)1110(又は別のメモリ・タイプ)、及び記述子RAM1106が含まれ得る。実際には、VPU設定モードは、非連続のアドレス/データのペアのシーケンスを、DMA記述子SRAMに書き込むことによって、DMA記述子を設定することができる。プロセス1100は、例示的な特徴又は対象物追跡アルゴリズムに関して説明され得る。しかし、これは限定することを意図するものではなく、プロセス1100及び基礎となるシステムを使用して、領域に依存するデータの移動を伴うような、任意のタイプのアルゴリズムを実行することができる。
たとえば、第1の動作には、一部のデータに対して処理を実行するようにDMA1104及びVPU1108を設定し、次いでDMA1104及びVPU1108の両方が処理を行うようトリガする、処理コントローラ1102が含まれ得る。たとえば、処理コントローラ1102は、処理のために、記述子RAM1106にメモリの開始点をロードすることができ、また、VPU1108がデータに対して実行する特定のタイプの動作のために、VPU1108のレジスタを設定することができる。
第2の動作では、VPU1108は、DMA1104をトリガして、VMEM1110内の初期特徴データ・ポイントを、読み取ることができる。たとえば、VPU1108は、作業を開始するために、DMA1104からのデータを必要とするので、VPU1108は、処理データを取得するために、VMEM1110のVPU1108が知っている位置にデータ・ポイントをロードするように、DMA1104を設定する。
第3の動作において、VPU1108は、現在の特徴データ・セットを処理し、次に追跡される対象物又は特徴の位置を計算することができる。その結果、VPU1108はこの時点で、追跡される特徴又は対象物の、計算された新しい、すなわち更新された位置を有することができる。
第4の動作において、VPU1108は、VPU設定フォーマット(図11Bに関連して説明される)を使用して更新された位置で、VMEM1110をアップデーテッドすることができ、次いで、DMA1104をトリガして、記述子RAM1106内のDMAの記述子を更新することができる。たとえば、図11Bは、本開示のいくつかの実施例による、VPUによってベクトル・メモリ(VMEM)に書き込まれ、DMAシステムによって読み取られる、VPU設定フォーマットを示す表1120である。たとえば、フォーマットには、アドレス/データのペアごとに、アドレス用に4バイト、及びデータ用に4バイトが含まれ得る。
第5の動作において、DMA1104は、VPU1108による処理の次の反復に向けて、適切なデータを取得するために、記述子RAM1106内の記述子を更新することができる。たとえば、DMA1104は、アドレス/データのペア形式VPU設定フォーマットを読み取り、更新された位置で動作記述子にパッチを当てることができる。実施例では、特徴点と記述子との間が1対1の対応であり得、したがって、追跡される各特徴、対象物、又はポイントには、関連する記述子が含まれ得る。このようにして、追跡される特徴、対象物、又はポイントごとのアドレス/データのペアは、個々の記述子を使用して、経時的に更新され得る。
第6の動作において、DMA1104は、記述子RAM1106内の新しく更新された記述子を使用して、位置に対する新しい特徴データをフェッチすることができる。たとえば、DMA1104は、記述子が更新されたことをVPU1108に示すことができ、またVPU1108は、DMA1104をトリガし、VMEM1110に対して、新しいデータを読み取ることができ、以下同様である。
結果として、処理コントローラによる第1の設定動作の後、動作2から6が繰り返されて、処理コントローラの介入を必要としない緊密に同期したVPU設定ループを形成し、これにより、追跡又は検出アルゴリズムで必要となる短い応答時間を考慮して、レイテンシを短縮することができる。加えて、DMA1104が、メモリ内のアドレスを、新しい更新されたアドレスで上書きしているので、DMA1104は、DMA1104が、次に何をフェッチすべきかを理解するために調べる必要のあるコードを更新している。こうすることより、アドレス及びデータに応じてレジスタを更新するのに制御バスに依存していた従来のシステムとは違って、スループットが向上する。したがって、アドレス/データのプロトコルを規定することの利点は、アドレス/データのペアが更新される方法と共に、可変量のデータを有する可変量のアドレス位置が更新され得る場合に、実現される。これにより、制御バスの幅よりも広い幅(たとえば、それぞれ512ビット対32ビット)を有することができるDMA1104は、1度に(たとえば、これに限定されるものではないが)最大8つのアドレス/データのペアまで、更新することができる(各アドレス/データペアが、図11Bのように、8バイトを使用して規定されている場合)。
さらに、DMAが、プロセス1100のVPU設定モードを使用して更新されるように示されているが、システムの追加又は代替の要素又は構成要素が更新されてもよい。たとえば、VPU1108の命令キャッシュが、VPUを使用し、同様の手法を使用して更新されてもよい。別の実例として、更新されるハードウェア・シーケンサのプログラムが、アドレス・データを与えることによってハードウェア・シーケンサ・メモリを更新するように、書かれてもよい。これには、本質的に、図10Hのハードウェア・シーケンス・コントローラ1060用のハードウェア・シーケンサ・RAM1054などの、ハードウェア・シーケンサRAMに、新しいプログラムを書き込むことが含まれるであろう。
ここで図11Cを参照すると、本明細書で説明される方法1150の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法1150はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法1150は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、方法1150は、図11Aのシステムに関して説明されており、方法1150は、本明細書に説明されているものを含むがこれに限定されるものではない、任意の1つのシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図11Cは、本開示のいくつかの実施例による、VPUを使用してDMAシステムを設定する方法1150の流れ図である。方法1150は、ブロックB1102において、プロセッサを使用して、またDMAシステムを使用してメモリに書き込まれた第1のデータに少なくとも部分的に基づいて、追跡される特徴の1つ又は複数の第1の更新された位置に対応する、第1の出力を計算するステップを含む。たとえば、VPU1108は、DMA1104を使用して、VMEM1110に書き込まれたVMEM1110からのデータにアクセスすることができ、追跡される特徴、対象物、ポイントなどに対応する、1つ又は複数の対象物の位置を計算するために、データを処理することができる。
方法1150は、ブロックB1104において、プロセッサを使用して、1つ又は複数の第1の更新された位置に対応する、1つ又は複数のアドレス/データのペアを表す第2のデータを含むように、メモリを更新するステップを含む。たとえば、VPU1108は、1つ又は複数の位置を計算した後、VMEM1110の、図11Bに関連して説明されたフォーマットなどのフォーマットにおけるアドレス/データのペアを、更新することができる。
方法1150は、ブロックB1106において、DMAシステムを使用して、また1つ又は複数のアドレス/データのペアに少なくとも部分的に基づいて、追跡される特徴に対応する1つ又は複数の記述子を更新するステップを含む。たとえば、DMA1104は、VMEM1110のアドレス/データのペアにアクセスし、アドレス/データペアを使用して、次の読み取り動作のために、記述子RAM1106内の記述子を更新することができる。
方法1150は、ブロックB1108において、DMAシステムを使用して、また1つ又は複数の記述子に少なくとも部分的に基づいて、第3のデータをメモリに書き込むステップを含む。たとえば、DMA1104は、記述子を使用して識別された、アドレス/データのペアに対応する更新されたデータを、VMEM1110に書き込むことができる。
方法1150は、ブロックB1110において、プロセッサを使用して、また第3のデータに少なくとも部分的に基づいて、追跡される特徴の1つ又は複数の第2の更新された位置に対応する、第2の出力を計算するステップを含む。たとえば、VPU1108は、更新されたデータがVMEM1110内に入ると、追跡される特徴、対象物、ポイントなどに対応する、更新されたアドレス/データのペアの次のセットを計算することができ、このプロセスは、処理が完了するまで繰り返すことができる。
プログラム可能なビジョン・アクセラレータ(PVA)における恒久的障害の検出
自律型及び半自律型機械アプリケーションなどの安全性が重要なアプリケーションにおいて、恒久的障害の検出及び切離しには、厳格な要件がある。たとえば、深層学習、コンピュータ・ビジョン、センサ処理、及び/又は他の機械でのアプリケーションを実行する場合、正確なテストを可能にするためだけでなく、アプリケーションの、たとえば、短いレイテンシでの適切な実行を可能にするために、恒久的障害の検出を、定期的且つ割り当てられた時間予算内で実行する必要がある。自動車安全性水準(ASIL:automotive safety integrity level)Dに関して、自律型又は半自律型の機械で実行されるアプリケーションは、恒久的障害の90%以上の網羅率(coverage)が必要であり得る。これを行うために、短いレイテンシで、それぞれの特定のアプリケーションが実行する時間予算を満たしながらも、100パーセントの網羅率が必要となり得る。従来の手法では、内蔵自己テスト(BIST)を使用して障害を識別するが、こうしたBISTの技法は、十分な網羅率を含んでいない、システムに長すぎるレイテンシをもたらす、且つ/又は特定のアプリケーションを実行する時間予算を満たしていない。
こうした従来の手法の欠陥を考慮して、本システム及び方法は、たとえば、システム・オン・チップ(SoC)のプログラム可能なビジョン・アクセラレータ(PVA)の障害検出を実行するために、多入力シグネチャ・レジスタ(MISR)でのBISTを実行することができる。たとえば、本開示の様々な実施例では、PVAには、1つ又は複数のDMAシステム、並びにR5プロセッサ、ARMプロセッサ、CPU、及び/又は類似のものなどの、1つ又は複数の処理コントローラ(又は制御プロセッサ)を使用して制御される、1つ又は複数のVPUが含まれ得る。そのため、PVAの各構成要素にテストが必要な場合があり、本システム及び方法は、MISRでのBISTを実行して、恒久的な障害を100パーセント検出する。このようにして、制御論理機構とデータ論理機構との両方のブロックを100パーセント網羅し、レイテンシを減らすために安全プロセッサに直接エラーを報告し、特定のアプリケーションをカスタマイズして関連する実行時間予算を満たす、恒久的な障害検出が実行され得る。
様々な実施例において、MISRは、恒久的な障害検出のためのソフトウェア論理機構のBISTを実施するために、PVAで使用され得る。図12A及び/又は図12Bに関して本明細書で説明されるMISRハードウェアには、処理コントローラを使用して、たとえば、既知のシード値で初期化される巡回冗長検査(CRC)ハードウェアが含まれ得る。PVAアプリケーションを実行すると、処理コントローラは、タイミング予算の一部、たとえば、タイミング予算の約10%以下を割り当てて、正しいシグネチャ又は黄金値の、決定論的な事前計算された出力を有する、既知の入力を用いた既知のソフトウェアMISRテストを実行することができる。たとえば、タイミング予算が毎秒30フレームに対応する場合、3フレーム以下に相当するタイミング予算が、MISRテストに割り当てられ得る。処理コントローラは、割り当てられた時間に、MISRテストを開始し、テストの完了を待って、MISR CRC計算を終了することができる。テストが完了すると、MISRハードウェアは最終的なCRC値を読み戻し、事前に計算された黄金値に対して最終的なCRC値をチェックすることができる。不一致の場合、MISRハードウェアは、エラーをSoCの安全プロセッサに直接報告し、たとえば、アプリケーションの出力を無視させる、恒久的な障害に対処するか又は回避するなど、安全エラーを扱うためのさらなる措置をとることができる。
したがって、DMAブロック内のMISRハードウェアは、PVAの高度拡張可能インタフェース(AXI)マスタ・ポートのうちの1つ又は複数(たとえば、実施例ではすべて)でのトランザクションのうちの1つ又は複数(たとえば、実施例ではすべて)を監視することができる。実施例では、PVAからのすべての出力ステージを検査することにより、PVAの安全の完全性が、アプリケーションの実行時に、場合によってはPVA及び/又は別のエンジンによって使い果たされる可能性がある出力ステージ、たとえば出力情報を、破損する可能性のある恒久的な不具合に対して、チェックされ得る。したがって、MISRハードウェアは、PVAの様々なブロック(たとえば、処理コントローラ、VPU、及びDMAシステム)にわたってエラーを検出することができる。というのは、出力ステージを作り出すことに関して、これらの構成要素すべてが協働し、相互作用するからである。MISRハードウェアで計算されたシグネチャは、MISRテストの期間中ずっと、PVAのこれらの様々なブロックの状態を表すことができる。
実施例では、MISR方式には、AXIマスタ・ポートを離れる書込みアドレス(たとえば、40ビット制御)と書込みデータ(たとえば、512ビット・データ)との両方に対するCRCチェックが含まれ得る。このフィーチャが、制御パスの障害(たとえば、アドレス指定エラー)をデータ・パスの障害(たとえば、計算エラー)から切り離すことを可能にし得る。本明細書で説明されるMISRハードウェアの設定により、各DMAのAXIポートをチェックすることが可能であり得る。実施例では、制御ビットを使用して、メモリ・サブシステムの、メモリ割当て中の帯域幅の消費量を節約するために、MISR計算に関与しているすべてのチャネルのアドレス及びデータ出力の書込みを、ディスエーブルすることができる。さらに、MISR方式には、MISR計算から特定のチャネルを除外又はマスクするために、たとえば、非安全チャネルを切り離すために、制御レジスタ・ビットがチャネルごとに含まれ得る。DMAは、実施例では、IEEE802及びMPEG CRC-32原始多項式を使用して、MISR CRC:X32+X26+X23+X22+X16+X12+X11+X10+X+X+X+X+X+X+1を計算することができる。MISR SETレジスタを使用して、アドレスとデータとの両方のCRC計算の、CRC初期値(たとえば、シード値)をセットすることができる。MISR REFレジスタを使用して、アドレスとデータとの両方のCRC計算での、CRC値を比較することができる。
512ビット・データのMISRをサポートするために、8:1ビット・データ圧縮が適用され得る。たとえば、各データ・バイトが、8>1排他的論理和(XOR:exclusive OR)演算を通して1データ・ビットに圧縮され、2×32ビットのメッセージ・データを形成することができる。MISRの40ビット・アドレスをサポートするために、9つの最上位ビットが圧縮され得る。たとえば、9つの最上位アドレス・ビットが、9>1XOR演算を通して圧縮され、32ビットのメッセージ・アドレスを形成することができる。テスト・パターン及び命令の多様性を使用して、圧縮に関係するエイリアシングをカバーすることができる。出力画像のあるバイトに偶数のエラー(even number of errors)がある場合、エラーによる障害がアドレスCRCエラーを生じさせることはないので、エイリアシングが発生する確率は低くなり得る。加えて、MISRテストの全期間にわたって、同じ偶数エラー・ビットの場所に同じパターンを有する出力画像に対して、参照CRCが計算され得るので、エイリアシングの可能性は低くなり得る。エイリアシングは、試験中、網羅率において、平均0.25%のロスを引き起こすことが示された。かかる低いエイリアシングでのデータ圧縮は、バスの幅が、たとえば、実施例において512ビットであるので価値があり、圧縮がなければ、MISRテストは、システムのレイテンシ又は実行時間予算を満たさない可能性がある。
MISRタイマ・レジスタを使用して、MISRの計算をタイム・アウトにすることができ、MISRタイマ・レジスタは、AXIのクロックごとに減算され得る。タイム・アウトのフィーチャは、MISRテストがハングアップの原因となって、MISRハードウェアが、エラーを報告するのを阻止する可能性がある障害の場合に、役立ち得る。処理コントローラは、MISRテストが終了したときにMISR計算を停止するために、ソフトウェア・イベントを使用することができる。DMAシステムは、MISR REF値を、MISRテストのデータ出力とアドレス出力との両方のMISR VAL値と比較することができ、DMAハードウェアは、比較した結果に基づいて、MISRステータス・レジスタを更新することができる。たとえば、MISRステータス・レジスタには以下の値のうちの1つが含まれ得る。0:アイドル、1:完了、データ不合格、3:ビジー、4:完了、アドレスとデータとの両方が不合格、5:完了、タイム・アウトによる不合格、6:予備、及び7:完了、合格。MISRタイム・アウト・エラーの場合、DMAは、安全プロセッサへのタイム・アウト信号を生成することができ、データ及び/又はアドレスのCRCチェック・エラーの場合、DMAは、安全プロセッサに対して安全エラーをアサートすることができる。
図12Aを参照すると、図12Aは、本開示のいくつかの実施例による、プログラム可能なビジョン・アクセラレータ(PVA)の巡回冗長検査(CRC)計算を実行する、内蔵自己テスト(BIST)システムの図である。本明細書に説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行されるものとして本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、MISRハードウェア1250は、図10HのDMAシステム1050、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/又は図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/又は機能を含むことができる。たとえば、MISRハードウェア1200は、図10Hに示されているような、PVAのDMAブロックに含まれ得る。したがって、MISRハードウェア1200は、データ移動の出力ステージで動作することができ、アドレス指定(又は制御)は、DMAエンジン1056の出力を利用する(tapping into)ことができる。図12Aの実例では、16個のAXIデータ・チャネル及び16個のAXIアドレス(又は制御)チャネルがあり得る。しかし、これは限定することを意図するものではなく、実施例に応じて、任意の数(及び/又はタイプ)のデータ及び/又はアドレス・チャネルが使用され得る。
動作中、処理コントローラは、DMAシステム1050及びMISRハードウェア1200、並びにVPUなどのシステムの1つ又は複数の処理構成要素を制御することができる。DMAシステム1050のMISRテストを実行する場合、実施例では、テスト・コードには、すべて0、すべて1、0及び1が交互、並びに/又は不規則なコード・シーケンスが含まれ得る。このようにして、DMAシステム1050について、高い網羅率が達成され得る。たとえば、VPUをテストする場合、テスト・コードには、アプリケーション固有の又はカスタマイズされたコードが含まれ得る。たとえば、特定のアプリケーションに対する網羅率でのテスト中に、使用されるVPUの構成要素又は部分(たとえば、レジスタ、論理機構など)が判断され得、そうしたVPUの特定の構成要素又は部分が、テスト・コードを実行する際に含まれるように、テスト・コードが生成され得る。たとえば、VPUの論理機構の様々なエリアを使用するために、様々な命令によってテストがシーケンス処理されるように、様々な命令に応じたこの不規則データが、テスト・コードに含まれ得る。このようにして、VPU全般についての、具体的には、VPUで実行する特定のアプリケーションについての網羅率が高まる。このようにしてDMA及びVPUテストを実行することにより、また処理コントローラが、様々な構成要素(たとえば、DMAシステム1050及びVPU)間の制御及び相互作用に関与するので、処理コントローラは、データの移動及びアドレス指定の出力が、処理コントローラの相互作用の影響を受けているために、高い網羅率を有することができる。
テスト中、様々なコード・パターンが使用される場合、コード・パターンは、交互のパターンで使用され得るか、又は1つのコードが第1の時間枠(たとえば、30fpsに相当する時間)に使用され得、別のコードが第2の時間枠(たとえば、30fpsに相当する時間)に使用され得、別のコードが第3の時間枠(たとえば、30fpsに相当する時間)で使用され得、以下同様である。たとえば、DMAコードの実例では、0のコードが第1の時間枠に使用され得、次いで、1のコードが第2の時間枠に使用され得、次いで、0及び1を交互に繰り返すコード(たとえば、0101010101・・・)が第3の時間枠に使用され得、次いで、不規則なコード(たとえば、011100100010・・・)が第4の時間枠に使用され得、次いで、これらの4つのコードが繰り返され得、以下同様である。
実際には、たとえば、DMAをテストするとき、処理コントローラは、MISR制御部1206と相互作用して、MISRデータ・セット・レジスタ1210及びMISRアドレス・セット・レジスタ1216に、セットされた参照値を書き込むことができる。これらの値は、データ及びアドレスに対して異なり得、CRC計算のシード値と呼ばれる得る。処理コントローラは、次いで、DMAエンジン1056内でデータ移動を実行しているチャネルを初期化することができ、メモリ内のテスト・コードの位置を処理コントローラが知っているので、記述子(たとえば、記述子SRAM1052内で、処理コントローラによって設定された)を使用して、MISRテストのためのデータによってDMAエンジン1056をシーケンス処理することができる。処理コントローラは、MISRハードウェア1200に対してタイマ1226をセットして、MISRテストをイネーブルすることができ、次いで、DMAエンジン1056のチャネルをトリガして、ソース・デスティネーションからのテスト・データの読取りを開始し、データを、MISRテストのために、MISRハードウェア1200へ出力することができる。したがって、DMAをテストするとき、データ移動がテストされている(たとえば、適切なアドレス指定及びアドレス指定位置における正確なデータ)ので、MISRハードウェア1200は、テスト・コードのデータ移動を実行するときに、DMAエンジン1056の出力を利用することができる。この出力ステージの利用は、外部メモリとして図12Aに示され得、これは、処理コントローラによってシーケンス処理されると、1度に1つのデータ・チャネル及び1度に1つのアドレス・チャネルに送り込まれ得る。たとえば、データ・チャネルでは、処理コントローラは、たとえば、16個のデータ・チャネルのそれぞれを通じてシーケンス処理することができ、チャネルごとに対応するAXI書込みデータ(wdata)は、CH0~CH16のデータCRC計算部1202を通って、たとえば連続して、供給され得る。たとえば、処理コントローラは、処理コントローラによって設定されたシーケンスに従って、チャネルを通して1度に1つずつシーケンス処理するように、チャネル出力レジスタ1220を設定することができる。実施例では、チャネル・マスク・レジスタ1208(たとえば、処理コントローラとの相互作用に基づいて、MISR制御部1206によってプログラミングされる)は、様々なチャネル、たとえば、テストされていないチャネルを、CRC計算からマスク・アウト又は排除するように、処理コントローラによって設定され得る。このマスキングは、実施例では、ANDゲートを使用して実行され得る。1つ又は複数のチャネルがマスク・アウトされる場合、MISRデータ参照レジスタ1222内の黄金値(処理コントローラによって、MISR制御部1206に供給され得る)は、マスクされていないチャネルのCRC計算にしか対応し得ない。マスクされていないチャネルごとに、メモリから読み取られたテスト・コードを使用して生成されたチャネルのデータが(たとえば、圧縮の有無にかかわらず)、CRCデータ計算部1202の多項式に適用され、そのチャネルのMISRデータ値1214を生成することができる。チャネルの計算が終了すると、処理コントローラは、指示を受信することができ、データの次のチャネルをCRC計算部1202に送信させ、次のMISRデータ値1214を計算することができ、マスクされていないチャネルのそれぞれが、対応するMISRデータ値1214を有するまで、以下同様である。特定の反復についての、MISRデータ値1214のそれぞれが計算されると、これらの値1214が組み合わされ、MISRデータ参照レジスタ1222内の黄金値と比較され得る、最終のMISRデータ値を生成し、(たとえば、上記の0~7の値に対応するステータスが含まれ得る)確定したMISRデータ・ステータスを生成することができる。
別の実例として、アドレス・チャネルについて、処理コントローラは、たとえば、16個のアドレス又は制御チャネルのそれぞれを通じてシーケンス処理することができ、チャネルごとに対応するAXI書込みアドレス(waddress)は、CH0~CH16のアドレスCRC計算部1204を通って、たとえば連続して、供給され得る。実施例では、チャネル・マスク・レジスタ1208は、様々なチャネル、たとえば、テストされていないチャネルを、CRC計算からマスク・アウト又は排除するように、処理コントローラによって設定され得る。このマスキングは、実施例では、ANDゲートを使用して実行され得る。1つ又は複数のチャネルがマスク・アウトされる場合、MISRデータ参照レジスタ1224内の黄金値は、マスクされていないチャネルのCRC計算にしか対応し得ない。マスクされていないチャネルごとに、メモリから読み取られたテスト・コードを使用して生成されたチャネルのアドレスが(たとえば、圧縮の有無にかかわらず)、CRCアドレス計算部1204の多項式に適用され、そのチャネルのMISRアドレス値1218を生成することができる。チャネルの計算が終了すると、処理コントローラは、指示を受信することができ、アドレス・データの次のチャネルをCRC計算部1204に送信させ、次のMISRアドレス値1218を計算することができ、マスクされていないチャネルのそれぞれが、対応するMISRアドレス値1218を有するまで、以下同様である。特定の反復についての、MISRアドレス値1218のそれぞれが計算されると、これらの値1218が組み合わされ、MISRアドレス参照レジスタ1224内の黄金値と比較され得る、最終のMISRアドレス値を生成し、(たとえば、上記の0~7の値に対応するステータスが含まれ得る)確定したMISRアドレス・ステータスを生成することができる。
いくつかの実施例では、MISRテストは、最初のコードが処理され得、出力がテストされ得、次いで、出力が、テストされ得る次の反復に使用され得、以下同様となるような、反復型であり得る。かかる実施例では、MISRテストには、複数のステージが含まれ得、MISRテストの完了には、各ステージを実行することが含まれ得る。
MISRハードウェア1200が、特にVPUをテストするのに使用される場合、たとえば、DMAシステム1050は、テスト・コードをVMEMに移動することができ、VPUは、テスト・コードを処理し、結果をVMEMに書き戻すことができ、DMAエンジン1056は、VMEMから結果を読み取り、デスティネーションの位置に戻すことができる。結果をデスティネーションの位置に書き戻すとき、MISRハードウェア1200は、DMA出力を利用して、データ(たとえば、データ及びアドレスを含む)に対してMISRを実行し、本明細書で論じられるのと同様のMISRを実行することができる。このようにして、VPUとテスト・コードとの相互作用は、MISRハードウェア1200を使用してテストされ得る。
MISRテストの完了後、処理コントローラは、割込みを受信することができる。たとえば、処理コントローラは完了割込みを受信することができ、エラーがない場合は、次のMISRテスト・サイクルを待つことができる。割込みがエラー割込みである場合、エラーのタイプ、たとえば、データ不合格、アドレス不合格、両方不合格などが判別され得、安全エラーが安全プロセッサにアサートされ得る。いくつかの実施例では、MISRハードウェア1200が、ハングアップ又はアイドル状態になる(たとえば、タイム・アウト・エラーとなる)場合、たとえば、DMAは、SoCの安全プロセッサへのタイム・アウト信号を生成することができる。
いくつかの実施例では、MISR算出をスピード・アップし、チャネル-MISR計算を順番に並べることも多段化することもなく、1つ又は複数(たとえば、実施例では、16個などすべて)のチャネルでCRCを計算するために、チャネルは、AXIのIDフィールドに存在するチャネルIDに基づいて多重分離され、チャネル計算を並列化することができる。たとえば、CRC計算が様々な速度で完了するため、図12Aの手法は、チャネルの、次々に連続する処理を含んでいた。しかし、下記で説明される図12Bのシステムを使用して、こうした計算は並行して完了され得る。たとえば、処理コントローラがMISR計算を終了すると、MISRコントローラは、すべてのチャネル出力をシーケンス処理して、アドレス出力とデータ出力との両方の参照値又は黄金値と比較され得る、最終的なシグネチャを計算することができる。このフィーチャは、たとえば、すべてのチャネルに対して同じ制御レジスタが使用され得るので、追加のプログラマ・レジスタ・インタフェースの必要なしに、恒久的な障害の検出をスピード・アップすることができる。
したがって、図12Bを参照すると、図12Bは、本開示のいくつかの実施例による、プログラム可能なビジョン・アクセラレータ(PVA)の並列チャネル巡回冗長検査(CRC)計算のための、内蔵自己テスト(BIST)システムの図である。本明細書に説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行されるものとして本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。いくつかの実施例では、MISRハードウェア1250は、図10HのDMAシステム1050、図13A~図13Dの例示的な自律型車両1300、図14の例示的なコンピュータ処理デバイス1400、及び/又は図15の例示的なデータ・センタ1500のものと同様の構成要素、特徴、及び/又は機能を含むことができる。たとえば、MISRハードウェア1250は、図10Hに示されているような、PVAのDMAブロックに含まれ得る。したがって、MISRハードウェア1250は、データ移動の出力ステージで動作することができ、アドレス指定(又は制御)は、DMAエンジン1056の出力を利用することができる。図12Aの実例では、16個のAXIデータ・チャネル及び16個のAXIアドレス(又は制御)チャネルがあり得る。しかし、これは限定的することを意図するものではなく、実施例に応じて、任意の数(及び/又はタイプ)のデータ及び/又はアドレス・チャネルが使用され得る。
MISRハードウェア1250は、MISRハードウェア1250が並列データ・チャネル及び並列アドレス・チャネルのCRC計算用に設定され得ることを除いて、図12AのMISRハードウェア1200と同様に動作することができる。たとえば、処理コントローラは、データのCRC計算部1260A~1260Nごとに(それぞれ、AXIデータ・チャネル0~15に対応する)シード値又は参照値をセットするために、MISRデータ・セット・レジスタ1256を設定することができ、またアドレスのCRC計算部1262A~1262Nごとに(それぞれ、AXIアドレス・チャネル0~15に対応する)シード値又は参照値をセットするために、MISRアドレス・セット・レジスタ1258を設定することができる。次いで、図12Aに関して説明されたのと同様の処理コントローラは、DMAシステム1050がデータをあちこちに移動させるための、データ移動(たとえば、DMAテストのための)及び/又はVPU処理(たとえば、VPU固有のテストのための)をトリガすることができ、MISRハードウェア1250は、テストされるべき出力ステージを利用することができる。
そのため、処理コントローラは、16チャネルのデータをマルチプレクサ(mux)1252に送信させ、16チャネルのアドレス・データをマルチプレクサ(mux)1254に送信させることができる。次いで、mux1252は、対応するチャネルのデータを、対応するCRC計算部1260A~1260Nに供給することができ(たとえば、チャネル0のAXIデータをチャネル0のCRC計算部1260に、チャネル1のデータをチャネル1のCRC計算部1260Bに、以下同様)、各CRC計算部1260は、データ及び参照値を用いたCRC多項式を使用して、MISRデータ値1284A~1284Nを計算することができる(たとえば、チャネル0のCRC計算部1260Aは、MISRデータ0の値1284Aを計算することができ、チャネル1のCRC計算部1260Bは、MISRデータ1の値1284Bを計算することができ、以下同様である)。次いで、MISRデータ値1284A~1284Nは、処理コントローラによって設定されたMISR制御部1270からのMISRシーケンスに従って、マルチプレクサ(mux)1264からシーケンス処理されて出ることができる。図12Aに関して説明されているような実施例では、1つ又は複数のチャネルが、特定のMISRテストに含まれない場合があるので、チャネル・マスク・レジスタ1268が、MISRシーケンスを更新するために、処理コントローラによって設定され得、したがって、1つ又は複数のマスクされたチャネルに対応するMISRデータ値1284は、最終のCRC値を計算するのに、チャネル0~16のデータCRC計算部1274に供給されない。マスクされていないチャネルでは、MISRデータ値1284は、MISRシーケンスに従って、mux1264から出力され得る。このようにして、MISRデータ値1284は、CRC計算が完了されるタイミングに応じて、CRC計算部1274に送信されるのではなく、MISRシーケンスに従って、強制的に出力されるので、様々なチャネル及びCRC計算部1260の様々な計算時間が考慮される。MISRデータ値1284のMISRシーケンスが、mux1264からCRC計算部1274に出力されると、CRC計算部1274は、最終のCRC値を計算し、最終のCRC値をVALレジスタ1276にストアすることができる。次いで、VALレジスタ1276内の最終のCRC値が、MISRデータ参照レジスタ1272(MISR制御部1270によって、処理コントローラから設定される)内の黄金値と比較され、MISRデータのステータスを判断することができる。
同様に、処理コントローラは、アドレスの16チャネルをマルチプレクサ(mux)1254に送信させることができ、次いで、mux1254は、対応するアドレスのチャネルを、対応するCRC計算部1262A~1262Nに供給することができ(たとえば、チャネル0のAXIアドレスをチャネル0のCRC計算部1262に、チャネル1のアドレスをチャネル1のCRC計算部1262Bに、以下同様)、各CRC計算部1262は、アドレス及び参照値を用いたCRC多項式を使用して、MISRアドレス値1286A~1286Nを計算することができる(たとえば、チャネル0のCRC計算部1262Aは、MISRアドレス0の値1286Aを計算することができ、チャネル1のCRC計算部1262Bは、MISRアドレス1の値1286Bを計算することができ、以下同様である)。次いで、MISRアドレス値1286A~1286Nは、処理コントローラによって設定されたMISR制御部1270からのMISRシーケンスに従って、マルチプレクサ(mux)1266からシーケンス処理されて出ることができる。図12Aに関して説明されているような実施例では、1つ又は複数のチャネルは、特定のMISRテストに含まれ得ないので、チャネル・マスク・レジスタ1268が、MISRシーケンスを更新するために、処理コントローラによって設定され得、その結果、1つ又は複数のマスクされたチャネルに対応するMISRアドレス値1286は、最終のCRC値を計算するのに、チャネル0~16のアドレスCRC計算部1280に供給されない。マスクされていないチャネルでは、MISRアドレス値1286は、MISRシーケンスに従って、マルチプレクサ1266から出力され得る。このようにして、MISRアドレス値1286は、CRC計算が完了されるタイミングに応じて、CRC計算部1280に送信されるのではなく、MISRシーケンスに従って、強制的に出力されるので、様々なチャネル及びCRC計算部1262の様々な計算時間が考慮される。MISRアドレス値1286のMISRシーケンスが、マルチプレクサ1266からCRC計算部1280に出力されると、CRC計算部1280は、最終のCRC値を計算し、最終のCRC値をVALレジスタ1282にストアすることができる。次いで、VALレジスタ1282内の最終のCRC値が、MISRアドレス参照レジスタ1278(MISR制御部1270によって、処理コントローラから設定される)内の黄金値と比較され、MISRアドレスのステータスを判断することができる。
MISRデータのステータス及びMISRアドレスのステータスは、図12Aに関する上記の説明と同様に、チェック及び使用され得る。
ここで図12Cを参照すると、本明細書で説明される方法1290の各ブロックは、ハードウェア、ファームウェア、及び/又はソフトウェアの任意の組合せを使用して実行され得る、コンピュータ処理プロセスを含む。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。方法1290はまた、コンピュータ記憶媒体にストアされた、コンピュータが使用可能な命令として具現化され得る。方法1290は、いくつか例を挙げると、独立型アプリケーション、サービス若しくはホステッド・サービス(独立型の、又は別のホステッド・サービスとの組合せ)、又は別の製品へのプラグインによって提供され得る。加えて、方法1290は、図12Aのシステムに関して説明されており、方法1290は、本明細書に説明されているものを含むがこれに限定されるものではない、任意の1つのシステム、構造体、若しくは構成要素、又はシステム、構造体、若しくは構成要素の任意の組合せによって実行され得る。
図12Cは、本開示のいくつかの実施例による、PVAでの恒久的な障害を検出するための、実行(BIST)方法1290の流れ図である。方法1290は、ブロックB1202において、処理コントローラのシーケンス処理に基づいて、DMAシステムからの複数のチャネルのデータを、1度に1チャネル受信するステップを含む。たとえば、MISRハードウェア1200は、処理コントローラによって判断されたシーケンス処理に従って、1度に1つのチャネルのデータ(又は1つのチャネルのアドレス・データ)を受信することができる。
方法1290は、ブロックB1204において、MISR値を計算するために、チャネルごとに、CRC計算の多項式及びチャネルに対応するそれぞれのデータを使用してCRC計算を実行することにより、複数のMISR値を計算するステップを含む。たとえば、チャネルごとに、CRC計算部1202(又はアドレスの場合は1204)は、チャネルからのデータ(又はアドレス)及びCRC計算部1202の多項式を使用して、MISRデータ値1214(又はアドレスの場合はMISRアドレス値1216)を計算することができる(CRC MISRデータ・セット・レジスタ1210又はMISRアドレス・セット・レジスタ1216から、シード値を用いて開始する)。
方法1290は、ブロックB1206において、複数のMISR値を使用して、最終のMISR値を計算するステップを含む。たとえば、各チャネルからのMISRデータ値1214(又は各チャネルからのMISRアドレス値)が組み合わされ、最終のMISR値を生成することができる。
方法1290は、ブロックB1208において、最終のMISR値をシグネチャの値と比較するステップを含む。たとえば、個々のMISR値1214(又はアドレス値1216)から生成された最終のMISR値は、MISRデータ参照レジスタ1222(又はアドレスの場合は、MISRアドレス参照レジスタ1224)のシグネチャ又は黄金値と比較され得る。
方法1290は、ブロックB1210において、比較に少なくとも部分的に基づいて、MISRステータスを出力するステップを含む。たとえば、ブロックB1208での比較に基づいて、ステータス、たとえば、データ不合格、アドレス不合格、両方不合格、完了などが判断され得、このステータスを使用して、SoCの安全プロセッサに、エラー・ステータスが生成された場所を通知することができる。
例示的な自律型車両
図13Aは、本開示のいくつかの実施例による、例示的な自律型車両1300の図である。自律型車両1300(或いは、本明細書では「車両1300」と呼ばれる)には、これらに限定されるものではないが、自動車、トラック、バス、緊急対応車両、シャトル、電気若しくは電動自転車、オートバイ、消防車、警察車両、救急車、ボート、建設車両、水中航空機、ドローン、トレーラに連結された車両、及び/又は別のタイプの車両(たとえば、無人の、及び/又は1人又は複数の乗客を収容する)などの乗用車が含まれ得る。自律型車両は、一般に、米国運輸省の一部門である米国運輸省道路交通安全局(NHTSA:National Highway Traffic Safety Administration)及び自動車技術者協会(SAE:Society of Automotive Engineers)によって規定された、「Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles」(2018年6月15日に公開された規格番号J3016-201806、2016年9月30日に公開された規格番号J3016-201609、並びにこの規格の以前のバージョン及び将来のバージョン)で、自動化レベルに関して説明されている。車両1300は、自律運転レベルのレベル3~レベル5のうちの1つ又は複数に従って、機能することが可能であり得る。たとえば、車両1300は、実施例に応じて、条件付き自動化(レベル3)、高自動化(レベル4)、及び/又は完全自動化(レベル5)が可能であり得る。
車両1300には、シャーシ、車体、車輪(たとえば、2、4、6、8、18輪など)、タイヤ、車軸、及び車両の他の構成要素などの、構成要素が含まれ得る。車両1300には、内燃機関、ハイブリッド発電機、全電気エンジン、及び/又は別の推進システム・タイプなどの推進システム1350が含まれ得る。推進システム1350は、車両1300の推進を可能にする、トランスミッションが含まれ得る、車両1300の駆動列に連結され得る。推進システム1350は、スロットル/アクセラレータ1352からの信号の受信に応答して制御され得る。
ハンドルが含まれ得るステアリング・システム1354を使用して、推進システム1350が動作しているとき(たとえば、車両が動いているとき)に、車両1300を(たとえば、所望の経路又はルートに沿って)動かすことができる。ステアリング・システム1354は、ステアリング・アクチュエータ1356から信号を受信することができる。完全自動化(レベル5)機能では、ハンドルはオプションであり得る。
ブレーキ・センサ・システム1346を使用して、ブレーキ・アクチュエータ1348及び/又はブレーキ・センサからの信号を受信するのに応答して、車両ブレーキを作動させることができる。
1つ又は複数のシステム・オン・チップ(SoC)1304(図13C)及び/又はGPUが含まれ得るコントローラ1336は、車両1300の1つ又は複数の構成要素及び/又はシステムに、信号(たとえば、コマンドを表す)を供給することができる。たとえば、コントローラは、信号を送信して、1つ又は複数のブレーキ・アクチュエータ1348を使って、車両ブレーキを作動させ、1つ又は複数のステアリング・アクチュエータ1356を使って、ステアリング・システム1354を作動させ、1つ又は複数のスロットル/アクセラレータ1352を使って、推進システム1350を作動させることができる。コントローラ1336には、センサ信号を処理する、1つ又は複数のオンボード(たとえば、一体型)コンピュータ処理デバイス(たとえば、スーパーコンピュータ)が含まれ、自律運転を可能にし、且つ/又は車両1300を運転する際の人間の運転手を支援するための、動作コマンド(たとえば、コマンドを表す信号)を出力することができる。コントローラ1336には、自律運転機能用の第1のコントローラ1336、実用的安全機能用の第2のコントローラ1336、人工知能機能(たとえば、コンピュータ・ビジョン)用の第3のコントローラ1336、インフォテインメント機能用の第4のコントローラ1336、緊急状態での冗長性のための第5のコントローラ1336、及び/又は他のコントローラが含まれ得る。いくつかの実例では、ただ1つのコントローラ1336が、上記の機能のうちの2つ以上を扱ってもよく、2つ以上のコントローラ1336が、ただ1つの機能を扱ってもよく、且つ/又はこれらの機能の任意の組合せであってもよい。
コントローラ1336は、1つ又は複数のセンサから受信したセンサ・データ(たとえば、センサ入力)に応答して、車両1300の1つ又は複数の構成要素及び/又はシステムを制御する信号を供給することができる。センサ・データは、たとえば、これらに限定されるものではないが、全地球航法衛星システム用センサ1358(たとえば、全地球測位システム用センサ)、レーダ・センサ1360、超音波センサ1362、ライダ・センサ1364、慣性測定ユニット(IMU:inertial measurement unit)センサ1366(たとえば、加速度計、ジャイロスコープ、磁気コンパス、磁気計など)、マイク1396、ステレオ・カメラ1368、広視野カメラ1370(たとえば、魚眼カメラ)、赤外線カメラ1372、サラウンド・カメラ1374(たとえば、360度カメラ)、遠距離及び/又は中距離カメラ1398、スピード・センサ1344(たとえば、車両1300のスピードを測定するための)、振動センサ1342、ステアリング・センサ1340、ブレーキ・センサ(たとえば、ブレーキ・センサ・システム1346の一部として)、及び/又は他のセンサ・タイプから受信され得る。
1つ又は複数のコントローラ1336は、車両1300の計器クラスタ1332から入力(たとえば、入力データによって表される)を受信し、マンマシン・インタフェース(HMI:human-machine interface)ディスプレイ1334、可聴型アナンシエータ、ラウドスピーカを介して、及び/又は車両1300の他の構成要素を介して、出力(たとえば、出力データ、表示データなどによって表される)を供給することができる。出力には、車両速度、スピード、時間、地図データ(たとえば、図13CのHD地図1322)、位置データ(たとえば、地図上のなどの車両1300の位置)、方向、他の車両の位置(たとえば、占有格子)、コントローラ1336によって知覚される対象物及び対象物のステータスに関する情報、などの情報が含まれ得る。たとえば、HMIディスプレイ1334は、1つ又は複数の対象物の存在に関する情報(たとえば、道路標識、注意標識、交通信号が変わる、など)、及び/又は車両が行った、行っている、若しくは行うと予想される運転操作に関する情報(たとえば、ここで車線を変更する、3.22km(2マイル)先で34B出口を出る、など)を表示することができる。
車両1300には、1つ又は複数のネットワークを介して通信するために、1つ又は複数の無線アンテナ1326及び/又はモデムを使用することができる、ネットワーク・インタフェース1324がさらに含まれる。たとえば、ネットワーク・インタフェース1324は、LTE、WCDMA(登録商標)、UMTS、GSM、CDMA2000などを介して、通信が可能であり得る。無線アンテナ1326はまた、ブルートゥース(登録商標)、ブルートゥース(登録商標)LE、Z-Wave、ZigBeeなどの構内ネットワーク、及び/又はLoRaWAN、SigFoxなどの低電力広域ネットワーク(LPWAN:low power wide-area network)を使用して、環境内の物体(たとえば、車両、携帯型デバイスなど)間の通信も、可能にし得る。
図13Bは、本開示のいくつかの実施例による、図13Aの例示的な自律型車両1300のカメラ位置及び視野の実例である。図のカメラ及びそれぞれの視野は、1つの例示的な実施例であり、限定することを意図するものではない。たとえば、追加及び/又は代替のカメラが含まれてもよく、及び/又はカメラが、車両1300の別の位置に配置されてもよい。
カメラのカメラ・タイプには、車両1300の構成要素及び/又はシステムと共に使用するように適合させ得るデジタルカメラが含まれ得るが、これに限定されるものではない。カメラは、自動車安全性水準(ASIL)B及び/又は別のASILで動作することができる。カメラ・タイプは、実施例に応じて、毎秒60フレーム(fps:frames per second)、120fps、240fpsなどの、任意の画像取込みレートが可能であり得る。カメラは、ローリング・シャッタ、グローバル・シャッタ、別のタイプのシャッタ、又はこれらの組合せを使用可能であり得る。いくつかの実例では、カラー・フィルタの配列には、赤、透明、透明、透明(RCCC)カラー・フィルタ配列、赤、透明、透明、青(RCCB)カラー・フィルタ配列、赤、青、緑、透明(RBGC)カラー・フィルタ配列、FoveonX3カラー・フィルタ配列、ベイヤ・センサ(RGGB)カラー・フィルタ配列、単色センサ・カラー・フィルタ配列、及び/又は別のタイプのカラー・フィルタ配列が含まれ得る。いくつかの実施例では、RCCC、RCCB、及び/又はRBGCカラー・フィルタ配列を備えたカメラなどの透明ピクセル・カメラが、光感度を高めるために使用され得る。
いくつかの実例では、1つ又は複数のカメラを使用して、高度運転者支援システム(ADAS)機能を、(たとえば、冗長又はフェイルセーフ設計の一部として)実行することができる。たとえば、多機能モノ・カメラが設置され、車線逸脱警報、交通標識支援、及び知的ヘッドランプ制御を含む機能を備えることができる。カメラのうちの1台又は複数台(たとえば、すべてのカメラ)が、画像データ(たとえば、ビデオ)を、同時に記録及び提供することができる。
カメラの画像データ取込み機能を妨害する可能性がある、車内からの迷光及び反射(たとえば、フロントガラスのミラーで反射された、計器盤からの反射)を遮断するために、カメラのうちの1台又は複数台が、カスタム設計された(3D印刷された)組立体などの取付け組立体に取り付けられ得る。ドアミラー取付け組立体に関しては、カメラ取付けプレートがドアミラーの形状と一致するように、ドアミラー組立体が、カスタム3D印刷され得る。いくつかの実例では、カメラは、ドアミラーに統合されてもよい。サイドビュー・カメラでは、カメラは、キャビンの各コーナにある4本の支柱内に、やはり統合されてもよい。
車両1300の前の環境の一部を含む視野を有するカメラ(たとえば、前面カメラ)は、前方の経路及び障害物を識別するのを助け、さらに、1つ又は複数のコントローラ1336及び/又は制御SoCの助けを借りて、占有格子を生成し、且つ/又は好ましい車両経路を判断するのに重要な情報を提供するのを補助する、サラウンド・ビューを得るために使用され得る。前面カメラを使用して、緊急制動、歩行者検出、及び衝突回避を含む、ライダと同じADAS機能の多くを実行することができる。前面カメラはまた、車線逸脱警報(LDW:Lane Departure Warnings)、自律クルーズ制御(ACC:Autonomous Cruise Control)、及び/又は交通標識認識などの他の機能を含む、ADAS機能及びシステムにも使用され得る。
たとえば、CMOS(相補型金属酸化膜半導体:complementary metal oxide semiconductor)カラー撮像素子を含む、単眼カメラ・プラットフォームを含む様々なカメラが、正面設定で使用され得る。別の実例は、周辺から視界に入ってくる物体(たとえば、歩行者、横断歩道、又は自転車)を知覚するために使用され得る、広視野カメラ1370であり得る。図13Bには1つの広視野カメラしか示されていないが、車両1300には、任意の数の広視野カメラ1370が存在し得る。加えて、遠距離カメラ1398(たとえば、ロングビュー・ステレオ・カメラのペア)が、深度ベースの物体検出、特にニューラル・ネットワークがまだ訓練されていない物体に使用され得る。遠距離カメラ1398はまた、物体検出及び分類、並びに基本的な対象物追跡にも使用され得る。
1台又は複数台のステレオ・カメラ1368もまた、前面の設定に含まれ得る。ステレオ・カメラ1368には、プログラム可能な論理回路(FPGA)、及びただ1つのチップ上に統合されたCAN又はイーサネット(登録商標)・インタフェースを備えた、マルチコア型マイクロプロセッサを備えることができる、拡張性のある処理ユニットを備える、一体型制御ユニットが含まれ得る。かかるユニットを使用して、画像内のすべてのポイントの距離推定を含む、車両の環境の3Dマップを生成することができる。代替のステレオ・カメラ1368には、2つのカメラ・レンズ(左右にそれぞれ1つ)が含まれ得る小型の立体視センサ、及び車両からターゲットとなる対象物までの距離を測定し、生成された情報(たとえば、メタデータ)を使用して、自律緊急制動及び車線逸脱警告機能を作動できる、画像処理チップが含まれ得る。本明細書で説明されているものに加えて、又は本明細書で説明されているものの代わりに、他のタイプのステレオ・カメラ1368が使用され得る。
車両1300の側部に環境の一部を含む視野を有するカメラ(たとえば、サイドビュー・カメラ)は、サラウンド・ビュー用に使用され得、占有格子を作成及び更新するためばかりでなく、側面衝突警告を生成するためにも使用される情報を提供する。たとえば、サラウンド・カメラ1374(たとえば、図13Bに示されている4台のサラウンド・カメラ1374)が、車両1300に配置され得る。サラウンド・カメラ1374には、広視野カメラ1370、魚眼カメラ、360度カメラ、及び/又は類似のものが含まれ得る。4台の実例では、4台の魚眼カメラが、車両の前部、後部、及び側部に配置され得る。代替の配置では、車両は3台のサラウンド・カメラ1374(たとえば、左、右、及び後部)を使用することができ、1台又は複数台の他のカメラ(たとえば、前面カメラ)を第4のサラウンド・ビュー・カメラとして活用することができる。
車両1300の後方の環境の一部を含む視野を有するカメラ(たとえば、後方視野カメラ)が、駐車支援、周囲視野、追突警告、並びに占有格子の作成及び更新に使用され得る。本明細書で説明されている、前面カメラとしても好適なカメラ(たとえば、遠距離及び/又は中距離カメラ1398、ステレオ・カメラ1368、赤外線カメラ1372など)を含むがこれらに限定されるものではない、多種多様なカメラが使用され得る。
図13Cは、本開示のいくつかの実施例による、図13Aの例示的な自律型車両1300の、例示的なシステム・アーキテクチャのブロック図である。本明細書で説明されるこの配置及び他の配置は、単に実例として示されていることを理解されたい。図示されているものに加えて、又は図示されているものの代わりに、他の配置及び要素(たとえば、機械、インタフェース、機能、順序、機能のグループ化など)が使用されてもよく、一部の要素が完全に省略されてもよい。さらに、本明細書で説明される要素の多くは、個別の若しくは分散された構成要素として、又は他の構成要素と組み合わせて、任意の好適な組合せ及び位置で実施され得る、機能的なエンティティである。エンティティによって実行されるものとして本明細書に説明されている様々な機能は、ハードウェア、ファームウェア、及び/又はソフトウェアによって実行され得る。たとえば、様々な機能は、メモリにストアされた命令を実行するプロセッサによって実行され得る。
図13Cの車両1300の構成要素、特徴、及びシステムのそれぞれは、バス1302を介して接続されているものとして示されている。バス1302には、コントローラ・エリア・ネットワーク(CAN:Controller Area Network)データ・インタフェース(或いは、本明細書では「CANバス」と呼ばれる)が含まれ得る。CANは、ブレーキの作動、加速、制動、ステアリング、フロントガラスのワイパなど、車両1300の様々なフィーチャ及び機能の制御を支援するのに使用される、車両1300内部のネットワークであり得る。CANバスは、それぞれが独自の一意の識別子(たとえば、CAN ID)を有する、数十のノード又は数百のノードすら有するよう設定され得る。ハンドルの角度、地面のスピード、1分当たりのエンジン回転数(RPM:revolutions per minute)、釦位置、及び/又は他の車両ステータス・インジケータを調べるために、CANバスが読み取られ得る。CANバスは、ASIL B準拠であり得る。
バス1302は、本明細書ではCANバスであると説明されているが、これは限定することを意図するものではない。たとえば、CANバスに加えて、又はCANバスの代わりに、FlexRay及び/又はイーサネット(登録商標)が使用されてもよい。さらに、バス1302を表すためにただ1本の線が使用されているが、これは限定することを意図するものではない。たとえば、任意の本数のバス1302が存在してもよく、1本又は複数本のCANバス、1本又は複数本のFlexRayバス、1本又は複数本のイーサネット(登録商標)バス、及び/又は別のプロトコルを使用する1本又は複数本の他のタイプのバスが含まれ得る。いくつかの実例では、2本以上のバス1302が、相異なる機能を実行するために使用され得、且つ/又は冗長性のために使用され得る。たとえば、第1のバス1302は、衝突回避機能のために使用され得、第2のバス1302は、作動制御のために使用され得る。任意の実例において、各バス1302は、車両1300の構成要素のいずれかと通信でき、2本以上のバス1302が、同じ構成要素と通信することができる。いくつかの実例では、車両内の各SoC1304、各コントローラ1336、及び/又は各コンピュータは、同じ入力データ(たとえば、車両1300のセンサからの入力)にアクセスでき、CANバスなどの共通バスに接続され得る。
車両1300には、図13Aに関して本明細書で説明されたような、1つ又は複数のコントローラ1336が含まれ得る。コントローラ1336は、様々な機能のために使用され得る。コントローラ1336は、車両1300の様々な他の構成要素及びシステムのいずれかに結合され得、車両1300の制御、車両1300の人工知能、車両1300用のインフォテインメント、及び/又は類似のものに使用され得る。
車両1300には、システム・オン・チップ(SoC)1304が含まれ得る。SoC1304には、CPU1306、GPU1308、プロセッサ1310、キャッシュ1312、アクセラレータ1314、データ・ストア1316、及び/又は図示されていない他の構成要素及びフィーチャが含まれ得る。様々なプラットフォーム及びシステムにおいて、SoC1304を使用して、車両1300を制御することができる。たとえば、SoC1304は、システム(たとえば、車両1300のシステム)において、1台又は複数台のサーバ(たとえば、図13Dのサーバ1378)から、ネットワーク・インタフェース1324を介してマップのリフレッシュ及び/又は更新を取得できる、HDマップ1322と組み合わされ得る。
CPU1306には、CPUクラスタ又はCPU複合体(或いは、本明細書では「CCPLEX(:CPU complex)」と呼ばれる)が含まれ得る。CPU1306には、複数のコア及び/又はL2キャッシュが含まれ得る。たとえば、いくつかの実施例では、CPU1306には、コヒーレント・マルチプロセッサ設定で、8つのコアが含まれ得る。いくつかの実施例では、CPU1306には、各クラスタが専用のL2キャッシュ(たとえば、2MBのL2キャッシュ)を有する、4つのデュアルコア・クラスタが含まれ得る。CPU1306(たとえば、CCPLEX)は、CPU1306のクラスタの任意の組合せが、任意の所与の時間にアクティブになることを可能にする、同時クラスタ動作をサポートするよう設定され得る。
CPU1306は、以下のフィーチャのうちの1つ又は複数を含む、電力管理機能を実施することができる。アイドル時に、動的な電力節約のために、個々のハードウェア・ブロックが自動的にクロックゲーティングされ得る。WFI/WFE命令を実行していることにより、コアがアクティブに命令を実行していないときに、各コアのクロックがゲーティングされ得る。各コアは、別個にパワーゲーティングされ得る。各コア・クラスタは、すべてのコアがクロックゲーティング又はパワーゲーティングされているときに、別個にクロックゲーティングされ得る。及び/又は各コア・クラスタは、すべてのコアがパワーゲーティングされているときに、別個にパワーゲーティングされ得る。CPU1306はさらに、電力状態を管理するために、許容電力状態及び予想されるウェイクアップ時間が指定され、ハードウェア/マイクロコードが、コア、クラスタ、及びCCPLEXが入る最適な電力状態を判断する、拡張アルゴリズムを実施することができる。処理コアは、作業がマイクロコードにオフロードされる、ソフトウェアでの簡略化された電力状態に入るシーケンスを、サポートすることができる。
GPU1308には、一体型GPU(或いは、本明細書では「iGPU(:integrated GPU)」と呼ばれる)が含まれ得る。GPU1308は、プログラム可能であり得、並列の作業負荷に関して効率的であり得る。いくつかの実例では、GPU1308は、拡張されたテンソル命令セットを使用することができる。GPU1308には、1つ又は複数のストリーミング・マイクロプロセッサが含まれ得、各ストリーミング・マイクロプロセッサには、L1キャッシュ(たとえば、少なくとも96KBの記憶容量を有するL1キャッシュ)が含まれ得、ストリーミング・マイクロプロセッサのうちの2つ以上が、L2キャッシュ(たとえば、512KBの記憶容量を有するL2キャッシュ)を共有することができる。いくつかの実施例では、GPU1308には、少なくとも8つのストリーミング・マイクロプロセッサが含まれ得る。GPU1308は、計算アプリケーション・プログラミング・インタフェース(API:application programming interface)を使用することができる。加えて、GPU1308は、1つ又は複数の並列コンピュータ処理プラットフォーム及び/又はプログラミング・モデル(たとえば、NVIDIAのCUDA)を使用することができる。
GPU1308は、自動車及び組込み用途の場合に、最高性能を発揮するよう電力最適化され得る。たとえば、GPU1308は、フィン電界効果トランジスタ(FinFET:Fin field-effect transistor)に基づいて製造され得る。しかし、これは限定することを意図するものではなく、GPU1308は、他の半導体製造プロセスを使用して製造されてもよい。各ストリーミング・マイクロプロセッサには、複数のブロックに分割された、いくつかの精度が混在する処理コアが組み込まれ得る。たとえば、これに限定されるものではないが、64個のPF32コア及び32個のPF64コアが、4つの処理ブロックに分割され得る。かかる実例では、各処理ブロックに、16個のFP32コア、8個のFP64コア、16個のINT32コア、深層学習マトリックス演算用の2個の精度混在NVIDIA TENSOR CORE、L0命令キャッシュ、ワープ・スケジューラ、ディスパッチ・ユニット、及び/又は64KBのレジスタ・ファイルが割り当てられ得る。加えて、ストリーミング・マイクロプロセッサには、計算とアドレス算出とを組み合わせて、作業負荷の効率的な実行を可能にする、別個の並列整数及び浮動小数点データ・パスが含まれ得る。ストリーミング・マイクロプロセッサには、並列スレッド間のよりきめ細かい同期及び連携を可能にする、別個のスレッド・スケジューリング機能が含まれ得る。ストリーミング・マイクロプロセッサには、プログラミングを簡略化しながらも性能を向上させるために、L1データ・キャッシュと共有メモリ・ユニットとの組合せが含まれ得る。
GPU1308には、いくつかの実例では、約900GB/秒のピーク・メモリ帯域幅を可能にする、広帯域幅メモリ(HBM:high bandwidth memory)及び/又は16GB HBM2メモリ・サブシステムが含まれ得る。いくつかの実例では、HBMメモリに加えて、又はHBMメモリの代わりに、グラフィックス・ダブル・データ・レート・タイプ5同期ランダム・アクセス・メモリ(GDDR5:graphics double data rate type five synchronous random-access memory)などの、同期グラフィックス・ランダム・アクセス・メモリ(SGRAM:synchronous graphics random-access memory)が使用され得る。
GPU1308には、メモリ・ページを、このメモリ・ページに最も頻繁にアクセスするプロセッサへ、より正確に移送することを可能にし、これによりプロセッサ間で共有されるメモリ範囲の効率を高める、アクセス・カウンタを含む統合メモリ技術が含まれ得る。いくつかの実例では、GPU1308がCPU1306のページ・テーブルに直接アクセスするのを可能にするために、アドレス変換サービス(ATS:address translation service)のサポートが使用され得る。かかる実例では、GPU1308のメモリ管理ユニット(MMU:memory management unit)でミスが生じると、CPU1306にアドレス変換要求が伝送され得る。これに応答して、CPU1306は、仮想アドレスから物理アドレスへマッピングする、CPU1306のページ・テーブルを調べて、この変換をGPU1308に送り返すことができる。したがって、統合メモリ技術は、CPU1306とGPU1308との両方のメモリに、ただ1つの統合仮想アドレス空間を許可し、これにより、GPU1308のプログラミング及びGPU1308へのアプリケーションのポーティングを簡略化することができる。
加えて、GPU1308には、他のプロセッサのメモリへのGPU1308のアクセス頻度を追跡し続けることができる、アクセス・カウンタが含まれ得る。アクセス・カウンタは、メモリ・ページが、このページに最も頻繁にアクセスしているプロセッサの物理メモリへ、確実に移動されるようにするのに役立つことができる。
SoC1304には、本明細書で説明されているものを含む、任意の数のキャッシュ1312が含まれ得る。たとえば、キャッシュ1312には、CPU1306とGPU1308との両方が利用可能である(たとえば、CPU1306とGPU1308との両方に接続されている)L3キャッシュが含まれ得る。キャッシュ1312には、キャッシュ・コヒーレンス・プロトコル(たとえば、MEI、MESI、MSIなど)を使用することなどによって、ラインの状態を追跡し続けることができる、ライトバック・キャッシュが含まれ得る。L3キャッシュには、実施例に応じて、4MB以上が含まれ得るが、より小さなキャッシュ・サイズが使用されてもよい。
SoC1304には、DNNを処理するなどの、車両1300の様々なタスク又は演算のいずれかに関して、処理を実行する際に活用され得る、算術論理演算ユニット(ALU:arithmetic logic unit)が含まれ得る。加えて、SoC1304には、システム内で数学演算を実行するための浮動小数点ユニット(FPU:floating point unit)、又は他の数学コプロセッサ若しくは数値コプロセッサ・タイプが含まれ得る。たとえば、SoC104には、CPU1306及び/又はGPU1308内に実行ユニットとして統合された、1つ又は複数のFPUが含まれ得る。
SoC1304には、1つ又は複数のアクセラレータ1314(たとえば、ハードウェア・アクセラレータ、ソフトウェア・アクセラレータ、又はそれらの組合せ)が含まれ得る。たとえば、SoC1304には、最適化されたハードウェア・アクセラレータ及び/又は大容量のオンチップ・メモリが含まれ得る、ハードウェア高速化クラスタが含まれ得る。大容量のオンチップ・メモリ(たとえば、4MBのSRAM)が、ハードウェア高速化クラスタによる、ニューラル・ネットワーク及び他の算出の高速化を可能にし得る。ハードウェア高速化クラスタを使用して、GPU1308を補完し、GPU1308のタスクの一部をオフロードする(たとえば、他のタスクを実行するために、GPU1308のより多くのサイクルを解放する)ことができる。一実例として、アクセラレータ1314は、十分に安定して高速化に適している、対象となる作業負荷(たとえば、知覚、畳込みニューラル・ネットワーク(CNN:convolutional neural network)など)に使用され得る。本明細書で使用されている「CNN」という用語には、領域ベース又は領域畳込みニューラル・ネットワーク(RCNN:regional convolutional neural network)及び高速RCNN(たとえば、物体検出に使用される)を含む、すべてのタイプのCNNが含まれ得る。
アクセラレータ1314(たとえば、ハードウェア高速化クラスタ)には、深層学習アクセラレータ(DLA:deep learning accelerator)が含まれ得る。DLAには、深層学習アプリケーション及び推論用に、1秒当たり、さらに10兆回の演算を可能にするよう設定され得る、1つ又は複数のテンソル処理ユニット(TPU:Tensor processing unit)が含まれ得る。TPUは、画像処理機能を実行するように(たとえば、CNN、RCNN用などに)設定され、最適化された、アクセラレータであり得る。DLAは、特定のニューラル・ネットワーク・タイプ及び浮動小数点演算のセット、並びに推論用に、さらに最適化され得る。DLAの設計は、汎用GPUよりもミリメートル当たりの性能がより高く、CPUの性能を大幅に上回ることを可能にし得る。TPUは、たとえば、フィーチャと重みとの両方について、データ・タイプINT8、INT16、及びFP16をサポートする、単一インスタンス畳込み関数ばかりでなく、ポストプロセッサ関数も含む、いくつかの関数を実行することができる。
DLAは、たとえば、以下を含むがこれらに限定されるものではない、様々な機能のいずれかのために、処理されたデータ又は未処理のデータに対して、ニューラル・ネットワーク、特にCNNを、迅速且つ効率的に実行することができる。カメラ・センサからのデータを使用した、物体識別及び検出のためのCNN、カメラ・センサからのデータを使用した、距離推定のためのCNN、マイクからのデータを使用した、緊急車両の検出、識別、及び検出のためのCNN、カメラ・センサからのデータを使用した、顔認識及び車両所有者識別のためのCNN、並びに/又はセキュリティ及び/若しくは安全関連のイベントのためのCNN。
DLAは、GPU1308の任意の機能を実行することができ、設計者は、任意の機能について、たとえば、推論アクセラレータを使用することによって、DLA又はGPU1308のいずれかをターゲットとすることができる。たとえば、設計者は、CNNの処理及び浮動小数点演算をDLAに集中させ、他の機能をGPU1308及び/又は他のアクセラレータ1314に任せることができる。
アクセラレータ1314(たとえば、ハードウェア高速化クラスタ)には、本明細書では、代わりにコンピュータ・ビジョン・アクセラレータとも呼ばれ得る、プログラム可能なビジョン・アクセラレータ(PVA)が含まれ得る。PVAは、高度運転者支援システム(ADAS)、自律運転、並びに/又は拡張現実(AR:augmented reality)及び/若しくは仮想現実(VR:virtual reality)アプリケーションのための、コンピュータ・ビジョン・アルゴリズムを高速化するよう設計及び設定され得る。PVAは、性能と柔軟性との間のバランスをとることができる。たとえば、各PVAには、たとえば、これらに限定されるものではないが、任意の数の縮小命令セット・コンピュータ(RISC:reduced instruction set computer)コア、ダイレクト・メモリ・アクセス(DMA)、及び/又は任意の数のベクトル・プロセッサが含まれ得る。
RISCコアは、画像センサ(たとえば、本明細書で説明されているカメラのいずれかの画像センサ)、画像信号プロセッサ、及び/又は類似のものと、相互作用することができる。RISCコアのそれぞれには、任意の容量のメモリが含まれ得る。RISCコアは、実施例に応じて、いくつかのプロトコルのうちのいずれかを使用することができる。いくつかの実例では、RISCコアは、リアルタイム・オペレーティング・システム(RTOS:real-time operating system)を実行することができる。RISCコアは、1つ又は複数の集積回路デバイス、特定用途向け集積回路(ASIC:application specific integrated circuit)、及び/又はメモリ・デバイスを使用して、実装され得る。たとえば、RISCコアには、命令キャッシュ及び/又は密結合RAMが含まれ得る。
DMAは、PVAの構成要素が、CPU1306とは無関係に、システム・メモリにアクセスすることを可能にし得る。DMAは、多次元アドレス指定及び/又は巡回アドレス指定を、サポートすることを含むがこれに限定されるものではない、PVAを最適化するために使用される任意の数の機能を、サポートすることができる。いくつかの実例では、DMAは、ブロック幅、ブロック高さ、ブロック深さ、水平ブロック・ステッピング、垂直ブロック・ステッピング、及び/又は深さステッピングが含まれ得る、最大6次元以上のアドレス指定をサポートすることができる。
ベクトル・プロセッサは、コンピュータ・ビジョン・アルゴリズムのプログラミングを効率的且つ柔軟に実行し、信号処理機能を実現するよう設計され得る、プログラム可能なプロセッサであり得る。いくつかの実例では、PVAには、PVAコア及び2つのベクトル処理サブシステムのパーティションが含まれ得る。PVAコアには、プロセッサ・サブシステム、DMAエンジン(たとえば、2つのDMAエンジン)、及び/又は他の周辺デバイスが含まれ得る。ベクトル処理サブシステムは、PVAの1次処理エンジンとして動作することができ、ベクトル処理ユニット(VPU)、命令キャッシュ、及び/又はベクトル・メモリ(たとえば、VMEM)が含まれ得る。VPUコアには、たとえば、単一命令複数データ(SIMD)、超長命令語(VLIW)デジタル信号プロセッサなどの、デジタル信号プロセッサが含まれ得る。SIMDとVLIWとの組合せにより、スループット及びスピードが高まり得る。
ベクトル・プロセッサのそれぞれには、命令キャッシュが含まれ得、専用メモリに結合され得る。結果として、いくつかの実例では、ベクトル・プロセッサのそれぞれが、他のベクトル・プロセッサとは無関係に実行するよう設定され得る。他の実例では、特定のPVAに含まれるベクトル・プロセッサは、データ並列性を利用するよう設定され得る。たとえば、いくつかの実施例では、ただ1つのPVAに含まれる複数のベクトル・プロセッサは、同じコンピュータ・ビジョン・アルゴリズムを、ただし画像の別の領域で、実行することができる。他の実例では、特定のPVAに含まれるベクトル・プロセッサは、同じ画像上で別のコンピュータ・ビジョン・アルゴリズムを同時に実行することができるか、又は連続する画像若しくは画像の一部に対して、別のアルゴリズムを実行することさえできる。とりわけ、任意の数のPVAが、ハードウェア高速化クラスタに含まれ得、任意の数のベクトル・プロセッサが、PVAのそれぞれに含まれ得る。加えて、PVAには、システム全体の安全性を高めるために、追加のエラー訂正コード(ECC:error correcting code)メモリが含まれ得る。
アクセラレータ1314(たとえば、ハードウェア高速化クラスタ)には、オンチップのコンピュータ・ビジョン・ネットワーク、及びアクセラレータ1314用の広帯域幅でレイテンシの短いSRAMを実現する、SRAMが含まれ得る。いくつかの実例では、オンチップ・メモリには、たとえば、これに限定されるものではないが、PVAとDLAとの両方からアクセス可能であり得る、8つのフィールド設定可能なメモリ・ブロックからなる、少なくとも4MBのSRAMが含まれ得る。メモリ・ブロックの各ペアには、高度周辺バス(APB)インタフェース、設定回路、コントローラ、及びマルチプレクサが含まれ得る。任意のタイプのメモリが使用され得る。PVA及びDLAは、PVA及びDLAのメモリへの高速アクセスを提供する基幹回線を介して、メモリにアクセスすることができる。基幹回線には、PVA及びDLAをメモリに相互接続する(たとえば、APBを使用して)、オンチップのコンピュータ・ビジョン・ネットワークが含まれ得る。
オンチップのコンピュータ・ビジョン・ネットワークには、PVAとDLAとの両方が、任意の制御信号/アドレス/データを伝送する前に、準備完了且つ有効な信号を供給することを判断する、インタフェースが含まれ得る。かかるインタフェースは、制御信号/アドレス/データを伝送するための別個のフェーズ及び別個のチャネル、並びに連続データ転送するバースト・タイプの通信を、提供することができる。このタイプのインタフェースは、ISO26262又はIEC61508規格に準拠し得るが、他の規格及びプロトコルが使用されてもよい。
いくつかの実例では、SoC1304には、2018年8月10日に出願された米国特許出願第16/101,232号で説明されているような、リアルタイム光線追跡ハードウェア・アクセラレータが含まれ得る。リアルタイム光線追跡ハードウェア・アクセラレータを使用して、レーダ信号解釈用、音の伝播合成及び/若しくは分析用、ソナー・システムのシミュレーション用、一般的な波動伝播シミュレーション用、自己位置推定及び/若しくは他の機能を目的としたライダ・データとの比較用、並びに/又は他の用途に向けて、対象物の場所及び範囲(たとえば、世界モデル(world model)の範囲内での)を迅速且つ効率的に判断し、リアルタイムの視覚化シミュレーションを生成することができる。いくつかの実施例では、1つ又は複数の光線追跡関連の動作を実行するために、1つ又は複数の木の走査ユニット(TTU:tree traversal unit)が使用され得る。
アクセラレータ1314(たとえば、ハードウェア・アクセラレータ・クラスタ)は、自律運転のための多様な用途を有する。PVAは、ADAS及び自律型車両の主要な処理ステージに使用され得る、プログラム可能なビジョン・アクセラレータであり得る。PVAの機能は、低電力及び短いレイテンシで、予測可能な処理を必要とするアルゴリズム・ドメインと相性が良い。言い換えると、PVAは、半密又は密の規則的な計算を、短いレイテンシ及び低電力で予測可能な実行時間を必要とする小さなデータ・セットに対してですら、良好に実行する。したがって、自律車両向けプラットフォームに関して、PVAは、物体検出及び整数数学に関する演算において効率的なので、典型的なコンピュータ・ビジョン・アルゴリズムを実行するよう設計されている。
たとえば、技術の一実施例によれば、PVAは、コンピュータ立体視を実行するために使用される。セミグローバル・マッチング・ベースのアルゴリズムが、いくつかの実例で使用され得るが、これは、制限することを意図したものではない。レベル3~5の自律運転の多くのアプリケーションでは、動作中の動き推定/ステレオ・マッチングが必要である(たとえば、動きを基にした3次元復元(structure from motion)、歩行者認識、車線検出など)。PVAは、2台の単眼カメラからの入力に対して、コンピュータ立体視機能を実行することができる。
いくつかの実例では、PVAを使用して、密なオプティカル・フローを実行することができる。処理されたレーダを提供するために、生のレーダ・データの処理に従って(たとえば、4D高速フーリエ変換を使用して)。他の実例では、PVAは、たとえば、生の飛行時間データを処理して、処理された飛行時間データを提供することによって、飛行時間深度を処理するために使用される。
DLAを使用して、たとえば、物体検出ごとに信頼度の測定値を出力するニューラル・ネットワークを含む、制御及び運転の安全性を高めるための、任意のタイプのネットワークを実行することができる。かかる信頼度の値は、確率、又は他の検出と比較した、各検出の相対的な「重み」を提示するものと解釈することができる。この信頼度の値により、システムはさらに、どの検出が、偽陽性検出ではなく真陽性検出と見なされるべきかに関して、判断を下すことが可能となる。たとえば、システムは、信頼度の閾値をセットし、閾値を超える検出だけを真陽性を検出したと見なすことができる。自動緊急制動(AEB:automatic emergency braking)システムでは、偽陽性検出によって車両が自動的に緊急制動を実行することになるが、これは明らかに望ましくない。したがって、最も信頼性の高い検出だけが、AEBのトリガと見なされるべきである。DLAは、信頼度の値を回帰するために、ニューラル・ネットワークを実行することができる。ニューラル・ネットワークは、ニューラル・ネットワークの入力として、とりわけ、バウンディング・ボックスの寸法、(たとえば別のサブシステムから)得られた地上面推定値、ニューラル・ネットワーク及び/又は他のセンサ(たとえば、ライダ・センサ1364又はレーダ・センサ1360)から得られた車両1300の向き、距離、物体の3D位置の推定値と相関する、慣性測定ユニット(IMU:inertial measurement unit)センサ1366の出力など、パラメータの少なくとも一部のサブセットを受け取ることができる。
SoC1304には、データ・ストア1316(たとえば、メモリ)が含まれ得る。データ・ストア1316は、GPU及び/又はDLAで実行されるべきニューラル・ネットワークをストアすることができる、SoC1304のオンチップ・メモリであり得る。いくつかの実例では、データ・ストア1316は、冗長性及び安全性のために、ニューラル・ネットワークの複数のインスタンスをストアするのに十分大きい容量であり得る。データ・ストア1312は、L2又はL3キャッシュ1312を備えることができる。データ・ストア1316への参照には、本明細書で説明されるように、PVA、DLA、及び/又は他のアクセラレータ1314に関連するメモリへの参照が含まれ得る。
SoC1304には、1つ又は複数のプロセッサ1310(たとえば、組込み型プロセッサ)が含まれ得る。プロセッサ1310には、ブート電力及び管理機能、並びに関連するセキュリティの強制実施を扱う専用プロセッサ及びサブシステムであり得る、ブート及び電力管理プロセッサが含まれ得る。ブート及び電力管理プロセッサは、SoC1304のブート・シーケンスの一部であり得、実行時の電力管理サービスを提供することができる。ブート電力及び管理プロセッサは、クロック及び電圧プログラミング、システムの低電力状態遷移の支援、SoC1304の熱及び温度センサ管理、並びに/又はSoC1304の電力状態管理を可能にし得る。各温度センサは、出力周波数が温度に比例するリング発振器として実装され得、SoC1304は、リング発振器を使用して、CPU1306、GPU1308、及び/又はアクセラレータ1314の温度を検出することができる。温度が閾値を超えると判断された場合、ブート及び電力管理プロセッサは、温度障害ルーチンに入り、SoC1304を、より低電力の状態にして、且つ/又は車両1300を、安全停止モードに至るまでの運転手にする(たとえば、車両1300を安全停止させる)ことができる。
プロセッサ1310には、音声処理エンジンとして機能できる、組込み型プロセッサのセットがさらに含まれ得る。音声処理エンジンは、複数のインタフェースを介した多チャネル音声用の完全なハードウェアのサポート、及び幅広く柔軟な範囲にわたる音声I/Oインタフェースを可能にする、音声サブシステムであり得る。いくつかの実例では、音声処理エンジンは、専用RAMを備えるデジタル信号プロセッサを備えた、専用プロセッサ・コアである。
プロセッサ1310には、低電力センサ管理及びウェイクを使用するケースをサポートするのに必要な、ハードウェアのフィーチャを実現することができる、常時オン・プロセッサ・エンジンがさらに含まれ得る。常時オン・プロセッサ・エンジンには、プロセッサ・コア、密結合RAM、サポート周辺デバイス(たとえば、タイマ及び割込みコントローラ)、様々なI/Oコントローラ周辺デバイス、及びルーティング論理機構が含まれ得る。
プロセッサ1310には、自動車アプリケーションの安全管理を扱うための、専用プロセッサ・サブシステムを含む、安全クラスタ・エンジンがさらに含まれ得る。安全クラスタ・エンジンは、2つ以上のプロセッサ・コア、密結合RAM、サポート周辺デバイス(たとえば、タイマ、割込みコントローラなど)、及び/又はルーティング論理機構が含まれ得る。安全モードでは、2つ以上のコアが、ロックステップ・モードで動作し、コアの動作間のあらゆる違いを検出する比較論理機構によって、ただ1つのコアのように機能することができる。
プロセッサ1310には、リアルタイムでのカメラ管理を扱うための専用プロセッサ・サブシステムが含まれ得る、リアルタイム・カメラ・エンジンがさらに含まれ得る。
プロセッサ1310には、カメラ処理パイプラインの一部である、ハードウェア・エンジンである画像信号プロセッサが含まれ得る、ハイ・ダイナミック・レンジ信号プロセッサがさらに含まれ得る。
プロセッサ1310には、ビデオ再生アプリケーションが、プレーヤのウィンドウの最終画像を生成するために必要とする、ビデオ後処理機能を実施する処理ブロック(たとえば、マイクロプロセッサに実装される)であり得る、ビデオ画像合成器が含まれ得る。ビデオ画像合成器は、広視野カメラ1370、サラウンド・カメラ1374、及び/又はキャビン内監視カメラ・センサの、レンズ歪み補正を実行することができる。キャビン内監視カメラ・センサは、好ましくは、キャビン内でのイベントを識別し、これに応答するよう設定された、高度SoCの別のインスタンスで実行されるニューラル・ネットワークによって監視される。キャビン内システムは、読唇術を実行して、移動体通信サービスをアクティブ化して電話をかけるか、電子メールを口述するか、車両の目的地を変更するか、車両のインフォテインメント・システム及びセッティングをアクティブ化若しくは変更するか、又は声で起動するWebサーフィンを提供することができる。運転者は、特定の機能を、車両が自律モードで動作している場合にしか利用できず、それ以外の場合は無効である。
ビデオ画像合成器には、空間ノイズと時間ノイズとの両方を低減するための、強化された時間ノイズ・リダクションが含まれ得る。たとえば、ビデオに動きが存在する場合、ノイズ・リダクションは、空間情報に適切な重みづけを行い、隣り合うフレームから供給される情報の重みを減らす。画像又は画像の一部に動きが含まれていない場合、ビデオ画像合成器が実行する時間ノイズ・リダクションは、以前の画像からの情報を使用して、現在の画像のノイズを低減することができる。
ビデオ画像合成器はまた、入力したステレオ・レンズのフレームに対して、ステレオ平行化処理(stereo rectification)を実行するよう設定され得る。ビデオ画像合成器はさらに、デスクトップ向けオペレーティング・システムが使用されている場合に、ユーザ・インタフェースの合成に使用され得、新しい面を継続的にレンダリングするのに、GPU1308は不要である。GPU1308が、電源オンで、3Dレンダリングをアクティブに実行している場合でさえも、ビデオ画像合成器を使用して、GPU1308をオフロードし、性能及び応答性を向上させることができる。
SoC1304には、カメラからビデオ及び入力を受信するための、モバイル業界プロセッサ・インタフェース(MIPI:mobile industry processor interface)のカメラ・シリアル・インタフェース、高速インタフェース、並びに/又はカメラに使用され得るビデオ入力ブロック及び関係するピクセル入力機能が、さらに含まれ得る。SoC1304には、ソフトウェアによって制御され得、特定の役割に拘束されていないI/O信号を受信するために使用され得る、入力/出力コントローラがさらに含まれ得る。
SoC1304には、周辺デバイス、音声コーデック、電力管理部、及び/又は他のデバイスとの通信を可能にする、広範囲の周辺デバイス・インタフェースがさらに含まれ得る。SoC1304を使用して、カメラ(たとえば、ギガビット・マルチメディア・シリアル・リンク及びイーサネット(登録商標)を介して接続される)、センサ(たとえば、イーサネット(登録商標)を介して接続され得る、ライダ・センサ1364、レーダ・センサ1360など)からのデータ、バス1302からのデータ(たとえば、車両1300のスピード、ハンドルの場所など)、GNSSセンサ1358からのデータ(たとえば、イーサネット(登録商標)又はCANバスを介して接続される)を処理することができる。SoC1304には、独自のDMAエンジンが含まれ得、CPU1306をルーチン・データ管理タスクから解放するために使用され得る、専用の高性能大容量記憶部コントローラがさらに含まれ得る。
SoC1304は、自動化レベル3~5に及ぶ柔軟なアーキテクチャを有するエンドツーエンドのプラットフォームであり、これにより、多様性及び冗長性のために、コンピュータ・ビジョン及びADAS技法を活用し、効率的に使用する、包括的な機能的安全アーキテクチャを提供し、深層学習ツールと共に、柔軟で信頼性の高い運転ソフトウェア・スタックのプラットフォームを提供することができる。SoC1304は、従来のシステムよりも高速で、より信頼性が高く、さらにエネルギー効率及び空間効率がより高い可能性がある。たとえば、アクセラレータ1314は、CPU1306、GPU1308、及びデータ・ストア1316と組み合わせると、レベル3~5の自律型車両用の、高速で効率的なプラットフォームを提供することができる。
したがって、この技術は、従来のシステムでは達成され得ない能力及び機能を提供する。たとえば、コンピュータ・ビジョン・アルゴリズムは、CPUで実行され得、Cプログラミング言語などの高級プログラミング言語を使用して設定され、多種多様な視覚データにわたって多種多様な処理アルゴリズムを実行することができる。しかし、CPUは、多くの場合、たとえば実行時間及び電力消費に関係するような、多くのコンピュータ・ビジョン・アプリケーションの性能要件を満たすことができない。具体的には、多くのCPUは、車載ADASアプリケーションの要件であり、実用的なレベル3~5の自律型車両の要件でもある、複雑な物体検出アルゴリズムを、リアルタイムで実行することができない。
従来のシステムとは対照的に、本明細書で説明されている技術は、CPU複合体、GPU複合体、及びハードウェア高速化クラスタを備えることにより、複数のニューラル・ネットワークを同時に及び/又は順次実行し、結果を互いに組み合わせて、レベル3~5の自律運転機能を使用可能にすることができる。たとえば、DLA又はdGPU(たとえば、GPU1320)で実行されるCNNには、スーパーコンピュータが、ニューラル・ネットワークが特別に訓練されていない標識を含む、交通標識を読み取って理解することを可能にする、テキスト及び単語認識が含まれ得る。DLAには、標識の意味論的理解を識別、解釈、及び提供して、その意味論的理解を、CPU複合体で実行されている経路計画モジュールに渡すことができる、ニューラル・ネットワークがさらに含まれ得る。
別の実例として、レベル3、4、又は5の運転が必要とされるときに、複数のニューラル・ネットワークが、同時に実行され得る。たとえば、電光を使った「注意:点滅する信号は凍結状態を示す」からなる警告標識は、いくつかのニューラル・ネットワークによって、独立して又は集合的に解釈され得る。標識自体は、第1の展開されるニューラル・ネットワーク(たとえば、訓練されたニューラル・ネットワーク)によって交通標識と識別され得、「点滅する信号は凍結状態を示す」というテキストは、第2の展開されるニューラル・ネットワークによって解釈され得、第2の展開されるニューラル・ネットワークが、車両の経路計画ソフトウェア(好ましくは、CPU複合体で実行されている)に、点滅する信号が検出される場合は凍結状態が存在することを通知する。点滅する信号は、複数のフレームにわたって第3の展開されるニューラル・ネットワークを動作させることによって識別され得、第3の展開されるニューラル・ネットワークが、点滅する信号があること(又はないこと)を車両の経路計画ソフトウェアに通知する。3つのニューラル・ネットワークはすべて、DLA内及び/又はGPU1308などで、同時に実行することができる。
いくつかの実例では、顔認識及び車両所有者識別のためのCNNは、カメラ・センサからのデータを使用して、車両1300の許可された運転者及び/又は所有者の存在を識別することができる。常時オン・センサ処理エンジンを使用して、所有者が運転席のドアに近づいてライトをオンにしたときに車両のロックを解除し、セキュリティ・モードのときは、所有者が車両を離れるときに車両を動作不能にすることができる。このようにして、SoC1304は、盗難及び/又はカージャックに対するセキュリティを実現する。
別の実例では、緊急車両の検出及び識別のためのCNNは、マイク1396からのデータを使用して、緊急車両のサイレンを検出及び識別することができる。汎用の分類器を使用してサイレンを検出し、特徴を手動で抽出する従来のシステムとは対照的に、SoC1304は、CNNを使用して、環境音と都会音とを分類するばかりでなく、視覚データも分類する。好ましい実施例では、DLAで実行されるCNNは、緊急車両の相対的な接近スピードを識別するよう訓練される(たとえば、ドップラ効果を使用することによって)。CNNはまた、GNSSセンサ1358によって識別される、車両が動作している局所的なエリアに特有の緊急車両を識別するよう訓練され得る。したがって、たとえば、欧州で動作する場合、CNNは、欧州のサイレンを検出しようとし、米国では、CNNは、北米のサイレンだけを識別しようとするであろう。緊急車両が検出されると、制御プログラムを使用して、超音波センサ1362の助けを借りて、緊急車両が通過するまで緊急車両安全ルーチンを実行し、車両を減速し、道路の脇に寄って、車両を駐車し、且つ/又は車両をアイドリングすることができる。
車両には、高速相互接続(たとえば、PCIe)を介してSoC1304に結合され得る、CPU1318(たとえば、個別のCPU又はdCPU)が含まれ得る。CPU1318には、たとえば、X86プロセッサが含まれ得る。CPU1318を使用して、ADASセンサとSoC1304との間の、場合によっては矛盾する結果を調停すること、並びに/又は、たとえば、コントローラ1336及び/若しくはインフォテインメントSoC1330の状態及び健全性を監視することを含む、様々な機能のいずれかを実行することができる。
車両1300には、高速相互接続(たとえば、NVIDIAのNVLINK)を介してSoC1304に結合され得る、GPU1320(たとえば、個別のGPU又はdGPU)が含まれ得る。GPU1320は、冗長な、及び/又は別のニューラル・ネットワークを実行することなどによって、追加の人工知能の機能を提供することができ、車両1300のセンサからの入力(たとえば、センサ・データ)に基づいて、ニューラル・ネットワークを訓練及び/又は更新するために使用され得る。
車両1300には、1本又は複数本の無線アンテナ1326(たとえば、移動体通信用アンテナ、ブルートゥース(登録商標)用アンテナなどの、様々な通信プロトコル用の1本又は複数本の無線アンテナ)が含まれ得る、ネットワーク・インタフェース1324がさらに含まれ得る。ネットワーク・インタフェース1324を使用して、インターネットを介したクラウドとの(たとえば、サーバ1378及び/若しくは他のネットワーク・デバイスとの)、他の車両との、及び/又はコンピュータ処理デバイス(たとえば、同乗者のクライアント・デバイス)との、無線接続が可能となり得る。他の車両と通信するために、2台の車両間に直接リンクが確立され得、及び/又は間接リンクが確立され得る(たとえば、ネットワークをわたって、及びインターネットを介して)。直接リンクは、車車間通信リンクを使用して提供され得る。車車間通信リンクは、車両1300に近接する車両(たとえば、車両1300の前、横、及び/又は後ろの車両)に関する情報を、車両1300に提供することができる。この機能は、車両1300の協調適応型クルーズ制御機能の一部であり得る。
ネットワーク・インタフェース1324には、変調及び復調機能を提供し、コントローラ1336が、無線ネットワークを介して通信することを可能にする、SoCが含まれ得る。ネットワーク・インタフェース1324には、ベースバンドから無線周波数へのアップコンバージョン、及び無線周波数からベースバンドへのダウン・コンバージョンのための無線周波数フロント・エンドが含まれ得る。周波数変換は、よく知られたプロセスによって実行され得、且つ/又はスーパーヘテロダイン・プロセスを使用して実行され得る。いくつかの実例では、無線周波数フロント・エンド機能は、別個のチップによって提供され得る。ネットワーク・インタフェースには、LTE、WCDMA(登録商標)、UMTS、GSM、CDMA2000、ブルートゥース(登録商標)、ブルートゥース(登録商標)LE、Wi-Fi、Z-Wave、ZigBee、LoRaWAN、及び/又は他の無線プロトコルを介して通信する、無線機能が含まれ得る。
車両1300には、オフチップ(たとえば、SoC1304から離れた)記憶部が含まれ得る、データ・ストア1328がさらに含まれ得る。データ・ストア1328には、RAM、SRAM、DRAM、VRAM、フラッシュ、ハード・ディスク、並びに/又は少なくとも1ビットのデータをストアできる他の構成要素及び/若しくはデバイスを含む、1つ又は複数の記憶要素が含まれ得る。
車両1300には、GNSSセンサ1358がさらに含まれ得る。GNSSセンサ1358(たとえば、GPS、アシストGPSセンサ、ディファレンシャルGPS(DGPS:differential GPS)センサなど)は、マッピング、知覚、占有格子生成、及び/又は経路計画機能を支援する。たとえば、イーサネット(登録商標)からシリアル(RS-232)へのブリッジを備える、USBコネクタを使用するGPSを含むが、これに限定されるものではない、任意の数のGNSSセンサ1358が使用され得る。
車両1300には、レーダ・センサ1360がさらに含まれ得る。レーダ・センサ1360は、暗闇及び/又は厳しい気象条件においてさえ、遠距離の車両を検出するために、車両1300によって使用され得る。レーダ機能の安全レベルは、ASIL Bであり得る。レーダ・センサ1360は、いくつかの実例では、生データにアクセスするためのイーサネット(登録商標)へのアクセスを含む、制御及び対象物追跡データへのアクセスのために、CAN及び/又はバス1302を使用することができる(たとえば、レーダ・センサ1360によって生成されたデータを伝送する)。多種多様なレーダ・センサ・タイプが使用され得る。たとえば、これに限定されるものではないが、レーダ・センサ1360は、前部、後部、及び側部でのレーダの使用に好適であり得る。いくつかの実例では、パルス・ドップラ・レーダ・センサが使用される。
レーダ・センサ1360には、視野が狭い遠距離、視野が広い短距離、側方もカバーする短距離など、様々な設定が含まれ得る。いくつかの実例では、遠距離レーダが、適応型クルーズ制御機能に使用され得る。遠距離レーダ・システムは、2つ以上の別個のスキャンによって実現される、250mの範囲内などの、広い視野を提供することができる。レーダ・センサ1360は、静止物体と移動物体とを区別するのに役立ち得、緊急ブレーキ・アシスト及び前方衝突警告のために、ADASシステムによって使用され得る。遠距離レーダ・センサには、複数(たとえば、6本以上)の固定レーダ・アンテナ、並びに高速CAN及びFlexRayインタフェースを備えた、モノスタティック・マルチモーダル・レーダが含まれ得る。6本のアンテナを使った実例では、中央の4本のアンテナが、隣り合う車線の交通による干渉を最小限に抑えながら、車両の1300の周囲をより高速に記録するよう設計された、集束されたビーム・パターンを作成することができる。他の2本のアンテナは、視野を拡大することができ、車両1300の車線に出入りする車両の迅速な検出を可能にする。
中距離レーダ・システムには、実例として、最大1360m(前部)又は80m(後部)の範囲、及び最大42度(前部)又は1350度(後部)の視野が含まれ得る。短距離レーダ・システムには、これに限定されるものではないが、後部バンパの両端に設置されるよう設計された、レーダ・センサが含まれ得る。かかるレーダ・センサ・システムは、後部バンパの両端に設置されると、車両の後部及び隣の死角を絶え間なく監視する、2本のビームを作成することができる。
短距離レーダ・システムは、死角検出及び/又は車線変更支援のために、ADASシステムで使用され得る。
車両1300には、超音波センサ1362がさらに含まれ得る。超音波センサ1362は、車両1300の前部、後部、及び/又は側部に配置され得、駐車支援のために、並びに/又は占有格子を作成及び更新するために使用され得る。多種多様な超音波センサ1362が使用され得、様々な超音波センサ1362が、様々な検出範囲(たとえば、2.5m、4m)に使用され得る。超音波センサ1362は、ASIL Bの機能的安全レベルで動作することができる。
車両1300には、ライダ・センサ1364が含まれ得る。ライダ・センサ1364は、物体及び歩行者の検出、緊急制動、衝突回避、及び/又は他の機能に使用され得る。ライダ・センサ1364は、機能的安全レベルASIL Bであり得る。いくつかの実例では、車両1300には、イーサネット(登録商標)を使用できる(たとえば、ギガビット・イーサネット(登録商標)・スイッチへデータを供給するため)、複数のライダ・センサ1364(たとえば、2個、4個、6個など)が含まれ得る。
いくつかの実例では、ライダ・センサ1364は、360度視野での物体、及び物体の距離のリストを提供可能であり得る。市販のライダ・センサ1364は、宣伝されている範囲が約1300m、精度が2cm~3cmであり得、たとえば1300Mbpsイーサネット(登録商標)接続をサポートする。いくつかの実例では、1つ又は複数の突出部のない(non-protruding)ライダ・センサ1364が使用され得る。かかる実例では、ライダ・センサ1364が、車両1300の前部、後部、側部、及び/又はコーナに埋め込まれ得る、小さなデバイスとして実装され得る。ライダ・センサ1364は、かかる実例では、最大120度の水平及び35度の垂直視野を、低反射率の物体に対してですら200mの範囲で、実現することができる。前部に取り付けられたライダ・センサ1364は、45度から135度の間の水平視野に設定され得る。
いくつかの実例では、3Dフラッシュ型ライダなどのライダ技術も使用され得る。3Dフラッシュ型ライダは、レーザのフラッシュを送信源として使用し、最大約200mの車両の周囲を照射する。フラッシュ型ライダ・ユニットには、レーザ・パルスの通過時間及び各ピクセルの反射光を記録し、次々に車両から物体までの範囲に対応する、レセプタが含まれる。フラッシュ型ライダは、レーザのフラッシュごとに、極めて正確且つ歪みのない周囲の画像を生成することを可能にし得る。いくつかの実例では、4つのフラッシュ型ライダ・センサが、車両1300の各側部に1つずつ配備され得る。利用可能な3Dフラッシュ型ライダ・システムには、ファン以外の可動部品がない、固体3Dスターリング配列ライダ・カメラ(たとえば、非スキャン型ライダ・デバイス)が含まれる。フラッシュ型ライダ・デバイスは、フレームごとに5ナノ秒のクラスI(眼に安全な)レーザ・パルスを使用でき、反射されたレーザ光を、3D範囲の点群及び位置合わせされた強度データの形で、取り込むことができる。フラッシュ型ライダを使用することにより、またフラッシュ型ライダは可動部品のない固体デバイスなので、ライダ・センサ1364は、動きボケ、振動、及び/又は衝撃の影響をあまり受けない可能性がある。
車両には、IMUセンサ1366がさらに含まれ得る。IMUセンサ1366は、いくつかの実例では、車両1300の後輪車軸の中央に配置され得る。IMUセンサ1366は、たとえば、これらに限定されるものではないが、加速度計、磁力計、ジャイロスコープ、磁気コンパス、及び/又は他のセンサ・タイプが含まれ得る。6軸アプリケーションなどのいくつかの実例では、IMUセンサ1366には、加速度計及びジャイロスコープが含まれ得るが、9軸アプリケーションでは、IMUセンサ1366には、加速度計、ジャイロスコープ、及び磁力計が含まれ得る。
いくつかの実施例では、IMUセンサ1366は、微小電気機械システム(MEMS:micro-electro-mechanical system)慣性センサ、高感度GPS受信機、並びに場所、速度、及び姿勢の推定値を提供する高度カルマン・フィルタ処理アルゴリズムを組み合わせた、小型で高性能のGPS支援慣性航法システム(GPS/INS:GPS-Aided Inertial Navigation System)として実装され得る。したがって、いくつかの実例では、IMUセンサ1366は、GPSからIMUセンサ1366への速度の変化を直接観察して関係づけることによって、車両1300が、磁気センサからの入力を必要とせずに、進行方向を推定することを可能にし得る。いくつかの実例では、IMUセンサ1366及びGNSSセンサ1358は、ただ1つの一体型ユニットに組み合わされ得る。
車両には、車両1300内及び/又は車両1300の周囲に配置される、マイク1396が含まれ得る。マイク1396は、とりわけ、緊急車両の検出及び識別に使用され得る。
車両には、ステレオ・カメラ1368、広視野カメラ1370、赤外線カメラ1372、サラウンド・カメラ1374、遠距離及び/若しくは中距離カメラ1398、並びに/又は他のカメラ・タイプを含む、任意の数のカメラ・タイプがさらに含まれ得る。カメラを使用して、車両1300の全周辺の画像データを取り込むことができる。使用されるカメラのタイプは、車両1300の実施例及び要件によって異なり、カメラ・タイプの任意の組合せを使用して、車両1300の周囲の必要な範囲を提供することができる。加えて、カメラの数は、実施例に応じて異なり得る。たとえば、車両には、6台のカメラ、7台のカメラ、10台のカメラ、12台のカメラ、及び/又は別の数のカメラが含まれ得る。カメラは、一実例として、ギガビット・マルチメディア・シリアル・リンク(GMSL:Gigabit Multimedia Serial Link)及び/又はギガビット・イーサネット(登録商標)をサポートすることができるが、これらに限定されるものではない。カメラのそれぞれが、図13A及び図13Bについて、本明細書でより詳細に説明されている。
車両1300には、振動センサ1342がさらに含まれ得る。振動センサ1342は、車軸などの車両の構成要素の振動を測定することができる。たとえば、振動の変化は、路面の変動を示している場合がある。別の実例では、2つ以上の振動センサ1342が使用される場合、振動間の差を使用して、路面の摩擦又は滑り具合を判断することができる(たとえば、動力駆動車軸と自由回転車軸との間に振動の差がある場合)。
車両1300には、ADASシステム1338が含まれ得る。ADASシステム1338には、いくつかの実例では、SoCが含まれ得る。ADASシステム1338には、自律/適応型/自動クルーズ制御(ACC)、協調適応型クルーズ制御(CACC:cooperative adaptive cruise control)、前方クラッシュ警告(FCW:forward crash warning)、自動緊急制動(AEB)、車線逸脱警告(LDW)、車線維持支援(LKA:lane keep assist)、死角警告(BSW:blind spot warning)、後方クロストラフィック警告(RCTW:rear cross-traffic warning)、衝突警告システム(CWS:collision warning system)、車線中央維持(LC:lane centering)、並びに/又は他のフィーチャ及び機能が含まれ得る。
ACCシステムは、レーダ・センサ1360、ライダ・センサ1364、及び/又はカメラを使用することができる。ACCシステムには、長手方向ACC及び/又は横方向ACCが含まれ得る。長手方向ACCは、車両1300の直前の車両までの距離を監視及び制御し、車両のスピードを自動的に調整して、前方の車両からの安全な距離を維持する。横方向ACCは、距離保持を実行し、必要に応じて、車線を変更するように車両1300に助言する。横方向ACCは、LCA及びCWSなどの、他のADASアプリケーションと関係している。
CACCは、ネットワーク・インタフェース1324及び/若しくは無線アンテナ1326を介して、他の車両から無線リンクによって、又は間接的にネットワーク接続を介して(たとえば、インターネットを介して)受信され得る、他の車両からの情報を使用する。直接リンクは、車車間(V2V:vehicle-to-vehicle)通信リンクによって提供され得、一方間接リンクは、インフラと車両との間(I2V:infrastructure-to-vehicle)の通信リンクであり得る。概して、V2V通信の概念は、すぐ近くを先行する車両(たとえば、車両1300の直前の車両、及び車両1300と同じ車線にある車両)に関する情報を提供し、一方、I2V通信の概念は、さらに前方の交通に関する情報を提供する。CACCシステムには、I2V情報源及びV2V情報源のいずれか又は両方が含まれ得る。車両1300の前の車両の情報があるとすると、CACCは、より信頼性が高くなり得、交通の流れの円滑さを改善し、道路の混雑を減らす可能性を有している。
FCWシステムは、運転者に危険を警告するよう設計されているので、運転者は、是正措置を講じることができる。FCWシステムは、ディスプレイ、スピーカ、及び/又は振動部品など、運転者へのフィードバックに電気的に結合された、専用プロセッサ、DSP、FPGA、及び/又はASICに結合された、前面カメラ及び/又はレーダ・センサ1360を使用する。FCWシステムは、音、視覚的警告、振動、及び/又は素早いブレーキ・パルスなどの形の、警告を与えることができる。
AEBシステムは、別の車両又は他の物体との切迫した前方衝突を検出し、運転者が特定の時間又は距離パラメータ内に是正措置を講じない場合、自動的にブレーキをかけることができる。AEBシステムは、専用プロセッサ、DSP、FPGA、及び/又はASICに結合された、前面カメラ及び/又はレーダ・センサ1360を使用することができる。AEBシステムは、危険を検出すると、通常、最初に運転者に衝突を回避するための是正措置を講じるよう警告し、運転者が是正措置を講じない場合、AEBシステムは、予測される衝突の影響を阻止するか、又は少なくとも軽減するために、自動的にブレーキをかけることができる。AEBシステムには、動的ブレーキ・サポート及び/又はクラッシュ切迫による制動などの技法が含まれ得る。
LDWシステムは、車両1300が車線のマーキングを横切ったときに運転者に警告するために、ハンドル又は座席の振動などの、視覚的、聴覚的、及び/又は触覚的警告を与える。運転者が方向指示器を作動させて意図的な車線逸脱を示したときには、LDWシステムは作動しない。LDWシステムは、ディスプレイ、スピーカ、及び/又は振動部品など、運転者へのフィードバックに電気的に結合された、専用プロセッサ、DSP、FPGA、及び/又はASICに結合された、前側に向くカメラを使用することができる。
LKAシステムは、LDWシステムの変形形態である。LKAシステムは、車両1300が車線を出始めた場合に、車両1300を補正するために、ステアリング入力又は制動を提供する。
BSWシステムは、自動車の死角にある車両の運転者を検出して警告する。BSWシステムは、合流又は車線変更が安全でないことを示すために、視覚的、聴覚的、及び/又は触覚的警告を与えることができる。システムは、運転者が方向指示器を使用するとき、追加の警告を与えることができる。BSWシステムは、ディスプレイ、スピーカ、及び/又は振動部品など、運転者へのフィードバックに電気的に結合された、専用プロセッサ、DSP、FPGA、及び/又はASICに結合された、後側面カメラ及び/又はレーダ・センサ1360を使用することができる。
RCTWシステムは、車両1300が後退しているときに、物体が後部カメラの範囲の外側で検出されると、視覚的、聴覚的、及び/又は触覚的通知を与えることができる。一部のRCTWシステムには、クラッシュを回避するために、車両のブレーキが確実にかかるように、AEBが含まれる。RCTWシステムは、ディスプレイ、スピーカ、及び/又は振動部品など、運転者へのフィードバックに電気的に結合された、専用プロセッサ、DSP、FPGA、及び/又はASICに結合された、1つ又は複数の後面レーダ・センサ1360を使用することができる。
従来のADASシステムは、運転者を困らせ、気を散らす場合がある、偽陽性の結果を招きやすい可能性があるが、通常は、ADASシステムは、運転者に警告し、これにより運転者が、安全条件が本当に存在するかどうかを判断し、これに応じて行動できるので、致命的なわけではない。しかし、自律型車両1300において、車両1300自体は、結果が矛盾する場合に、1次コンピュータ又は2次コンピュータ(たとえば、第1のコントローラ1336又は第2のコントローラ1336)からの結果を配慮するかどうかを判断しなければならない。たとえば、いくつかの実施例では、ADASシステム1338は、予備コンピュータ合理性モジュールに知覚情報を供給する、予備及び/又は2次コンピュータであり得る。予備コンピュータの合理性モニタは、ハードウェア構成要素上で、冗長で多様なソフトウェアを実行して、知覚及び動的運転タスクの障害を検出することができる。ADASシステム1338からの出力は、監視MCUに供給され得る。1次コンピュータからの出力と2次コンピュータからの出力とが競合する場合、監視MCUは、安全な操作を保証するために、どのようにして競合を調整するかを判断しなければならない。
いくつかの実例では、1次コンピュータは、選択された結果における1次コンピュータの信頼度を示す、信頼スコアを監視MCUに供給するよう設定され得る。信頼スコアが閾値を超えると、監視MCUは、2次コンピュータが競合する又は矛盾する結果を供給するかどうかに関係なく、1次コンピュータの指示に従うことができる。信頼スコアが閾値を満たしておらず、且つ1次コンピュータと2次コンピュータとが相異なる結果(たとえば、競合)を示している場合、監視MCUは、コンピュータ間を調停して、適切な結果を判断することができる。
監視MCUは、1次コンピュータ及び2次コンピュータからの出力に基づいて、2次コンピュータが誤警報を供給する条件を判断するよう訓練及び設定された、ニューラル・ネットワークを実行するよう設定され得る。したがって、監視MCUのニューラル・ネットワークは、2次コンピュータの出力が信頼できる場合とできない場合とを、学習することができる。たとえば、2次コンピュータがレーダ・ベースのFCWシステムである場合、監視MCUのニューラル・ネットワークは、FCWシステムが、警報をトリガする排水格子又はマンホールの蓋などの、実際には危険でない金属製の物体を識別する場合を、学習することができる。同様に、2次コンピュータがカメラ・ベースのLDWシステムである場合、監視MCUのニューラル・ネットワークは、自転車又は歩行者が存在し、車線逸脱が実際には最も安全な操作である場合に、LDWを無効にすることを、学習することができる。監視MCUで実行されるニューラル・ネットワークを含む実施例では、監視MCUには、ニューラル・ネットワークを実行するのに好適な、関連するメモリを備えた、DLA又はGPUのうちの少なくとも一方が含まれ得る。好ましい実施例では、監視MCUは、SoC1304の構成要素を備え、且つ/又はSoC1304の構成要素として含まれ得る。
他の実例では、ADASシステム1338には、コンピュータ・ビジョンの従来のルールを使用して、ADAS機能を実行する2次コンピュータが含まれ得る。そのため、2次コンピュータは、典型的なコンピュータ・ビジョンのルール(if-then)を使用することができ、監視MCUのニューラル・ネットワークの存在により、信頼性、安全性、及び性能を向上させることができる。たとえば、多様な実施態様及び意図的な非同一性により、システム全体が、特にソフトウェア(又はソフトウェアとハードウェアとのインタフェース)機能によって引き起こされる障害に対して、耐障害性がより強くなる。たとえば、1次コンピュータで実行されているソフトウェアにソフトウェア・バグ又はエラーがあり、2次コンピュータで実行されている同一でないソフトウェア・コードが、同じ全体的な結果を提示する場合、監視MCUは、全体的な結果が正しく、且つ1次コンピュータのソフトウェア又はハードウェアのバグが重大なエラーを引き起こしていないという、より高い信頼度を有することができる。
いくつかの実例では、ADASシステム1338の出力は、1次コンピュータの知覚ブロック及び/又は1次コンピュータの動的運転タスク・ブロックに供給され得る。たとえば、ADASシステム1338が、直前の物体による前方クラッシュの警告を示した場合、知覚ブロックは、物体を識別するときに、この情報を使用することができる。他の実例では、2次コンピュータは、本明細書で説明されているように、訓練され、これにより偽陽性のリスクを低減する、2次コンピュータ自体のニューラル・ネットワークを有することができる。
車両1300には、インフォテインメントSoC1330(たとえば、車載インフォテインメント・システム(IVI:in-vehicle infotainment system))がさらに含まれ得る。インフォテインメント・システムは、SoCとして図示及び説明されているが、SoCではなくてもよく、2つ以上の個別の構成要素が含まれていてもよい。インフォテインメントSoC1330には、車両1300に、音声(たとえば、音楽、パーソナル・デジタル・アシスタント、ナビゲーションの指示、ニュース、ラジオなど)、ビデオ(たとえば、テレビ、映画、ストリーミングなど)、電話(たとえば、ハンズフリー通話)、ネットワーク接続(たとえば、LTE、Wi-Fiなど)、及び/又は情報サービス(たとえば、ナビゲーション・システム、後方駐車支援、無線データ・システム、燃料レベル、総走行距離、ブレーキ燃料レベル、オイル・レベル、ドア開/閉、エア・フィルタ情報などの車両関連情報)を提供するために使用され得る、ハードウェア及びソフトウェアの組合せが含まれ得る。インフォテインメントSoC1330には、たとえば、ラジオ、ディスク・プレーヤ、ナビゲーション・システム、ビデオ・プレーヤ、USB及びブルートゥース(登録商標)接続、カーピュータ、車載エンターテインメント、Wi-Fi、ハンドル音声制御、手を使わない声による制御、ヘッドアップ・ディスプレイ(HUD:heads-up display)、HMIディスプレイ1334、テレマティクス・デバイス、制御パネル(たとえば、様々な構成要素、フィーチャ、及び/若しくはシステムを制御及び/又はこれらと相互作用するための)、並びに/又は他の構成要素の場合がある。インフォテインメントSoC1330を使用して、さらに、ADASシステム1338からの情報、計画された車両操作、軌道、周囲の環境情報(交差点情報、車両情報、道路情報など)、及び/又は他の情報などの、自律運転情報などの情報(たとえば、視覚的及び/又は聴覚的)を、車両のユーザへ提供することができる。
インフォテインメントSoC1330には、GPU機能が含まれ得る。インフォテインメントSoC1330は、バス1302(たとえば、CANバス、イーサネット(登録商標)など)を介して、車両1300の他のデバイス、システム、及び/又は構成要素と通信することができる。いくつかの実例では、インフォテインメントSoC1330は、1次コントローラ1336(たとえば、車両1300の1次及び/又は予備コンピュータ)が機能しなくなった場合に、インフォテインメント・システムのGPUが、いくつかの自走機能を実行できるように、監視MCUに結合され得る。かかる実例では、インフォテインメントSoC1330は、本明細書で説明されているように、車両1300を、安全停止モードに至るまでの運転手にすることができる。
車両1300には、計器クラスタ1332(たとえば、デジタル計器盤、電子計器クラスタ、デジタル計器パネルなど)がさらに含まれ得る。計器クラスタ1332には、コントローラ及び/又はスーパーコンピュータ(たとえば、個別のコントローラ又はスーパーコンピュータ)が含まれ得る。計器クラスタ1332には、スピードメータ、燃料レベル、油圧、タコメータ、走行距離計、方向指示灯、ギアシフト・ポジション・インジケータ、シートベルト警告灯、駐車ブレーキ警告灯、エンジン故障灯、エアバッグ(SRS)システム情報、照明制御、安全システム制御、ナビゲーション情報などの、計器のセットが含まれ得る。いくつかの実例では、情報は、表示され、且つ/又はインフォテインメントSoC1330と計器クラスタ1332との間で共有され得る。言い換えれば、計器クラスタ1332は、インフォテインメントSOC1330の一部として含まれるか、又はその逆であり得る。
図13Dは、本開示のいくつかの実施例による、クラウド・ベースのサーバと図13Aの例示的な自律型車両1300との間で通信するためのシステム図である。システム1376には、サーバ1378、ネットワーク1390、及び車両1300を含む車両が含まれ得る。サーバ1378には、複数のGPU1384(A)~1384(H)(本明細書では総称してGUP1384と呼ばれる)、PCIeスイッチ1382(A)~1382(H)(本明細書では総称してPCIeスイッチ1382と呼ばれる)、及び/又はCPU1380(A)~1380(B)(本明細書では総称してCPU1380と呼ばれる)が含まれ得る。GPU1384、CPU1380、及びPCIeスイッチは、たとえば、これらに限定されるものではないが、NVIDIAによって開発されたNVLinkインタフェース1388及び/又はPCIe接続1386などの高速相互接続と、相互接続され得る。いくつかの実例では、GPU1384は、NVLinkを介して接続され、並びに/又はNVSwitch SoC、GPU1384、及びPCIeスイッチ1382は、PCIe相互接続を介して接続されている。8つのGPU1384、2つのCPU1380、及び2つのPCIeスイッチが図示されているが、これは制限することを意図するものではない。実施例に応じて、サーバ1378のそれぞれには、任意の数のGPU1384、CPU1380、及び/又はPCIeスイッチが含まれ得る。たとえば、サーバ1378には、それぞれ、8個、16個、32個、及び/又はそれ以上のGPU1384が含まれ得る。
サーバ1378は、ネットワーク1390を介して車両から、最近開始された道路工事などの、予期しない又は変化した道路状況を示す画像を表す、画像データを受信することができる。サーバ1378は、ネットワーク1390を介して車両へ、ニューラル・ネットワーク1392、更新されたニューラル・ネットワーク1392、並びに/又は交通及び道路状況に関する情報を含む地図情報1394を、伝送することができる。マップ情報1394の更新には、建設現場、窪み、迂回路、洪水、及び/又は他の障害物に関する情報など、HDマップ1322の更新が含まれ得る。いくつかの実例では、ニューラル・ネットワーク1392、更新されたニューラル・ネットワーク1392、及び/又はマップ情報1394は、環境内の任意の数の車両から受信したデータで表される、及び/又はデータ・センタで実行された訓練(たとえば、サーバ1378及び/又は他のサーバを使用して)に基づく、新しい訓練及び/又は経験によって生じた可能性がある。
サーバ1378を使用して、訓練データに基づいて、機械学習モデル(たとえば、ニューラル・ネットワーク)を訓練することができる。訓練データは、車両によって生成され得、且つ/又はシミュレーションで生成され得る(たとえば、ゲーム・エンジンを使用して)。いくつかの実例では、訓練データは、タグづけされ(たとえば、ニューラル・ネットワークが教師あり学習(supervised learning)から恩恵を受ける場合)、且つ/又は他の前処理を受けるが、他の実例では、訓練データは、タグづけ及び前処理の一方又は両方が行われない(たとえば、ニューラル・ネットワークが教師あり学習を必要としない場合)。訓練は、教師あり訓練、半教師あり訓練、教師なし訓練、自己学習、強化学習、連合学習、転移学習、特徴表現学習(feature learning)(主成分分析及びクラスタ分析を含む)、マルチリニア部分空間学習、多様体学習(manifold learning)、表現学習(スペア辞書学習を含む)、ルールベースの機械学習、異常検出、及びこれらの任意の変形又は組合せなどのクラスを含むが、これらに限定されるものではない、機械学習技法の任意の1つ又は複数のクラスに従って実行され得る。機械学習モデルが訓練されると、車両は、機械学習モデルを使用することができ(たとえば、ネットワーク1390を介して車両に伝送される)、及び/又は機械学習モデルは、車両を遠隔で監視するために、サーバ1378によって使用され得る。
いくつかの実例では、サーバ1378は、車両からデータを受信し、そのデータを、リアルタイムでの知的推論のために、最新のリアルタイム・ニューラル・ネットワークに適用することができる。サーバ1378には、NVIDIAによって開発されたDGX及びDGXステーション・マシンなどの、GPU1384を利用した深層学習スーパーコンピュータ及び/又は専用AIコンピュータが含まれ得る。しかし、いくつかの実例では、サーバ1378には、CPUを利用したデータ・センタだけを使用する、深層学習インフラが含まれ得る。
サーバ1378の深層学習インフラは、リアルタイムでの高速推論が可能であり得、その能力を使用して、車両1300のプロセッサ、ソフトウェア、及び/又は関連するハードウェアの健全性を評価及び検証することができる。たとえば、深層学習インフラは、車両1300から、一連の画像、及び/又はその一連の画像内で車両1300が位置を特定した物体(たとえば、コンピュータ・ビジョン及び/又は他の機械学習による物体分類技法によって)などの、定期的な更新を受信することができる。深層学習インフラは、インフラ自体のニューラル・ネットワークを実行して、物体を識別し、識別した物体を、車両1300が識別した物体と比較することができ、結果が一致せず、インフラが、車両1300のAIが故障していると結論づけた場合、サーバ1378は、車両1300のフェイルセーフ・コンピュータに、制御を引き受け、乗客に通知し、安全な駐車操作を完了するよう命令する信号を、車両1300に伝送することができる。
サーバ1378には、推論するために、GPU1384及び1つ又は複数のプログラム可能な推論アクセラレータ(たとえば、NVIDIAのTensorRT)が含まれ得る。GPUを利用したサーバと推論高速化との組合せにより、リアルタイムの応答性が可能になり得る。性能があまり重要ではない場合などの、他の実例では、CPU、FPGA、及び他のプロセッサを利用したサーバが、推論に使用され得る。
例示的なコンピュータ処理デバイス
図14は本開示のいくつかの実施例を実施する際に使用するのに好適な、例示的なコンピュータ処理デバイス1400のブロック図である。コンピュータ処理デバイス1400には、以下のデバイスを直接的又は間接的に結合する、相互接続システム1402が含まれ得る。メモリ1404、1つ又は複数の中央処理ユニット(CPU)1406、1つ又は複数のグラフィックス処理ユニット(GPU)1408、通信インタフェース1410、入力/出力(I/O:input/output)ポート1412、入力/出力構成要素1414、電源1416、1つ又は複数の表示構成要素1418(たとえば、ディスプレイ)、及び1つ又は複数の論理演算ユニット1420。少なくとも1つの実施例では、コンピュータ処理デバイス1400は、1つ又は複数の仮想マシン(VM:virtual machine)を備えることができ、及び/又はコンピュータ処理デバイス1400の構成要素のいずれかが、仮想構成要素(たとえば、仮想ハードウェア構成要素)を備えることができる。非限定的な実例では、GPU1408のうちの1つ若しくは複数が、1つ若しくは複数のvGPUを備えることができ、CPU1406のうちの1つ若しくは複数が、1つ若しくは複数のvCPUを備えることができ、及び/又は論理演算ユニット1420のうちの1つ若しくは複数が、1つ若しくは複数の仮想論理演算ユニットを備えることができる。したがって、コンピュータ処理デバイス1400には、個別の構成要素(たとえば、コンピュータ処理デバイス1400専用の完全なGPU)、仮想構成要素(たとえば、コンピュータ処理デバイス1400専用のGPUの一部)、又はこれらの組合せが含まれ得る。
図14の様々なブロックは、相互接続システム1402を介して線で接続されるよう示されているが、これは限定するのではなく、明確にすることだけを意図している。たとえば、いくつかの実施例では、ディスプレイ・デバイスなどの表示構成要素1418は、I/O構成要素1414と見なされ得る(たとえば、ディスプレイがタッチ画面である場合)。別の実例として、CPU1406及び/又はGPU1408には、メモリが含まれ得る(たとえば、メモリ1404は、GPU1408、CPU1406、及び/又は他の構成要素のメモリに加えて、記憶デバイスを表すことができる)。言い換えれば、図14のコンピュータ処理デバイスは、単なる例示である。「ワークステーション」、「サーバ」、「ラップトップ」、「デスクトップ」、「タブレット」、「クライアント・デバイス」、「携帯型デバイス」、「ハンドヘルド・デバイス」、「ゲーム・コンソール」、「電子制御ユニット(ECU:electronic control unit)」、「仮想現実システム」、及び/又は他のデバイス若しくはシステム・タイプなどのカテゴリは、すべてが、図14のコンピュータ処理デバイスの範囲内にあると企図されているので、区別されるものではない。
相互接続システム1402は、アドレス・バス、データ・バス、制御バス、又はこれらの組合せなどの、1つ又は複数のリンク又はバスを表すことができる。相互接続システム1402には、業界標準アーキテクチャ(ISA)バス、拡張業界標準アーキテクチャ(EISA:extended industry standard architecture)バス、ビデオ・エレクトロニクス標準化協会(VESA:video electronics standards association)バス、周辺構成要素相互接続(PCI:peripheral component interconnect)バス、周辺構成要素相互接続エクスプレス(PCIe:peripheral component interconnect express)バス、及び/又は別のタイプのバス若しくはリンクなどの、1つ又は複数のバス又はリンク・タイプが含まれ得る。いくつかの実施例では、構成要素間は、直接接続されている。一実例として、CPU1406は、メモリ1404に直接接続され得る。さらに、CPU1406は、GPU1408に直接接続され得る。構成要素間が直接接続又はポイントツーポイント接続である場合、相互接続システム1402には、接続を実行するためのPCIeリンクが含まれ得る。これらの実例では、PCIバスを、コンピュータ処理デバイス1400に含める必要はない。
メモリ1404には、様々なコンピュータ可読媒体のいずれかが含まれ得る。コンピュータ可読媒体は、コンピュータ処理デバイス1400によってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータ可読媒体には、揮発性媒体と不揮発性媒体との両方、及び取外し可能な媒体と取外し不可の媒体との両方が含まれ得る。限定するのではなく実例として、コンピュータ可読媒体には、コンピュータ記憶媒体及び通信媒体が含まれ得る。
コンピュータ記憶媒体には、コンピュータ可読命令、データ構造体、プログラム・モジュール、及び/又は他のデータ・タイプなどの情報を記憶するための、任意の方法又は技術で実装される、揮発性媒体と不揮発性媒体との両方、及び/又は取外し可能な媒体と取外し不可の媒体との両方が含まれ得る。たとえば、メモリ1404は、コンピュータ可読命令(たとえば、プログラム及び/又はオペレーティング・システムなどのプログラム要素を表す)をストアすることができる。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュ・メモリ若しくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD:digital versatile disk)若しくは他の光学ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置、若しくは他の磁気記憶デバイス、又は所望の情報をストアするために使用され得、コンピュータ処理デバイス1400によってアクセスされ得る、他の任意の媒体が含まれ得るが、これらに限定されるものではない。コンピュータ記憶媒体は、本明細書で使用されるとき、信号自体を含まない。
コンピュータ記憶媒体は、コンピュータ可読命令、データ構造体、プログラム・モジュール、及び/又は搬送波若しくは他の搬送の仕組みなどの変調データ信号内の他のデータ・タイプを具現化し、任意の情報配信媒体を含むことができる。「変調データ信号」という用語は、信号内の情報をエンコードするなどのやり方でセット又は変更された、変調データの1つ又は複数の特性を有する信号を指すことができる。実例として、コンピュータ記憶媒体には、これらに限定されるものではないが、有線ネットワーク又は直接配線接続などの有線媒体、並びに音響、RF、赤外線、及び他の無線媒体などの無線媒体が含まれ得る。上記のいずれかの組合せもまた、コンピュータ可読媒体の範囲内に含める必要がある。
CPU1406は、コンピュータ可読命令のうちの少なくともいくつかを実行して、コンピュータ処理デバイス1400の1つ又は複数の構成要素を制御し、本明細書で説明されている方法及び/又はプロセスのうちの1つ又は複数を実行するよう設定され得る。CPU1406は、それぞれに、多くのソフトウェア・スレッドを同時に扱うことができる、1個又は複数個のコア(たとえば、1個、2個、4個、8個、28個、72個など)が含まれ得る。CPU1406には、任意のタイプのプロセッサが含まれ得、実装されるコンピュータ処理デバイス1400のタイプに応じて、様々なタイプのプロセッサが含まれ得る(たとえば、より少数のコアを備える携帯型デバイス用プロセッサ、及びより多数のコアを備えるサーバ用プロセッサ)。たとえば、プロセッサは、コンピュータ処理デバイス1400のタイプに応じて、縮小命令セット・コンピュータ処理(RISC)を使用して実装された高度RISCマシン(ARM:Advanced RISC Machines)プロセッサ、又は複雑な命令セット・コンピュータ処理(CISC:Complex Instruction Set Computing)を使用して実装されたx86プロセッサであり得る。コンピュータ処理デバイス1400には、1つ又は複数のマイクロプロセッサ、又は数学コプロセッサなどの補助コプロセッサに加えて、1つ又は複数のCPU1406が含まれ得る。
CPU1406に加えて、又はCPU1406の代わりに、GPU1408が、コンピュータ可読命令のうちの少なくともいくつかを実行して、コンピュータ処理デバイス1400の1つ又は複数の構成要素を制御し、本明細書で説明されている方法及び/又はプロセスのうちの1つ又は複数を実行するよう設定され得る。GPU1408のうちの1つ若しくは複数は、(たとえば、CPU1406のうちの1つ又は複数と統合されたGPUであり得、及び/又はGPU1408のうちの1つ若しくは複数は、個別のGPUであり得る。実施例では、GPU1408のうちの1つ又は複数は、CPU1406のうちの1つ又は複数のコプロセッサであり得る。GPU1408は、グラフィックス(たとえば、3Dグラフィックス)をレンダリングするか、又は汎用の計算を実行するために、コンピュータ処理デバイス1400によって使用され得る。たとえば、GPU1408は、GPUでの汎用コンピュータ処理(GPGPU:General-Purpose computing on GPU)に使用され得る。GPU1408には、数百又は数千のソフトウェア・スレッドを同時に扱うことができる、数百又は数千のコアが含まれ得る。GPU1408は、レンダリング・コマンド(たとえば、CPU1406から、ホスト・インタフェースを介して受信されたレンダリング・コマンド)に応答して、出力画像のためのピクセル・データを生成することができる。GPU1408には、ピクセル・データ又はGPGPUデータなどの他の任意の好適なデータをストするための、ディスプレイ・メモリなどのグラフィック・メモリが含まれ得る。ディスプレイ・メモリは、メモリ1404の一部として含まれ得る。GPU1408には、並列に動作する(たとえば、リンクを介して)、2つ以上のGPUが含まれ得る。リンクは、GPUを直接接続してもよく(たとえば、NVLINKを使用して)、又はスイッチを介してGPUを接続してもよい(たとえば、NVSwitchを使用して)。各GPU1408は、互いに組み合わされると、出力の相異なる部分又は相異なる出力の、ピクセル・データ又はGPGPUデータを生成することができる(たとえば、第1の画像用の第1のGPU及び第2の画像用の第2のGPU)。各GPUには、GPU自体のメモリが含まれてもよく、又は他のGPUとメモリを共有してもよい。
CPU1406及び/若しくはGPU1408に加えて、又はCPU1406及び/若しくはGPU1408の代わりに、論理演算ユニット1420が、コンピュータ可読命令のうちの少なくともいくつかを実行して、コンピュータ処理デバイス1400の1つ又は複数の構成要素を制御し、本明細書で説明されている方法及び/又はプロセスのうちの1つ又は複数を実行するよう設定され得る。実施例では、CPU1406、GPU1408、及び/又は論理演算ユニット1420は、方法、プロセス、及び/又はその一部の任意の組合せを、個別に又は共同で実行することができる。論理演算ユニット1420のうちの1つ又は複数は、CPU1406及び/若しくはGPU1408のうちの1つ若しくは複数の一部であってもよく、且つ/又は統合されてもよく、並びに/或いは論理演算ユニット1420のうちの1つ若しくは複数は、個別の構成要素であってもよく、又はさもなければCPU1406及び/若しくはGPU1408の外部にあってもよい。実施例では、論理演算ユニット1420のうちの1つ又は複数は、CPU1406のうちの1つ若しくは複数及び/又はGPU1408のうちの1つ若しくは複数の、コプロセッサであり得る。
論理演算ユニット1420の実例には、データ処理ユニット(DPU)、テンソル・コア(TC:Tensor Core)、テンソル処理ユニット(TPU)、ピクセル・ビジュアル・コア(PVC:Pixel Visual Core)、ビジョン処理ユニット(VPU:Vision Processing Unit)、グラフィックス処理クラスタ(GPC:Graphics Processing Cluster)、テクスチャ処理クラスタ(TPC:Texture Processing Cluster)、ストリーミング・マルチプロセッサ(SM:Streaming Multiprocessor)、木の走査ユニット(TTU)、人工知能アクセラレータ(AIA:Artificial Intelligence Accelerator)、深層学習アクセラレータ(DLA)、算術論理演算ユニット(ALU)、特定用途向け集積回路(ASIC)、浮動小数点ユニット(FPU)、入力/出力(I/O)要素、周辺構成要素相互接続(PCI)若しくは周辺構成要素相互接続エクスプレス(PCIe)要素、及び/又は類似のものなど、1つ又は複数の処理コア及び/又は処理コアの構成要素が含まれる。
通信インタフェース1410には、コンピュータ処理デバイス1400が、有線及び/又は無線通信を含む電子通信ネットワークを介して、他のコンピュータ処理デバイスと通信することを可能にする、1つ又は複数の受信機、送信機、及び/又は送受信機が含まれ得る。
通信インタフェース1410には、無線ネットワーク(たとえば、Wi-Fi、Z-Wave、ブルートゥース(登録商標)、ブルートゥース(登録商標)LE、ZigBeeなど)、有線ネットワーク(たとえば、イーサネット(登録商標)又はInfiniBandを介した通信)、低電力広域ネットワーク(たとえば、LoRaWAN、SigFoxなど)、及び/又はインターネットなどの、いくつかの相異なるネットワークのいずれかを介した通信を可能にする、構成要素及び機能が含まれ得る。1つ又は複数の実施例では、論理演算ユニット1420及び/又は通信インタフェース1410には、ネットワークを介して、及び/又は相互接続システム1402を通じて受信したデータを、1つ又は複数のGPU1408(たとえば、GPU1408のメモリ)に直接伝送する、1つ又は複数のデータ処理ユニット(DPU)が含まれ得る。
I/Oポート1412により、コンピュータ処理デバイス1400が、I/O構成要素1414、表示構成要素1418、及び/又は他の構成要素を含む他のデバイスと、論理的に結合されることが可能となり得、他のデバイスの一部がコンピュータ処理デバイス1400に組み込まれ得る(たとえば、統合される)。例示的なI/O構成要素1414には、マイク、マウス、キーボード、ジョイスティック、ゲーム・パッド、ゲーム・コントローラ、衛星放送受信用アンテナ、スキャナ、プリンタ、無線デバイスなどが含まれる。I/O構成要素1414は、手振り動作、声、又はユーザが作り出す他の生理学的入力を処理する、自然なユーザ・インタフェース(NUI:natural user interface)を提供することができる。入力は、場合によっては、さらなる処理のために適切なネットワーク要素に伝送され得る。NUIは、スピーチ認識、スタイラス認識、顔認識、生体認識、画面上と画面の近隣との両方でのジェスチャ認識、手振り動作、頭及び目の追跡、並びにコンピュータ処理デバイス1400のディスプレイと関連づけられたタッチ認識(下記でより詳細に説明される)の、任意の組合せを実施することができる。コンピュータ処理デバイス1400には、ジェスチャを検出及び認識するための、立体カメラ・システム、赤外線カメラ・システム、RGBカメラ・システム、タッチ画面技術、及びこれらの組合せなどの、深度カメラが含まれ得る。さらに、コンピュータ処理デバイス1400には、動き検出を可能にする、加速度計又はジャイロスコープ(たとえば、慣性測定ユニット(IMU)の一部として)が含まれ得る。いくつかの実例では、加速度計又はジャイロスコープの出力は、没入型拡張現実又は仮想現実をレンダリングするために、コンピュータ処理デバイス1400によって使用され得る。
電源1416には、有線接続された電源、バッテリ電源、又はこれらの組合せが含まれ得る。電源1416は、コンピュータ処理デバイス1400に電力を供給して、コンピュータ処理デバイス1400の構成要素を動作可能にし得る。
表示構成要素1418には、ディスプレイ(たとえば、モニタ、タッチ画面、テレビ画面、ヘッドアップ・ディスプレイ(HUD)、他のディスプレイ・タイプ、又はこれらの組合せ)、スピーカ、及び/又は他の表示構成要素が含まれ得る。表示構成要素1418は、他の構成要素(たとえば、GPU1408、CPU1406、DPUなど)からデータを受信し、(たとえば、画像、ビデオ、音声などである)データを出力することができる。
例示的なデータ・センタ
図15は、本開示の少なくとも1つの実施例で使用され得る、例示的なデータ・センタ1500を示している。データ・センタ1500には、データ・センタ・インフラ層1510、フレームワーク層1520、ソフトウェア層1530、及び/又はアプリケーション層1540が含まれ得る。
図15に示されているように、データ・センタ・インフラ層1510には、リソース・オーケストレータ1512、グループ化されたコンピュータ処理リソース1514、及びノード・コンピュータ処理リソース(「ノードC.R.」:node computing resource)1516(1)~1516(N)が含まれ得、ここで「N」は、すべての正の整数全体を表す。少なくとも1つの実施例では、ノードC.R.1516(1)~1516(N)には、任意の数の中央処理ユニット(CPU)若しくは他のプロセッサ(DPU、アクセラレータ、フィールド・プログラマブル・ゲート・アレイ(FPGA:field programmable gate array)、グラフィック・プロセッサ又はグラフィック処理ユニット(GPU)などを含む)、メモリ・デバイス(たとえば、動的読取り専用メモリ)、記憶デバイス(たとえば、固体又はディスク・ドライブ)、ネットワーク入力/出力(NW I/O:network input/output)デバイス、ネットワーク・スイッチ、仮想マシン(VM)、電力モジュール、及び/又は冷却モジュールなどが含まれ得るが、これらに限定されるものではない。いくつかの実施例では、ノードC.R.1516(1)~1516(N)のうちの1つ又は複数のノードC.R.は、上記のコンピュータ処理リソースのうちの1つ又は複数を有する、サーバに対応することができる。加えて、いくつかの実施例では、ノードC.R.1516(1)~15161(N)には、vGPU、vCPU、及び/若しくは類似のものなどの、1つ若しくは複数の仮想構成要素が含まれ得、及び/又はノードC.R.1516(1)~1516(N)のうちの1つ若しくは複数は、仮想マシン(VM)に対応することができる。
少なくとも1つの実施例では、グループ化されたコンピュータ処理リソース1514には、1つ若しくは複数のラック(図示せず)、又は様々な地理的位置のデータ・センタに収容された多くのラック(やはり、図示せず)内に収容された、別個にグループ化したノードC.R.1516が含まれ得る。グループ化されたコンピュータ処理リソース1514内の、別個にグループ化したノードC.R.1516には、1つ又は複数の作業負荷をサポートするように設定又は割り当てられ得る、グループ化された計算部、ネットワーク、メモリ、又は記憶リソースが含まれ得る。少なくとも1つの実施例では、CPU、GPU、DPU、及び/又は他のプロセッサを含むいくつかのノードC.R.1516は、1つ又は複数のラック内にグループ化され、1つ又は複数の作業負荷をサポートするための計算リソースを提供することができる。1つ又は複数のラックにはまた、任意の数の電力モジュール、冷却モジュール、及び/又はネットワーク・スイッチも、任意の組合せで含まれ得る。
リソース・オーケストレータ1512は、1つ又は複数のノードC.R.1516(1)~1516(N)、及び/又はグループ化されたコンピュータ処理リソース1514を設定するか、さもなければ制御することができる。少なくとも1つの実施例では、リソース・オーケストレータ1512には、データ・センタ1500のためのソフトウェア設計インフラ(SDI:software design infrastructure)管理エンティティが含まれ得る。リソース・オーケストレータ1512には、ハードウェア、ソフトウェア、又はこれらの何らかの組合せが含まれ得る。
少なくとも1つの実施例では、図15に示されているように、フレームワーク層1520には、ジョブ・スケジューラ1532、設定マネージャ1534、リソース・マネージャ1536、及び/又は分散ファイル・システム1538が含まれ得る。フレームワーク層1520には、ソフトウェア層1530のソフトウェア1532、及び/又はアプリケーション層1540の1つ若しくは複数のアプリケーション1542をサポートする、フレームワークが含まれ得る。ソフトウェア1532又はアプリケーション1542には、それぞれ、アマゾン・ウェブ・サービス、グーグル・クラウド、及びマイクロソフト・アズールが提供するものなどの、ウェブベースのサービス・ソフトウェア又はアプリケーションが含まれ得る。フレームワーク層1520は、大規模なデータ処理(たとえば、「ビッグ・データ」)用に分散ファイル・システム1538を利用できる、Apache Spark(登録商標)(これ以降、「Spark」)などの、一種のフリー且つオープンソースのソフトウェアのウェブ・アプリケーション・フレームワークであり得るが、これに限定されるものではない。少なくとも1つの実施例では、ジョブ・スケジューラ1532には、データ・センタ1500の様々な層によってサポートされる、作業負荷のスケジューリングを容易にする、Sparkドライバが含まれ得る。設定マネージャ1534は、大規模なデータ処理をサポートするための、Spark及び分散ファイル・システム1538を含む、ソフトウェア層1530及びフレームワーク層1520などの、様々な層を設定することが可能であり得る。リソース・マネージャ1536は、分散ファイル・システム1538及びジョブ・スケジューラ1532のサポート用にマッピング又は割り当てられた、クラスタ化又はグループ化されたコンピュータ処理リソースを管理することが可能であり得る。少なくとも1つの実施例では、クラスタ化又はグループ化されたコンピュータ処理リソースには、データ・センタ・インフラ層1510でグループ化されたコンピュータ処理リソース1514が含まれ得る。リソース・マネージャ1536は、リソース・オーケストレータ1512と調整して、これらのマッピング又は割り当てられたコンピュータ処理リソースを管理することができる。
少なくとも1つの実施例では、ソフトウェア層1530に含まれるソフトウェア1532には、ノードC.R.1516(1)~1516(N)のうちの少なくとも一部、グループ化されたコンピュータ処理リソース1514、及び/又はフレームワーク層1520の分散ファイル・システム1538が使用するソフトウェアが含まれ得る。1種類又は複数種類のソフトウェアには、インターネット・ウェブ・ページ検索ソフトウェア、電子メール・ウイルス・スキャン・ソフトウェア、データベース・ソフトウェア、及びストリーミング・ビデオ・コンテンツ・ソフトウェアが含まれ得るが、これらに限定されるものではない。
少なくとも1つの実施例では、アプリケーション層1540に含まれるアプリケーション1542には、ノードC.R.1516(1)~1516(N)のうちの少なくとも一部、グループ化されたコンピュータ処理リソース1514、及び/又はフレームワーク層1520の分散ファイル・システム1538が使用する、1種類又は複数種類のアプリケーションが含まれ得る。1種類又は複数種類のアプリケーションには、任意の数のゲノム解析アプリケーション、コグニティブ・コンピュータ処理、並びに訓練若しくは推論ソフトウェア、機械学習フレームワーク・ソフトウェア(たとえば、PyTorch、TensorFlow、Caffeなど)、及び/又は1つ若しくは複数の実施例と組み合わせて使用される他の機械学習アプリケーションを含む、機械学習アプリケーションが含まれ得るが、これらに限定されるものではない。
少なくとも1つの実施例では、設定マネージャ1534、リソース・マネージャ1536、及びリソース・オーケストレータ1512のうちのいずれも、任意の技術的に実行可能なやり方で得られた任意の量及びタイプのデータに基づいて、任意の数及びタイプの自己修正措置を実施することができる。自己修正措置により、データ・センタ1500のデータ・センタ技師は、誤っている可能性のある設定を判断し、データ・センタの一部が十分に利用されない、且つ/又は不適切に実行されるのをできる限り回避することから、解放され得る。
データ・センタ1500には、本明細書で説明されている1つ又は複数の実施例による、1つ若しくは複数の機械学習モデルを訓練するか、又は1つ若しくは複数の機械学習モデルを使用して情報を予測若しくは推測するための、ツール、サービス、ソフトウェア、又は他のリソースが含まれ得る。たとえば、機械学習モデルは、データ・センタ1500に関連して上記で説明されたソフトウェア及び/又はコンピュータ処理リソースを使用して、ニューラル・ネットワーク・アーキテクチャに従って重みパラメータを算出することにより、訓練され得る。少なくとも1つの実施例では、1つ又は複数のニューラル・ネットワークに対応する、訓練又は展開された機械学習モデルは、データ・センタ1500に関連して上記で説明されたリソースを使用して、本明細書に説明されたものなどであるがこれらに限定されるものではない、1つ又は複数の訓練技法で計算された重みパラメータを使用することによって、情報を推論又は予測するために使用され得る。
少なくとも1つの実施例では、データ・センタ1500は、CPU、特定用途向け集積回路(ASIC)、GPU、FPGA、及び/又は他のハードウェア(又はこれらに対応する仮想コンピュータ処理リソース)を使用して、訓練及び/又は推論を、上記で説明されたリソースを使用して実行することができる。さらに、上記で説明された1つ又は複数のソフトウェア及び/又はハードウェアのリソースは、ユーザが、画像認識、スピーチ認識、又は他の人工知能サービスなどの、情報の推論を訓練又は実行することを可能にするサービスとして設定され得る。
例示的なネットワーク環境
本開示の実施例を実施する際に使用するのに好適なネットワーク環境には、1つ又は複数のクライアント・デバイス、サーバ、ネットワーク接続記憶装置(NAS:network attached storage)、他のバックエンド・デバイス、及び/又は他のデバイス・タイプが含まれ得る。クライアント・デバイス、サーバ、及び/又は他のデバイス・タイプ(たとえば、各デバイス)は、図14のコンピュータ処理デバイス1400の1つ又は複数のインスタンスに実装され得る。たとえば、各デバイスには、コンピュータ処理デバイス1400の同様の構成要素、フィーチャ、及び/又は機能が含まれ得る。加えて、バックエンド・デバイス(たとえば、サーバ、NASなど)が実装される場合、バックエンド・デバイスは、データ・センタ1500の一部として含まれ得、その実例が、本明細書で図15に関連してより詳細に説明されている。
ネットワーク環境の構成要素は、有線、無線、又はその両方であり得るネットワークを介して、互いに通信することができる。ネットワークには、複数のネットワーク、又はネットワークのネットワークが含まれ得る。実例として、ネットワークには、1つ若しくは複数の広域ネットワーク(WAN)、1つ若しくは複数の構内ネットワーク(LAN)、インターネット及び/若しくは公衆交換電話網(PSTN:public switched telephone network)などの1つ若しくは複数の公衆ネットワーク、及び/又は1つ若しくは複数の私設ネットワークが含まれ得る。ネットワークに無線遠隔通信ネットワークが含まれる場合、基地局、通信塔、さらにはアクセス・ポイントなどの構成要素(並びに他の構成要素)が、無線接続性を提供することができる。
互換性のあるネットワーク環境には、サーバがネットワーク環境に含まれない場合がある、1つ又は複数のピアツーピア・ネットワーク環境、及び1台又は複数台のサーバがネットワーク環境に含まれる場合がある、1つ又は複数のクライアント・サーバ・ネットワーク環境が含まれ得る。ピアツーピア・ネットワーク環境では、サーバに関連して本明細書で説明された機能は、任意の数のクライアント・デバイスに実装され得る。
少なくとも1つの実施例では、ネットワーク環境には、1つ又は複数のクラウド・ベースのネットワーク環境、分散コンピュータ処理環境、これらの組合せなどが含まれ得る。クラウド・ベースのネットワーク環境には、フレームワーク層、ジョブ・スケジューラ、リソース・マネージャ、及び1台又は複数台のサーバに実装された分散ファイル・システムが含まれ得、クラウド・ベースのネットワーク環境には、1台又は複数台のコア・ネットワーク・サーバ及び/又はエッジ・サーバが含まれ得る。フレームワーク層には、ソフトウェア層のソフトウェア、及び/又はアプリケーション層の1つ若しくは複数のアプリケーションをサポートする、フレームワークが含まれ得る。ソフトウェア又はアプリケーションには、それぞれ、ウェブベースのサービス・ソフトウェア又はアプリケーションが含まれ得る。実施例では、クライアント・デバイスのうちの1つ又は複数は、ウェブベースのサービス・ソフトウェア又はアプリケーションを使用することができる(たとえば、1つ又は複数のアプリケーション・プログラミング・インタフェース(API)を介して、サービス・ソフトウェア及び/又はアプリケーションにアクセスすることによって)。フレームワーク層は、大規模なデータ処理(たとえば、「ビッグ・データ」)用に分散ファイル・システムを使用できるものなどの、一種のフリー且つオープンソースのソフトウェアのウェブ・アプリケーション・フレームワークであり得るが、これに限定されるものではない。
クラウド・ベースのネットワーク環境は、本明細書で説明されているコンピュータ処理及び/又はデータ記憶機能(又はコンピュータ処理及び/若しくはデータ機能の一部分若しくは複数の部分)の任意の組合せを実行する、クラウド・コンピュータ処理及び/又はクラウド記憶装置を備えることができる。これらの様々な機能のいずれも、(たとえば、州、地域、国、世界などにわたって分散され得る、1つ又は複数のデータ・センタの)中央サーバ又はコア・サーバから、複数の位置にわたって分散され得る。ユーザ(たとえば、クライアント・デバイス)への接続が、エッジ・サーバの比較的近傍にある場合、コア・サーバは、機能の少なくとも一部を、エッジ・サーバに割り当てることができる。クラウド・ベースのネットワーク環境は、私設であり得るか(たとえば、ただ1つの組織に限定される)、公衆向けであり得るか(たとえば、多くの組織で利用可能である)、且つ/又はこれらの組合せ(たとえば、ハイブリッド・クラウド環境)であり得る。
クライアント・デバイスには、図14に関して本明細書で説明された、例示的なコンピュータ処理デバイス1400の構成要素、フィーチャ、及び機能のうちの少なくともいくつかが含まれ得る。クライアント・デバイスは、実例として、これらに限定されるものではないが、パーソナル・コンピュータ(PC:Personal Computer)、ラップトップ・コンピュータ、携帯型デバイス、スマートフォン、タブレット・コンピュータ、スマート・ウォッチ、装着可能なコンピュータ、パーソナル・デジタル・アシスタント(PDA:Personal Digital Assistant)、MP3プレーヤ、仮想現実ヘッドセット、全地球測位システム(GPS:Global Positioning System)若しくはデバイス、ビデオ・プレーヤ、ビデオ・カメラ、監視デバイス若しくはシステム、車両、ボート、飛行船、仮想マシン、ドローン、ロボット、ハンドヘルド通信デバイス、病院向けデバイス、ゲーム・デバイス若しくはシステム、エンターテインメント・システム、車両コンピュータ・システム、組込みシステム・コントローラ、遠隔制御装置、アプライアンス、家庭用電子デバイス、ワークステーション、エッジ・デバイス、これらの示したデバイスの任意の組合せ、又は他の任意の好適なデバイスとして具現化され得る。
本開示は、コンピュータ、又はパーソナル・データ・アシスタント若しくは他のハンドヘルド・デバイスなどの他の機械によって実行される、プログラム・モジュールなどのコンピュータ実行可能命令を含む、コンピュータ・コード又は機械使用可能命令という概括的な観点で説明され得る。ルーチン、プログラム、オブジェクト、構成要素、データ構造体などを含むプログラム・モジュールは、概して、特定のタスクを実行するか又は特定の抽象データ・タイプを実施するコードを指す。本開示は、ハンドヘルド・デバイス、家庭用電子装置、汎用コンピュータ、より特殊なコンピュータ処理デバイスなどを含む、様々なシステム設定で実践され得る。本開示はまた、通信ネットワークを介してリンクされている遠隔処理デバイスによってタスクが実行される、分散コンピュータ処理環境でも実践され得る。
本明細書で使用される場合、2つ以上の要素に関する「及び/又は」の列挙は、1つの要素のみ、又は要素の組合せを意味すると解釈されるべきである。たとえば、「要素A、要素B、及び/又は要素C」には、要素Aのみ、要素Bのみ、要素Cのみ、要素A及び要素B、要素A及び要素C、要素B及び要素C、又は要素A、B、及びCが含まれ得る。加えて、「要素A又は要素Bのうちの少なくとも1つ」には、要素Aのうちの少なくとも1つ、要素Bのうちの少なくとも1つ、又は要素Aのうちの少なくとも1つ及び要素Bのうちの少なくとも1つのうちが含まれ得る。さらに、「要素A及び要素Bのうちの少なくとも1つ」には、要素Aのうちの少なくとも1つ、要素Bのうちの少なくとも1つ、又は要素Aのうちの少なくとも1つ及び要素Bのうちの少なくとも1つが含まれ得る。
本開示の主題は、法定要件を満たすために、本明細書に具体的に説明されている。しかし、説明自体は、この開示の範囲を限定することを意図するものではない。むしろ、発明者らは、特許請求の範囲に記載された主題がまた、他のやり方でも具現化され、他の現在又は将来の技術と併せて、この文書で説明されたものと同様の、様々なステップ又はステップの組合せを含む可能性があることを企図している。さらに、「ステップ」及び/又は「ブロック」という用語は、本明細書では、使用される方法の様々な要素を含意するために使用され得るが、これらの用語は、個々のステップの順序が明示的に説明されていない限り、また説明されている場合を除いて、本明細書で開示された様々なステップの間又はステップ間の、どんな特定の順序も示唆すると解釈されるべきではない。

Claims (20)

  1. メモリと、
    前記メモリに結合されたプロセッサと、
    前記メモリに結合された分離式ルックアップ・テーブル(DLUT)アクセラレータと
    を備えるシステムであって、前記DLUTアクセラレータが、
    前記プロセッサを使用して生成される設定情報に少なくとも部分的に基づいて、前記DLUTアクセラレータの1つ又は複数のサブユニットを設定し、
    前記メモリから読み取られたインデックスのストリームの、インデックスの第1のセットから、バンクの競合がないインデックスの第1のサブセットを判断し、
    前記メモリから読み取られた前記インデックスのストリームの、インデックスの第2のセットから、前記インデックスの第1のサブセットとのバンクの競合がない、インデックスの第2のサブセットを判断し、
    複数の値を取得するために、前記メモリからのただ1回の読取りサイクルで、前記インデックスの第1のサブセット及び前記インデックスの第2のサブセットを使用して、1つ又は複数のルックアップ・テーブルのルックアップを実行し、且つ
    前記複数の値を前記メモリに書き込む、
    システム。
  2. 前記設定情報が、前記プロセッサ又は前記メモリのうちの少なくとも1つから、前記DLUTアクセラレータによって受信される、請求項1に記載のシステム。
  3. 前記設定情報が、インデックス及び前記1つ又は複数のルックアップ・テーブルを含む、1つ又は複数の入力バッファの1つ又は複数の位置を示す、請求項1に記載のシステム。
  4. 前記DLUTアクセラレータがさらに、
    前記インデックスのストリームが小数インデックス値を含むことを判断し、
    各小数インデックス値の小数部分を、前記1つ又は複数のサブユニットの後処理サブユニットへ供給し、且つ
    前記小数インデックス値の各小数インデックス値について、複数のインデックスを判断する、
    請求項1に記載のシステム。
  5. 前記後処理サブユニットが、最終値を生成するために、各小数インデックスの前記複数のインデックスに対応する値、及び前記小数インデックス値の前記小数部分を使用し、前記複数の値を前記メモリに書き込むことが、各小数インデックス値に対応する前記最終値を前記メモリに書き込むことを含む、請求項4に記載のシステム。
  6. 前記最終値を生成することが、1D補間又は2D補間のうちの少なくとも1つを実行することを含む、請求項5に記載のシステム。
  7. 前記複数の値を前記メモリに書き込むことが、前記インデックスのストリームの元の構成に従って、前記インデックスの第1のセット及び前記インデックスの第2のセットに対応する値を再構成することと、前記再構成された値を前記メモリに書き込むこととを含む、請求項1に記載のシステム。
  8. 前記プロセッサが、前記インデックスのストリームに含まれるインデックス、及び前記メモリ内の前記1つ又は複数のルックアップ・テーブルを設定する、請求項1に記載のシステム。
  9. 前記システムが、
    自律型若しくは半自律型の機械のための制御システム、
    自律型若しくは半自律型の機械のための知覚システム、
    シミュレーション動作を実行するためのシステム、
    深層学習の演算を実行するためのシステム、
    システム・オン・チップ(SoC)、
    プログラム可能なビジョン・アクセラレータ(PVA)を含むシステム、
    ビジョン処理ユニットを含むシステム、
    エッジ・デバイスを使用して実装されるシステム、
    ロボットを使用して実装されるシステム、
    1つ若しくは複数の仮想マシン(VM)を組み込んだシステム、
    データ・センタ内で少なくとも部分的に実装されるシステム、又は
    クラウド・コンピュータ処理リソースを使用して少なくとも部分的に実装されるシステム
    のうちの少なくとも1つに含まれる、請求項1に記載のシステム。
  10. 処理回路を備える分離式ルックアップ・テーブル(DLUT)アクセラレータであって、前記処理回路が、
    プロセッサを使用して生成される設定情報に少なくとも部分的に基づいて、前記DLUTアクセラレータの1つ又は複数のサブユニットを設定し、
    メモリから読み取られたインデックスのストリームの、インデックスの第1のセットから、バンクの競合がないインデックスの第1のサブセットを判断し、
    前記メモリから読み取られた前記インデックスのストリームの、インデックスの第2のセットから、前記インデックスの第1のサブセットとのバンクの競合がない、インデックスの第2のサブセットを判断し、
    複数の値を取得するために、前記メモリからのただ1回の読取りサイクルで、前記インデックスの第1のサブセット及び前記インデックスの第2のサブセットを使用して、1つ又は複数のルックアップ・テーブルのルックアップを実行し、且つ
    前記複数の値を前記メモリに書き込む、
    DLUTアクセラレータ。
  11. 前記設定情報が、前記プロセッサ又は前記メモリのうちの少なくとも1つから、前記DLUTアクセラレータによって受信される、請求項10に記載のDLUTアクセラレータ。
  12. 前記設定情報が、インデックス及び前記1つ又は複数のルックアップ・テーブルを含む、1つ又は複数の入力バッファの1つ又は複数の位置を示す、請求項10に記載のDLUTアクセラレータ。
  13. 前記DLUTアクセラレータがさらに、
    前記インデックスのストリームが小数インデックス値を含むことを判断し、
    各小数インデックス値の小数部分を、前記1つ又は複数のサブユニットの後処理サブユニットへ供給し、且つ
    前記小数インデックス値の各小数インデックス値について、複数のインデックスを判断する、
    請求項10に記載のDLUTアクセラレータ。
  14. 前記後処理サブユニットが、最終値を生成するために、各小数インデックスの前記複数のインデックスに対応する値、及び前記小数インデックス値の前記小数部分を使用し、前記複数の値を前記メモリに書き込むことが、各小数インデックス値に対応する前記最終値を前記メモリに書き込むことを含む、請求項13に記載のDLUTアクセラレータ。
  15. 前記最終値を生成することが、1D補間又は2D補間のうちの少なくとも1つを実行することを含む、請求項14に記載のDLUTアクセラレータ。
  16. 前記複数の値を前記メモリに書き込むことが、前記インデックスのストリームの元の構成に従って、前記インデックスの第1のセット及び前記インデックスの第2のセットに対応する値を再構成することと、前記再構成された値を前記メモリに書き込むこととを含む、請求項10に記載のDLUTアクセラレータ。
  17. 前記プロセッサが、前記インデックスのストリームに含まれるインデックス、及び前記メモリ内の前記1つ又は複数のルックアップ・テーブルを設定する、請求項10に記載のDLUTアクセラレータ。
  18. 前記DLUTアクセラレータが、
    自律型若しくは半自律型の機械のための制御システム、
    自律型若しくは半自律型の機械のための知覚システム、
    シミュレーション動作を実行するためのシステム、
    深層学習の演算を実行するためのシステム、
    システム・オン・チップ(SoC)、
    プログラム可能なビジョン・アクセラレータ(PVA)を含むシステム、
    ビジョン処理ユニットを含むシステム、
    エッジ・デバイスを使用して実装されるシステム、
    ロボットを使用して実装されるシステム、
    1つ若しくは複数の仮想マシン(VM)を組み込んだシステム、
    データ・センタ内で少なくとも部分的に実装されるシステム、又は
    クラウド・コンピュータ処理リソースを使用して少なくとも部分的に実装されるシステム
    のうちの少なくとも1つに含まれる、請求項10に記載のDLUTアクセラレータ。
  19. プロセッサを使用して生成される設定情報に少なくとも部分的に基づいて、分離式ルックアップ・テーブル(DLUT)アクセラレータの1つ又は複数のサブユニットを設定するステップと、
    メモリから読み取られたインデックスのストリームの、インデックスの第1のセットから、バンクの競合がないインデックスの第1のサブセットを判断するステップと、
    前記メモリから読み取られた前記インデックスのストリームの、インデックスの第2のセットから、前記インデックスの第1のサブセットとのバンクの競合がない、インデックスの第2のサブセットを判断するステップと、
    複数の値を取得するために、前記メモリからのただ1回の読取りサイクルで、前記インデックスの第1のサブセット及び前記インデックスの第2のサブセットを使用して、1つ又は複数のルックアップ・テーブルのルックアップを実行するステップと、
    前記複数の値を前記メモリに書き込むステップと
    を含む、方法。
  20. 前記設定情報が、前記プロセッサ又は前記メモリのうちの少なくとも1つから受信される、請求項19に記載の方法。
JP2022088299A 2021-08-02 2022-05-31 システム・オン・チップの分離式ルックアップ・テーブル・アクセラレータを使用してテーブルのルックアップを高速化すること Pending JP2023021912A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/391,369 2021-08-02
US17/391,369 US11836527B2 (en) 2021-08-02 2021-08-02 Accelerating table lookups using a decoupled lookup table accelerator in a system on a chip

Publications (1)

Publication Number Publication Date
JP2023021912A true JP2023021912A (ja) 2023-02-14

Family

ID=85176968

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022088299A Pending JP2023021912A (ja) 2021-08-02 2022-05-31 システム・オン・チップの分離式ルックアップ・テーブル・アクセラレータを使用してテーブルのルックアップを高速化すること

Country Status (2)

Country Link
US (2) US11836527B2 (ja)
JP (1) JP2023021912A (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11704067B2 (en) 2021-08-02 2023-07-18 Nvidia Corporation Performing multiple point table lookups in a single cycle in a system on chip
US11836527B2 (en) 2021-08-02 2023-12-05 Nvidia Corporation Accelerating table lookups using a decoupled lookup table accelerator in a system on a chip

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69927075T2 (de) 1998-02-04 2006-06-14 Texas Instruments Inc Rekonfigurierbarer Koprozessor mit mehreren Multiplizier-Akkumulier-Einheiten
KR100572945B1 (ko) 1998-02-04 2006-04-24 텍사스 인스트루먼츠 인코포레이티드 효율적으로 접속 가능한 하드웨어 보조 처리기를 구비하는디지탈 신호 처리기
US6526430B1 (en) 1999-10-04 2003-02-25 Texas Instruments Incorporated Reconfigurable SIMD coprocessor architecture for sum of absolute differences and symmetric filtering (scalable MAC engine for image processing)
US6829016B2 (en) 1999-12-20 2004-12-07 Texas Instruments Incorporated Digital still camera system and method
US6665768B1 (en) 2000-10-12 2003-12-16 Chipwrights Design, Inc. Table look-up operation for SIMD processors with interleaved memory systems
JP2003186866A (ja) 2001-12-20 2003-07-04 Sharp Corp データ駆動型情報処理装置およびその処理方法
US6728159B2 (en) 2001-12-21 2004-04-27 International Business Machines Corporation Flexible multibanking interface for embedded memory applications
US20110238948A1 (en) 2002-08-07 2011-09-29 Martin Vorbach Method and device for coupling a data processing unit and a data processing array
US7194568B2 (en) 2003-03-21 2007-03-20 Cisco Technology, Inc. System and method for dynamic mirror-bank addressing
US7454555B2 (en) 2003-06-12 2008-11-18 Rambus Inc. Apparatus and method including a memory device having multiple sets of memory banks with duplicated data emulating a fast access time, fixed latency memory device
FR2893156B1 (fr) 2005-11-04 2008-02-15 Commissariat Energie Atomique Procede et systeme de calcul intensif multitache et multiflot en temps reel.
KR101553651B1 (ko) * 2009-10-13 2015-09-17 삼성전자 주식회사 다중 뱅크 메모리 액세스 장치
US8547774B2 (en) 2010-01-29 2013-10-01 Mosys, Inc. Hierarchical multi-bank multi-port memory organization
US10803009B2 (en) 2011-07-14 2020-10-13 Texas Instruments Incorporated Processor with table lookup processing unit
US8656376B2 (en) 2011-09-01 2014-02-18 National Tsing Hua University Compiler for providing intrinsic supports for VLIW PAC processors with distributed register files and method thereof
US9176929B2 (en) 2011-12-31 2015-11-03 Institute Of Automation, Chinese Academy Of Sciences Multi-granularity parallel FFT computation device
WO2013097223A1 (zh) 2011-12-31 2013-07-04 中国科学院自动化研究所 多粒度并行存储系统与存储器
US9262174B2 (en) 2012-04-05 2016-02-16 Nvidia Corporation Dynamic bank mode addressing for memory access
TWI474076B (zh) 2012-09-24 2015-02-21 Au Optronics Corp 邊際場切換式液晶顯示面板
TWI584714B (zh) 2014-09-29 2017-05-21 聯想企業解決方案(新加坡)有限公司 卡扣組件、卡扣裝置與主機
KR102357863B1 (ko) * 2014-12-15 2022-02-04 삼성전자주식회사 메모리 접근 방법 및 장치
US20160179550A1 (en) * 2014-12-23 2016-06-23 Intel Corporation Fast vector dynamic memory conflict detection
US11630800B2 (en) 2015-05-01 2023-04-18 Nvidia Corporation Programmable vision accelerator
US20180095929A1 (en) 2016-09-30 2018-04-05 Intel Corporation Scratchpad memory with bank tiling for localized and random data access
US9973205B1 (en) 2017-06-26 2018-05-15 Amazon Technologies, Inc. Decompression using cascaded history windows
US11644834B2 (en) 2017-11-10 2023-05-09 Nvidia Corporation Systems and methods for safe and reliable autonomous vehicles
WO2019182974A2 (en) 2018-03-21 2019-09-26 Nvidia Corporation Stereo depth estimation using deep neural networks
US10885698B2 (en) 2018-08-10 2021-01-05 Nvidia Corporation Method for programmable timeouts of tree traversal mechanisms in hardware
US11436704B2 (en) 2019-01-14 2022-09-06 Nvidia Corporation Weighted normalized automatic white balancing
CN116134416A (zh) * 2020-06-28 2023-05-16 华为技术有限公司 避免张量内存布局中存储体冲突和流水线冲突的方法
US11836527B2 (en) 2021-08-02 2023-12-05 Nvidia Corporation Accelerating table lookups using a decoupled lookup table accelerator in a system on a chip
US11704067B2 (en) 2021-08-02 2023-07-18 Nvidia Corporation Performing multiple point table lookups in a single cycle in a system on chip
US20230042858A1 (en) 2021-08-02 2023-02-09 Nvidia Corporation Offloading processing tasks to decoupled accelerators for increasing performance in a system on a chip

Also Published As

Publication number Publication date
US11836527B2 (en) 2023-12-05
US20240045722A1 (en) 2024-02-08
US20230050902A1 (en) 2023-02-16

Similar Documents

Publication Publication Date Title
US20200380369A1 (en) Training a neural network using selective weight updates
CN112389443A (zh) 使用一个或更多个神经网络进行视线检测
US11095307B2 (en) Performing cyclic redundancy checks using parallel computing architectures
US20230308270A1 (en) Performing scrambling and/or descrambling on parallel computing architectures
US11704067B2 (en) Performing multiple point table lookups in a single cycle in a system on chip
US11593290B1 (en) Using a hardware sequencer in a direct memory access system of a system on a chip
JP2023021913A (ja) システム・オン・チップの性能を向上させるために、処理タスクを分離式アクセラレータにオフロードすること
US20230076599A1 (en) Performing load and permute with a single instruction in a system on a chip
US11934829B2 (en) Using a vector processor to configure a direct memory access system for feature tracking operations in a system on a chip
US11940947B2 (en) Hardware accelerated anomaly detection using a min/max collector in a system on a chip
US20240045722A1 (en) Accelerating table lookups using a decoupled lookup table accelerator in a system on a chip
JP2023024945A (ja) ベクトル・プロセッサを使用して、システム・オン・チップにおいて特徴追跡動作のためのダイレクト・メモリ・アクセス・システムを設定すること
US20230125397A1 (en) Built-in self-test for a programmable vision accelerator of a system on a chip
US20230124604A1 (en) Using per memory bank load caches for reducing power use in a system on a chip
US11954496B2 (en) Reduced memory write requirements in a system on a chip using automatic store predication
CN115701597A (zh) 在片上系统中使用解耦查找表加速器来加速表查找
CN115701596A (zh) 在片上系统中以单个周期执行多点表查找
US20230045443A1 (en) Performing load and store operations of 2d arrays in a single cycle in a system on a chip
US20230050062A1 (en) Simd data path organization to increase processing throughput in a system on a chip
US20240134645A1 (en) Using a vector processor to configure a direct memory access system for feature tracking operations in a system on a chip