JP2017525046A - ベクトルプロセッサ - Google Patents

ベクトルプロセッサ Download PDF

Info

Publication number
JP2017525046A
JP2017525046A JP2017504804A JP2017504804A JP2017525046A JP 2017525046 A JP2017525046 A JP 2017525046A JP 2017504804 A JP2017504804 A JP 2017504804A JP 2017504804 A JP2017504804 A JP 2017504804A JP 2017525046 A JP2017525046 A JP 2017525046A
Authority
JP
Japan
Prior art keywords
instruction
data
buffer
vector
memory
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.)
Granted
Application number
JP2017504804A
Other languages
English (en)
Other versions
JP6491314B2 (ja
JP2017525046A5 (ja
Inventor
バリー,ブレンダン
コナー,ファーガル
オリオーダン,マーティン
モロニー,デイヴィッド
パワー,ショーン
Original Assignee
リニア アルジェブラ テクノロジーズ リミテッド
リニア アルジェブラ テクノロジーズ リミテッド
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
Priority claimed from US14/457,929 external-priority patent/US10001993B2/en
Application filed by リニア アルジェブラ テクノロジーズ リミテッド, リニア アルジェブラ テクノロジーズ リミテッド filed Critical リニア アルジェブラ テクノロジーズ リミテッド
Publication of JP2017525046A publication Critical patent/JP2017525046A/ja
Publication of JP2017525046A5 publication Critical patent/JP2017525046A5/ja
Application granted granted Critical
Publication of JP6491314B2 publication Critical patent/JP6491314B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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
    • G06F1/035Reduction of table size
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units

Abstract

様々な可変長命令を含むベクトルプロセッサが開示される。時間を意識し、メモリ効率がよく、電力効率のよいやり方で、様々な作業を効率よく実行する、コンピュータに実装された方法が開示される。遅延ライン命令の長さに基づいた閾値を制御することによって、バッファをより効率よく管理する方法が開示される。マルチタイプでマルチサイズの作業をハードウェア内に配置する方法が開示される。ルックアップテーブルをまとめる方法が開示される。変数のインラインでの変更方法が開示される。

Description

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

Claims (19)

  1. コンピュータに実装された、可変長命令用バッファを管理する方法であって、
    第一参照ロケーションから可変長の命令データをキャッシングする工程と、
    第一時間において、命令用バッファ内で利用可能な未処理データの第一レベルとデフォルト閾値とを比較する工程と、
    前記未処理データの第一レベルが前記デフォルト閾値を満たさないことに基づいて、キャッシュされた前記命令データから固定幅のデータを前記命令用バッファ内にロードする工程と、
    前記第一参照ロケーションとは異なる第二参照ロケーションを参照する分岐命令を処理する工程であって、該分岐命令は、分岐遅延サイズを示すヘッダを含む、工程と、
    前記分岐命令が処理された後に、第二時間において、前記命令用バッファ内で利用可能な未処理データの第二レベルと前記分岐遅延サイズとを比較する工程と、
    前記未処理データの第二レベルが前記分岐遅延サイズを満たさないことに基づいて、キャッシュされた前記命令データから固定幅のデータを前記命令用バッファ内にロードする工程と、
    を含む方法。
  2. 前記命令用バッファ内の未処理データから可変長の命令を分離し、分離された該命令を出力して、前記命令用バッファ内の未処理データのレベルを下げる工程を、さらに含む、請求項1に記載の方法。
  3. 分離された前記命令は、ベクトルプロセッサに出力される、請求項2に記載の方法。
  4. 可変長の命令を管理するシステムであって、
    メモリからの可変長命令を記憶するキャッシュであって、該キャッシュは特定のメモリロケーションから命令をロードするように構成されたキャッシュと、
    前記キャッシュからロードされたデータを命令に分離するバッファであって、該バッファは前記キャッシュから固定長のデータラインを受けて、可変長の命令を出力するように構成されたバッファと、
    前記バッファ内の未処理データのレベルを決定し、追加データを前記バッファにロードするように前記キャッシュに指示するフェッチ部と、を含み、
    前記フェッチ部は、
    第一時間において、前記バッファ内で利用可能な未処理データの第一レベルとデフォルト閾値とを比較して、前記追加データを前記バッファにロードするように前記キャッシュにいつ指示するかを決定し、
    当該システムが分岐命令を特定した後に、分岐命令ヘッダから分岐遅延サイズを決定し、
    当該システムが前記分岐命令を特定した後に、前記デフォルト閾値の代わりに、第二時間において、前記バッファ内で利用可能な未処理データの第二レベルと前記分岐遅延サイズとを比較して、追加データを前記バッファにロードするように前記キャッシュにいつ指示するかを決定する
    ようにさらに構成された、システム。
  5. コンピュータに実装された、データのハードウェア処理の方法であって、
    第一可変長の命令を受ける工程であって、該命令は、第一オペレーションを行うことを示し、かつ一つ以上の第一オペランドを参照する、工程と、
    前記一つ以上の第一オペランドの第一データ型を決定する工程と、
    第一ハードウェアロジック回路を用いて、前記第一データ型の第一オペランドの前記第一オペレーションを行う工程と、
    第二可変長の命令を受ける工程であって、該命令は、第一オペレーションを行うことを示し、かつ一つ以上の第二オペランドを参照する、工程と、
    前記一つ以上の第二オペランドの第二データ型を決定する工程であって、該第二データ型は前記第一データ型とは異なる、工程と、
    前記第一ハードウェアロジック回路を用いて、前記第二データ型の第二オペランドの前記第一オペレーションを行う工程と、を含む方法。
  6. 前記第一ハードウェアロジック回路は、複数のサイズのオペランドの前記第一オペレーションを実行する動作が可能である、請求項5に記載の方法。
  7. 前記第一ハードウェアロジック回路は、浮動小数点、固定小数点、整数及びスケールされた整数のデータ型のオペランドの前記第一オペレーションを実行する動作が可能である、請求項5に記載の方法。
  8. オペレーションに対する結果エントリのルックアップテーブルを記憶する工程であって、該ルックアップテーブルは、所定の精度レベルでの小数結果を含み、該ルックアップテーブルは、各エントリに対して、複数の符号化ビットと複数の未符号化ビットを含む、工程と、
    前記オペレーションを含む命令に応じて、前記ルックアップテーブルにある特定値に対応する特定のエントリを検索する工程と、
    前記複数の符号化ビットを復号化して、前記小数結果の一部を生成する工程と、
    少なくとも前記複数の未符号化ビットを生成された前記小数結果に付加する工程と、
    生成された前記小数結果に基づいた前記オペレーションの結果を返す工程と、を含む、コンピュータに実装された、方法。
  9. 前記オペレーションはユニタリオペレーションである、請求項8に記載の方法。
  10. 前記オペレーションは対数オペレーションである、請求項9に記載の方法。
  11. 前記複数の符号化ビットは、前記小数結果のうちの特定桁を繰り返す回数を表す、請求項8に記載の方法。
  12. 前記特定桁は、前記ルックアップテーブルのエントリにも記憶される、請求項11に記載の方法。
  13. 前記特定桁は、前記ルックアップテーブルのエントリに記憶されない、請求項11に記載の方法。
  14. 前記特定桁を決定するために、前記特定値を閾値と比較する工程をさらに含む、請求項13に記載の方法。
  15. コンピュータに実装された、インラインでのベクトル変更のための方法であって、
    第一メモリロケーションで参照されるベクトルの変更形式で実行されるオペレーションを含む可変長命令を受ける工程と、
    前記可変長命令によって特定される通りに変更ベクトルを生成する工程と、
    前記変更ベクトルで前記オペレーションを実行する工程と、
    前記オペレーションが行われた後の前記第一メモリロケーションにある前記ベクトルは当初の変更がない形式である、方法。
  16. 前記変更は、スウィズルされたベクトル要素を含む、請求項15に記載の方法。
  17. 前記変更は、反転されたベクトル要素を含む、請求項15に記載の方法。
  18. 前記変更は、ベクトル要素の代替値を含む、請求項15に記載の方法。
  19. 前記変更は、スウィズルと反転の両方がされた少なくとも一つのベクトル要素を含む、請求項15に記載の方法。
JP2017504804A 2014-07-30 2015-07-27 ベクトルプロセッサ Active JP6491314B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462030913P 2014-07-30 2014-07-30
US62/030,913 2014-07-30
US14/457,929 2014-08-12
US14/457,929 US10001993B2 (en) 2013-08-08 2014-08-12 Variable-length instruction buffer management
PCT/IB2015/001805 WO2016016726A2 (en) 2014-07-30 2015-07-27 Vector processor

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2019035945A Division JP2019109926A (ja) 2014-07-30 2019-02-28 ベクトルプロセッサ

Publications (3)

Publication Number Publication Date
JP2017525046A true JP2017525046A (ja) 2017-08-31
JP2017525046A5 JP2017525046A5 (ja) 2018-05-10
JP6491314B2 JP6491314B2 (ja) 2019-03-27

Family

ID=54705661

Family Applications (4)

Application Number Title Priority Date Filing Date
JP2017504804A Active JP6491314B2 (ja) 2014-07-30 2015-07-27 ベクトルプロセッサ
JP2019035945A Pending JP2019109926A (ja) 2014-07-30 2019-02-28 ベクトルプロセッサ
JP2020217605A Pending JP2021061036A (ja) 2014-07-30 2020-12-25 ベクトルプロセッサ
JP2022133738A Pending JP2022169703A (ja) 2014-07-30 2022-08-25 ベクトルプロセッサ

Family Applications After (3)

Application Number Title Priority Date Filing Date
JP2019035945A Pending JP2019109926A (ja) 2014-07-30 2019-02-28 ベクトルプロセッサ
JP2020217605A Pending JP2021061036A (ja) 2014-07-30 2020-12-25 ベクトルプロセッサ
JP2022133738A Pending JP2022169703A (ja) 2014-07-30 2022-08-25 ベクトルプロセッサ

Country Status (6)

Country Link
EP (3) EP4116819A1 (ja)
JP (4) JP6491314B2 (ja)
KR (4) KR102259406B1 (ja)
CN (2) CN106796504B (ja)
BR (1) BR112017001981B1 (ja)
WO (1) WO2016016726A2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
CN116501389B (zh) * 2023-06-28 2023-09-01 睿思芯科(深圳)技术有限公司 指令缓冲单元、处理器及计算机系统
CN117348933B (zh) * 2023-12-05 2024-02-06 睿思芯科(深圳)技术有限公司 一种处理器及计算机系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1021074A (ja) * 1996-07-08 1998-01-23 Hitachi Ltd 割り込み制御方式、プロセッサ及び計算機システム
EP1071010A2 (en) * 1999-07-23 2001-01-24 International Business Machines Corporation Decoupled instruction fetch-execute with static branch prediction support
JP2004013255A (ja) * 2002-06-04 2004-01-15 Fujitsu Ltd 遅延分岐機能を備えた情報処理装置
JP2010282637A (ja) * 1998-03-18 2010-12-16 Qualcomm Inc デジタル信号プロセッサ

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US2209599A (en) 1938-08-29 1940-07-30 Filko John Switch mechanism for motor vehicle signals
ATE38442T1 (de) * 1980-02-28 1988-11-15 Intel Corp Datenverarbeitungssystem.
US4626825A (en) * 1985-07-02 1986-12-02 Vlsi Technology, Inc. Logarithmic conversion apparatus
JPH06100970B2 (ja) * 1988-03-24 1994-12-12 富士電機株式会社 演算制御装置
US5051885A (en) * 1988-10-07 1991-09-24 Hewlett-Packard Company Data processing system for concurrent dispatch of instructions to multiple functional units
SE9002558D0 (sv) * 1990-08-02 1990-08-02 Carlstedt Elektronik Ab Processor
US5689672A (en) * 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US5642305A (en) * 1995-01-31 1997-06-24 Motorola, Inc. Logarithm/inverse-logarithm converter and method of using same
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
US6247113B1 (en) * 1998-05-27 2001-06-12 Arm Limited Coprocessor opcode division by data type
US6182100B1 (en) * 1998-06-30 2001-01-30 International Business Machines Corporation Method and system for performing a logarithmic estimation within a data processing system
JP3123047B2 (ja) * 1998-10-02 2001-01-09 日本電気株式会社 マイクロプロセッサ
US6480872B1 (en) * 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
US6412063B1 (en) * 1999-04-02 2002-06-25 Via-Cyrix, Inc. Multiple-operand instruction in a two operand pipeline and processor employing the same
GB0124882D0 (en) * 2001-10-17 2001-12-05 Koninkl Philips Electronics Nv Improved variable length decoder
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7467287B1 (en) * 2001-12-31 2008-12-16 Apple Inc. Method and apparatus for vector table look-up
KR100718754B1 (ko) * 2002-01-31 2007-05-15 에이알씨 인터내셔널 길이가 다른 명령어집합 구조를 갖는 설정가능형데이터프로세서
US8966223B2 (en) * 2005-05-05 2015-02-24 Icera, Inc. Apparatus and method for configurable processing
US7568070B2 (en) * 2005-07-29 2009-07-28 Qualcomm Incorporated Instruction cache having fixed number of variable length instructions
US20070198815A1 (en) * 2005-08-11 2007-08-23 Coresonic Ab Programmable digital signal processor having a clustered SIMD microarchitecture including a complex short multiplier and an independent vector load unit
US7539717B2 (en) * 2005-09-09 2009-05-26 Via Technologies, Inc. Logarithm processing systems and methods
US20080040576A1 (en) * 2006-08-09 2008-02-14 Brian Michael Stempel Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
WO2010067522A1 (ja) * 2008-12-11 2010-06-17 日本電気株式会社 演算ユニット、プロセッサ及び並列演算方法
US8644431B2 (en) * 2009-06-17 2014-02-04 Coherent Logix, Incorporated Parallel execution of trellis-based methods
US8555034B2 (en) * 2009-12-15 2013-10-08 Oracle America, Inc. Execution of variable width vector processing instructions
JP5089713B2 (ja) * 2010-01-18 2012-12-05 シャープ株式会社 画像圧縮装置、圧縮画像出力装置、画像圧縮方法、コンピュータプログラム及び記録媒体
CN102270112A (zh) * 2010-06-03 2011-12-07 边立剑 Risc微处理器指令译码电路
JP5240270B2 (ja) 2010-10-12 2013-07-17 日本電気株式会社 プロセッサ及びベクトルロード命令の実行方法
KR101699685B1 (ko) 2010-11-16 2017-01-26 삼성전자 주식회사 명령어 오퍼랜드 변경 장치 및 방법
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
CN102662635A (zh) * 2012-03-21 2012-09-12 清华大学 超长指令字变长指令实现方法及实现该方法的处理器
US20140289502A1 (en) * 2013-03-19 2014-09-25 Apple Inc. Enhanced vector true/false predicate-generating instructions

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1021074A (ja) * 1996-07-08 1998-01-23 Hitachi Ltd 割り込み制御方式、プロセッサ及び計算機システム
JP2010282637A (ja) * 1998-03-18 2010-12-16 Qualcomm Inc デジタル信号プロセッサ
EP1071010A2 (en) * 1999-07-23 2001-01-24 International Business Machines Corporation Decoupled instruction fetch-execute with static branch prediction support
JP2004013255A (ja) * 2002-06-04 2004-01-15 Fujitsu Ltd 遅延分岐機能を備えた情報処理装置

Also Published As

Publication number Publication date
WO2016016726A2 (en) 2016-02-04
KR20210065208A (ko) 2021-06-03
EP4116819A1 (en) 2023-01-11
JP6491314B2 (ja) 2019-03-27
BR112017001981A2 (pt) 2017-12-12
KR102259406B1 (ko) 2021-06-03
KR102515720B1 (ko) 2023-03-31
EP3175355B1 (en) 2018-07-18
KR102063856B1 (ko) 2020-01-08
KR20170061661A (ko) 2017-06-05
KR20220092646A (ko) 2022-07-01
JP2022169703A (ja) 2022-11-09
CN106796504A (zh) 2017-05-31
JP2019109926A (ja) 2019-07-04
CN110515658A (zh) 2019-11-29
JP2021061036A (ja) 2021-04-15
KR102413501B1 (ko) 2022-06-27
EP3410294A1 (en) 2018-12-05
KR20200003293A (ko) 2020-01-08
CN106796504B (zh) 2019-08-13
WO2016016726A3 (en) 2016-06-30
BR112017001981B1 (pt) 2023-05-02
EP3175355A2 (en) 2017-06-07

Similar Documents

Publication Publication Date Title
US11579872B2 (en) Variable-length instruction buffer management
US11188343B2 (en) Apparatus, systems, and methods for low power computational imaging
US9727113B2 (en) Low power computational imaging
JP2021061036A (ja) ベクトルプロセッサ
EP3506053B1 (en) Low power computational imaging
US20110249744A1 (en) Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core
US11768689B2 (en) Apparatus, systems, and methods for low power computational imaging
US20230032236A1 (en) Data streaming accelerator
KR20230142355A (ko) 데이터베이스 스캔 가속을 위한 시스템 및 방법
US20230132254A1 (en) Variable-length instruction buffer management

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180320

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180320

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181227

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190129

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190228

R150 Certificate of patent or registration of utility model

Ref document number: 6491314

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250