(57)【要約】  本開示は、命令を実行するためのシステム及び方法を提供する。システムは、命令を実行するように構成されるコアを有する処理ユニットと、ホストユニットであって、コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、命令の集合は、演算命令及び指示ビットをそれぞれ含み、指示ビットは、命令の集合の最後の命令を識別するように設定される、コンパイルすることと、命令の集合をコアに提供することとを行うように構成されるホストユニットとを含むことができる。
2021507374.tif 000002
【特許請求の範囲】
【請求項１】
命令を実行するように構成されるコアを有する処理ユニットと、
ホスト処理ユニットであって、
前記コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、前記命令の集合は、演算命令及び指示ビットをそれぞれ含み、前記指示ビットは、前記命令の集合の最後の命令を識別するように設定される、コンパイルすることと、
前記コアが実行するために前記命令の集合を前記処理ユニットに提供することと
を行うように構成されるホスト処理ユニットと
を含むシステム。
【請求項２】
前記命令の集合は、前記並列命令を処理することができる実行ユニットの数以下の数の並列命令を含み、前記実行ユニットは、前記コア内にある、請求項１に記載のシステム。
【請求項３】
前記指示ビットは、１ビットの幅を有する、請求項１又は２に記載のシステム。
【請求項４】
前記ホスト処理ユニットは、
前記複数の命令のデータ依存性を判定することと、
前記判定されたデータ依存性に基づき、並列に実行される前記命令の集合を決定することと、
前記命令の集合の前記最後の命令のために指示ビットを設定することと
を行うように更に構成される、請求項１〜３の何れか一項に記載のシステム。
【請求項５】
前記ホスト処理ユニットは、前記命令の集合を少なくとも１つの命令語にパッケージ化するように更に構成される、請求項４に記載のシステム。
【請求項６】
前記処理ユニットは、前記命令の集合を実行するための複数のコアを含む、請求項１に記載のシステム。
【請求項７】
前記コアは、前記コアの命令バッファから、前記命令の集合からの命令を取り出し、且つ前記取り出された命令が前記命令の集合の前記最後の命令であるかどうかを前記指示ビットに従って判定するように構成される、請求項１〜６の何れか一項に記載のシステム。
【請求項８】
ホスト処理ユニットによって実行される方法であって、
前記ホスト処理ユニットにより、処理ユニットのコア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、前記命令の集合は、演算命令及び指示ビットをそれぞれ含み、前記指示ビットは、前記命令の集合の最後の命令を識別するように設定される、コンパイルすることと、
前記コアが実行するために前記命令の集合を前記処理ユニットに提供することと
を含む方法。
【請求項９】
前記命令の集合は、前記並列命令を処理することができる実行ユニットの数以下の数の並列命令を含み、前記実行ユニットは、前記処理ユニットの前記コア内にある、請求項８に記載の方法。
【請求項１０】
前記指示ビットは、１ビットの幅を有する、請求項８又は９に記載の方法。
【請求項１１】
前記複数の命令のデータ依存性を判定することと、
前記判定されたデータ依存性に基づき、並列に実行される前記命令の集合を決定することと、
前記命令の集合の前記最後の命令のために指示ビットを設定することと
を更に含む、請求項８〜１０の何れか一項に記載の方法。
【請求項１２】
前記命令の集合を少なくとも１つの命令語にパッケージ化することを更に含む、請求項１１に記載の方法。
【請求項１３】
処理ユニットのコアによって実行される方法であって、
命令バッファから命令の集合の命令を取り出すことと、
前記命令を復号することと、
前記復号された命令を実行するために実行ユニットに発行することと、
前記復号された命令に関連する指示ビットに基づいて、前記復号された命令が前記命令の集合の最後の命令であるかどうかを判定することと、
前記復号された命令が前記命令の集合の前記最後の命令ではないという前記判定に応答して、前記命令の集合のその後の命令を取り出すことと
を含む方法。
【請求項１４】
前記実行ユニットは、アルゴリズム論理ユニット、ロード／記憶ユニット、及び特殊関数ユニットの少なくとも１つを含む、請求項１３に記載の方法。
【請求項１５】
前記その後の命令を復号することと、
前記復号されたその後の命令を実行するために実行ユニットに発行することと、
前記復号されたその後の命令に関連する指示ビットに基づいて、前記復号されたその後の命令が前記命令の集合の最後の命令であるかどうかを判定することと、
前記復号されたその後の命令が前記命令の集合の前記最後の命令であるという前記判定に応答して、別の命令を実行する前に、前記発行されたその後の命令が実行を終えるのを待つことと
を更に含む、請求項１３又は１４に記載の方法。
【請求項１６】
前記復号されたその後の命令を、前記復号された命令と並列に実行することを更に含む、請求項１５に記載の方法。
【請求項１７】
前記命令の集合に対応する実行結果を記憶することを更に含む、請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
[0001]  本開示は、参照によりその全体が本明細書に援用される、２０１７年１２月２２日に出願された米国特許仮出願第６２／６１０，１１１号に対する優先権の利益を主張する。
【背景技術】
【０００２】
背景
[0002]  ニューラルネットワーク処理ユニット（ＮＰＵ）は、深層学習応用の能力がある１つの潜在的なプロセッサになっている。プログラム可能プロセッサとして、ＮＰＵは、定義された命令を使用して、そのハードウェアが実行するように設計される機能を表す。ＮＰＵの計算を可能にするかかる命令一式を命令組と呼ぶ。
【０００３】
[0003]  実際には、複数の独立した命令をハードウェア内で同時に実行することができる。そのような並列処理のレベルを命令レベルの並列性（ＩＬＰ）と呼ぶ。ＩＬＰを探索するためのよく知られている２つのアーキテクチャ、即ちスーパスカラ及び超長命令語（ＶＬＩＷ）がある。スーパスカラマシンは、従来の線形命令ストリームから各クロックサイクルにおいて複数の命令を動的に発行することができる。スーパスカラは、並列に実行されるデータ非依存命令を動的に解析及びスケジューリングするためにハードウェアを利用する。
【０００４】
[0004]  しかし、これらの従来のＩＬＰアーキテクチャは、何れも欠点を有する。例えば、スーパスカラアーキテクチャは、依存性検査ロジックの複雑性及び時間コストの問題を有し、この問題は、各命令が５１２個の変数に作用し得、完了するのに最大２０４８サイクル必要とし得るＮＰＵを扱う場合に一層重大になる。更に、ＶＬＩＷアーキテクチャ（及び可変長実行セット（ＶＬＥＳ）等のその改変形態）は、メモリ空間及び計算資源を無駄にし得る。
【発明の概要】
【課題を解決するための手段】
【０００５】
開示の概要
[0005]  本開示の実施形態は、命令を実行するためのシステムを提供する。システムは、命令を実行するように構成されるコアを有する処理ユニットと、ホストユニットであって、コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、命令の集合は、演算命令及び指示ビットをそれぞれ含み、指示ビットは、命令の集合の最後の命令を識別するように設定される、コンパイルすることと、コアが実行するために命令の集合を処理ユニットに提供することとを行うように構成されるホストユニットとを含むことができる。
【０００６】
[0006]  本開示の実施形態は、ホスト処理ユニットによって実行される方法を更に提供する。この方法は、ホスト処理ユニットにより、コア上で並列に実行されるように決定される命令の集合を含む複数の命令にコンピュータコードをコンパイルすることであって、命令の集合は、演算命令及び指示ビットをそれぞれ含み、指示ビットは、命令の集合の最後の命令を識別するように設定される、コンパイルすることと、命令の集合を実行するためにコアに提供することとを含むことができる。
【０００７】
[0007]  本開示の実施形態は、処理ユニットのコアによって実行される方法も提供する。この方法は、命令バッファから命令の集合の命令を取り出すことと、その命令を復号することと、復号された命令を実行するために実行ユニットに発行することと、復号された命令に関連する指示ビットに基づいて、復号された命令が命令の集合の最後の命令であるかどうかを判定することと、復号された命令が命令の集合の最後の命令ではないという判定に応答して、命令の集合のその後の命令を取り出すこととを含むことができる。
【０００８】
図面の簡単な説明
[0008]  本開示の実施形態及び様々な態様を以下の詳細な説明及び添付図面に示す。図示の様々な特徴は、縮尺通り描かれていない。
【図面の簡単な説明】
【０００９】
【図１】[0009]従来のアーキテクチャの例示的なシーケンス図を示す。
【図２Ａ】[0010]本開示の実施形態による例示的なオンチップアーキテクチャを示す。
【図２Ｂ】[0011]本開示の実施形態による図２Ａの例示的なコアを示す。
【図３】[0012]本開示の実施形態による連続実行セット（ＣＥＳ）アーキテクチャの例示的な命令を示す。
【図４】[0013]本開示の実施形態による例示的なＣＥＳアーキテクチャのシーケンス図を示す。
【図５】[0014]本開示の実施形態による、命令を生成するための方法のフローチャートを示す。
【図６Ａ】[0015]本開示の実施形態による、命令を実行するための方法のフローチャートを示す。
【図６Ｂ】[0016]本開示の実施形態による、ＣＥＳアーキテクチャに従って編成される命令の集合を記憶する例示的な命令バッファを示す。
【発明を実施するための形態】
【００１０】
詳細な説明
[0017]  以下の説明は、添付図面を参照し、別段の定めがない限り、添付図面では、異なる図中の同じ番号は、同じ又は同様の要素を表す。例示的実施形態についての以下の説明において記載する実装形態は、本発明と合致する全ての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲で列挙される、本発明に関係する態様と合致する機器及び方法の例に過ぎない。
【００１１】
[0018]  本明細書で使用するとき、「含む」、「含んでいる」という用語又はこれらの用語の他の任意の改変形態は、非排他的包含を範囲に含むことを意図し、そのため、要素の一覧を含むプロセス、方法、組成、物又は機器は、それらの要素のみを含むのではなく、明確に列挙されていない他の要素又はかかるプロセス、方法、組成、物若しくは機器に固有の他の要素を含み得る。「例示的」という用語は、「理想的」ではなく、「例」という意味で使用する。
【００１２】
[0019]  ＶＬＩＷ及びＶＬＥＳによって探索される並列処理により、データ依存性を有さない命令を並列に実行することができ、そのため、実行時間を短縮することができる。例えば、以下の例示的なプログラムは、命令１〜３を下記の通り含む。
命令１：e=a+b
命令２：f=c+d
命令３：m=e×f
例１
【００１３】
[0020]  上記の例示的なプログラムから分かるように、命令１及び命令２は、互いに独立しており、同時に処理することができる一方、命令３は、命令１及び命令２の結果に依存する。ＩＬＰ機能を有するプロセッサでは、命令１及び命令２は、第１の単位時間において同時に処理することができ、次いで命令３を第２の単位時間において処理することができる。換言すれば、これらの３つの命令は、合計２単位時間内で完了することができる。逆に、命令の何れも並列に処理することができない場合、処理時間は、３単位時間になり得る。命令レベルの並列処理（ＩＬＰ）は、並列処理時間及び非並列処理時間に従って定めることができる。
【００１４】
[0021]  命令を１つずつ処理する場合と並列に処理する場合との差を示すために、図１は、例示的なシーケンスを示す。図１は、命令が１つずつ処理される１命令発行アーキテクチャの命令割り当てに対応するシーケンス図１０２と、命令が並列に処理される２命令発行アーキテクチャの命令割り当てに対応するシーケンス図１０４とを含む。
【００１５】
[0022]  スーパスカラ及びＶＬＩＷ等の異なるアーキテクチャのＩＬＰは、異なり得る。スーパスカラは、並列に実行されるデータ非依存命令を動的に解析及びスケジューリングするためにハードウェアを利用する。ＶＬＩＷは、プログラムの命令間のデータ依存性及びハードウェア資源の可用性を静的に解析するためにコンパイラを利用し、全ての独立した命令を、ハードウェア内で並列に実行される超長命令語にパックする。ＶＬＩＷは、概して、コンパイラを使用してループをアンロールし、ソフトウェアパイプラインを使用して更に多くの独立した命令を見つけることができる。例えば、以下の例２は、１００個の数の二乗和を計算することができる。
【数１】
2021507374.tif 000003
例２
【００１６】
[0023]  上記の例２では、「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の反復は、独立しているため、以下の例３に示すように、MACの反復とLOADの反復との間の並列処理を探索することができる。
【数２】
2021507374.tif 000004
例３
【００１８】
[0025]  ループ本体（即ち括弧によって囲まれている命令）は、第１の反復及び第２の反復を含み得ることが例３から見て取れる。第１の反復は、「LOAD r0 Mem[base+r1]」及び「MAC r2 r2 r0 r0」の命令を含むことができ、第２の命令は、「LOAD r0 Mem[base+r1+1]」及び「MAC r2 r2 r0 r0」の命令を含むことができる。
【００１９】
[0026]  上記で論じたように、超長命令語（ＶＬＩＷ）及び可変長実行セット（ＶＬＥＳ）の２つのアーキテクチャは、命令の並列処理を探索するために使用することができる。例３に関して詳細を以下で更に紹介する。
【００２０】
[0027]  ＶＬＩＷは、ＩＬＰを探索するためのアーキテクチャである。ＶＬＩＷの命令は、同じ長さを有することができる。同じ長さを有する命令は、命令語と呼ぶこともできる。例えば、ループ本体に生成された命令語は、以下のようにＷ１、Ｗ２及びＷ３の命令語を含むことができる。
Ｗ１：LOAD r0 Mem[base+r1]; | NOP;
Ｗ２：MAD r2 r2 r0 r0; | LOAD r0 Mem[base+r1+1];
Ｗ３：NOP; | MAD r2 r2 r0 r0;
【００２１】
[0028]  「NOP」は、「演算なし」の省略形であり、命令語が同じ長さを有するように数ビットのパディングを含み得る。命令語Ｗ１、Ｗ２及びＷ３のそれぞれは、２つの命令を含むことができる。例えば、命令語Ｗ１は、第１の命令「LOAD」及び第２の命令「NOP」を並列に含む。２つの命令を処理することができるこのＶＬＩＷアーキテクチャは、２命令発行ＶＬＩＷアーキテクチャ（ＤＩＶＡ）と呼ぶこともできる。例えば、ＤＩＶＡは、一度に２つの命令語を取り出し、取り出した命令を別々の実行ユニットによって並列に実行することができる。ＤＩＶＡは、NOPを無視し、他の効果的な命令を実行ユニットに発行することができる。パディング「NOP」は、演算なしを示すが、パディング「NOP」は、依然としてキャッシュ空間及びバス帯域幅を占有し得る。
【００２２】
[0029]  可変長実行セット（ＶＬＥＳ）は、ＩＬＰを探索するためのアーキテクチャである。上記の例３の同じコードで、ＶＬＥＳは、以下の例４に示すように、例３のループ本体に基づいて４つの命令（即ち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;
例４
【００２３】
[0030]  図１を参照すると、LOAD1及びMAC1は、例４のi1命令及びi2命令にそれぞれ対応する。LOAD2及びMAC2は、例４のi3命令及びi4命令にそれぞれ対応する。１命令発行アーキテクチャのシーケンス図１０２及び２命令発行アーキテクチャのシーケンス図１０４において、実線を有するセクションは、ループ本体の第１の反復を形成することができ、破線を有するセクションは、ループ本体の第２の反復を形成することができる。従って、図１では、第１の反復及び第２の反復のそれぞれは、命令i1、i2、i3及びi4を含むことができる。
【００２４】
[0031]  シーケンス図１０２では、第２の反復は、第１の反復を実行した後にのみ実行することができ、それは、１命令発行アーキテクチャが命令を直列にのみ処理することができるからである。シーケンス図１０４では、命令の並列処理を探索することができるため、依存性のない命令を並列に実行することができる。例えば、MAC1とLOAD2とは、依存性を有さず、シーケンス図１０４に示すように並列に実行することができる。「LOAD1」の命令の実行中、ハードウェア資源が引き続き占有され得るため、「LOAD2」の命令は、「LOAD1」の命令の実行が完了した後にのみ実行できることが理解されるであろう。
【００２５】
[0032]  例４に関して上記で論じたように、ＶＬＥＳは、短い「ヘッド」情報を使用して、１つの長命令語に何個の命令が属するかを示すことができる。ＶＬＩＷと比較して、短い「ヘッド」情報は、幾らかのメモリ空間及びバス帯域幅を節約することができる。しかし、ハードウェアがヘッド情報を構文解析しなければならない可能性があるため、ヘッド情報は、余分なハードウェアコストを生じさせる場合がある。ハードウェア資源の使用の他に、ＶＬＥＳは、以下の理由から一層大きい命令バッファを更に必要とし得る。
【００２６】
[0033]  第１に、ヘッド情報は、命令バッファ内の幾らかの空間を占有し得る。ヘッド情報は、各ＶＬＥＳ命令内の数ビットを占有し得る。例えば、ヘッド情報によってＶＬＥＳ命令符号化空間内の３〜４ビットが占有され得る。
【００２７】
[0034]  第２に、ヘッド情報が追加の空間をとらないと仮定することができるが、ＶＬＥＳは、整列の問題を依然として有し得る。上記の例４を参照すると、コンパイラは、命令i1及びi2を１クロックサイクルにおいてキャッシュユニット内に取り出すことができる。次いで、コンパイラは、head1_#1を読み取り、命令i1を実行するために発行することができる。その後、命令i2が命令バッファ内に残る。ＶＬＥＳが次に２つの命令を取り出す場合、命令バッファ内の命令が正しく整列されない可能性がある。従って、ＶＬＥＳは、より幅広の命令バッファを使用することができる。例えば、キャッシュユニットは、４つの命令の幅を有することができる。ＶＬＥＳが一度に４つの命令を取り出すことができる場合、キャッシュユニットは、８つの命令の幅を有し得ることが理解されるであろう。従って、ＶＬＥＳは、実行のために更に多くのハードウェア資源を必要とし得る。
【００２８】
[0035]  ＶＬＩＷ及びＶＬＥＳのアーキテクチャは、１命令発行の命令と比較したときに計算の性能を加速させることができるが、ＶＬＩＷもＶＬＥＳも、命令の並列処理の探索を支援するために追加のハードウェアを必要とする。これらの従来の解決策は、計算粒度が非常に粗い機械学習等の一部の応用分野で非常に問題となり得る。機械学習は、概して、スカラ変数ではなく、巨大な行列に対して計算を行う。例えば、上記のプログラムの各命令i1、i2、i3及びi4は、５１２個の変数に作用し、完了するのに２０４８サイクルかかり得る。本開示の実施形態は、ハードウェア資源をより効率的に利用する。
【００２９】
[0036]  図２Ａは、本開示の実施形態による例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャ２００を示す。図２Ａに示すように、ＮＰＵアーキテクチャ２００は、チップ通信システム２０２、ホストメモリ２０４、メモリコントローラ２０６、直接メモリアクセス（ＤＭＡ）ユニット２０８、ＪＴＡＧ（Joint Test Action Group）／ＴＡＰ（Test Access End）コントローラ２１０、周辺インタフェース２１２、バス２１４、グローバルメモリ２１６等を含むことができる。チップ通信システム２０２は、伝達されるデータに基づいてアルゴリズム操作を実行できることが理解されるであろう。
【００３０】
[0037]  チップ通信システム２０２は、グローバルマネージャ２０２２及び複数のコア２０２４を含むことができる。グローバルマネージャ２０２２は、１つ又は複数のコア２０２４と連携するための少なくとも１つのタスクマネージャを含むことができる。各タスクマネージャは、ニューラルネットワークのシナプス／ニューロン回路を提供するコア２０２４のアレイに関連することができる。例えば、図２Ａの処理要素の最上層は、ニューラルネットワークへの入力層を表す回路を提供することができる一方、タイルの第２の層は、ニューラルネットワークの隠れ層を表す回路を提供することができる。図２Ａに示すように、グローバルマネージャ２０２２は、２つのコアアレイと連携するために２つのタスクマネージャを含むことができる。
【００３１】
[0038]  コア２０２４は、単一命令多重データ（ＳＩＭＤ）アーキテクチャをそれぞれ含む１つ又は複数の処理要素を含むことができ、単一命令多重データ（ＳＩＭＤ）アーキテクチャは、グローバルマネージャ２０２２から受信される命令に基づいて１つ又は複数の演算（例えば、乗算、加算、乗累算等）を実行するように構成される１つ又は複数の処理ユニットを含む。伝達されるデータパケットに対する演算を実行するために、コア２０２４は、データパケット内の情報を処理するための１つ又は複数の処理要素を含むことができる。各処理要素は、任意の数の処理ユニットを含むことができる。一部の実施形態では、コア２０２４をタイル等と見なすことができる。
【００３２】
[0039]  ホストメモリ２０４は、ホストＣＰＵのメモリ等のオフチップメモリであり得る。例えば、ホストメモリ２０４は、ＤＤＲメモリ（例えば、ＤＤＲ  ＳＤＲＡＭ）等であり得る。ホストメモリ２０４は、高レベルキャッシュとして機能する１つ又は複数のプロセッサに組み込まれるオンチップメモリと比べて遅いアクセス速度で、大量のデータを記憶するように構成され得る。
【００３３】
[0040]  メモリコントローラ２０６は、メインメモリの機能を果たすために、オンチップメモリブロック（例えば、４ブロックの８ＧＢ第２世代高帯域幅メモリ（ＨＢＭ２））を有するグローバルメモリ２１６内の特定のメモリブロックとの間のデータの読み書きを管理することができる。例えば、メモリコントローラ２０６は、チップ通信システム２０２の外部から（例えば、ＤＭＡユニット２０８又は別のＮＰＵに対応するＤＭＡユニットから）到来するデータの読み書き、又はチップ通信システム２０２の内部から（例えば、グローバルマネージャ２０２２のタスクマネージャによって制御される２Ｄメッシュを介してコア２０２４内のローカルメモリから）到来するデータの読み書きを管理することができる。更に、図２Ａではメモリコントローラを１つ示すが、複数のメモリコントローラがＮＰＵアーキテクチャ２００内に設けられ得ることが理解されるであろう。例えば、グローバルメモリ２１６内のメモリブロック（例えば、ＨＢＭ２）ごとに１つのメモリコントローラがあり得る。
【００３４】
[0041]  メモリコントローラ２０６は、メモリアドレスを生成し、メモリの読み取り又は書き込みサイクルを開始することができる。メモリコントローラ２０６は、１つ又は複数のプロセッサによって読み書きされ得る幾つかのハードウェアレジスタを含むことができる。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ、及び他の種類のレジスタを含み得る。これらのレジスタは、ソース、宛先、転送の方向（入力／出力（Ｉ／Ｏ）装置からの読み取り又はＩ／Ｏ装置への書き込み）、転送単位のサイズ、１つのバースト内で転送するバイト数、及び／又はメモリコントローラの他の典型的な特徴の幾つかの組み合わせを指定することができる。
【００３５】
[0042]  ＤＭＡユニット２０８は、ホストメモリ２０４とグローバルメモリ２１６との間のデータ転送を支援することができる。加えて、ＤＭＡユニット２０８は、複数のＮＰＵ（例えば、ＮＰＵ２００）間のデータ転送を支援することができる。ＤＭＡユニット２０８は、ＣＰＵの割り込みを引き起こすことなく、オフチップ装置がオンチップメモリ及びオフチップメモリの両方にアクセスすることを可能にし得る。従って、ＤＭＡユニット２０８もメモリアドレスを生成し、メモリの読み取り又は書き込みサイクルを開始することができる。ＤＭＡユニット２０８も、メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ、及び他の種類のレジスタを含む、１つ又は複数のプロセッサによって読み書きされ得る幾つかのハードウェアレジスタを含むことができる。これらのレジスタは、ソース、宛先、転送の方向（入力／出力（Ｉ／Ｏ）装置からの読み取り又はＩ／Ｏ装置への書き込み）、転送単位のサイズ、１つのバースト内で転送するバイト数の幾つかの組み合わせを指定することができる。ＮＰＵアーキテクチャ２００は、第２のＤＭＡユニットを含み得ることが理解され、第２のＤＭＡユニットは、ホストＣＰＵを関与させることなしに複数のＮＰＵアーキテクチャが直接通信できるようにするために、他のＮＰＵアーキテクチャとの間でデータを転送するために使用され得る。
【００３６】
[0043]  ＪＴＡＧ／ＴＡＰコントローラ２１０は、システムアドレス及びデータバスへの直接の外部アクセスを必要とすることなく、ＮＰＵへの低オーバヘッドアクセスのためのシリアル通信インタフェース（例えば、ＪＴＡＧインタフェース）を実装する専用デバッグポートを指定することができる。ＪＴＡＧ／ＴＡＰコントローラ２１０は、様々な部分のチップロジックレベル及び装置機能を提示するテストレジスタの組にアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース（例えば、ＴＡＰインタフェース）も有することができる。
【００３７】
[0044]  存在する場合、周辺インタフェース２１２（ＰＣＩｅインタフェース等）は、ＮＰＵと他の装置との間の通信を提供するチップ間バスの役割を果たす（典型的にはチップ間バスである）。
【００３８】
[0045]  バス２１４は、チップ内バス及びチップ間バスの両方を含む。チップ内バスは、システムアーキテクチャによって呼び出される全ての内部コンポーネントを互いに接続する。全てのコンポーネントが他の全てのコンポーネントに接続されるわけではないが、全てのコンポーネントは、通信する必要がある他のコンポーネントへの接続を有する。チップ間バスは、ＮＰＵをオフチップメモリ又は周辺機器等の他の装置と接続する。典型的には、周辺インタフェース２１２（例えば、チップ間バス）がある場合、バス２１４は、チップ内バスに専ら関係するが、一部の実装形態では専用のバス間通信に関係することができる。
【００３９】
[0046]  図２ＡのＮＰＵアーキテクチャ２００は、本開示の実施形態を組み込むが、開示する実施形態は、他の任意の処理ユニット又はアクセラレータに適用できることが理解されるであろう。かかるユニットは、例えば、ベクトル及び行列処理能力を有するＧＰＵ、ＣＰＵ、又は深層学習のためのニューラルネットワークアクセラレータ等のアクセラレータであり得る。一部の実施形態では、処理ユニットは、深層学習等の一部のアプリケーションを加速させるためのＳＩＭＤアーキテクチャを含むことができる。ＳＩＭＤ又はベクトルアーキテクチャは、グラフィックス処理及び深層学習等のデータ並列処理で計算装置を支援するために一般に使用される。ＳＩＭＤアーキテクチャは、複数の処理要素を含むことができ、処理要素のそれぞれは、複数のデータ点に対して同じ演算を同時に実行することができる。
【００４０】
[0047]  一部の実施形態では、処理ユニット（例えば、ＮＰＵアーキテクチャ２００等）は、コンパイラを含むことができる。コンパイラは、あるプログラミング言語で記述されたコンピュータコードを命令に変換して実行可能プログラムを作成するプログラム又はコンピュータソフトウェアである。マシニングの応用では、コンパイラは、様々な演算、例えば前処理、字句解析、構文解析、意味解析、入力プログラムの中間表現への変換、コードの最適化及びコードの生成、又はそれらの組み合わせを実行することができる。
【００４１】
[0048]  一部の実施形態では、命令を生成するコンパイラは、ＮＰＵ２００にコマンドをプッシュするホストユニット（例えば、ホストメモリ２０４を有するＣＰＵ）上にあり得る。これらのコマンドに基づき、各タスクマネージャは、１つ又は複数の空いたコアを新たなタスクに割り当て、必要に応じてコア間の同期を管理することができる。コマンドの一部は、（コンパイラによって生成される）命令及びデータをホストメモリ２０４からグローバルメモリ２１６内にロードするようにＤＭＡユニット２０８に命令することができる。次いで、対応するタスクが割り当てられた各コアの命令バッファに、ロードされた命令を分配することができ、コアは、それらの命令を適宜処理することができる。
【００４２】
[0049]  コアによって受信される最初の幾つかの命令は、グローバルメモリ２１６からコアの命令バッファ内にデータをロード／記憶するように、コアに命令できることが理解されるであろう。次いで、各コアは、命令パイプラインを開始することができ、かかる命令パイプラインは、命令バッファから（例えば、フェッチユニットによって）命令を取り出すことと、その命令を（例えば、命令デコーダによって）復号し、且つ（例えば、オペランドに対応する）ローカルメモリアドレスを生成することと、ソースデータを読み取ることと、演算を実行するか又はロード／記憶することと、その後、結果を書き戻すこととを含む。
【００４３】
[0050]  図２Ｂは、本開示の実施形態によるコア２０２４の概略図を示す。コア２０２４は、制御ロジック２２４、複数の実行ユニット（アルゴリズム論理ユニット（ＡＬＵ）２２６、ロード／記憶（ＬＤ／ＳＴ）ユニット２２８、及び特殊関数（ＳＦ）ユニット２３０等）並びにローカルメモリ２３２を含むことができる。
【００４４】
[0051]  制御ロジック２２４は、復号された命令を実行するために複数の実行ユニットに送信することができ、パイプラインのストールを最小化することができる。例えば、MAD命令は、ＡＬＵ２２６に送信することができ、LOAD命令は、ＬＤ／ＳＴユニット２２８に送信することができ、余弦関数は、ＳＦユニット２３０に送信することができる。複数の実行ユニットが並列に機能することを可能にするために、ＣＥＳアーキテクチャを使用して各コア内のＩＬＰを探索することができる。
【００４５】
[0052]  ローカルメモリ２３２は、複数の実行ユニットによって生成される結果を記憶することができる。記憶された結果は、その後の命令によって更にアクセスされ、ＡＬＵ２２４、ＬＤ／ＳＴユニット２２８及びＳＦユニット２３０に再び提供され得る。
【００４６】
[0053]  更に、ＮＰＵアーキテクチャ２００の一部として示す各コア２０２４にＣＥＳが適用されるが、かかるＩＬＰの探索スキームは、ＣＰＵ及びＤＳＰ等の任意の汎用多重命令発行プロセッサに適用することができる。
【００４７】
[0054]  図３は、本開示の実施形態による連続実行セット（ＣＥＳ）アーキテクチャの例示的な連続実行セット（ＣＥＳ）命令３００を示す。コンパイラは、変換に基づいてＣＥＳ命令３００を生成することができる。上記で示したように、ＣＥＳ命令３００は、グローバルメモリ２１６内、その後、１つ又は複数のコアの１つ又は複数のローカルメモリ内にロードすることができる。その後、ＣＥＳ命令３００は、取り出して（命令デコーダによって）復号することができる。
【００４８】
[0055]  図３に示すように、ＣＥＳ命令３００は、指示ビット（例えば、ビット３１）及び命令に対応する複数の演算コードビット（例えば、ビット２４〜３１）を含むことができる。図３は、指示ビットがビット３１に位置すると示しているが、指示ビットは、ＣＥＳ命令３００内のいずれの場所にも位置し得ることが理解されるであろう。例えば、指示ビットは、演算コードビットの前のビット２３に位置することができる。このＣＥＳアーキテクチャでは、ＣＥＳ命令３００は、演算コードビットに関連する１つの命令を含むことができる。
【００４９】
[0056]  指示ビットが命令３００内で設定される場合、その指示ビットは、その命令３００が並列処理可能な１つ又は複数の命令の最後の組であることを示す。即ち、この命令の前の対応する全ての命令及びこの命令は、並列に処理することができる一方、その後の１つ又は複数の命令は、この命令と並列に実行されない。指示ビットを「１」に設定することは、この命令が連続した命令の集合の最後の命令であることを意味し、この命令が最後の命令ではない場合に「０」に設定されるが、これらの指示ビットの値は、逆にされ得ることが理解されるであろう。指示ビットの幅は、１ビットであり得ることが理解されるであろう。ＣＥＳアーキテクチャの指示ビットを有することにより、ホストユニットのコンパイラは、ＣＥＳ命令３００内にコード化されるＮＰＵ命令を生成するとき、コードの命令レベルの並列処理（ＩＬＰ）を探索することができる。例えば、上記で論じたＶＬＩＷと異なり、命令３００は、同じ長さを有する命令語を生成するためにパディングビットを使用しない。従って、ＶＬＩＷと異なり、ＣＥＳアーキテクチャは、貴重なメモリ空間及びバス帯域幅をパディングビットで無駄にしない。
【００５０】
[0057]  ＣＥＳ命令３００は、ＶＬＥＳ命令語内に含まれる各命令のヘッド情報を除外することによっても、ＶＬＥＳ命令語とは異なる。従って、ＣＥＳ命令３００は、指示ビットを使用することによって従来のアーキテクチャ（例えば、ＶＬＩＷ及びＶＬＥＳ）の欠点を直すことができる。命令語３００内に含まれる指示ビットについてのより詳細な説明を以下で行う。
【００５１】
[0058]  一部の実施形態では、命令を生成するために、コンパイラは、データ依存性を判定し、一連の命令間で依存性を制御することができる。命令のデータ依存性を判定することは、命令の実行ロジックに関連し得る。例えば、上記の例１を再び参照すると、命令１及び命令２は、互いに独立している一方、命令３は、命令１及び命令２の実行結果に依存する。従って、命令１及び命令２は、並列命令であり得、利用可能なハードウェア資源に従って並列に実行することができる。
【００５２】
[0059]  この判定に基づき、コンパイラは、ＣＥＳ命令３００の指示ビットを設定することができる。一部の実施形態では、「１」の指示ビットは、ＣＥＳ命令３００の最後の命令が並列命令の組の最後のものであることを示すことができる。「０」の命令ビットは、その命令が並列命令の組の最後の命令ではないことを示すことができる。この最後の命令を含む並列命令の組は、連続実行セット（ＣＥＳ）と呼ぶことができる。
【００５３】
[0060]  一部の実施形態では、先に論じたように、第１の命令の指示ビットが「０」である場合、その命令は、並列命令の組の最後の命令ではない。
【００５４】
[0061]  指示ビットの構成は、上記の実施形態と異なり得ることが理解されるであろう。例えば、図３の指示ビットは、命令の末尾に示されているが、指示ビットは、命令の符号化設計に応じて命令の任意のビットであり得る。更に、図３の命令は、３２ビットの命令であるが、命令の長さは、異なることができ、図３の実施形態によって限定されなくてもよいことが理解されるであろう。
【００５５】
[0062]  一部の実施形態では、指示ビットの他に、コンパイラは、並列命令の連続実行セットの少なくとも一部を少なくとも１つの命令語にパックすることができる。更に、並列命令を１つの命令語にパックすることは、利用可能なハードウェア資源が全ての命令の並列処理を支援できないかどうかを考慮に入れることができる。従って、命令語内の並列命令の数は、所定値を満たすことができる。例えば、その値は、実行ユニットの数であり得、ＣＥＳ命令語内の並列命令の数は、利用可能な実行ユニットの数以下である。
【００５６】
[0063]  上記で論じたように、ＣＥＳアーキテクチャでは、指示ビットは、並列命令の連続実行セットの最後の命令であるかどうかを示すことができる。例えば、第１の命令の第１の指示ビットは、第１の命令が並列命令の連続実行セットの最後の並列命令ではないことを示す「０」であり得る。従って、第１の指示ビットの値（例えば、「０」）が命令デコーダによって受信されるとき、命令デコーダは、第１の命令が連続実行セット内のその後の命令を含むと判定することができる。第２の命令語の第２の指示ビットは、第２の命令が並列命令の連続実行セットの最後の命令であることを示す「１」であり得る。従って、第２の指示ビットの値（例えば、「１」）が命令デコーダによって受信されるとき、命令デコーダは、第２の命令が連続実行セットの最後の命令であると判定することができる。
【００５７】
[0064]  上記で論じたように、例えば、ＶＬＥＳは、１クロックサイクル内で２つ以上の命令を取り出すことができる。しかし、ＣＥＳアーキテクチャでは、コアは、１クロックサイクル当たり１つの命令を（例えば、コアのフェッチユニットによって）取り出すことができる。コアは、命令語の指示ビットが「１」であるか又は「０」であるかを判定することができ、指示ビットが「０」である場合、次のクロックサイクル内で連続した命令の集合の次の命令を取り出し続ける。換言すれば、並列命令を取り出すプロセスは、「１」の指示ビットに達するまで続く。従って、「１」の指示ビットを有する命令は、連続実行セットの最後の命令である。即ち、最後の命令と、最後の命令の前の全ての命令とが並列命令の組を形成し得る。従って、コンパイラは、命令ビットに基づいて並列命令のデータ依存性を判定することができ、そのため、並列命令は、判定されたデータ依存性に従ってスケジューリングすることができる。判定されるデータ依存性は、サイクルごとであり得ることが理解されるであろう。
【００５８】
[0065]  ＣＥＳアーキテクチャは、ＣＥＳ内の並列処理を指示するために命令への１つの追加ビットのみを使用するため、ＣＥＳアーキテクチャを実行する装置は、従来のアーキテクチャよりも少ないハードウェア資源を消費することができる。
【００５９】
[0066]  図４は、本開示の実施形態による例示的なＣＥＳアーキテクチャのシーケンス図４００を示す。
【００６０】
[0067]  図４に示すように、命令４０２及び命令４０３は、並列命令であり、従って並列に実行することができる。上記で論じたように、ハードウェア（例えば、ＮＰＵアーキテクチャ２００）は、１サイクル内で１つの命令のみを取り出すことができる。従って、最初のサイクル内で実行するために命令４０３を取り出すとき、命令４０３と並列な命令４０２を最初のサイクルの１サイクル後に取り出すことができる。従って、命令４０２が完了するのに２０クロックサイクルかかる一方、命令４０３が２５クロックサイクルかかる場合、これらの２つの命令の実行は、重複し得る（即ち並列に実行される。
【００６１】
[0068]  粗粒度の計算では、命令の実行に複数のサイクル（例えば、２０４８サイクル）かかる場合がある。命令４０２は、その並列命令４０３の１サイクル後に取り出され実行されるが、命令を取り出すためのコスト（この例では１サイクル）は、最小限である。従って、指示ビットは、並列命令を区別することができ、そのため、ハードウェアは、それらの並列命令を同時に実行することができる。従って、ＣＥＳアーキテクチャは、１ビットのコストのみを払い、ＶＬＩＷ／ＶＬＥＳの欠点を克服する。
【００６２】
[0069]  図５は、本開示の実施形態による、命令を生成するための方法５００のフローチャートを示す。方法５００は、例えば、ホストＣＰＵのコンパイラによって実行することができ、ステップ５０１、５０３及び５０５を含むことができる。
【００６３】
[0070]  ステップ５０１では、コンパイラが、命令を生成するためのコンピュータコードを受信することができる。
【００６４】
[0071]  ステップ５０３では、そのコンピュータコードを使用して、コンパイラは、プログラムの演算ごとのデータ依存性及び何れの演算を並列に実行できるかを判定することができる。命令のデータ依存性の判定は、命令の実行ロジックに関連し得る。命令は、ロール又は非ロールであり得る。更に、コンパイラは、命令をスケジューリングするとき、データ依存性を判定するためにＣＥＳアーキテクチャ内の命令ごとの１サイクル遅延を考慮に入れることができる。
【００６５】
[0072]  ステップ５０５では、コンパイラは、データ依存性に基づいて並列命令の連続実行セットを決定することができる。並列命令の判定されたデータ依存性及びハードウェア資源の可用性に基づき、コンパイラは、並列命令を含めるための連続実行セットを決定することができる。
【００６６】
[0073]  この決定に基づき、ステップ５０７では、コンパイラは、ＣＥＳ命令を生成することができ、各命令は、演算命令及び指示ビットを有することができる。上記で述べたように、指示ビット（最終並列命令ビットとも呼ぶ）は、その命令が並列命令の連続実行セットの最後の命令であるかどうかを示すことができる。上記で論じたように、例えば、「１」の指示ビットは、その命令が並列に実行される命令の集合の最後の命令であることを示し得る。指示ビットの幅は、１ビットであることが理解されるであろう。一部の実施形態では、並列に処理される命令の集合を１語にパッケージ化することができる。かかる実施形態では、各命令が指示ビットを有し得る。
【００６７】
[0074]  ＣＥＳ命令を生成した後、ステップ５０９では、ＣＥＳ命令を後に処理するために記憶することができる。命令は、ホストメモリ（例えば、ホストメモリ２０４）内又はＮＰＵのグローバルメモリ（例えば、グローバルメモリ２１６）内に記憶することができる。命令がホストメモリ内に記憶される場合、ＮＰＵのＤＭＡユニット（例えば、ＤＭＡユニット１４０）は、ホストメモリからグローバルメモリ内に命令及びデータをロードすることができる。次いで、対応するタスクが割り当てられた各コアに、ロードされた命令を分配することができ、１つ又は複数のコアがそれらの命令を処理することができる。
【００６８】
[0075]  図６Ａは、本開示の実施形態による、命令を実行するための方法６００のフローチャートを示す。方法６００は、例えば、アクセラレータ（例えば、ＮＰＵアーキテクチャ２００）のコア（例えば、コア２０２４）によって実行され得る。コアによって受信される最初の幾つかの命令は、グローバルメモリ（例えば、グローバルメモリ２１６）からコアの命令バッファ内にデータをロード／記憶するように、コアに命令できることが理解されるであろう。
【００６９】
[0076]  ステップ６０１では、コアは、命令バッファから連続実行セット（ＣＥＳ）の命令を（フェッチユニットによって）取り出すことができる。ＣＥＳの命令は、ＣＥＳ命令と呼ぶこともできる。命令は、サイクルごとに取り出すことができる。例えば、取り出されるＣＥＳ命令は、演算及びオペランドを含むことができる。コアがＣＥＳ命令を取り出すことができる前に、ＣＥＳ命令は、ホストメモリ２０４からプルされ、各コアの命令バッファ内にプッシュされていることが理解されるであろう。コンパイラによってＩＬＰが探索されているため、実行するためのＣＥＳ命令を形成するために、並列命令が集められていることが理解されるであろう。ＣＥＳ命令の最後の命令を示すために、指示ビットもＣＥＳ命令内で設定される。
【００７０】
[0077]  例えば、例示的な命令バッファを図６Ｂに示し、図６Ｂでは、プログラムの命令が実行されるために待ち行列に入れられている。この例では、命令i1がＣＥＳ命令の集合ＣＥＳ１の一部であり、命令i2及びi3がＣＥＳ命令の集合ＣＥＳ２の一部であり（且つ並列に実行することができ）、命令i4及びi5がＣＥＳ命令の集合ＣＥＳ３の一部であり（且つ並列に実行することができ）、その後も同様に続く。命令i1、i3及びi5がそれぞれその対応するＣＥＳ命令の集合の最後の命令であることを考慮し、これらの命令のそれぞれは、対応する指示ビットを「１」に設定される。単独の命令がＣＥＳ命令の集合の一部である状況では（例えば、ＣＥＳ命令の集合ＣＥＳ１の命令i1）、その命令は、並列に実行されず、演算の処理は、図４の１命令発行の実行１０２と同様になる。
【００７１】
[0078]  ステップ６０３では、コアは、（命令デコーダによって）ＣＥＳ命令を復号することができる。命令デコーダは、何れの実行ユニット（例えば、ＡＬＵ２２６、ＬＤ／ＳＴユニット２２８又はＳＦユニット２３０）がＣＥＳ命令を実行するかを示すことができる。
【００７２】
[0079]  ステップ６０５では、コアは、復号されたＣＥＳ命令を、実行するために実行ユニットに発行することができる。例えば、ＡＬＵ２２６にMAD命令を発行することができ、ＬＤ／ＳＴユニット２２８にLOAD命令を発行することができ、ＳＦユニット２３０に余弦関数を発行することができる。
【００７３】
[0080]  ステップ６０７では、コアは、発行された命令が、発行されたＣＥＳ命令の最後の命令であるかどうかを判定することができる。上記で論じたように、命令の集合の最後の命令を識別するために指示ビットが設定される。従って、指示ビット（最終命令ビット）が「１」に設定される場合、発行された命令は、ＣＥＳ命令の組の最後の命令である。従って、コアは、ＣＥＳ命令の指示ビットに基づいて最後の命令を識別することができる。
【００７４】
[0081]  ＣＥＳ命令の最後の命令が依然として発行されていないと判定することに応答して、コアは、ステップ６０１に戻ってその後の命令を取り出すことができる。例えば、一例として図６Ｂを参照すると、命令バッファのプログラムカウンタが命令i2（この命令が組の最後の命令ではないことを示す「０」の対応する命令ビットを有する）を指している場合、命令i2及び命令i3を並列に実行することができるように命令の集合の次の命令（即ち命令i3）を取り出すことができる。
【００７５】
[0082]  再び図６Ａを参照すると、他方でＣＥＳ命令の最後の命令が発行されていると判定することに応答して、コアは、ステップ６０９に進むことができる。例えば、一例として図６Ｂを参照すると、命令バッファのプログラムカウンタが命令i3を指している場合、この命令は、「１」の対応する命令ビットを有するため、この命令は、組の最後の命令である。
【００７６】
[0083]  ステップ６０９では、コアは、発行されたＣＥＳ命令の実行が完了するまで待つことができる。命令の実行には複数のサイクル（例えば、２０４８クロックサイクル）かかる場合があることが理解されるであろう。各命令のクロックサイクル消費は、異なり得る。例えば、ＣＥＳ命令の中で、２０サイクルのクロックサイクル消費を有する第１の命令は、２５サイクルのクロックサイクル消費を有する第２の命令よりも１サイクル前に実行のために発行することができ、従って、第１の命令は、第２の命令よりも遅く実行を完了し得る。従って、ＣＥＳ命令の異なるクロックサイクル消費により、コアは、発行されたＣＥＳ命令の実行が完了するまで待たなければならないであろう。
【００７７】
[0084]  ステップ６１１では、コアは、復号された命令がプログラムの最後の命令であるかどうかを判定することができる。コアは、命令が終わりに達したかどうかについて命令バッファ（例えば、図６Ｂの命令バッファ）を調べることによって、この判定を下すことができる。終わりに達していない場合、コアは、ステップ６０１に戻ってその後の命令を取り出すことができる。他方では、コアが終わりに達している場合、この方法は、終了に進むことができる。
【００７８】
[0085]  命令の実行後、命令の実行結果をローカルメモリ内にロード／記憶し、次いでグローバルメモリ又はホストメモリに書き戻すことができる。
【００７９】
[0086]  本明細書に記載した様々な実施形態の例は、一態様ではネットワーク化された環境内のコンピュータによって実行されるプログラムコード等のコンピュータ実行可能命令を含む、コンピュータ可読媒体において実装されるコンピュータプログラム製品によって実施され得る方法ステップ又はプロセスに全般的に関連して説明された。コンピュータ可読媒体は、これのみに限定されないが、読取専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）等を含む取り外し可能記憶装置及び固定型記憶装置を含み得る。概して、プログラムモジュールは、特定のタスクを実行するか又は特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み得る。コンピュータ実行可能命令、関連するデータ構造及びプログラムモジュールは、本明細書で開示した方法のステップを実行するためのプログラムコードの例を表す。かかる個々の一連の実行可能命令又は関連するデータ構造は、かかるステップ又はプロセスで説明した機能を実装するための対応する行為の例を表す。
【００８０】
[0087]  上記の明細書では、実装形態ごとに異なり得る多くの具体的詳細に関して実施形態を説明してきた。記載した実施形態の特定の適応形態及び修正形態がなされ得る。本明細書を検討し、本明細書で開示した本発明を実践することにより、他の実施形態が当業者に明らかになり得る。本明細書及び例は、専ら例示として見なされることを意図し、本発明の真の範囲及び趣旨は、添付の特許請求の範囲によって示される。図示のステップの順序は、例示目的に過ぎず、特定のステップの順序に限定されることを目的としないことも意図する。そのため、それらのステップは、同じ方法を実装しながら異なる順序で実行できることを当業者であれば理解することができる。
【００８１】
[0088]  図面及び本明細書で例示的実施形態を開示してきた。但し、それらの実施形態に対する多くの改変形態及び修正形態がなされ得る。従って、特定の用語を使用したが、それらの用語は、限定目的ではなく、専ら全般的且つ説明的な意味で使用されており、実施形態の範囲は、添付の特許請求の範囲によって定められる。
【図１】
2021507374.tif 000005
【図２Ａ】
2021507374.tif 000006
【図２Ｂ】
2021507374.tif 000007
【図３】
2021507374.tif 000008
【図４】
2021507374.tif 000009
【図５】
2021507374.tif 000010
【図６Ａ】
2021507374.tif 000011
【図６Ｂ】
2021507374.tif 000012
【国際調査報告】
2021507374.tif 000013
2021507374.tif 000014