JP2021507374A - 命令を実行するためのシステム及び方法 - Google Patents

命令を実行するためのシステム及び方法 Download PDF

Info

Publication number
JP2021507374A
JP2021507374A JP2020532755A JP2020532755A JP2021507374A JP 2021507374 A JP2021507374 A JP 2021507374A JP 2020532755 A JP2020532755 A JP 2020532755A JP 2020532755 A JP2020532755 A JP 2020532755A JP 2021507374 A JP2021507374 A JP 2021507374A
Authority
JP
Japan
Prior art keywords
instruction
instructions
core
parallel
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2020532755A
Other languages
English (en)
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 JP2021507374A publication Critical patent/JP2021507374A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本開示は、命令を実行するためのシステム及び方法を提供する。システムは、命令を実行するように構成されるコアを有する処理ユニットと、ホストユニットであって、コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、命令の集合は、演算命令及び指示ビットをそれぞれ含み、指示ビットは、命令の集合の最後の命令を識別するように設定される、コンパイルすることと、命令の集合をコアに提供することとを行うように構成されるホストユニットとを含むことができる。

Description

関連出願の相互参照
[0001] 本開示は、参照によりその全体が本明細書に援用される、2017年12月22日に出願された米国特許仮出願第62/610,111号に対する優先権の利益を主張する。
背景
[0002] ニューラルネットワーク処理ユニット(NPU)は、深層学習応用の能力がある1つの潜在的なプロセッサになっている。プログラム可能プロセッサとして、NPUは、定義された命令を使用して、そのハードウェアが実行するように設計される機能を表す。NPUの計算を可能にするかかる命令一式を命令組と呼ぶ。
[0003] 実際には、複数の独立した命令をハードウェア内で同時に実行することができる。そのような並列処理のレベルを命令レベルの並列性(ILP)と呼ぶ。ILPを探索するためのよく知られている2つのアーキテクチャ、即ちスーパスカラ及び超長命令語(VLIW)がある。スーパスカラマシンは、従来の線形命令ストリームから各クロックサイクルにおいて複数の命令を動的に発行することができる。スーパスカラは、並列に実行されるデータ非依存命令を動的に解析及びスケジューリングするためにハードウェアを利用する。
[0004] しかし、これらの従来のILPアーキテクチャは、何れも欠点を有する。例えば、スーパスカラアーキテクチャは、依存性検査ロジックの複雑性及び時間コストの問題を有し、この問題は、各命令が512個の変数に作用し得、完了するのに最大2048サイクル必要とし得るNPUを扱う場合に一層重大になる。更に、VLIWアーキテクチャ(及び可変長実行セット(VLES)等のその改変形態)は、メモリ空間及び計算資源を無駄にし得る。
開示の概要
[0005] 本開示の実施形態は、命令を実行するためのシステムを提供する。システムは、命令を実行するように構成されるコアを有する処理ユニットと、ホストユニットであって、コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、命令の集合は、演算命令及び指示ビットをそれぞれ含み、指示ビットは、命令の集合の最後の命令を識別するように設定される、コンパイルすることと、コアが実行するために命令の集合を処理ユニットに提供することとを行うように構成されるホストユニットとを含むことができる。
[0006] 本開示の実施形態は、ホスト処理ユニットによって実行される方法を更に提供する。この方法は、ホスト処理ユニットにより、コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、命令の集合は、演算命令及び指示ビットをそれぞれ含み、指示ビットは、命令の集合の最後の命令を識別するように設定される、コンパイルすることと、命令の集合を実行するためにコアに提供することとを含むことができる。
[0007] 本開示の実施形態は、処理ユニットのコアによって実行される方法も提供する。この方法は、命令バッファから命令の集合の命令を取り出すことと、その命令を復号することと、復号された命令を実行するために実行ユニットに発行することと、復号された命令に関連する指示ビットに基づいて、復号された命令が命令の集合の最後の命令であるかどうかを判定することと、復号された命令が命令の集合の最後の命令ではないという判定に応答して、命令の集合のその後の命令を取り出すこととを含むことができる。
図面の簡単な説明
[0008] 本開示の実施形態及び様々な態様を以下の詳細な説明及び添付図面に示す。図示の様々な特徴は、縮尺通り描かれていない。
[0009]従来のアーキテクチャの例示的なシーケンス図を示す。 [0010]本開示の実施形態による例示的なオンチップアーキテクチャを示す。 [0011]本開示の実施形態による図2Aの例示的なコアを示す。 [0012]本開示の実施形態による連続実行セット(CES)アーキテクチャの例示的な命令を示す。 [0013]本開示の実施形態による例示的なCESアーキテクチャのシーケンス図を示す。 [0014]本開示の実施形態による、命令を生成するための方法のフローチャートを示す。 [0015]本開示の実施形態による、命令を実行するための方法のフローチャートを示す。 [0016]本開示の実施形態による、CESアーキテクチャに従って編成される命令の集合を記憶する例示的な命令バッファを示す。
詳細な説明
[0017] 以下の説明は、添付図面を参照し、別段の定めがない限り、添付図面では、異なる図中の同じ番号は、同じ又は同様の要素を表す。例示的実施形態についての以下の説明において記載する実装形態は、本発明と合致する全ての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲で列挙される、本発明に関係する態様と合致する機器及び方法の例に過ぎない。
[0018] 本明細書で使用するとき、「含む」、「含んでいる」という用語又はこれらの用語の他の任意の改変形態は、非排他的包含を範囲に含むことを意図し、そのため、要素の一覧を含むプロセス、方法、組成、物又は機器は、それらの要素のみを含むのではなく、明確に列挙されていない他の要素又はかかるプロセス、方法、組成、物若しくは機器に固有の他の要素を含み得る。「例示的」という用語は、「理想的」ではなく、「例」という意味で使用する。
[0019] VLIW及びVLESによって探索される並列処理により、データ依存性を有さない命令を並列に実行することができ、そのため、実行時間を短縮することができる。例えば、以下の例示的なプログラムは、命令1〜3を下記の通り含む。
命令1:e=a+b
命令2:f=c+d
命令3:m=e×f
例1
[0020] 上記の例示的なプログラムから分かるように、命令1及び命令2は、互いに独立しており、同時に処理することができる一方、命令3は、命令1及び命令2の結果に依存する。ILP機能を有するプロセッサでは、命令1及び命令2は、第1の単位時間において同時に処理することができ、次いで命令3を第2の単位時間において処理することができる。換言すれば、これらの3つの命令は、合計2単位時間内で完了することができる。逆に、命令の何れも並列に処理することができない場合、処理時間は、3単位時間になり得る。命令レベルの並列処理(ILP)は、並列処理時間及び非並列処理時間に従って定めることができる。
[0021] 命令を1つずつ処理する場合と並列に処理する場合との差を示すために、図1は、例示的なシーケンスを示す。図1は、命令が1つずつ処理される1命令発行アーキテクチャの命令割り当てに対応するシーケンス図102と、命令が並列に処理される2命令発行アーキテクチャの命令割り当てに対応するシーケンス図104とを含む。
[0022] スーパスカラ及びVLIW等の異なるアーキテクチャのILPは、異なり得る。スーパスカラは、並列に実行されるデータ非依存命令を動的に解析及びスケジューリングするためにハードウェアを利用する。VLIWは、プログラムの命令間のデータ依存性及びハードウェア資源の可用性を静的に解析するためにコンパイラを利用し、全ての独立した命令を、ハードウェア内で並列に実行される超長命令語にパックする。VLIWは、概して、コンパイラを使用してループをアンロールし、ソフトウェアパイプラインを使用して更に多くの独立した命令を見つけることができる。例えば、以下の例2は、100個の数の二乗和を計算することができる。
例2
[0023] 上記の例2では、「LOAD」は、指定のメモリアドレスからローカルメモリに値をロードするための演算を含む。例えば、「LOAD r0 Mem [base+r1]」は、メモリアドレス「Mem [base+r1]」内に記憶されている値をロードし、r0に値を割り当てることができる。「MAC」は、乗算の乗累算演算を含む。「MAC r2 r2 r0 r0」の例示的な乗累算演算では、r2=r2+r0×r0が成立する。従って、r2は、r0の二乗の累積和である。
[0024] MACの反復及びLOADの反復は、独立しているため、以下の例3に示すように、MACの反復とLOADの反復との間の並列処理を探索することができる。
例3
[0025] ループ本体(即ち括弧によって囲まれている命令)は、第1の反復及び第2の反復を含み得ることが例3から見て取れる。第1の反復は、「LOAD r0 Mem[base+r1]」及び「MAC r2 r2 r0 r0」の命令を含むことができ、第2の命令は、「LOAD r0 Mem[base+r1+1]」及び「MAC r2 r2 r0 r0」の命令を含むことができる。
[0026] 上記で論じたように、超長命令語(VLIW)及び可変長実行セット(VLES)の2つのアーキテクチャは、命令の並列処理を探索するために使用することができる。例3に関して詳細を以下で更に紹介する。
[0027] VLIWは、ILPを探索するためのアーキテクチャである。VLIWの命令は、同じ長さを有することができる。同じ長さを有する命令は、命令語と呼ぶこともできる。例えば、ループ本体に生成された命令語は、以下のようにW1、W2及びW3の命令語を含むことができる。
W1:LOAD r0 Mem[base+r1]; | NOP;
W2:MAD r2 r2 r0 r0; | LOAD r0 Mem[base+r1+1];
W3:NOP; | MAD r2 r2 r0 r0;
[0028] 「NOP」は、「演算なし」の省略形であり、命令語が同じ長さを有するように数ビットのパディングを含み得る。命令語W1、W2及びW3のそれぞれは、2つの命令を含むことができる。例えば、命令語W1は、第1の命令「LOAD」及び第2の命令「NOP」を並列に含む。2つの命令を処理することができるこのVLIWアーキテクチャは、2命令発行VLIWアーキテクチャ(DIVA)と呼ぶこともできる。例えば、DIVAは、一度に2つの命令語を取り出し、取り出した命令を別々の実行ユニットによって並列に実行することができる。DIVAは、NOPを無視し、他の効果的な命令を実行ユニットに発行することができる。パディング「NOP」は、演算なしを示すが、パディング「NOP」は、依然としてキャッシュ空間及びバス帯域幅を占有し得る。
[0029] 可変長実行セット(VLES)は、ILPを探索するためのアーキテクチャである。上記の例3の同じコードで、VLESは、以下の例4に示すように、例3のループ本体に基づいて4つの命令(即ちi1、i2、i3及びi4)を生成することができる。
head1_#1;
i1: LOAD r0 Mem[base+r1];
head2_#2;
i2: MAD r2 r2 r0 r0;
i3: LOAD r0 Mem[base+r1+1];
head3_#1;
i4: MAD r2 r2 r0 r0;
例4
[0030] 図1を参照すると、LOAD1及びMAC1は、例4のi1命令及びi2命令にそれぞれ対応する。LOAD2及びMAC2は、例4のi3命令及びi4命令にそれぞれ対応する。1命令発行アーキテクチャのシーケンス図102及び2命令発行アーキテクチャのシーケンス図104において、実線を有するセクションは、ループ本体の第1の反復を形成することができ、破線を有するセクションは、ループ本体の第2の反復を形成することができる。従って、図1では、第1の反復及び第2の反復のそれぞれは、命令i1、i2、i3及びi4を含むことができる。
[0031] シーケンス図102では、第2の反復は、第1の反復を実行した後にのみ実行することができ、それは、1命令発行アーキテクチャが命令を直列にのみ処理することができるからである。シーケンス図104では、命令の並列処理を探索することができるため、依存性のない命令を並列に実行することができる。例えば、MAC1とLOAD2とは、依存性を有さず、シーケンス図104に示すように並列に実行することができる。「LOAD1」の命令の実行中、ハードウェア資源が引き続き占有され得るため、「LOAD2」の命令は、「LOAD1」の命令の実行が完了した後にのみ実行できることが理解されるであろう。
[0032] 例4に関して上記で論じたように、VLESは、短い「ヘッド」情報を使用して、1つの長命令語に何個の命令が属するかを示すことができる。VLIWと比較して、短い「ヘッド」情報は、幾らかのメモリ空間及びバス帯域幅を節約することができる。しかし、ハードウェアがヘッド情報を構文解析しなければならない可能性があるため、ヘッド情報は、余分なハードウェアコストを生じさせる場合がある。ハードウェア資源の使用の他に、VLESは、以下の理由から一層大きい命令バッファを更に必要とし得る。
[0033] 第1に、ヘッド情報は、命令バッファ内の幾らかの空間を占有し得る。ヘッド情報は、各VLES命令内の数ビットを占有し得る。例えば、ヘッド情報によってVLES命令符号化空間内の3〜4ビットが占有され得る。
[0034] 第2に、ヘッド情報が追加の空間をとらないと仮定することができるが、VLESは、整列の問題を依然として有し得る。上記の例4を参照すると、コンパイラは、命令i1及びi2を1クロックサイクルにおいてキャッシュユニット内に取り出すことができる。次いで、コンパイラは、head1_#1を読み取り、命令i1を実行するために発行することができる。その後、命令i2が命令バッファ内に残る。VLESが次に2つの命令を取り出す場合、命令バッファ内の命令が正しく整列されない可能性がある。従って、VLESは、より幅広の命令バッファを使用することができる。例えば、キャッシュユニットは、4つの命令の幅を有することができる。VLESが一度に4つの命令を取り出すことができる場合、キャッシュユニットは、8つの命令の幅を有し得ることが理解されるであろう。従って、VLESは、実行のために更に多くのハードウェア資源を必要とし得る。
[0035] VLIW及びVLESのアーキテクチャは、1命令発行の命令と比較したときに計算の性能を加速させることができるが、VLIWもVLESも、命令の並列処理の探索を支援するために追加のハードウェアを必要とする。これらの従来の解決策は、計算粒度が非常に粗い機械学習等の一部の応用分野で非常に問題となり得る。機械学習は、概して、スカラ変数ではなく、巨大な行列に対して計算を行う。例えば、上記のプログラムの各命令i1、i2、i3及びi4は、512個の変数に作用し、完了するのに2048サイクルかかり得る。本開示の実施形態は、ハードウェア資源をより効率的に利用する。
[0036] 図2Aは、本開示の実施形態による例示的なニューラルネットワーク処理ユニット(NPU)アーキテクチャ200を示す。図2Aに示すように、NPUアーキテクチャ200は、チップ通信システム202、ホストメモリ204、メモリコントローラ206、直接メモリアクセス(DMA)ユニット208、JTAG(Joint Test Action Group)/TAP(Test Access End)コントローラ210、周辺インタフェース212、バス214、グローバルメモリ216等を含むことができる。チップ通信システム202は、伝達されるデータに基づいてアルゴリズム操作を実行できることが理解されるであろう。
[0037] チップ通信システム202は、グローバルマネージャ2022及び複数のコア2024を含むことができる。グローバルマネージャ2022は、1つ又は複数のコア2024と連携するための少なくとも1つのタスクマネージャを含むことができる。各タスクマネージャは、ニューラルネットワークのシナプス/ニューロン回路を提供するコア2024のアレイに関連することができる。例えば、図2Aの処理要素の最上層は、ニューラルネットワークへの入力層を表す回路を提供することができる一方、タイルの第2の層は、ニューラルネットワークの隠れ層を表す回路を提供することができる。図2Aに示すように、グローバルマネージャ2022は、2つのコアアレイと連携するために2つのタスクマネージャを含むことができる。
[0038] コア2024は、単一命令多重データ(SIMD)アーキテクチャをそれぞれ含む1つ又は複数の処理要素を含むことができ、単一命令多重データ(SIMD)アーキテクチャは、グローバルマネージャ2022から受信される命令に基づいて1つ又は複数の演算(例えば、乗算、加算、乗累算等)を実行するように構成される1つ又は複数の処理ユニットを含む。伝達されるデータパケットに対する演算を実行するために、コア2024は、データパケット内の情報を処理するための1つ又は複数の処理要素を含むことができる。各処理要素は、任意の数の処理ユニットを含むことができる。一部の実施形態では、コア2024をタイル等と見なすことができる。
[0039] ホストメモリ204は、ホストCPUのメモリ等のオフチップメモリであり得る。例えば、ホストメモリ204は、DDRメモリ(例えば、DDR SDRAM)等であり得る。ホストメモリ204は、高レベルキャッシュとして機能する1つ又は複数のプロセッサに組み込まれるオンチップメモリと比べて遅いアクセス速度で、大量のデータを記憶するように構成され得る。
[0040] メモリコントローラ206は、メインメモリの機能を果たすために、オンチップメモリブロック(例えば、4ブロックの8GB第2世代高帯域幅メモリ(HBM2))を有するグローバルメモリ216内の特定のメモリブロックとの間のデータの読み書きを管理することができる。例えば、メモリコントローラ206は、チップ通信システム202の外部から(例えば、DMAユニット208又は別のNPUに対応するDMAユニットから)到来するデータの読み書き、又はチップ通信システム202の内部から(例えば、グローバルマネージャ2022のタスクマネージャによって制御される2Dメッシュを介してコア2024内のローカルメモリから)到来するデータの読み書きを管理することができる。更に、図2Aではメモリコントローラを1つ示すが、複数のメモリコントローラがNPUアーキテクチャ200内に設けられ得ることが理解されるであろう。例えば、グローバルメモリ216内のメモリブロック(例えば、HBM2)ごとに1つのメモリコントローラがあり得る。
[0041] メモリコントローラ206は、メモリアドレスを生成し、メモリの読み取り又は書き込みサイクルを開始することができる。メモリコントローラ206は、1つ又は複数のプロセッサによって読み書きされ得る幾つかのハードウェアレジスタを含むことができる。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、1つ又は複数の制御レジスタ、及び他の種類のレジスタを含み得る。これらのレジスタは、ソース、宛先、転送の方向(入力/出力(I/O)装置からの読み取り又はI/O装置への書き込み)、転送単位のサイズ、1つのバースト内で転送するバイト数、及び/又はメモリコントローラの他の典型的な特徴の幾つかの組み合わせを指定することができる。
[0042] DMAユニット208は、ホストメモリ204とグローバルメモリ216との間のデータ転送を支援することができる。加えて、DMAユニット208は、複数のNPU(例えば、NPU200)間のデータ転送を支援することができる。DMAユニット208は、CPUの割り込みを引き起こすことなく、オフチップ装置がオンチップメモリ及びオフチップメモリの両方にアクセスすることを可能にし得る。従って、DMAユニット208もメモリアドレスを生成し、メモリの読み取り又は書き込みサイクルを開始することができる。DMAユニット208も、メモリアドレスレジスタ、バイトカウントレジスタ、1つ又は複数の制御レジスタ、及び他の種類のレジスタを含む、1つ又は複数のプロセッサによって読み書きされ得る幾つかのハードウェアレジスタを含むことができる。これらのレジスタは、ソース、宛先、転送の方向(入力/出力(I/O)装置からの読み取り又はI/O装置への書き込み)、転送単位のサイズ、1つのバースト内で転送するバイト数の幾つかの組み合わせを指定することができる。NPUアーキテクチャ200は、第2のDMAユニットを含み得ることが理解され、第2のDMAユニットは、ホストCPUを関与させることなしに複数のNPUアーキテクチャが直接通信できるようにするために、他のNPUアーキテクチャとの間でデータを転送するために使用され得る。
[0043] JTAG/TAPコントローラ210は、システムアドレス及びデータバスへの直接の外部アクセスを必要とすることなく、NPUへの低オーバヘッドアクセスのためのシリアル通信インタフェース(例えば、JTAGインタフェース)を実装する専用デバッグポートを指定することができる。JTAG/TAPコントローラ210は、様々な部分のチップロジックレベル及び装置機能を提示するテストレジスタの組にアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース(例えば、TAPインタフェース)も有することができる。
[0044] 存在する場合、周辺インタフェース212(PCIeインタフェース等)は、NPUと他の装置との間の通信を提供するチップ間バスの役割を果たす(典型的にはチップ間バスである)。
[0045] バス214は、チップ内バス及びチップ間バスの両方を含む。チップ内バスは、システムアーキテクチャによって呼び出される全ての内部コンポーネントを互いに接続する。全てのコンポーネントが他の全てのコンポーネントに接続されるわけではないが、全てのコンポーネントは、通信する必要がある他のコンポーネントへの接続を有する。チップ間バスは、NPUをオフチップメモリ又は周辺機器等の他の装置と接続する。典型的には、周辺インタフェース212(例えば、チップ間バス)がある場合、バス214は、チップ内バスに専ら関係するが、一部の実装形態では専用のバス間通信に関係することができる。
[0046] 図2AのNPUアーキテクチャ200は、本開示の実施形態を組み込むが、開示する実施形態は、他の任意の処理ユニット又はアクセラレータに適用できることが理解されるであろう。かかるユニットは、例えば、ベクトル及び行列処理能力を有するGPU、CPU、又は深層学習のためのニューラルネットワークアクセラレータ等のアクセラレータであり得る。一部の実施形態では、処理ユニットは、深層学習等の一部のアプリケーションを加速させるためのSIMDアーキテクチャを含むことができる。SIMD又はベクトルアーキテクチャは、グラフィックス処理及び深層学習等のデータ並列処理で計算装置を支援するために一般に使用される。SIMDアーキテクチャは、複数の処理要素を含むことができ、処理要素のそれぞれは、複数のデータ点に対して同じ演算を同時に実行することができる。
[0047] 一部の実施形態では、処理ユニット(例えば、NPUアーキテクチャ200等)は、コンパイラを含むことができる。コンパイラは、あるプログラミング言語で記述されたコンピュータコードを命令に変換して実行可能プログラムを作成するプログラム又はコンピュータソフトウェアである。マシニングの応用では、コンパイラは、様々な演算、例えば前処理、字句解析、構文解析、意味解析、入力プログラムの中間表現への変換、コードの最適化及びコードの生成、又はそれらの組み合わせを実行することができる。
[0048] 一部の実施形態では、命令を生成するコンパイラは、NPU200にコマンドをプッシュするホストユニット(例えば、ホストメモリ204を有するCPU)上にあり得る。これらのコマンドに基づき、各タスクマネージャは、1つ又は複数の空いたコアを新たなタスクに割り当て、必要に応じてコア間の同期を管理することができる。コマンドの一部は、(コンパイラによって生成される)命令及びデータをホストメモリ204からグローバルメモリ216内にロードするようにDMAユニット208に命令することができる。次いで、対応するタスクが割り当てられた各コアの命令バッファに、ロードされた命令を分配することができ、コアは、それらの命令を適宜処理することができる。
[0049] コアによって受信される最初の幾つかの命令は、グローバルメモリ216からコアの命令バッファ内にデータをロード/記憶するように、コアに命令できることが理解されるであろう。次いで、各コアは、命令パイプラインを開始することができ、かかる命令パイプラインは、命令バッファから(例えば、フェッチユニットによって)命令を取り出すことと、その命令を(例えば、命令デコーダによって)復号し、且つ(例えば、オペランドに対応する)ローカルメモリアドレスを生成することと、ソースデータを読み取ることと、演算を実行するか又はロード/記憶することと、その後、結果を書き戻すこととを含む。
[0050] 図2Bは、本開示の実施形態によるコア2024の概略図を示す。コア2024は、制御ロジック224、複数の実行ユニット(アルゴリズム論理ユニット(ALU)226、ロード/記憶(LD/ST)ユニット228、及び特殊関数(SF)ユニット230等)並びにローカルメモリ232を含むことができる。
[0051] 制御ロジック224は、復号された命令を実行するために複数の実行ユニットに送信することができ、パイプラインのストールを最小化することができる。例えば、MAD命令は、ALU226に送信することができ、LOAD命令は、LD/STユニット228に送信することができ、余弦関数は、SFユニット230に送信することができる。複数の実行ユニットが並列に機能することを可能にするために、CESアーキテクチャを使用して各コア内のILPを探索することができる。
[0052] ローカルメモリ232は、複数の実行ユニットによって生成される結果を記憶することができる。記憶された結果は、その後の命令によって更にアクセスされ、ALU224、LD/STユニット228及びSFユニット230に再び提供され得る。
[0053] 更に、NPUアーキテクチャ200の一部として示す各コア2024にCESが適用されるが、かかるILPの探索スキームは、CPU及びDSP等の任意の汎用多重命令発行プロセッサに適用することができる。
[0054] 図3は、本開示の実施形態による連続実行セット(CES)アーキテクチャの例示的な連続実行セット(CES)命令300を示す。コンパイラは、変換に基づいてCES命令300を生成することができる。上記で示したように、CES命令300は、グローバルメモリ216内、その後、1つ又は複数のコアの1つ又は複数のローカルメモリ内にロードすることができる。その後、CES命令300は、取り出して(命令デコーダによって)復号することができる。
[0055] 図3に示すように、CES命令300は、指示ビット(例えば、ビット31)及び命令に対応する複数の演算コードビット(例えば、ビット24〜31)を含むことができる。図3は、指示ビットがビット31に位置すると示しているが、指示ビットは、CES命令300内のいずれの場所にも位置し得ることが理解されるであろう。例えば、指示ビットは、演算コードビットの前のビット23に位置することができる。このCESアーキテクチャでは、CES命令300は、演算コードビットに関連する1つの命令を含むことができる。
[0056] 指示ビットが命令300内で設定される場合、その指示ビットは、その命令300が並列処理可能な1つ又は複数の命令の最後の組であることを示す。即ち、この命令の前の対応する全ての命令及びこの命令は、並列に処理することができる一方、その後の1つ又は複数の命令は、この命令と並列に実行されない。指示ビットを「1」に設定することは、この命令が連続した命令の集合の最後の命令であることを意味し、この命令が最後の命令ではない場合に「0」に設定されるが、これらの指示ビットの値は、逆にされ得ることが理解されるであろう。指示ビットの幅は、1ビットであり得ることが理解されるであろう。CESアーキテクチャの指示ビットを有することにより、ホストユニットのコンパイラは、CES命令300内にコード化されるNPU命令を生成するとき、コードの命令レベルの並列処理(ILP)を探索することができる。例えば、上記で論じたVLIWと異なり、命令300は、同じ長さを有する命令語を生成するためにパディングビットを使用しない。従って、VLIWと異なり、CESアーキテクチャは、貴重なメモリ空間及びバス帯域幅をパディングビットで無駄にしない。
[0057] CES命令300は、VLES命令語内に含まれる各命令のヘッド情報を除外することによっても、VLES命令語とは異なる。従って、CES命令300は、指示ビットを使用することによって従来のアーキテクチャ(例えば、VLIW及びVLES)の欠点を直すことができる。命令語300内に含まれる指示ビットについてのより詳細な説明を以下で行う。
[0058] 一部の実施形態では、命令を生成するために、コンパイラは、データ依存性を判定し、一連の命令間で依存性を制御することができる。命令のデータ依存性を判定することは、命令の実行ロジックに関連し得る。例えば、上記の例1を再び参照すると、命令1及び命令2は、互いに独立している一方、命令3は、命令1及び命令2の実行結果に依存する。従って、命令1及び命令2は、並列命令であり得、利用可能なハードウェア資源に従って並列に実行することができる。
[0059] この判定に基づき、コンパイラは、CES命令300の指示ビットを設定することができる。一部の実施形態では、「1」の指示ビットは、CES命令300の最後の命令が並列命令の組の最後のものであることを示すことができる。「0」の命令ビットは、その命令が並列命令の組の最後の命令ではないことを示すことができる。この最後の命令を含む並列命令の組は、連続実行セット(CES)と呼ぶことができる。
[0060] 一部の実施形態では、先に論じたように、第1の命令の指示ビットが「0」である場合、その命令は、並列命令の組の最後の命令ではない。
[0061] 指示ビットの構成は、上記の実施形態と異なり得ることが理解されるであろう。例えば、図3の指示ビットは、命令の末尾に示されているが、指示ビットは、命令の符号化設計に応じて命令の任意のビットであり得る。更に、図3の命令は、32ビットの命令であるが、命令の長さは、異なることができ、図3の実施形態によって限定されなくてもよいことが理解されるであろう。
[0062] 一部の実施形態では、指示ビットの他に、コンパイラは、並列命令の連続実行セットの少なくとも一部を少なくとも1つの命令語にパックすることができる。更に、並列命令を1つの命令語にパックすることは、利用可能なハードウェア資源が全ての命令の並列処理を支援できないかどうかを考慮に入れることができる。従って、命令語内の並列命令の数は、所定値を満たすことができる。例えば、その値は、実行ユニットの数であり得、CES命令語内の並列命令の数は、利用可能な実行ユニットの数以下である。
[0063] 上記で論じたように、CESアーキテクチャでは、指示ビットは、並列命令の連続実行セットの最後の命令であるかどうかを示すことができる。例えば、第1の命令の第1の指示ビットは、第1の命令が並列命令の連続実行セットの最後の並列命令ではないことを示す「0」であり得る。従って、第1の指示ビットの値(例えば、「0」)が命令デコーダによって受信されるとき、命令デコーダは、第1の命令が連続実行セット内のその後の命令を含むと判定することができる。第2の命令語の第2の指示ビットは、第2の命令が並列命令の連続実行セットの最後の命令であることを示す「1」であり得る。従って、第2の指示ビットの値(例えば、「1」)が命令デコーダによって受信されるとき、命令デコーダは、第2の命令が連続実行セットの最後の命令であると判定することができる。
[0064] 上記で論じたように、例えば、VLESは、1クロックサイクル内で2つ以上の命令を取り出すことができる。しかし、CESアーキテクチャでは、コアは、1クロックサイクル当たり1つの命令を(例えば、コアのフェッチユニットによって)取り出すことができる。コアは、命令語の指示ビットが「1」であるか又は「0」であるかを判定することができ、指示ビットが「0」である場合、次のクロックサイクル内で連続した命令の集合の次の命令を取り出し続ける。換言すれば、並列命令を取り出すプロセスは、「1」の指示ビットに達するまで続く。従って、「1」の指示ビットを有する命令は、連続実行セットの最後の命令である。即ち、最後の命令と、最後の命令の前の全ての命令とが並列命令の組を形成し得る。従って、コンパイラは、命令ビットに基づいて並列命令のデータ依存性を判定することができ、そのため、並列命令は、判定されたデータ依存性に従ってスケジューリングすることができる。判定されるデータ依存性は、サイクルごとであり得ることが理解されるであろう。
[0065] CESアーキテクチャは、CES内の並列処理を指示するために命令への1つの追加ビットのみを使用するため、CESアーキテクチャを実行する装置は、従来のアーキテクチャよりも少ないハードウェア資源を消費することができる。
[0066] 図4は、本開示の実施形態による例示的なCESアーキテクチャのシーケンス図400を示す。
[0067] 図4に示すように、命令402及び命令403は、並列命令であり、従って並列に実行することができる。上記で論じたように、ハードウェア(例えば、NPUアーキテクチャ200)は、1サイクル内で1つの命令のみを取り出すことができる。従って、最初のサイクル内で実行するために命令403を取り出すとき、命令403と並列な命令402を最初のサイクルの1サイクル後に取り出すことができる。従って、命令402が完了するのに20クロックサイクルかかる一方、命令403が25クロックサイクルかかる場合、これらの2つの命令の実行は、重複し得る(即ち並列に実行される。
[0068] 粗粒度の計算では、命令の実行に複数のサイクル(例えば、2048サイクル)かかる場合がある。命令402は、その並列命令403の1サイクル後に取り出され実行されるが、命令を取り出すためのコスト(この例では1サイクル)は、最小限である。従って、指示ビットは、並列命令を区別することができ、そのため、ハードウェアは、それらの並列命令を同時に実行することができる。従って、CESアーキテクチャは、1ビットのコストのみを払い、VLIW/VLESの欠点を克服する。
[0069] 図5は、本開示の実施形態による、命令を生成するための方法500のフローチャートを示す。方法500は、例えば、ホストCPUのコンパイラによって実行することができ、ステップ501、503及び505を含むことができる。
[0070] ステップ501では、コンパイラが、命令を生成するためのコンピュータコードを受信することができる。
[0071] ステップ503では、そのコンピュータコードを使用して、コンパイラは、プログラムの演算ごとのデータ依存性及び何れの演算を並列に実行できるかを判定することができる。命令のデータ依存性の判定は、命令の実行ロジックに関連し得る。命令は、ロール又は非ロールであり得る。更に、コンパイラは、命令をスケジューリングするとき、データ依存性を判定するためにCESアーキテクチャ内の命令ごとの1サイクル遅延を考慮に入れることができる。
[0072] ステップ505では、コンパイラは、データ依存性に基づいて並列命令の連続実行セットを決定することができる。並列命令の判定されたデータ依存性及びハードウェア資源の可用性に基づき、コンパイラは、並列命令を含めるための連続実行セットを決定することができる。
[0073] この決定に基づき、ステップ507では、コンパイラは、CES命令を生成することができ、各命令は、演算命令及び指示ビットを有することができる。上記で述べたように、指示ビット(最終並列命令ビットとも呼ぶ)は、その命令が並列命令の連続実行セットの最後の命令であるかどうかを示すことができる。上記で論じたように、例えば、「1」の指示ビットは、その命令が並列に実行される命令の集合の最後の命令であることを示し得る。指示ビットの幅は、1ビットであることが理解されるであろう。一部の実施形態では、並列に処理される命令の集合を1語にパッケージ化することができる。かかる実施形態では、各命令が指示ビットを有し得る。
[0074] CES命令を生成した後、ステップ509では、CES命令を後に処理するために記憶することができる。命令は、ホストメモリ(例えば、ホストメモリ204)内又はNPUのグローバルメモリ(例えば、グローバルメモリ216)内に記憶することができる。命令がホストメモリ内に記憶される場合、NPUのDMAユニット(例えば、DMAユニット140)は、ホストメモリからグローバルメモリ内に命令及びデータをロードすることができる。次いで、対応するタスクが割り当てられた各コアに、ロードされた命令を分配することができ、1つ又は複数のコアがそれらの命令を処理することができる。
[0075] 図6Aは、本開示の実施形態による、命令を実行するための方法600のフローチャートを示す。方法600は、例えば、アクセラレータ(例えば、NPUアーキテクチャ200)のコア(例えば、コア2024)によって実行され得る。コアによって受信される最初の幾つかの命令は、グローバルメモリ(例えば、グローバルメモリ216)からコアの命令バッファ内にデータをロード/記憶するように、コアに命令できることが理解されるであろう。
[0076] ステップ601では、コアは、命令バッファから連続実行セット(CES)の命令を(フェッチユニットによって)取り出すことができる。CESの命令は、CES命令と呼ぶこともできる。命令は、サイクルごとに取り出すことができる。例えば、取り出されるCES命令は、演算及びオペランドを含むことができる。コアがCES命令を取り出すことができる前に、CES命令は、ホストメモリ204からプルされ、各コアの命令バッファ内にプッシュされていることが理解されるであろう。コンパイラによってILPが探索されているため、実行するためのCES命令を形成するために、並列命令が集められていることが理解されるであろう。CES命令の最後の命令を示すために、指示ビットもCES命令内で設定される。
[0077] 例えば、例示的な命令バッファを図6Bに示し、図6Bでは、プログラムの命令が実行されるために待ち行列に入れられている。この例では、命令i1がCES命令の集合CESの一部であり、命令i2及びi3がCES命令の集合CESの一部であり(且つ並列に実行することができ)、命令i4及びi5がCES命令の集合CESの一部であり(且つ並列に実行することができ)、その後も同様に続く。命令i1、i3及びi5がそれぞれその対応するCES命令の集合の最後の命令であることを考慮し、これらの命令のそれぞれは、対応する指示ビットを「1」に設定される。単独の命令がCES命令の集合の一部である状況では(例えば、CES命令の集合CESの命令i1)、その命令は、並列に実行されず、演算の処理は、図4の1命令発行の実行102と同様になる。
[0078] ステップ603では、コアは、(命令デコーダによって)CES命令を復号することができる。命令デコーダは、何れの実行ユニット(例えば、ALU226、LD/STユニット228又はSFユニット230)がCES命令を実行するかを示すことができる。
[0079] ステップ605では、コアは、復号されたCES命令を、実行するために実行ユニットに発行することができる。例えば、ALU226にMAD命令を発行することができ、LD/STユニット228にLOAD命令を発行することができ、SFユニット230に余弦関数を発行することができる。
[0080] ステップ607では、コアは、発行された命令が、発行されたCES命令の最後の命令であるかどうかを判定することができる。上記で論じたように、命令の集合の最後の命令を識別するために指示ビットが設定される。従って、指示ビット(最終命令ビット)が「1」に設定される場合、発行された命令は、CES命令の組の最後の命令である。従って、コアは、CES命令の指示ビットに基づいて最後の命令を識別することができる。
[0081] CES命令の最後の命令が依然として発行されていないと判定することに応答して、コアは、ステップ601に戻ってその後の命令を取り出すことができる。例えば、一例として図6Bを参照すると、命令バッファのプログラムカウンタが命令i2(この命令が組の最後の命令ではないことを示す「0」の対応する命令ビットを有する)を指している場合、命令i2及び命令i3を並列に実行することができるように命令の集合の次の命令(即ち命令i3)を取り出すことができる。
[0082] 再び図6Aを参照すると、他方でCES命令の最後の命令が発行されていると判定することに応答して、コアは、ステップ609に進むことができる。例えば、一例として図6Bを参照すると、命令バッファのプログラムカウンタが命令i3を指している場合、この命令は、「1」の対応する命令ビットを有するため、この命令は、組の最後の命令である。
[0083] ステップ609では、コアは、発行されたCES命令の実行が完了するまで待つことができる。命令の実行には複数のサイクル(例えば、2048クロックサイクル)かかる場合があることが理解されるであろう。各命令のクロックサイクル消費は、異なり得る。例えば、CES命令の中で、20サイクルのクロックサイクル消費を有する第1の命令は、25サイクルのクロックサイクル消費を有する第2の命令よりも1サイクル前に実行のために発行することができ、従って、第1の命令は、第2の命令よりも遅く実行を完了し得る。従って、CES命令の異なるクロックサイクル消費により、コアは、発行されたCES命令の実行が完了するまで待たなければならないであろう。
[0084] ステップ611では、コアは、復号された命令がプログラムの最後の命令であるかどうかを判定することができる。コアは、命令が終わりに達したかどうかについて命令バッファ(例えば、図6Bの命令バッファ)を調べることによって、この判定を下すことができる。終わりに達していない場合、コアは、ステップ601に戻ってその後の命令を取り出すことができる。他方では、コアが終わりに達している場合、この方法は、終了に進むことができる。
[0085] 命令の実行後、命令の実行結果をローカルメモリ内にロード/記憶し、次いでグローバルメモリ又はホストメモリに書き戻すことができる。
[0086] 本明細書に記載した様々な実施形態の例は、一態様ではネットワーク化された環境内のコンピュータによって実行されるプログラムコード等のコンピュータ実行可能命令を含む、コンピュータ可読媒体において実装されるコンピュータプログラム製品によって実施され得る方法ステップ又はプロセスに全般的に関連して説明された。コンピュータ可読媒体は、これのみに限定されないが、読取専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)等を含む取り外し可能記憶装置及び固定型記憶装置を含み得る。概して、プログラムモジュールは、特定のタスクを実行するか又は特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み得る。コンピュータ実行可能命令、関連するデータ構造及びプログラムモジュールは、本明細書で開示した方法のステップを実行するためのプログラムコードの例を表す。かかる個々の一連の実行可能命令又は関連するデータ構造は、かかるステップ又はプロセスで説明した機能を実装するための対応する行為の例を表す。
[0087] 上記の明細書では、実装形態ごとに異なり得る多くの具体的詳細に関して実施形態を説明してきた。記載した実施形態の特定の適応形態及び修正形態がなされ得る。本明細書を検討し、本明細書で開示した本発明を実践することにより、他の実施形態が当業者に明らかになり得る。本明細書及び例は、専ら例示として見なされることを意図し、本発明の真の範囲及び趣旨は、添付の特許請求の範囲によって示される。図示のステップの順序は、例示目的に過ぎず、特定のステップの順序に限定されることを目的としないことも意図する。そのため、それらのステップは、同じ方法を実装しながら異なる順序で実行できることを当業者であれば理解することができる。
[0088] 図面及び本明細書で例示的実施形態を開示してきた。但し、それらの実施形態に対する多くの改変形態及び修正形態がなされ得る。従って、特定の用語を使用したが、それらの用語は、限定目的ではなく、専ら全般的且つ説明的な意味で使用されており、実施形態の範囲は、添付の特許請求の範囲によって定められる。

Claims (17)

  1. 命令を実行するように構成されるコアを有する処理ユニットと、
    ホスト処理ユニットであって、
    前記コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、前記命令の集合は、演算命令及び指示ビットをそれぞれ含み、前記指示ビットは、前記命令の集合の最後の命令を識別するように設定される、コンパイルすることと、
    前記コアが実行するために前記命令の集合を前記処理ユニットに提供することと
    を行うように構成されるホスト処理ユニットと
    を含むシステム。
  2. 前記命令の集合は、前記並列命令を処理することができる実行ユニットの数以下の数の並列命令を含み、前記実行ユニットは、前記コア内にある、請求項1に記載のシステム。
  3. 前記指示ビットは、1ビットの幅を有する、請求項1又は2に記載のシステム。
  4. 前記ホスト処理ユニットは、
    前記複数の命令のデータ依存性を判定することと、
    前記判定されたデータ依存性に基づき、並列に実行される前記命令の集合を決定することと、
    前記命令の集合の前記最後の命令のために指示ビットを設定することと
    を行うように更に構成される、請求項1〜3の何れか一項に記載のシステム。
  5. 前記ホスト処理ユニットは、前記命令の集合を少なくとも1つの命令語にパッケージ化するように更に構成される、請求項4に記載のシステム。
  6. 前記処理ユニットは、前記命令の集合を実行するための複数のコアを含む、請求項1に記載のシステム。
  7. 前記コアは、前記コアの命令バッファから、前記命令の集合からの命令を取り出し、且つ前記取り出された命令が前記命令の集合の前記最後の命令であるかどうかを前記指示ビットに従って判定するように構成される、請求項1〜6の何れか一項に記載のシステム。
  8. ホスト処理ユニットによって実行される方法であって、
    前記ホスト処理ユニットにより、処理ユニットのコア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、前記命令の集合は、演算命令及び指示ビットをそれぞれ含み、前記指示ビットは、前記命令の集合の最後の命令を識別するように設定される、コンパイルすることと、
    前記コアが実行するために前記命令の集合を前記処理ユニットに提供することと
    を含む方法。
  9. 前記命令の集合は、前記並列命令を処理することができる実行ユニットの数以下の数の並列命令を含み、前記実行ユニットは、前記処理ユニットの前記コア内にある、請求項8に記載の方法。
  10. 前記指示ビットは、1ビットの幅を有する、請求項8又は9に記載の方法。
  11. 前記複数の命令のデータ依存性を判定することと、
    前記判定されたデータ依存性に基づき、並列に実行される前記命令の集合を決定することと、
    前記命令の集合の前記最後の命令のために指示ビットを設定することと
    を更に含む、請求項8〜10の何れか一項に記載の方法。
  12. 前記命令の集合を少なくとも1つの命令語にパッケージ化することを更に含む、請求項11に記載の方法。
  13. 処理ユニットのコアによって実行される方法であって、
    命令バッファから命令の集合の命令を取り出すことと、
    前記命令を復号することと、
    前記復号された命令を実行するために実行ユニットに発行することと、
    前記復号された命令に関連する指示ビットに基づいて、前記復号された命令が前記命令の集合の最後の命令であるかどうかを判定することと、
    前記復号された命令が前記命令の集合の前記最後の命令ではないという前記判定に応答して、前記命令の集合のその後の命令を取り出すことと
    を含む方法。
  14. 前記実行ユニットは、アルゴリズム論理ユニット、ロード/記憶ユニット、及び特殊関数ユニットの少なくとも1つを含む、請求項13に記載の方法。
  15. 前記その後の命令を復号することと、
    前記復号されたその後の命令を実行するために実行ユニットに発行することと、
    前記復号されたその後の命令に関連する指示ビットに基づいて、前記復号されたその後の命令が前記命令の集合の最後の命令であるかどうかを判定することと、
    前記復号されたその後の命令が前記命令の集合の前記最後の命令であるという前記判定に応答して、別の命令を実行する前に、前記発行されたその後の命令が実行を終えるのを待つことと
    を更に含む、請求項13又は14に記載の方法。
  16. 前記復号されたその後の命令を、前記復号された命令と並列に実行することを更に含む、請求項15に記載の方法。
  17. 前記命令の集合に対応する実行結果を記憶することを更に含む、請求項16に記載の方法。
JP2020532755A 2017-12-22 2018-12-21 命令を実行するためのシステム及び方法 Pending JP2021507374A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762610111P 2017-12-22 2017-12-22
US62/610,111 2017-12-22
PCT/US2018/067377 WO2019126797A2 (en) 2017-12-22 2018-12-21 System and method for executing instructions

Publications (1)

Publication Number Publication Date
JP2021507374A true JP2021507374A (ja) 2021-02-22

Family

ID=66950348

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020532755A Pending JP2021507374A (ja) 2017-12-22 2018-12-21 命令を実行するためのシステム及び方法

Country Status (5)

Country Link
US (1) US11016776B2 (ja)
EP (1) EP3729286B1 (ja)
JP (1) JP2021507374A (ja)
CN (1) CN111656337B (ja)
WO (1) WO2019126797A2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111656337B (zh) 2017-12-22 2023-06-16 阿里巴巴集团控股有限公司 用于执行指令的系统和方法
US11989583B2 (en) * 2021-03-31 2024-05-21 Arm Limited Circuitry and method

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6154828A (en) 1993-06-03 2000-11-28 Compaq Computer Corporation Method and apparatus for employing a cycle bit parallel executing instructions
EP0652510B1 (en) * 1993-11-05 2000-01-26 Intergraph Corporation Software scheduled superscalar computer architecture
US6490673B1 (en) * 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
US6523110B1 (en) 1999-07-23 2003-02-18 International Business Machines Corporation Decoupled fetch-execute engine with static branch prediction support
US20020166042A1 (en) * 2001-05-01 2002-11-07 Yoav Almog Speculative branch target allocation
US7117389B2 (en) * 2003-09-18 2006-10-03 International Business Machines Corporation Multiple processor core device having shareable functional units for self-repairing capability
US20070083736A1 (en) * 2005-10-06 2007-04-12 Aravindh Baktha Instruction packer for digital signal processor
CH705647B1 (de) * 2006-10-13 2013-04-30 Ferag Ag RFID-Druckproduktidentifikation.
US9189233B2 (en) * 2008-11-24 2015-11-17 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
TWI414994B (zh) * 2009-09-24 2013-11-11 Ind Tech Res Inst 可重組態處理裝置及其系統
US9104403B2 (en) * 2010-08-18 2015-08-11 Freescale Semiconductor, Inc. Data processing system having selective redundancy and method therefor
CN101957743B (zh) * 2010-10-12 2012-08-29 中国电子科技集团公司第三十八研究所 并行数字信号处理器
US9842005B2 (en) * 2011-03-25 2017-12-12 Intel Corporation Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US10768930B2 (en) * 2014-02-12 2020-09-08 MIPS Tech, LLC Processor supporting arithmetic instructions with branch on overflow and methods
CN111656337B (zh) 2017-12-22 2023-06-16 阿里巴巴集团控股有限公司 用于执行指令的系统和方法

Also Published As

Publication number Publication date
US20190196840A1 (en) 2019-06-27
US11016776B2 (en) 2021-05-25
EP3729286B1 (en) 2023-07-12
WO2019126797A3 (en) 2020-03-19
CN111656337A (zh) 2020-09-11
EP3729286A2 (en) 2020-10-28
EP3729286A4 (en) 2021-02-24
WO2019126797A2 (en) 2019-06-27
CN111656337B (zh) 2023-06-16

Similar Documents

Publication Publication Date Title
JP6159825B2 (ja) ハードウェアポインタを使用したsimdコア内での分岐ブランチに対するソリューション
EP2680132B1 (en) Staged loop instructions
EP3350686B1 (en) Debug support for block-based processor
CN106104481B (zh) 用于执行确定性和机会性多线程的系统和方法
EP2710467B1 (en) Automatic kernel migration for heterogeneous cores
US5854934A (en) Optimizing compiler having data cache prefetch spreading
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
KR101594502B1 (ko) 바이패스 멀티플 인스턴스화 테이블을 갖는 이동 제거 시스템 및 방법
JP4230504B2 (ja) データプロセッサ
JP6236093B2 (ja) 並列パイプラインにおいてブランチを分岐するためのハードウェアおよびソフトウェアソリューション
WO2016210020A1 (en) Explicit instruction scheduler state information for a processor
EP3384377B1 (en) Data processing
JP7410186B2 (ja) Gpuにおける明示的な個別マスクレジスタのマスク操作方法
EP3729286B1 (en) System and method for executing instructions
JP2874351B2 (ja) 並列パイプライン命令処理装置
JP6882320B2 (ja) ベクトル命令の処理
JP2861234B2 (ja) 命令処理装置
JPH06139075A (ja) プログラムの命令配列方式およびコンパイラ
JP3743155B2 (ja) パイプライン制御型計算機
CN114174985A (zh) 在基于块的指令集架构中高扇出通信的高效编码
US20130061028A1 (en) Method and system for multi-mode instruction-level streaming