JP6894377B2 - 専用プロセッサ用ハードウェア命令生成ユニット - Google Patents

専用プロセッサ用ハードウェア命令生成ユニット Download PDF

Info

Publication number
JP6894377B2
JP6894377B2 JP2017545214A JP2017545214A JP6894377B2 JP 6894377 B2 JP6894377 B2 JP 6894377B2 JP 2017545214 A JP2017545214 A JP 2017545214A JP 2017545214 A JP2017545214 A JP 2017545214A JP 6894377 B2 JP6894377 B2 JP 6894377B2
Authority
JP
Japan
Prior art keywords
instruction
instructions
operand
dedicated processor
processor
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.)
Active
Application number
JP2017545214A
Other languages
English (en)
Other versions
JP2018529132A (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
Application filed by マイヤプリカ テクノロジー エルエルシー, マイヤプリカ テクノロジー エルエルシー filed Critical マイヤプリカ テクノロジー エルエルシー
Publication of JP2018529132A publication Critical patent/JP2018529132A/ja
Application granted granted Critical
Publication of JP6894377B2 publication Critical patent/JP6894377B2/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/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • 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/3017Runtime instruction translation, e.g. macros
    • 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 or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • G06F9/3881Arrangements for communication of instructions and data
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • User Interface Of Digital Computer (AREA)
  • Image Processing (AREA)

Description

(関連出願の相互参照)
本願は、2015年2月25日に出願された「専用プロセッサ用ハードウェア命令コンパイラ」と題する米国仮特許出願第62/120,603号の関連出願であり、米国特許法第119条(e)の下でこの仮特許出願に基づく優先権を主張する。この仮出願は、完全且つ十分に本明細書に記載されているように全体があらゆる目的のために援用されることによって、本願に組み込まれている。
命令セットアーキテクチャ(ISA)は、コンピュータープロセッサの設計及び開発において基本的なものである。ISAは、プロセッサの命令セット、命令のフォーマット、及び、プロセッサ特性(例えば、使用可能なオペランドのタイプ、命令実行に使用される記憶メカニズム、記憶メカニズムのアクセス方法等)を含む。命令セットは、プログラマがプログラムをプロセッサに通信するために用いられる。さらに、命令セットアーキテクチャは、コンパイラ、リンカ及びデバッガを含むプロセッサ開発及びプログラミング用の複数のソフトウェア「ツール」に用いられる。
コンパイラは、上位のプログラミング言語で記述された「ソースコード」を、プロセッサが理解可能な「オブジェクトコード」に変換する。リンカは、コンパイラが生成した1つ以上のオブジェクトコードファイルを単一の実行可能ファイルに結合し、さらに、コードを実行するためにプロセッサの適切なアドレス空間に配置することができる。デバッガは、プロセッサで動作するように記述されたプログラムをテストする際に用いられるプログラムである。これらのツールは、プロセッサ用の他の開発ツールと共に「ツールチェーン」と呼ばれる。プロセッサの命令セット又は命令セットアーキテクチャの他の特徴に対する変更は、ISAを使用する各ツールのツールチェーン全体に反映されなければならない。
ISAは、一般的に、ISAに基づいて仕様、シミュレータ及び開発用ツールチェーンを生成可能となるまで、十分に満足するまで広範にテストされ、変更され、検証される。そして、ISAに基づいてプロセッサ設計(マイクロアーキテクチャの設計と検証、ハードウェア記述言語(HDL)によるマイクロアーキテクチャの実装、及び、HDLで実装された回路の合成を含む)を進めることができる。
ISAと、ISAと互換性のあるプロセッサとの高度な統合は、ISA及び関連するツールの開発が膨大な作業となっていることに伴って、専用プロセッサ設計の実装が困難になる場合がある。新たな命令セットを生成したり、既存の命令セットを修正したりすることは、関連する検証と、生成又は修正する必要のある開発ツールとを考えると、非常にコストが嵩み、煩雑になる場合がある。
以下に開示する様々な実施形態の詳細な説明では、添付の図面を参照する。
データ処理アーキテクチャの例示的な実施形態の簡略ブロック図である。 専用プロセッサの例示的な実施形態の簡略ブロック図である。 ホストコンピュータを用いた命令生成ユニットの例示的な実装を示す簡略ブロック図である。 命令生成ユニットの実施形態を示す簡略ブロック図である。 本明細書に記載の命令生成ユニットが実行する処理の実施形態を示すフローチャートである。 本明細書に記載の命令生成ユニットが実行する処理の実施形態を示すフローチャートである。 本明細書に記載の命令生成ユニットが実行する処理の実施形態を示すフローチャートである。 本明細書に記載の命令生成ユニットが実行する処理の実施形態を示すフローチャートである。 本明細書に記載の命令生成ユニットが実行する処理の実施形態を示すフローチャートである。
(概要)
ホストコンピュータを専用プロセッサに接続する方法、装置及びシステムが開示される。一実施形態では、ホストコンピュータを専用プロセッサに接続するように構成された命令生成ユニットは、ホストプログラムのオペレーションコードと、第1仮想ホストプログラムオペランドと、をホストコンピュータから受信するように構成された属性ステージ(attribute stage)を備える。ここで、第1仮想ホストプログラムオペランドは、専用プロセッサの第1オペランドを表す。本実施形態では、属性ステージは、第1仮想ホストプログラムオペランドを第1オペランド記述子に拡張するようにさらに構成されている。ここで、第1オペランド記述子は、1つ以上のオペランド属性に関して第1オペランドの記述を提供する。命令生成ユニットは、第1オペランド記述子と、ホストプログラムのオペレーションコードと、を属性ステージから受信し、ホストプログラムのオペレーションコードを、専用プロセッサが実行するために1つ以上のデコードした命令に変換し、デコードした命令を専用プロセッサが実行するときに使用する記憶領域を割り当てるように構成されたデコードステージ(decode stage)を備える。本実施形態の命令生成ユニットは、デコードした命令をデコードステージから受信し、1つ以上のデコードした命令を1つ以上の命令キューに配置し、専用プロセッサが実行するために、デコードした命令を1つ以上の命令キューのうち少なくとも1つから発行するように構成された命令バッファステージ(instruction buffer stage)をさらに備える。
さらなる実施形態では、命令生成ユニットは、1つ以上のオペランド記述子を含む属性テーブルを記憶するように構成されたメモリをさらに備える。属性ステージは、ホストプログラムのオペレーションコードが第1オペランドの最初の宣言(initial declaration)に一致するか否かを判別するようにさらに構成されている。属性ステージは、ホストプログラムのオペレーションコードが第1オペランドの最初の宣言に一致していると判別したことに応じて、第1オペランド記述子を含むエントリを属性テーブルに記憶し、記憶した属性テーブルのエントリのアドレスをホストコンピュータに返すようにさらに構成されている。
一実施形態では、命令生成ユニットは、少なくとも2つの相互接続された処理ユニットのアレイを含む専用プロセッサと接続している。各処理ユニットは、命令バッファと、少なくとも2つの領域に分割されたデータメモリと、を備える。さらなる実施形態では、第1オペランドは、専用プロセッサの1つ以上のデータメモリの複数の領域にわたって記憶された二次元データアレイを含む。さらに別の実施形態では、相互接続された処理ユニットの各々の命令バッファは、1つの処理ユニットから次の処理ユニットへ順次命令を伝えるように構成された命令パイプラインによって接続されている。1つ以上の命令キューは、ベクトル命令キューと、スカラー命令キューと、を備える。命令バッファステージは、デコードした命令を1つ以上の命令キューから発行することに関連して、デコードした命令をベクトル命令キューから命令パイプラインに配置するように構成されている。
専用プロセッサ用の命令を生成する方法が本明細書で開示される。一実施形態では、この方法は、ホストプログラムのオペレーションコードと、仮想ホストプログラムオペランドと、をホストプロセッサから受信することであって、仮想ホストプログラムオペランドは専用プロセッサのオペランドを表すことと、仮想ホストプログラムオペランドをオペランド記述子に拡張することであって、オペランド記述子は1つ以上のオペランド属性に関してオペランドの記述を提供することと、ホストプログラムのオペレーションコードを、専用プロセッサが実行するための1つ以上のデコードした命令に変換することと、を備える。この方法の実施形態は、デコードした命令を実行するときに専用プロセッサによって使用される記憶領域を割り当てることと、1つ以上のデコードした命令を1つ以上の命令キューに配置することと、デコードした命令を、専用プロセッサが実行するために1つ以上の命令キューのうち少なくとも1つから発行することと、を含む。
さらなる実施形態では、この方法は、ホストプログラムのオペレーションコードが第1オペランドの最初の宣言に一致しているか否かを判別することを備える。この方法は、ホストプログラムのオペレーションコードが第1オペランドの最初の宣言に一致していると判別したことに応じて、第1オペランド記述子を含むエントリを属性テーブルに記憶し、記憶した属性テーブルのエントリのアドレスをホストプロセッサに返すことを備える。
一実施形態では、専用プロセッサは、少なくとも2つの相互接続された処理ユニットのアレイを備える。ここで、各処理ユニットは、命令バッファと、少なくとも2つの領域に分割されたデータメモリと、を備える。さらなる実施形態では、第1オペランドは、専用プロセッサの1つ以上のデータメモリの複数の領域にわたって記憶された二次元データアレイを備える。さらに別の実施形態では、相互接続された処理ユニットの各々の命令バッファは、1つの処理ユニットから次の処理ユニットへ順次命令を伝えるように構成された命令パイプラインによって接続されており、1つ以上の命令キューは、ベクトル命令キューと、スカラー命令キューと、を備える。かかる実施形態では、デコードした命令を1つ以上の命令キューから発行することは、デコードした命令をベクトル命令キューから命令パイプラインに配置することを含む。
本明細書ではデータ処理システムも開示される。一実施形態では、データ処理システムは、コンパイルしたプログラムを実行するように構成されたホストプロセッサと、専用プロセッサと、命令生成ユニットと、を備える。命令生成ユニットは、ホストプロセッサ及び専用プロセッサに動作可能に接続されており、ホストプログラムのオペレーションコードと仮想ホストプログラムオペランドとを、コンパイルしたプログラムから受信するように構成されている。ここで、仮想ホストプログラムオペランドは、専用プロセッサのオペランドを表す。命令生成ユニットは、専用プロセッサが実行するために、ホストプログラムのオペレーションコードを1つ以上のデコードした命令に変換し、デコードした命令を実行するときに専用プロセッサに使用される記憶領域を割り当て、1つ以上のデコードした命令を1つ以上の命令キューに配置し、デコードした命令を、専用プロセッサが実行するために1つ以上の命令キューのうち少なくとも1つから発行するように構成されている。
データ処理システムの一実施形態では、専用プロセッサは、少なくとも2つの相互接続された処理ユニットのアレイを備える。ここで、各処理ユニットは、命令バッファと、少なくとも2つの領域に分割されたデータメモリと、を備える。さらなる実施形態では、相互接続された処理ユニットの各々の命令バッファは、一つの処理ユニットから次の処理ユニットへ順次命令を伝えるように構成された命令パイプラインによって接続されており、1つ以上の命令キューは、ベクトル命令キューと、スカラー命令キューと、を備える。かかる実施形態では、命令生成ユニットは、デコードした命令を1つ以上の命令キューから発行するのに関連して、デコードした命令をベクトル命令キューから命令パイプラインに配置するように構成されている。
本明細書に記載された他の実施形態のうち上記の実施形態は、専用プロセッサ用のカスタム命令を生成するための、より一般的な方法を反映する。既存のアプローチとして、米国特許第6,477,683号は、特定の方法で構成可能な命令セットを記述するための標準化された言語の使用について説明している。標準化された言語の記述は、プロセッサの開発と構成のためのツールを生成するために使用される。しかしながら、かかる解決手段では、既存のアーキテクチャに対して、特定の、所定の限定数の変更のみが許される。
本明細書で説明するアプローチの実施形態では、オブジェクトクラスライブラリは、従来のコンパイラによって、及び、他のツールチェーンプログラムやアプリケーションプログラムの開発者によってアクセスされるように適合される。一実施形態では、オブジェクトクラスライブラリは、オブジェクト指向プログラミングのアプローチに関連するクラスやテンプレートを含む。かかる実施形態では、1つ以上のクラスは、アプリケーションプログラムによって提供されるデータを用いてオブジェクトとしてインスタンス化されるように構成されている。オブジェクトクラスライブラリは、コンパイル中のソースファイルに見慣れないオペランドや関数が見つかった場合に例えばコンパイラによってアクセスされる1つ以上のカスタムファイルを含む。
一実施形態では、オブジェクトクラスライブラリ内のカスタムファイルは、カスタム命令マクロ、又は、プロセッサに関連するカスタム機能ユニット、すなわち命令生成ユニット用のカスタム命令を生成するのに用いられるテンプレートである。カスタム命令は、オペレーションコードすなわちオペコードと、1つ以上のオペランドと、を含む。さらなる実施形態では、カスタム命令マクロは、従来のコンパイラのユーザ定義命令機能を用いて定義される。カスタム機能ユニットは、本明細書では、「命令生成ユニット」又は「ハードウェア命令コンパイラ」と呼ぶことができる。一実施形態では、カスタム機能ユニットは、従来のコンパイラから受信したカスタム命令であって、オペコードとオペランドとを含むカスタム命令を、専用プロセッサのハードウェア構成に適合した1つ以上の命令に変換する。
上述したオブジェクトクラスライブラリ及びカスタム機能ユニットを使用することにより、プログラマは、専用プロセッサのISAの詳細を理解することなく、専用プロセッサの機能にアクセスすることができる。必要なオペレーションを、プログラマのソースコードにおいて抽象的な表現で記述することができる。かかるオペレーションは、従来のコンパイラによって(オブジェクトクラスライブラリのカスタムファイルを用いて)、カスタム機能ユニット用の命令に変換される。次に、カスタム機能ユニットは、この命令を専用プロセッサに適した1つ以上の命令に変換することができる。一実施形態では、カスタム機能ユニットに対する命令は、専用プロセッサに対して1つ以上の変数を構成又は生成するための命令である。かかる命令は、本明細書では「コンストラクタ命令」と呼ばれる。一実施形態では、カスタム機能ユニットによって生成されるプロセッサ命令は、特定の長さやフォーマットに限定されない。
追加的な実施形態では、オブジェクトクラスライブラリ内のカスタムファイルは、専用プロセッサの1つ以上の機能のソフトウェアバージョンを実装するためにコンパイラのネイティブ命令セットで実行可能なソースコードを含む。さらなる実施形態では、このコードは、ソフトウェア実装を採用するオプションが選択されたときにコンパイルされる。
プロセッサのオペレーションのソフトウェアベースバージョンを実装するためのオブジェクトクラスライブラリの使用は、(ハードウェアベースの)プロセッサのオペレーションのテストに使用することができる。一実施形態では、ソフトウェアベースの処理を実装するコードは、ハードウェアベースのプロセッサと少なくともいくつかの同じステップを同じ順序で実行することができ、エラーの特定を支援するように実行可能である。ハードウェア命令コンパイラに対するカスタム命令を生成する場合と同様に、プログラマはオペレーションを抽象的に記述することができ、コンパイラの従来のユーザ定義機能は、オブジェクトクラスライブラリからカスタムルーチンを呼び出すために使用される。
さらに別の実施形態では、ソフトウェア実装用の命令を含むものと、カスタム機能ユニット用のカスタム命令を生成するために使用されるものとの両方が実行される上述した両タイプのカスタムファイルを使用して生成されるプログラム命令が実行される。一実施形態では、1つのプログラムは、専用プロセッサを用いて実行され、他のプログラムは、ネイティブ命令セットで実行される同じプログラムのソフトウェアベースバージョンである。さらなる実施形態では、ハードウェアベース及びソフトウェアベースのプログラムは、少なくとも部分的に同時に実行される。さらに別の実施形態では、テスト制御モジュールがプログラムの実行を管理し、実行される計算又は処理の1つ以上のポイントで、ハードウェアベース及びソフトウェアベースの実行結果を比較する。
(タイルプロセッサ)
本明細書で説明するオブジェクトクラスライブラリ及びハードウェア命令コンパイラと共に使用可能な専用プロセッサの一例は、米国特許第9,183,694号に記載されているタイルプロセッサである。この特許は、十分且つ完全に本明細書に記載されているものとし、参照することによって本明細書に組み込まれるものとする。タイルプロセッサは、画像処理に使用されるような二次元の相関データセットの効率的な高スループット処理に適合される。上述した特許出願で詳述されているように、タイルプロセッサは、ハードウェアベースの処理を実行するために、メモリ分割及び命令シーケンシングの新規技術を含む複数の特徴を用いる。しかしながら、本明細書に記載するカスタムコンパイルの方法及びシステムは、特定のタイプの専用プロセッサでの使用に限定されない。
本明細書で用いられる「視覚処理」は、画像、ビデオ画素(ピクセル)及び関連するデータの処理の一般的なクラスを指す。視覚処理は、画像の強調及びピクセルフォーマットの変換、動き検出及び追跡、並びに、静止画像やビデオフレームの特徴やオブジェクトの識別等のアプリケーションを含む。タイルプロセッサベースの視覚処理アーキテクチャは、膨大な視覚データセットを効率良く処理するために、プログラム可能でスケーラブルなソフトウェア互換ソリューションを幅広く提供する。このアーキテクチャは、このアプリケーション分野における従来のアプローチ(共有メモリ、対称型マルチプロセッシング(SMP)の構成において単一命令多重データ(SIMD)コアを通常使用し、プロセッサの割り当て、通信、及び、プロセッサコア間の同期の問題を取り扱うカスタムプログラミング及び実行時環境を使用する。)の限界を克服する。
一方、タイルプロセッサベースのアーキテクチャでの処理は、自動的に割り当てられ、並列度の規模に応じて動的にスケーリングされる任意数の細かいタイルパスを使用しており、タイルパス間の通信のためのグローバル共有メモリを必要とせず、同期が一般的な順次実行モデルに基いている。一実施形態では、プログラミングは、コンパイラの再ターゲッティングを行うことなく、業界標準の命令セットアーキテクチャ(ISA)での標準C++を使用する。
このアーキテクチャは、並列実行を提供するために使用されるメカニズムの理解をほとんど必要としない、よく理解されたプログラミングモデルを使用して、大規模な並列実行を可能にする。これは、処理するハードウェアを、仮想化によって通常想定されるオーバーヘッドなしに、完全に仮想化された並列プロセッサとして提示することで達成される。仮想化は、通常、仮想オペレーションを解釈してハードウェアオペレーションに変換することに対する性能ペナルティを招く。その代わり、一実施形態では、タイルプロセッサベースのアーキテクチャは、C++のオブジェクトクラスが表わす抽象を、例え当該抽象が数百あるいは数千のオペレーションを表していたとしても、通常、単一サイクルで直接実行する。並列実行の仮想化は、ハードウェア(命令生成ユニット(IGU))が仮想命令をネイティブ命令に変換することと、ネイティブ命令を正しく並列実行するのを保証することと、の両方に依存している。
図1は、視覚処理アーキテクチャの高レベルのシステム図である。視覚処理アーキテクチャは、ホストコア102及びホスト命令/データ104により示されるローカルホストプロセッサと、IGUテーブル/ロジック106により示されるIGUと、タイルパスアレイ(この例では256のタイルパス)で編成されたタイルパスと、システムインタフェースと、グローバルテーブル108と、を備える。図1のタイルパスは、ローカルデータメモリ110(斜線部分)と、処理ロジック(例えば、機能ユニット及び相互接続)112(白い部分)と、の組み合わせとして示されている。一連の256のタイルパスは、4つの行に折り返されている。非常に高度な構造と規則性があり、制御のオーバーヘッドのほとんどが、IGUとテーブルシステムユニットとに制限されている。
タイルパスは、機能ユニットと、オプションのレジスタファイル(オプションでアキュムレータを含む)と、ローカルデータメモリ(DMEM)と、を備える単純な処理要素である。命令メモリが無ければ、命令フェッチロジックもない。タイルパスによって実行される命令は、視覚処理オペレーションのみを実行し、DMEM及びレジスタファイルは、プログラム制御等のオーバーヘッドなしに、ピクセル及び関連するデータにのみ使用される。タイルパスは、命令を実行する以上のことをほとんどしない。制御ロジックは、タイルパス間の相互接続とデータコヒーレンシとをほとんど扱う。タイルパスは、任意数のタイルパスのタイルアレイで構成されているが、通常、1つのアレイが256〜1024のタイルパスで構成されている。
図2は、タイルアレイの例示的なブロック図であり、本明細書で説明するオブジェクトクラスライブラリ及びカスタム機能ユニットと共に使用可能な専用プロセッサの一例である。図2に示すようなタイルアレイの構成要素及びオペレーションは、米国特許第9,183,694号に記載されている。より具体的には、図2の相互接続された同一の処理ユニット204の各々は、個々のタイルプロセッサと呼ばれ、相互接続されたタイルプロセッサのグループが共に動作してタイル処理システム202を形成する。一実施形態では、本明細書で説明されるIGUは、レジスタと、メモリと、ホストコンピュータの他の構成要素と共に、上記特許で説明されている「マスタプロセッサ」の命令フェッチ及びシーケンシングオペレーションを実行する。
図2のタイル処理システムの実施形態では、オペレーションが実行されるデータは、タイルプロセッサの集合的に分割されたデータメモリ206に記憶される。例えば、本明細書で使用する「タイル」は、ピクセル(又は他の二次元データ)の直線領域或いは二次元アレイを示す。各処理要素すなわちタイルプロセッサは、隣接するタイルが隣接するタイルプロセッサのデータメモリにマップされた、唯一のタイルのピクセルを処理する。これらのオペランドで使用される多値のオペランドは、タイル処理アーキテクチャのオブジェクトとして定義され、「オブジェクトトラッカ」を使用して識別される。したがって、この実施形態では、ホストコンパイラによって生成された命令に含まれるオブジェクトトラッカは、タイルプロセッサのデータメモリに記憶されたデータを参照することができる。(データのアレイ等の)多値のオペランドに対して多値の結果を生成するオペレーションとは対照的に、例えばアレイ内の全ての値の平均を求めるオペレーション等のように、スカラーの結果を作成するオペレーションも存在する。一実施形態では、このタイプのスカラーの結果は、図2に示すようなタイルプロセッサのデータメモリに容易に記憶されない。かかるスカラーの結果は、スカラー結果208の線で示すように、タイルプロセッサの相互接続構造を介して命令生成ユニットに戻され、ホストプロセッサに記憶される。
実行されるオペランド及びオペレーションを識別することに加えて、専用プロセッサ用にIGUによって生成される命令は、専用プロセッサに有用な他のパラメータを含むことができる。タイル処理システムの例では、命令内の指定されたビットを用いて渡すことのできる有用な情報は、命令が米国特許第9,183,694号に定義されているような「タスク境界」に関するか否かに関する情報を含む。命令においてタイルプロセッサに渡すことのできる他の有用な情報は、上記特許の図20及び関連するテキストに記載されているように、命令の「使用」及び「定義」番号を識別する情報である。かかる情報は、データコヒーレンシを維持するためにタイルプロセッサによって使用され得る。その他のタイプの専用プロセッサは、IGUによって生成された専用の命令でプロセッサに渡され得る、異なる種類の専用情報を使用することができる。
図2は、タイルアレイのサブセットを示しており、この例では、互いにローカルな4つのタイルパスが示されている。タイルパスは、同じ命令シーケンスを実行するが、同じ命令を同期して実行しない。命令は、時間と空間の両方に分配される。時間的には、命令が、同じタイルパスで異なるタスク間隔で繰り返されることによる。ここで、各間隔は、画像の異なる隣接位置を表す。空間的には、命令が、命令パイプラインを用いて、1つのタイルパスから次のタイルパスへ任意数のタイルパスにわたってストリームされる(コピーされる)ことによる。
全てのクロッキングは、タイルパスに対してローカルであり、グローバルストール(global stall)信号は存在しない。ストールは、スキッドバッファを用いて、上流の命令をサイクル当たり1タイルパスの速度で停止させることによって、タイルパス間の命令パイプラインを中断することによって実行される。この形式の命令の分配及び実行は、グローバルなメカニズムを必要とせずに、タイルパス間の細かいデータ共有を可能にする。
タイルアレイの実装は、SIMD/SMP構成と比較して以下の多くの実装上の利点を有する。
・タイルパスは、レジスタファイル及びDMEMに対して幅広いRAMを必要としない。SIMDは、は64ビットか32ビットのデータパスを想定すると最大2048ビット幅のRAMと同等のRAMを必要とするが、タイルパスは、典型的な32ビット(又は16ビット)のデータパスとの違いがない。
・ローカルな近傍のピクセルにアクセスする場合、大きな多重化構造を必要としない。SIMDでは、所定位置の左右のピクセルにアクセスする要求が、多数のデータパスにわたってRAM出力を多重化するオーバーヘッドのために、通常、両側の2〜3ピクセルに制限される。タイルパスでは、事実上完全に相互接続されているものの、相互接続が桁違いに簡素化されているため、このようなアクセスに関する制限はない。
・SIMDは、32又は64ピクセルの単位で割り当てられるのに対し、タイルパスは、1ピクセルの単位で動的に割り当てられるので、タイルパスのエネルギー効率はSIMDより高い。この割り当ては命令毎に行われる。このため、例えば、1024幅のベクトルに対するオペレーションでは256のタイルパスを使用でき、その直後のオペレーションでは、512幅のベクトルに対して128のタイルパスのみを使用し、残りの128のパスのクロックを停止する。
・相互接続でのデータ転送の単位はスカラーであり、システムレベルではスカラーのストリームである。SIMDは、一般的に、例えばSIMDの幅のクロスバー等のベクトルレベルの相互接続を必要とし、システムレベルのデータは、SIMDに転送される前に、場合によってはピクセルのインターリーブやデインターリーブを用いてベクトルに集約される必要がある。これにより、システムの相互接続がタイルパスに比べて複雑になるだけでなく、処理の遅延が生じる。単一のタイルパスは、他のタイルパスとは独立して、スカラー入力を受信すると直ぐに処理を開始することができる。ベクトルはシステムレベルで露出しないので、明示的なピクセルのインターリーブやデインターリーブがない。代わりに、ピクセルのフォーマットは、タイルアレイ内でスカラーから抽象的なベクトルをアセンブルするために、プログラムがどのように記述されるかによって決定される。
・ストールによって、同じサイクルで全てのデータパスがアイドル状態になるわけではない。その代わりに、タイルパスは、独立してストール状態を検出し、ストール状態を連続するサイクルで命令パイプラインを介して伝搬する。極端なケースを例として用いると、64のタイルパスは、ストールによって1サイクルを無駄にするだけで、64の独立したストール状態を解決することができる。実際、全てのパスにわたって検出されるストール状態の総数は、ストールを解決するのに必要なサイクルの総数よりもはるかに大きく、2〜3倍以上になることもある。これにより、潜在的なシステムレベルの競合の可能性がかなり高いにもかかわらず、サイクル当たりの命令(IPC)レートがかなり高くなる。
この最後の点については、ほとんどの並列システムに対して逆の直感的な効果があるので、重点を置くべきである。既存の並列システムの基本的な特性は、通信と同期が、(例えば、セマフォを設定してテストするサイクル等の)必要な基本メカニズムのオーバーヘッドを上回るコア数で増加するストールを引き起こすことである。これは、通常、処理負荷が通信/同期に対する要求に比べて大きいアプリケーションを除いて、並列性に対する厳しい制限となる。この特性は、視覚処理には当てはまらない。なぜなら、通信/同期は、数百又は数千のピクセルにわたって命令毎に必要とされており、通信/同期の周期や全てのアプリケーションに亘る依存関係のトポロジーがほとんど予測できないからである。
これに対し、タイルアレイは、通信及び同期に余分なサイクルを必要としない。なぜならば、数十サイクルの比較的高い相互接続レイテンシであっても、これらのメカニズムが単一サイクルのロード及びストアオペレーションに組み込まれているからである。ストールメカニズムは、ストール状態の並列解決の恩恵を受けるだけでなく、タイルパスが追加されるので構造的な利点ももたらす。一例として、CIF解像度のスケール不変特徴変換(SIFT)アプリケーションは、88のタイルパスを使用し、タイルパス当たり0.81のIPC(全てのパスに対して70を維持)に対して5.3Mサイクルで4.3Mの命令を実行する。この構成では、ストール状態の総数が4.4Mであり、通常、IPCがはるかに低いことが予想される。予想される4.4Mサイクルではなく4.4Mのストールを解決するため、1.0Mサイクルだけ性能が低下している。
さらに、HD−1080の構成では、最大960のタイルパスを使用することができ、16Mの命令を25Mサイクルで実行する。IPCは、タイルパス当たり0.64(全てのパスに対し607を維持)である。ストール状態の総数は282Mであって、命令総数の17倍以上である。予想通り、より多くのタイルパスを追加したことにより、より多くのストール状態が追加される。しかし、ストール状態が並列に解決されるので、性能への影響が大幅に低減する。これは、多数のタイルパスを建設的に使用可能であることを意味する。
(命令生成)
タイルアレイの命令生成は、任意の適切なローカルホストISAに適合された独特なメカニズムを使用する。ツールチェーンがC++や同等の機能を備えたオブジェクト指向言語に基づいている限り、ISA用の既存のソフトウェアツールチェーンに変更を加える必要がほとんどない(ある意味で全くない)。したがって、これは、ホストISAの拡張であり、本明細書では、命令のセットをまとめてビジュアルプロセッシング拡張(VPX)と呼ぶ。
VPXは、一実施形態ではGnu Compiler Collection(GCC)の__builtin_customマクロを用いたカスタム命令の概念に基づいている。これらのマクロは、オペコード(通常、列挙子を用いる)と、(レジスタに割り当てられる)即値又は変数の2つのオペランドとを定義するマクロを用いて、所定の命令をコンパイラに発行させる。変数は、整数型、浮動小数点型又はvoidポインタ型(後者はメモリアクセスを許可する)の何れかの型を有する。命令は、他の変数に割り当てられた結果を返すように定義することができる。結果を伴うので、命令は、3オペランドの非破壊命令である。
コンパイラは、カスタム命令によって実行される機能を必ずしも認識する必要がない(通常、何等かの抽象的なマシン記述を用いて認識可能であるが)。コンパイラは、他の命令と同様に、レジスタの割り当てや手続きのリンクに関与する命令等とともに、使用される変数/即値を単に管理し、結果を処理する。これにより、コンパイラは、基本となるタイルパスや命令エンコーディングの詳細にさらされる必要なしに、最終的にタイルアレイの命令を発行することができる。カスタム命令の属性は、柔軟性の高いタイルアレイのコードをコンパイルするのに使用されるが、ツールチェーンが複雑になることがなく、ツールチェーンがタイルパス命令のセマンティクスを理解する必要もない。
コンパイラが命令の機能を認識する必要がないという事実は、VPX命令の仮想化を可能にする。VPS命令は、命令が通常行うように、機能を直接的にエンコードするのではなく、むしろIGUがタイルアレイへの命令を生成して発行するために使用される情報をエンコードする。例えば、分岐や手続きリンクを扱わない点でソフトウェアコンパイラほど汎用ではないという点を除き、ある意味、IGUはVPS用のハードウェアコンパイラである。この汎用性に欠けるということは、実際には強みである。なぜならば、例えば分岐による制御フローの変更は、通常、ソフトウェアコンパイラにおけるレジスタ割り当ての効率を制限するからである。ほとんどのコンパイラが32個以上のレジスタを効率良く割り当てられないのに対し、IGUは、例えば1024個以上のレジスタを用いて、レジスタ割り当てをより効率的に行うことができる。
(仮想化したプログラミングモデル)
一実施形態では、タイルアレイのアプリケーションは、C++のクラスライブラリに基づいている。このクラスライブラリは、仮想タイルアレイの機能を2つの異なる形式で実装する。第1の形式は、純粋にソフトウェアで実装されており、タイルアレイと完全に同等の機能を有するが、ハードウェア上で実行されないため非常に実行が遅い。第2の形式は、単にVPX命令をインラインで発行するものであり、クラスライブラリへのプロシージャコールのオーバーヘッドがなく、スーパースカラーパイプラインで、他のホスト命令と可能な限り並列に、1サイクルで実行する効果がある。
これらの2つの仮想化の形式を用いるクラスライブラリ用の3つの異なるビルドオプションが存在し、コンパイラのフラグで選択できる。1)クラスライブラリのソフトウェア専用エミュレーションを用いて、タイルアレイの実装に依存しないプロトタイプの生成。2)最小限のソフトウェアオーバーヘッドで、ターゲットとなるタイルアレイに対する命令の生成。3)協調シミュレーションと検証に使用されるソフトウェアエミュレーションとタイルアレイのカスタム命令の両方を実装するハイブリッドバージョン。2)のハードウェアのみのバージョンについて以下に説明する。
最初に、3つの整数DataVector a、b、cの宣言を考える。a及びbの幅はwidthで定義される(幅は、必ずしも宣言で定義される必要がなく、ベクトルは、cに適用するように割り当てることにより幅を継承することができる)。プログラムでは、aとbを加え、その結果をcに割り当てる文が後に続く。
DataVector<int> a(width), b(width), c;

c = a + b:
コンパイラは、a、b、cの宣言を検出すると、ライブラリが定義するオブジェクトのコンストラクタを呼び出す。これらのコンストラクタは、(本明細書で説明するバージョンのライブラリでは)1つ又は2つのカスタム命令を含んでおり、オブジェクトは、オブジェクトトラッカと呼ばれる単一の変数を含む。カスタム命令は、データ型や幅等のオブジェクトの属性をエンコードする。幅以外のかかる情報はコンパイル時に定数として提供され、幅の値をレジスタが保持している場合、コンストラクタ呼び出しは、1サイクルのインライン命令となり、オーバーヘッドが最小限に抑えられる。
コンストラクタカスタム命令は、オブジェクトトラッカに割り当てる結果を返す。このオブジェクトトラッカは、後続のオブジェクト変数に対するオペレーションで使用され、他の全てのオブジェクト変数と同様に扱われる。例えば、上記の例でオーバーロードされた加算は、aとbのオブジェクトトラッカを2つのオペランドとして有する1つのカスタム命令を生成し、加算結果の一時的なオブジェクトトラッカを結果として返す。これをcに割り当てるために、コンパイラは、このオブジェクトトラッカを単にコピー(あるいは伝搬)して、cのオブジェクトトラッカとする。
これにより、コンパイラは、非常に大きな視覚オブジェクトを、レジスタに割り当てたり、手続きリンクに関与したり、動的に割り当てられたり等のように、あたかもそれが他の変数であるかのように取り扱うことができる。コンパイラは、オブジェクトのマシン記述やその動作やタイルパス命令の定義を認識する必要がない。これから理解されるように、タイルパス命令の定義と実行は他の如何なるアーキテクチャとも異なるため、このことは重要である。タイルパス命令は、命令長やデータ型の制限等のようなツールチェーンに起因する制限を受けずに、タイルパス及びアレイの利点のために定義することができる。また、タイルパス及びタイルアレイの実装が非常に異なる場合でも、互いにバイナリ互換となり得る。
(IGUの概要)
図3は、本明細書で説明されるシステム及び方法を実施する際に使用されるホストコンピュータ300の例示的な実施形態の簡略化したブロック図である。図3に具体的に示される構成要素に加え、ホストコンピュータは、当業者が理解するような従来のコンピュータの方法で相互接続された、従来のコンピュータの構成要素(例えば、電源及び電源への接続のための構成要素等)を含む。一実施形態では、本明細書で説明されるオブジェクトクラスライブラリを用いて従来のコンパイラによってコンパイルされたプログラムを、図3に示すようなホストコンピュータで実行する。一般的なレベルでは、図3の中央右側部分に示すIGU302以外の要素は、従来のプロセッサでも見られる要素である。
一実施形態では、ホストプロセッサは、図3に示すオペランドdataA及びdataBを含む命令を実行する。さらなる実施形態では、ホストプロセッサによって実行される命令は、32ビット命令である。いくつかの命令では、オペランドdataA及びdataBは、従来の形式の数値や変数を表し、命令は、ホストプロセッサのネイティブ命令セットを用いて従来通りに実行可能である。一実施形態では、このような命令は、図3のIGUを使用せずに、ホストレジスタファイル304と、ホストデータメモリ306と、他の機能ユニット308と、によって表されるプロセッサを用いて実行される。図3のホストプロセッサによって実行される他の命令は、上述したように、コンパイラがオブジェクトクラスライブラリ内のカスタム命令マクロを使用して生成したカスタム命令である。かかる命令は、IGUによって扱われる。
図3のIGU(本明細書では、「カスタム機能ユニット」又は「ハードウェア命令コンパイラ」とも呼ばれる)は、コンパイラが生成したカスタム命令によって使用されるオペランドdataA及びdataBの値を認識するようにプログラムされている。ハードウェア命令コンパイラは、カスタム命令のオペランドとオペコードとを用いて、IGUに接続された専用プロセッサに対する1つ以上の適切な命令を生成する。図3の実施形態では、IGUは、IGUから専用プロセッサへ命令パイプラインI−Pipeを用いて命令を送信し、専用プロセッサから1つ以上のスカラー結果を受信することによって、専用プロセッサに接続されている。IGUは、専用プロセッサから見ると、「命令生成ユニット」である。なぜならば、IGUは、専用プロセッサの命令の順序付けやマルチタスク処理等の付加的なオペレーションを含むことができるからである。
IGUを用いて処理され得るカスタム命令の例として、2つの例示的なタイルプロセッサホストカスタム命令セットアーキテクチャ表(以下、「カスタムISA表」)を以下に示す。以下の表は、例示的な実施形態において、コンパイラによって生成され、図1のIGUに提供され得るカスタム命令のいくつかを定義する。シフト命令、ブール命令及びムーブ命令等の複数の他のタイプの命令も実際の実装に含まれる。カスタムISA表の情報は、ユーザ定義関数を実装するためにコンパイラによってアクセスされるオブジェクトクラスライブラリ内の1つ以上のファイルに含まれる。かかる情報を使用して、コンパイラは、dataA及びdataBのようなオペランドと、所望のオペレーションに対応するオペコードと、を含むカスタム命令を生成することができる。一実施形態では、カスタム命令は32ビット命令である。
Figure 0006894377

Figure 0006894377
専用プロセッサの性質に依存して、dataA及びdataBのようなオペランドは、複数のデータ値を表すことができる。例えば、上記米国特許第9,183,694号のタイルプロセッサのオペランドは、データの二次元アレイを表すことができる。カスタムISA表の例では、カスタム多値フォーマットを有するそのような変数は、オブジェクトとして定義され、「オブジェクトトラッカ」(「objTracker」)を用いて識別される。表1のカスタムISA表のCONSTRUCT命令等の特定のカスタム命令は、特定の変数に対応したオブジェクトを生成し、特性を割り当てるために使用されてもよい。その他のカスタム命令は、オブジェクトトラッカによって識別される変数を用いてオペレーションを行う際に使用される。例えば、表2のカスタムISA表のADD命令は、オペランドdataAが示すオブジェクトトラッカによって識別されるデータと、dataBが示すオブジェクトトラッカによって識別されるデータとを加算し、結果が示すオブジェクトトラッカに関連するメモリ領域に演算結果が記憶される。一実施形態では、これらのオブジェクトトラッカの1つ以上に関連するデータは、専用プロセッサ内の1つ以上のデータメモリに記憶される。
カスタムISA表によって定義されたインタフェースを用いてタイルプロセッサのアレイ(タイルアレイ)と接続するように設計されたIGUの例では、IGUは、表2のカスタムISA表のADD命令を受信したことに応じて、タイルアレイが必要とする形式で加算命令を生成する。このように、ホストプロセッサのコンパイラは、タイルプロセッサ(又は他の専用プロセッサ)によって必要とされる命令の形式に関する情報を必要としない。ホストコンパイラは、ホストコンパイラのためのユーザ定義命令を設定するオブジェクトクラスライブラリ内のファイルで定義されたカスタム機能ユニットへのインタフェースを用いる。ハードウェア命令コンパイラは、如何なる長さで、如何なる形式の命令を専用プロセッサが必要としようとも、専用プロセッサのための命令を自由に生成することができる。専用プロセッサの開発は、プロセッサが必要とする命令の形式が結果的に変更され、専用プロセッサに対する如何なる変更にも適応するために修正を要するのがハードウェア命令コンパイラだけである場合、開始することができる。
図3の実施形態では、IGUは、ホストのデータパスにおける機能ユニットとして実装されているが、VPX命令を直接実行するのではなく、それらを解釈する。この機能ユニットは、2つの入力オペランドと、結果のバスと、を有する。このユニットは、ローカルホストに対して、オブジェクトトラッカ(又は固定値)を受信してオブジェクトトラッカを返すだけであるため、ほとんどの命令を1サイクルで実行するのを明らかにする。コードの例に戻ると、例えば、コンストラクタカスタム命令がIGUに発行されると、IGUは、スタックベースの割り当て方法を用いて属性テーブルにエントリ(記述子)を単に割り当て、データタイプや幅等のオブジェクトに関する情報を書き込んでいる間に、テーブルのエントリのアドレス(オブジェクトトラッカ)を返す。タイルパス内に共有DMEMを必要とするオブジェクトに対しては、オブジェクトにベースアドレスを割り当て、必要なメモリも割り当てる。このベースアドレスは、タイルパスの命令生成に使われる。さらに、例えば循環バッファ等のように他の制御状態を含むオブジェクトに対しては、状態を初期化する。
先の例における加算等の他の命令では、IGUは、属性テーブルのエントリにアクセスして適切な形式のタイルパスADD命令を生成し、タイルアレイに発行する。IGUのさらなる詳細については以下に説明するが、ここにいくつかのハイライトを挙げる。
・IGUは、全ての制御、順序付け及びコヒーレンシのオペレーションを実行する。逐次実行モデルを採用しており、例えば、メモリへの書き込みは、同じ位置の読み出しよりも常に先行し、全ての読み出しは、後続の書き込みの前に実行される。タイルアレイにおける実行は、大規模なアウトオブオーダであるが、逐次実行モデルに基づくタイルパス命令において提供される情報を用いて、順次オーダが等価的に維持されている。
・IGUは、システムインタフェースとグローバルテーブルのオペレーションを管理する。例えば、IGUは、ベールアドレス及びアクセス幅をタイルパスとは独立に提供する。これらのオペレーションは、完全にタイルパスの外側で行われる。タイルパスは、グローバルな詳細と全く関わることなく、ロード、ストア及びヒストグラムのオペレーションを単に実行し、ローカルオフセットとデータを提供する。
・IGUは、タイルパスに対して全てのレジスタ及びメモリの割り当てを行う。この割り当ては、レジスタのスピル/フィルを含み、(オプションで)アキュムレータを割り当てて積和演算を合成する。この割り当ては、従来のコンパイラが処理しなければならない場合に行う割り当てと同等で、一般的であり、実際にはより効果的である。なぜならば、カスタム命令のストリームには、分岐がなければ手続きの呼び出しもなく、明示的な手続のリンクの必要もないからである。スピルされる全てのオブジェクトは、DMEMの位置が割り当てられるが、この位置は、スピルが必要なときにのみ割り当てられる。十分な数のレジスタ(通常、1つのピクセル位置に対して256個)があれば、スピルはめったに起こらないし、フィルはさらに珍しい。なぜならば、オブジェクトは、手続きからの復帰(又は削除)でデストラクトされ、再び使用されることがないからである。
・IGUは、共有データをコヒーレンシが保たれるように管理する。例えば、レジスタはタイルパス間で共有されないので、共有データは、一時的な評価時以外にレジスタに割り当てられない。
・命令は、1つのオペレーションが如何なる数のデータタイプに対しても定義できるように、タイプのタグを使用する。例えば、符号付/符号無整数の加算と浮動小数点の加算は、データタイプを識別するフィールドを除いて同一である。これは、基礎となるオペレーションをサポートするようにタイルパスが設計されていると仮定すると、固定小数点等のユーザ定義のタイプを含むように拡張することができる。
(実装の概要)
図4は、図3のIGU302の構成及びオペレーションを示す例示的なブロック図である。上述したように、IGUは、ホストのデータパス内の機能ユニットとして実装されるが、VPX命令を直接実行するのではなく、それらを解釈する。この機能ユニットの例示的な構成は、2つの入力オペランド(ホストdataA及びホストdataB)を有し、1つの結果(ホスト結果)を返す。ホストdataAは、ほとんどの場合オブジェクトトラッカを含むが、例外として、コンストラクタ命令に対してはオブジェクトのパラメータを有し得る。ホストdataBが存在する場合、ホストdataBは、もう1つのオブジェクトトラッカ、固定値(即値)又はコンストラクタ情報の何れかを含む。ホスト結果が命令で定義されている場合は、ホスト結果は、通常、命令の結果に対してIGUが割り当てたオブジェクトトラッカである。しかしながら、ホストに戻されるVectorSummaryオブジェクト内のスカラー値であってもよい。
IGUは、図の上部、中央部、下部に対応する3つのパイプラインステージ(属性ステージ402、デコードステージ404、I−バッファステージ406)に分けて実装される。以下の章では、各ステージのオペレーションの概要を示す。この概要以降の章では、各ステージのオペレーションの詳細を説明する。
(属性ステージの概要)
属性ステージは、ホストプロセッサへのメインインタフェースを実装し、VPXオペコードとdataA及びdataBとを受信し、結果のオブジェクトトラッカを返す。主な機能は、1)オブジェクト記述子を属性テーブルに書き込み、コンストラクタ命令を実行する。2)これらの記述子を、命令実行に伴う要求により更新する。3)記述子を削除して、デストラクタ命令を実行する。4)VPX命令をタイルパス命令に変換するのにデコードステージが必要な情報を集める。属性ステージは、この情報をデコードステージに出力する。
属性ステージは、コンストラクタ命令を受信すると、属性テーブル408の次のエントリを割り当て、命令に含まれるパラメータに基づいて記述子情報を書き込む。また、ローカルパラメータに基づいて情報を書き込む。例えば、タイルパスのDMEMを、共有データの循環バッファを実装するLineBufferオブジェクトへ割り当てる。循環バッファを実装するには、循環バッファのサイズに基づいて、バッファを実装するためのいくつかのDMEMラインが必要である。属性ステージは、属性テーブルのエントリのアドレスを、命令の結果として返す。これが、このオブジェクトの後続のオペレーションにおいてホストが使用するオブジェクトトラッカである。いくつかのオブジェクトは、全てのコンストラクタパラメータを伝えるために2つの命令を必要とし、この場合、オブジェクトトラッカは、2番目の命令のために返される。
命令実行は、命令の結果に対する記述子を生成すること、又は、命令によって暗示されるオブジェクトの状態変化を反映するように既存の記述子を変更することが必要になる場合がある。例えば、1)2つのオブジェクトを加えると、入力オペランドが記述子に反映された新たなオブジェクトが生成される。2)LineBuffer変数を割り当てるには、変数によって実装される循環バッファの状態を更新する必要がある。3)DataVectorオブジェクトを割り当てることは、オブジェクトの幅を変更し得る。これらの場合には、属性ステージは、新たな記述子を生成して、オブジェクトトラッカをホストへ返すか、属性テーブル内の位置のうち、命令のオブジェクトトラッカによって定義された位置にある記述子を更新する。
デコードステージへの主な出力は、元のVPX命令をパイプライン化した命令と、2つの入力オペランド及び結果に関する他の情報と、である。この場合、dataAオペランドは、オブジェクトトラッカの代わりに、オペランドの記述子に変換される。dataBオペランドは、オペランドの記述子、又は、オペランドの固定値とそのデータタイプの識別子である(変数に対しては、データタイプは記述子に含まれる)。これらの記述子は、属性テーブルを変更する前に、属性テーブルに関連して変更され得る。属性ステージが生成した結果に対する記述子もデコードステージへ伝えられる。
(デコードステージの概要)
図4の中央に示すIGUのデコードステージは、命令及び属性情報を属性ステージから受信し、レジスタ割り当てフラグとレジスタ割り当てキューとを用いて、レジスタの割り当て及び割り当ての解除を行う。また、デコードステージは、専用プロセッサのための命令を形成し、その命令を命令バッファステージに渡す。デコードステージは、VPX命令のシーケンスを、機能的に同等のタイルパス命令のシーケンスに変換する。高レベルでは、これは、例えばVPXのaddからタイルパスのaddのように、命令を一つのフォーマットから他のフォーマットに単に変換するだけである。しかしながら、レジスタ割り当て、スピル/フィル位置のDMEM割り当てを含むレジスタのスピル/フィル、命令に依存情報を注釈することも含まれる。デコードステージは、図1に示すテーブルシステムユニット114に対する制御インタフェースを実装し、システムアクセス及びテーブルアクセスに対する依存性の追跡及び管理を含む。
レジスタ割り当ては、レジスタに含まれ得るオブジェクトのコンストラクタ命令の結果として行われる。これは、レジスタを共有できないため、共有データを含むオブジェクトを除外する。レジスタ割り当ては2つの仕組みを使用しており、「フリーリスト」には、割り当てられていないレジスタの識別子が含まれ、「割り当てFIFO」には、既に割り当てられたレジスタを割り当て順に並べたリストが含まれる。フリーリストは、順序付けを必要としないが、レジスタが必要な場合にハードウェアが最も古く割り当てられたレジスタを選択できるように、割り当てリストが順序を保持する。なぜならば、最も古く割り当てられたレジスタは、近い将来必要とされる可能性が最も低いからである。
オペレーション中、コンストラクトオペレーションは、利用可能なレジスタが無い場合にレジスタを要求する場合がある。この場合、デコードステージは、DMEM位置の最上位アドレスから低いアドレスに向かって伸びるスタックを用いて、メモリ位置をスピル用に割り当て、スピル命令を発行する。後続のオペレーションが、既にスピルしたレジスタに対して演算を行う場合がある。この場合、他のレジスタにフィルオペレーションを割り当てるが、この割り当てが、同様にもう1つのスピルを引き起こす可能性がある。新たなレジスタが必要となる一時的な結果を有するオペレーションも、スピルを引き起こす可能性がある。多数の割り当てが、多数のスピルとフィル状態を引き起こすという事実にも関わらず、レジスタ割り当ては、最終的に、必要なレジスタが割り当てられ、スピルしたレジスタが全てDMEMに記憶されるという状態に辿り着く。
また、デコードステージは、共有データを読み書きする命令に依存情報を追加する。この情報は、実際の命令の実行が空間的、時間的にアウトオブオーダであっても、逐次実行モデルを実装する際にタイルパスを調整するのを可能にする。これは、共有データのアクセスに関連する情報を記憶する2つのテーブルを使用する。第1のテーブルは、各DMEMの位置に対して、当該位置に最近書き込みを行った命令の識別子を保持する。このデータを読み出すオペレーションは、命令がターゲットメモリ内で実行されていることを要する。もう一つのテーブルは、さらに各DMEMの位置に対して、当該位置に最近読み出しを行った命令の識別子を保持する。後続の書き込みが許可される前に、全てのタイルパスがこの読み出しを完了している必要がある。
デコードステージが実装するテーブルシステムユニットに対する制御インタフェース、すなわちテーブルシステムインタフェース410は、このユニットにグローバル情報を通信するのに使用する。これには、全てのタイルパスに適用される読み書きのためのテーブル又はシステムのベースアドレスが含まれる。タイルパスは、このアドレスからのオフセットのみを提供する。オペレーションが読み出し又は書き込みの何れであるかを示し、さらに、ヒストグラムオペレーションであるテーブルへの書き込みの場合、ヒストグラムオペレーションのタイプを示す。最後に、デコードステージは、所定の時間内のアクセスを一意に識別する情報を提供する。これは、特定のアクセスと、アクセスされるオブジェクト(オブジェクトトラッカを使用して)との両方に対する一意な識別子を含む。
これらのオペラ―ションはタイルアレイ上に分散されるので、所定の時間において、処理中に複数のテーブルアクセス及びシステムアクセスが存在する。異なるアクセスストリームは、要求キューを用いて追跡される。テーブルアクセスとシステムアクセスのための別々の要求キューがある。タイルパスに発行されるアクセス命令は、キュー識別子を含む。命令は、テーブルへのアクセスかシステムへのアクセスかをエンコードする。このように、個々のアクセスがキューエントリで識別されるので、多数のアクセスを処理できる。
全てのアクセスが終了すると、テーブルシステムユニット114は、対応するキューエントリが空であることを示す指示をデコードステージに返す。この指示には、デコードステージが最初に提供したオブジェクトトラッカも含まれる。デコードステージは、この指示を用いてオブジェクトの読み書きに対する同期を提供する。例えば、デコードステージは、読み出しが行われている間、同じテーブルへの書き込みを阻止する。全てのタイルパスに亘る読み出しが完了したことを示す信号をテーブルシステムユニットが通知すると、テーブルへの書き込みが続行される。
テーブルシステムインタフェース410は、システムレベルでのタイルアレイとの同期を可能にするグローバルバリアを実装する。これにより、バリアオペレーションの終了が許可される前に全てのテーブル及びシステムのアクセスが完了したことが保証される。
最後に、デコードステージは、命令シーケンスをローカルに最適化するための最適化キュー412を含む。例えば、このキューは、書き込みを先行する命令に組み合わせることができるため、命令は、追加サイクルなしにDMEMに書き込みを行う副作用を有する。このキューは、乗算及び加算のシーケンスを混合して、積和命令に変換する事もできる。積和命令は、乗算及び加算(又は加算及び乗算)を別々に2サイクルで実行するのではなく、1サイクルで終了する。
デコードステージの出力は、I−バッファステージのデコードした命令である。
(I−バッファステージの概要)
図4の下部に示すハードウェア命令コンパイラのI−バッファステージは、スカラーレジスタとスカラー機能ユニットとを含み、専用プロセッサからスカラーデータを受信し、ホストプロセッサによって提供された他のスカラーオペランドを用いてスカラーデータに動作し、スカラー結果を記憶する。また、I−バッファステージは、最適化キューと命令再実行バッファとを含み、専用プロセッサによる命令の実行を管理する。タイルアレイを専用プロセッサとして有する実施形態では、I−バッファステージが、米国特許第9,183,614号に記載された「主プロセッサ」の命令取得及びシーケンシングオペレーションを実行する。タイルプロセッサを専用プロセッサとする実施形態では、I−バッファステージは、デコードステージの最適化キューから命令を受信し、2つの命令バッファを管理する。1つの命令バッファはベクトル命令用(べクトル命令再実行バッファ414)であって、もう一つの命令バッファはスカラー命令用(スカラー命令キュー416)である。ベクトル命令はタイルパスによって実行され、I−バッファステージは、ベクトルI−パイプへの命令のシーケンシングを管理する。スカラー命令は、例えばベクトル内の最大値を求めるオペレーションのようにベクトル内オペレーションで生成されるスカラーを必要とするいくつかの命令を除いて、IGUによって直接実行される。後者の命令は、スカラー結果とベクトルオペレーションとを同期させるために、ベクトルバッファとスカラバッファの両方に配置される。
ベクトル及びスカラー命令バッファは、異なる目的を果たす。ベクトル命令は、複数のタスク間隔にわたって連続していることが求められ、各タスク間隔は、各タイルパスの特定の位置におけるオペレーションを表す。マルチタスク処理は、共有データを通信する際のレイテンシペナルティを回避することと、データの書き込みと読み出しとの間の依存性を解決することとが基本であるから、タスク間隔は、共有データへのアクセスによって定義される。しかしながら、タスク間隔は、テーブル及びシステムアクセスのレイテンシをカバーするためにも定義され、デコードステージ又は結果的にホストから受信した命令の状態に関係無く命令が発行されるように、バッファ内の命令シーケンスの最後をマークするためにも定義される。後者の点は、命令バッファの別の利点を示している。それは、タイルアレイの性能は、ホストからのVPX命令の瞬間的なバンド幅から分離することができるということである。タイルアレイをピーク速度で実行し続けるには、ある時間間隔における平均バンド幅のみが必要となる。
スカラー命令バッファは、スカラーオペレーションをベクトルオペレーションに同期させる。スカラーオペレーションはベクトル全体に亘る処理が必要であって、このことは、全てのタイルパス及びタイルパス内の全てのローカル位置(領域)において、スカラーを生成する全ての命令を実行しなければならないことを意味する。このため、スカラー処理のレイテンシは、通常長い。クラスライブラリは、ホストの実行からこのレイテンシを分離するプログラムを許可するVectorSummaryオブジェクトを実行する。スカラーが生成されるのをホストが待機することを要求するのではなく、ホストによって何時でもアクセスされるように、スカラー結果をVectorSummaryオブジェクト内に配置する。ベクトルが如何なる幅も有し得るので、このレイテンシは、特定の変数の幅によって変化する。このため、スカラーは、スカラー同士に関して、又は、VectorSummaryオブジェクトへの如何なるオペレーション(例えば2つのスカラー値の加算等)に関しても、結果の自然な順序付けをせずに生成される。スカラー命令バッファは、キュー416として実装され、オペレーションを元の順序に維持している。スカラー結果を生成するベクトル内演算命令をI−バッファが発行すると、命令は、結果を受信するキューエントリを識別する。
I−バッファステージは、グローバル相互接続上で送信されるパケットに埋め込まれたサイドバンド情報を処理する。サイドバンド情報の一つは、読み出される最後のベクトル要素で共有データの読み出しが完了したときに、送信される。このことは、データへの書き込みが有効になったことを指示する。所定の書き込みに対して複数の読み出しオペレーションが存在し、この指示は、IGUによって追跡されているように、最近の読み出しに関連しているときのみ、書き込みを有効にする。他のサイドバンド信号は、結果がスカラーとなるベクトル内オペレーションを実行するために、最後のタイルパスによって送信される。なぜなら、スカラー結果は、全てのベクトル要素が処理された後にのみ生成されるからである。このスカラー結果は、他のスカラーオペレーションと適切なシーケンシングを行うために、スカラー命令キューに配置される。
最後に、I−バッファは、命令パイプラインの最後のタイルパスのI−パイプ出力に接続されている。これにより、IGUは、例えば無限停止状態等の中断がI−パイプに生じたのを検出することができる。これにより、かかるエラー状態を表す信号を送信するタイマを実装することが可能になり、回復が容易になる。I−バッファは、前述したタイルパスに関するバリアオペレーションも実行する。I−バッファは、I−パイプバリアオペレーションをI−パイプに発行し、I−パイプの最後でこの命令が検出されたときに、全てのタイルパスで完了したことを検出する。
(属性ステージのオペレーションの詳細)
図5及び図6は、属性ステージのオペレーションのトップレベルのフロー図である。このステージは、デコードステージが機能停止状態(ステップ502)でなく、属性ステージから情報を受信可能な場合(この指標は、I−バッファステージが、デコードステージから命令を受信する状態にあるか否かも反映し得る)にのみ動作する。このレベルでの主要なオペレーションは、属性テーブル(図5)の状態に直接影響を与える命令に応答することであって、デコードステージ(図6)に対してオペランドを設定することである。
属性テーブルの記述子に直接影響を与える4つの命令がある。コンストラクト命令(ステップ504)は、新たな記述子を有する新たなオブジェクトをテーブルに生成する(ステップ506)。コピーコンストラクト命令(ステップ508)は、既存のオブジェクトの設定を用いて新たなオブジェクトを生成し、その値を新たなオブジェクトにコピーする(ステップ510)。このとき、既存のオブジェクトのデータタイプを、新たなオブジェクトのデータタイプに変換することが可能である。デストラクト命令(ステップ508の「いいえ」分岐)は、オブジェクトと、当該オブジェクトが使用しているリソース(例えば、属性テーブルのエントリ、割り当てられた全てのDMEM及びレジスタ等)とを消去する(ステップ512)。最後に、リサイズ命令(ステップ514)は、新たな幅をオブジェクトベクトルに設定する(ステップ516)。図における最後の命令(ステップ518)では、フレームの高さや領域のサイズ等のグローバルフレームパラメータを設定する(ステップ520)。領域のサイズは、各タイルパスが処理する隣接ベクトルの要素やピクセルの数を制御する。
2組目のオペレーション(図6)は、入力オペランドが必要とする記述子を属性テーブルから取り出し(ステップ602,604)、(ベクトル又はスカラーの)結果を有する命令に対して新たな記述子のエントリを生成する(ステップ606,608,610,612)。新たなエントリのアドレスはホストに返されるが、エントリのアドレスは予め分かっているので、これは、エントリの生成と並行して行われる。新たなエントリの記述子は、オペランドの記述子から得られる。例えば、浮動小数点の数値が整数に加えられると、その結果は浮動小数点の数値である。C++で定義される標準変換及びデータタイプの優先順位の規則に従い、デコードステージは、加算を発行する前に整数から浮動小数点への形式の変換を発行する。もう一つの例は、ベクトルをより幅の広いベクトルに加算すると、その結果は幅の広いベクトルとなるが、幅の狭いベクトルによって定義される要素だけが変化する。
表3は、記述子に含まれる情報のタイプをオブジェクトのタイプごとに示す表である。この情報は、次の何れかである。1)属性テーブルから直接アクセスされる。2)命令の結果に対して属性ステージによって生成される。3)命令の副作用として、属性ステージによって記述子が更新されることを反映し、デコードステージに伝える前に属性ステージによって変更される。これは、図のフローチャートにおいて「副作用デコード」と表記されたフローチャートコネクタの一態様である。この種のオペレーションに対するフローチャートは、非常に詳細で機械的であるため、ここでは示さない。しかしながら、必要なオペレーションのタイプの一般的な概要は、次の通りである。
Figure 0006894377
LineBufferの読み出しは、現在バッファに含まれるデータ量及び読み出しのオフセットに応じて、有効又は無効にする必要がある。バッファのデータ量は、境界処理を含む所定のオフセットでの読み出しを満たすのに十分な量であるべきである。また、結果のベクトルの幅は、水平と垂直のオフセットの両方又は何れかに対して定義される幅による。バッファが初期化された場合には、出力が直ちに得られる。
ムーブ命令が割り当てオペレーションを実施するので、割り当てられたオブジェクトの記述子の状態は、ムーブ命令が要求するように変更される。たとえば、DataVectorをより幅の広いベクトルで設定すると、幅が広い方のベクトルと同じ幅に変更される。また、この命令は、Indexの数式等の一時的なオブジェクトを、非一時的なオブジェクトに変更する。
LineBuffer割り当ては、ベースライン、有効なライン数、次に割り当てられる新たなライン等を含むバッファの循環アドレス指定の状態を更新する。これにより、属性テーブル内の記述子と、デコードステージに伝えられる記述子と、が変更される。
Indexオブジェクトは、定義されていない幅又は定義されている幅の何れかを有している。定義されていない幅の場合、他の事項(例えばオブジェクト幅等)がアクセスの幅を定義する。定義されている幅の場合、オブジェクト幅を置き換える。幅が定義されていると、幅を直接定義するのではなく、例えばアップサンプリングやダウンサンプリング等のように、アクセスされたオブジェクトの幅を変更する場合がある。この状態は、Indexオブジェクトで動作する式によって定義される。そこで、属性ステージは、これらの式を追跡し、これに応じてIndexの記述子を変更する必要がある。
何らかの理由によりアクセスが無効である場合(例えば、アクセスするのに十分なコンテキストを有していないLineBufferオブジェクトにアクセスする場合等)、属性ステージは、このアクセスに関係する全ての式を、次の割り当ての時点まで無効にする。これは、割り当てを無効にすることも含まれる。これは、特定のオブジェクトのプログラミング及び再使用を著しく簡素化する。なぜなら、多くの境界条件をテストすることなくオブジェクトを使用できるからである。オブジェクトは、入力条件が満たされるまで、ただ単に沈黙(silent)しているだけである。また、終了の条件に達した後もオブジェクトは沈黙する。
(デコードステージのオペレーションの詳細)
図7は、デコードステージのオペレーション全般のフローチャートである。図7のページ外コネクタとして、レジスタ割り当てのフローチャートを図8に示す。デコードステージの主要なオペレーションは、「VPX命令のデコード」(ステップ702)として示されている。このオペレーションは、VPX命令のシーケンスを、例えばタイルパス命令等のように専用プロセッサ用と同等の命令シーケンスに変換する。この処理は、ほとんど機械的に行れ、この開示内容と、関連する専用プロセッサの命令セットの見地から、命令セットアーキテクチャの当業者には明白であろう(ただし、VPX命令は標準であると想定されるが、IGUが実行する仮想化のために、タイルパス命令が固定である必要はない点に注意)。以下の議論では、この中心となるデコードタスクを取り巻く特定のタスクについて説明する。
前述したように、デコードステージは、機能停止しているか否かにかかわらず、テーブルシステムユニットへのインタフェースとして動作する(ステップ704)。そうでなければ、デコードステージは、I−バッファステージが、デコードした命令を受信する状態にある場合(例えば、ベクトル命令バッファに空き領域があり、機能停止していない場合)にのみ、動作する(ステップ706)。デコードステージは、属性ステージが新たな命令を供給しないようにさせ、デコードした命令のI−バッファステージへの流れを止めて、デコードステージ自身が機能停止状態に強制的に移行することができる。デコードステージが機能停止すると、後に述べる条件により、新たな命令を受け付けなくなり、代わりに前のデコードオペレーションを繰り返すか、継続する(ステップ708)。前のデコードが成功しなかった場合には、デコードが繰り返され、1つのVPXが複数のタイルパス命令に変換された場合には継続する(ステップ710)。後者の例は、テーブルアクセスである。このテーブルアクセスは、アクセスが完了する前にテーブルアドレスをシフトしてマスクすることを要する。
図示した第1のオペレーションセットは、入力命令が、コンストラクトオペレーションか、又は、デストラクトオペレーションかを決定する。コンストラクト命令(ステップ712)は、レジスタベースの(共有されない)オブジェクトに対してのレジスタ割り当て(ステップ714)を必要とし、デストラクト命令(ステップ716の「いいえ」分岐)は、オブジェクトに関連する全てのレジスタの割り当てを解除する(ステップ718)。コピーコンストラクト(ステップ716)は、コピーされるオブジェクトの割り当てを残すが、新たなオブジェクトに対してレジスタを割り当て、ムーブオペレーションを発行して、タイルパス内のコピーされるオブジェクトの内容をコピーする(ステップ720)。レジスタ割り当ては、スピルを引き起こし得る。コンストラクト命令は、他の如何なるタイルパス命令も引き起こさないので、コンストラクトの場合には、デコーダが機能停止することなく当該スピルを発行する。コピーコンストラクトに対してスピルが発生すると、コピーは、スピルと、これに続くムーブによって実行されるため、2つの命令が生成されることになり、機能停止が必要となる(ステップ722)。割り当てられたレジスタは、オブジェクトトラッカによってアドレス指定されたオブジェクトレジスタテーブルに記憶される。
図8に示すように、他の命令は、必要に応じてレジスタを割り当てる。ほとんどの場合、これは単にオブジェクトレジスタテーブル内のレジスタ識別子を検索することを含むが、レジスタがスピルして再使用された場合、当該レジスタをフィルする必要があり、順に他のレジスタをスピルする必要が生じる場合がある。これは、デコードした命令が必要とするいくつか又は全てのレジスタで発生する場合がある。そのため、デコードした命令を続ける前に、全部で3つのスピルと3つのフィルが発生する場合があり、結果的に最大6サイクルの機能停止が起こり得る(結果が、一時的な結果ではなく、宣言された変数である場合には、結果がこれから書き込まれるにもかかわらず、割り当ての前にレジスタにフィルしなければならないことに注意する。なぜならば、オブジェクトには、より狭い幅のオブジェクトを割り当てることができ、狭い幅に関連する要素のみが影響を受けると定義されているからである)。しかしながら、スピルとフィルは非常に稀であるため、これは極端な場合である。このステージで行ったパスの数に関わらず、レジスタ割り当ては、結局、デコーダが進むことができる状態に到達することを示す具体例として、この場合を使った。ここでは、ハードウェアには少なくとも3つのレジスタが定義されていると仮定する。いくつかの命令は、複数のデコードした命令間で、中間状態のためのレジスタを必要とするが、この要求は、命令がさらにデコードされるまで分からないので、4番目のレジスタも仮定されている。
上述したように、デコーダの中心となるタスクは、VPX命令をタイルパス命令に変換することである。このために、デコードステージは、オペレーションを行う前に、オペランドを互換性のあるデータタイプに変換する命令を発行することが必要となる場合があり、この結果、1サイクルの機能停止をもたらす。また、このために、テーブルシステムに対してアクセス要求を始める場合があり、依存関係情報及びアクセス識別子を、デコードした命令に加えることが必要となることがある。これらのオペレーションの概要をこれまでに見てきたが、詳細は本願の範囲を超える。しかし、本出願の開示内容に照らして、当業者は、これらのオペレーションが比較的簡単なマッピングであると理解できるだろう。
デコードステージの最後のタスクは、最適化キューを管理することである。このキューは、いくつかの命令のコンテキストを保持し、最適化できる可能性がある場合には、I−バッファステージからの命令を押さえておく。デコードステージは、最適化が行われた場合又は最適化が不可能だと分った場合、I‐バッファステージへ命令を伝える。
(I−バッファステージのオペレーションの詳細)
図9は、タイルプロセッサが専用プロセッサである場合におけるI−バッファステージのトップレベルでのオペレーションのフローチャートである。このステージは、機能停止状態に無い場合にのみ、新たな命令を最適化キューから取り込む(ステップ902,904)(そして、デコードステージが機能停止している場合には、新たな命令を受信しな可能性がある)。機能停止しているか否かにかかわらず、I−バッファステージは、上述したようにサイドバンド信号を常に提供し(ステップ906)、ベクトルI−パイプが異常に長い時間休止しているか否か、又は、バリア条件が満たされたか否かを検出する。
新たな命令を受信すると、第1のステップでは、ベクトル命令キューとスカラ命令キューの両方又は何れか一方に命令を配置する(ステップ908,910,912)(両方に配置するのは、スカラー値を生成するベクトル命令の場合である)。必要なキューのエントリが空でなければ、機能停止状態に陥る。I−バッファステージが入力命令を使用しなかったので、この状態は最後のステップで検出される(ステップ914,916)。
第2のステップは、入力命令とは無関係に、新たな命令を受信したか否かにかかわらず実行される。タイルアレイが以前のベクトル命令を受信し、ベクトル命令バッファに次の命令がある場合には、利用可能であれば、これを次に発行する命令として設定する。この命令の発行では、タイルパス領域にわたってマルチタスクが実行されるので、タスク間隔内の同じ命令シーケンスが領域毎に繰り返される。各タスク間隔が完了すると、(プログラムで定義される)最後の領域でタスク間隔が実行されるまで(ステップ918)、領域番号がインクリメントされる。この時点で、領域は第1の領域に設定され、命令の発行は次のタスク間隔に進む(ステップ920)。繰り返すが、これは命令がバッファに存在する場合にのみ適用される。
ベクトル命令の処理とは無関係に、I−バッファステージはスカラー命令も実行する。これらの命令には、1つ若しくは2つのスカラー値に対するオペレーションを行うこと、ベクトルオペレーション若しくはホストから受信したスカラー値をスカラーレジスタに設定すること、又は、スカラー値をホストへ返すこと、の何れかである。これらの全てのオペレーションは、スカラー命令キューの最初の命令に対して実行され、全てのオペランドが有効である場合にのみ実行される。ベクトル命令が生成したスカラーは、サイドバンドパケットで受信した結果として有効になり、適切なキューエントリに配置される。スカラーの実行がこのキューのエントリに達すると、その値はスカラーレジスタファイルに書き込まれ、その後の実行において利用可能になる。何らかの理由で、VectorSummaryオブジェクトの値が使われる前に同じオブジェクトに値が1回以上書き込まれると、スカラー命令キューは、この状態を認識し、最新の更新が有効になるまでスカラー値を使用しない。これは、特定のプログラム条件で起こり得る。
特定のシステム構成要素を参照するために、本開示を通じて、特定の用語が使用される。当業者が理解するように、実施者は、構成要素を異なる名称で呼ぶことがある。この文書では、機能ではなく名称が異なる構成要素を区別することを意図していない。以下の説明及び特許請求の範囲では、「含む」及び「備える」という用語は自由に使用され、これにより、「含むが、〜に限定されない」を意味すると解釈されるべきである。同様に、「接続する」という用語は、間接的又は直接的な電気的接続を意味することを意図している。このように、第1の装置が第2の装置に接続する場合、その接続は、直接的な電気的接続、又は、他の装置との接続を介した間接的な電気的接続である。
上記の説明は、本明細書で説明したシステム、プロセッサ及び方法の様々な実施形態に関する。開示された実施形態は、特許請求の範囲を含む本開示の範囲を限定するものとして解釈又は使用されるべきではない。さらに、当業者であれば、上記の説明が広範な用途を有し、如何なる実施形態の説明もその実施形態の単なる例示に過ぎないことを意味し、特許請求の範囲を含む本開示の範囲が実施形態に限定されることを示唆する意図がないことを理解するであろう。
本明細書で提供される説明は、本発明の原理及び様々な実施形態を例示することを意図している。上述の開示内容が十分に理解されると、当業者には多数の変形及び修正が明らかになるであろう。如何なる請求項も、かかる変形及び修正の全てを包含すると解釈するものとする。

Claims (13)

  1. ホストコンピュータを専用プロセッサに接続するように構成された命令生成ユニットであって、
    ホストプログラムのオペレーションコードと、第1仮想ホストプログラムオペランドと、をホストコンピュータから受信し、第1仮想ホストプログラムオペランドに対応する第1オペランド記述子を識別するように構成された属性ステージであって、第1仮想ホストプログラムオペランドは、専用プロセッサの第1オペランドを表し、第1オペランド記述子は、1つ以上のオペランド属性に関して第1オペランドの記述を提供する、属性ステージと、
    第1オペランド記述子と、ホストプログラムのオペレーションコードと、を属性ステージから受信し、ホストプログラムのオペレーションコードと第1オペランド記述子とを用いて、専用プロセッサが実行するための1つ以上の変換された命令を形成し、変換された命令を専用プロセッサが実行するときに使用する記憶領域を割り当てるように構成されたデコードステージと、
    変換された命令をデコードステージから受信し、1つ以上の変換された命令を1つ以上の命令キューに配置し、専用プロセッサが実行するために、変換された命令を1つ以上の命令キューのうち少なくとも1つから発行するよう構成された命令バッファステージと、
    を備える、命令生成ユニット。
  2. 専用プロセッサは、少なくとも2つの相互接続された処理ユニットのアレイを含み、
    各処理ユニットは、
    命令バッファと、
    少なくとも2つの領域に分割されたデータメモリと、を備える、
    請求項1の命令生成ユニット。
  3. 第1オペランドは、専用プロセッサの1つ以上のデータメモリの複数の領域にわたって記憶された二次元データアレイを含む、
    請求項の命令生成ユニット。
  4. デコードステージによって割り当ててられた記憶領域は、専用プロセッサの処理ユニッ
    ト内に存在する、
    請求項の命令生成ユニット。
  5. 相互接続された処理ユニットの各々の命令バッファは、1つの処理ユニットから次の処理ユニットへ順次命令を伝えるように構成された命令パイプラインによって接続されており、
    1つ以上の命令キューは、ベクトル命令キューとスカラー命令キューとを備え、
    命令バッファステージは、変換された命令を1つ以上の命令キューから発行することに関連して、変換された命令をベクトル命令キューから命令パイプラインに配置するように構成されている、
    請求項の命令生成ユニット。
  6. 専用プロセッサ用の命令を生成する方法であって、
    ホストプログラムのオペレーションコードと、第1仮想ホストプログラムオペランドと、をホストプロセッサから受信することであって、第1仮想ホストプログラムオペランドは、専用プロセッサの第1オペランドを表す、ことと、
    第1仮想ホストプログラムオペランドに対応する第1オペランド記述子を識別することであって、第1オペランド記述子は、1つ以上のオペランド属性に関して第1オペランドの記述を提供する、ことと、
    ホストプログラムのオペレーションコードと第1オペランド記述子とを用いて、専用プロセッサが実行するための1つ以上の変換された命令を形成することと、
    変換された命令を実行するときに専用プロセッサによって使用される記憶領域を割り当てることと、
    1つ以上の変換された命令を1つ以上の命令キューに配置することと、
    変換された命令を、専用プロセッサが実行するために1つ以上の命令キューのうち少なくとも1つから発行することと、
    を含む、方法。
  7. 専用プロセッサは、少なくとも2つの相互接続された処理ユニットのアレイを含み、
    各処理ユニットは、
    命令バッファと、
    少なくとも2つの領域に分割されたデータメモリと、を備える、
    請求項の方法。
  8. 第1オペランドは、専用プロセッサの1つ以上のデータメモリの複数の領域にわたって記憶された二次元データアレイを含む、
    請求項の方法。
  9. 記憶領域を割り当てることは、専用プロセッサの処理ユニット内に存在する記憶領域を割り当てることを含む、
    請求項の方法。
  10. 相互接続された処理ユニットの各々の命令バッファは、1つの処理ユニットから次の処理ユニットへ順次命令を伝えるように構成された命令パイプラインによって接続されており、
    1つ以上の命令キューは、ベクトル命令キューとスカラー命令キューとを備え、
    変換された命令を1つ以上の命令キューから発行することは、変換された命令をベクトル命令キューから命令パイプラインに配置することを含む、
    請求項の方法。
  11. コンパイルしたプログラムを実行するように構成されたホストプロセッサと、
    専用プロセッサと、
    ホストプロセッサ及び専用プロセッサと動作可能に接続された命令生成ユニットと、を備え、
    命令生成ユニットは、
    ホストプログラムのオペレーションコードと、仮想ホストプログラムオペランドとを、コンパイルしたプログラムから受信することであって、仮想ホストプログラムオペランドは、専用プロセッサのオペランドを表すことと、
    専用プロセッサが実行するために、ホストプログラムのオペレーションコードと仮想ホストプログラムオペランドとを用いて、1つ以上の変換された命令を形成することと、
    変換された命令を実行するときに専用プロセッサによって使用される記憶領域を割り当てることと、
    1つ以上の変換された命令を1つ以上の命令キューに配置することと、
    変換された命令を、専用プロセッサが実行するために1つ以上の命令キューのうち少なくと1つから発行することと、を実行するように構成されている、
    データ処理システム。
  12. 専用プロセッサは、少なくとも2つの相互接続された処理ユニットのアレイを備え、
    各処理ユニットは、
    命令バッファと、
    少なくとも2つの領域に分割されたデータメモリと、を備える、
    請求項11のデータ処理システム。
  13. 相互接続された処理ユニットの各々の命令バッファは、1つの処理ユニットから次の処理ユニットへ順次命令を伝えるように構成された命令パイプラインによって接続されており、
    1つ以上の命令キューは、ベクトル命令キューとスカラー命令キューとを備え、
    命令生成ユニットは、変換された命令を1つ以上の命令キューから発行することに関連して、変換された命令をベクトル命令キューから命令パイプラインに配置するように構成されている、
    請求項12のデータ処理システム。
JP2017545214A 2015-02-25 2016-04-20 専用プロセッサ用ハードウェア命令生成ユニット Active JP6894377B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562120603P 2015-02-25 2015-02-25
US15/054,118 US9898292B2 (en) 2015-02-25 2016-02-25 Hardware instruction generation unit for specialized processors
US15/054,118 2016-02-25
PCT/IB2016/052248 WO2016135712A1 (en) 2015-02-25 2016-04-20 Hardware instruction generation unit for specialized processors

Publications (2)

Publication Number Publication Date
JP2018529132A JP2018529132A (ja) 2018-10-04
JP6894377B2 true JP6894377B2 (ja) 2021-06-30

Family

ID=56693176

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017545214A Active JP6894377B2 (ja) 2015-02-25 2016-04-20 専用プロセッサ用ハードウェア命令生成ユニット

Country Status (8)

Country Link
US (1) US9898292B2 (ja)
EP (1) EP3262503B1 (ja)
JP (1) JP6894377B2 (ja)
KR (1) KR20180079224A (ja)
CN (1) CN107347253B (ja)
GB (1) GB2553442A (ja)
HK (1) HK1246444A1 (ja)
WO (1) WO2016135712A1 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11436045B2 (en) 2015-05-26 2022-09-06 Blaize, Inc. Reduction of a number of stages of a graph streaming processor
US11150961B2 (en) 2015-05-26 2021-10-19 Blaize, Inc. Accelerated operation of a graph streaming processor
US10437637B1 (en) 2015-05-26 2019-10-08 Thin CI, Inc. Configurable scheduler for graph processing on multi-processor computing systems
US11416282B2 (en) * 2015-05-26 2022-08-16 Blaize, Inc. Configurable scheduler in a graph streaming processing system
US11379262B2 (en) 2015-05-26 2022-07-05 Blaize, Inc. Cascading of graph streaming processors
US10642617B2 (en) * 2015-12-08 2020-05-05 Via Alliance Semiconductor Co., Ltd. Processor with an expandable instruction set architecture for dynamically configuring execution resources
GB2558220B (en) 2016-12-22 2019-05-15 Advanced Risc Mach Ltd Vector generating instruction
US10817293B2 (en) * 2017-04-28 2020-10-27 Tenstorrent Inc. Processing core with metadata actuated conditional graph execution
US10534881B2 (en) * 2018-04-10 2020-01-14 Advanced Micro Devices, Inc. Method of debugging a processor
CN110545489A (zh) * 2018-05-28 2019-12-06 中国电信股份有限公司 自适应流媒体的播放方法、系统及客户端
US11409530B2 (en) * 2018-08-16 2022-08-09 Arm Limited System, method and apparatus for executing instructions
GB2580165B (en) * 2018-12-21 2021-02-24 Graphcore Ltd Data exchange in a computer with predetermined delay
US20200264921A1 (en) * 2019-02-20 2020-08-20 Nanjing Iluvatar CoreX Technology Co., Ltd. (DBA "Iluvatar CoreX Inc. Nanjing") Crypto engine and scheduling method for vector unit
CN111782577B (zh) * 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
CN111782267B (zh) * 2019-04-04 2022-12-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
JP7073581B2 (ja) 2019-04-04 2022-05-23 中科寒武紀科技股▲分▼有限公司 データ処理装置及び関連製品
KR102550451B1 (ko) * 2019-04-04 2023-06-30 캠브리콘 테크놀로지스 코퍼레이션 리미티드 데이터 처리방법과 장치 및 관련 제품
CN111831337B (zh) * 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
CN111782133A (zh) * 2019-04-04 2020-10-16 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
CN111831329B (zh) * 2019-04-19 2022-12-09 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
CN111782274B (zh) * 2019-04-04 2023-03-31 安徽寒武纪信息科技有限公司 数据处理装置及相关产品
CN111857828B (zh) * 2019-04-25 2023-03-14 安徽寒武纪信息科技有限公司 处理器操作方法及装置以及相关产品
CN111831722A (zh) * 2019-04-19 2020-10-27 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
CN111857829A (zh) * 2019-04-25 2020-10-30 安徽寒武纪信息科技有限公司 处理器操作方法及装置以及相关产品
CN111783992A (zh) * 2019-04-04 2020-10-16 安徽寒武纪信息科技有限公司 数据处理装置及相关产品
CN110377339B (zh) * 2019-08-17 2024-03-01 中昊芯英(杭州)科技有限公司 长延时指令处理装置、方法以及设备、可读存储介质
CN110780922B (zh) * 2019-10-22 2022-06-17 珠海格力电器股份有限公司 指令生成方法、装置、电子设备及存储介质

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6292879B1 (en) * 1995-10-25 2001-09-18 Anthony S. Fong Method and apparatus to specify access control list and cache enabling and cache coherency requirement enabling on individual operands of an instruction of a computer
US5796974A (en) * 1995-11-07 1998-08-18 Advanced Micro Devices, Inc. Microcode patching apparatus and method
US6016395A (en) * 1996-10-18 2000-01-18 Samsung Electronics Co., Ltd. Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor
US6212628B1 (en) * 1998-04-09 2001-04-03 Teranex, Inc. Mesh connected computer
US6477683B1 (en) 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
JP3879350B2 (ja) * 2000-01-25 2007-02-14 富士ゼロックス株式会社 構造化文書処理システム及び構造化文書処理方法
US7293159B2 (en) * 2004-01-15 2007-11-06 International Business Machines Corporation Coupling GP processor with reserved instruction interface via coprocessor port with operation data flow to application specific ISA processor with translation pre-decoder
US7934079B2 (en) * 2005-01-13 2011-04-26 Nxp B.V. Processor and its instruction issue method
US20070118832A1 (en) 2005-11-18 2007-05-24 Huelsbergen Lorenz F Method and apparatus for evolution of custom machine representations
US20100153934A1 (en) 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
US9170816B2 (en) * 2009-01-15 2015-10-27 Altair Semiconductor Ltd. Enhancing processing efficiency in large instruction width processors
US9183614B2 (en) * 2011-09-03 2015-11-10 Mireplica Technology, Llc Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets

Also Published As

Publication number Publication date
CN107347253B (zh) 2021-07-06
US9898292B2 (en) 2018-02-20
HK1246444A1 (zh) 2018-09-07
GB2553442A (en) 2018-03-07
US20160246599A1 (en) 2016-08-25
GB201715408D0 (en) 2017-11-08
JP2018529132A (ja) 2018-10-04
EP3262503A1 (en) 2018-01-03
WO2016135712A1 (en) 2016-09-01
KR20180079224A (ko) 2018-07-10
CN107347253A (zh) 2017-11-14
EP3262503B1 (en) 2020-03-04

Similar Documents

Publication Publication Date Title
JP6894377B2 (ja) 専用プロセッサ用ハードウェア命令生成ユニット
Auerbach et al. A compiler and runtime for heterogeneous computing
Newburn et al. Offload compiler runtime for the Intel® Xeon Phi coprocessor
CN111566616B (zh) 多处理器系统的编程流程
Keryell et al. Khronos SYCL for OpenCL: a tutorial
EP2438545A2 (en) Improvements in embedded system development
JP2013533533A (ja) コンピューティング・プラットフォーム内のワークロードの分配及び並列化
Hormati et al. Macross: Macro-simdization of streaming applications
Mikushin et al. KernelGen--The Design and Implementation of a Next Generation Compiler Platform for Accelerating Numerical Models on GPUs
Keryell et al. Early experiments using SYCL single-source modern C++ on Xilinx FPGA: Extended abstract of technical presentation
US8429394B1 (en) Reconfigurable computing system that shares processing between a host processor and one or more reconfigurable hardware modules
Doumoulakis et al. Sycl c++ and opencl interoperability experimentation with trisycl
Ohno et al. A GPGPU programming framework based on a shared-memory model
Amiri et al. FLOWER: A comprehensive dataflow compiler for high-level synthesis
Ohshima et al. OMPCUDA: OpenMP execution framework for CUDA based on omni OpenMP compiler
US20230305845A1 (en) Techniques to selectively store data
Salcic et al. GALS-HMP: A heterogeneous multiprocessor for embedded applications
GB2612160A (en) Memory allocation using graphs
Harvey et al. Parallel programming in actor-based applications via OpenCL
US20030135535A1 (en) Transferring data between threads in a multiprocessing computer system
Stitt et al. Thread warping: Dynamic and transparent synthesis of thread accelerators
Kalra Design and evaluation of register allocation on gpus
Guide Cuda c best practices guide
US20230005097A1 (en) Memory deallocation using graphs
Diamos Harmony: an execution model for heterogeneous systems

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190328

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200303

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200603

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201124

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20210222

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210413

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: 20210506

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210603

R150 Certificate of patent or registration of utility model

Ref document number: 6894377

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150