JP6301501B2 - パイプラインレジスタを中間ストレージとして利用すること - Google Patents

パイプラインレジスタを中間ストレージとして利用すること Download PDF

Info

Publication number
JP6301501B2
JP6301501B2 JP2016567367A JP2016567367A JP6301501B2 JP 6301501 B2 JP6301501 B2 JP 6301501B2 JP 2016567367 A JP2016567367 A JP 2016567367A JP 2016567367 A JP2016567367 A JP 2016567367A JP 6301501 B2 JP6301501 B2 JP 6301501B2
Authority
JP
Japan
Prior art keywords
gpr
value
instruction
pipeline
gprs
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.)
Expired - Fee Related
Application number
JP2016567367A
Other languages
English (en)
Other versions
JP2017516226A5 (ja
JP2017516226A (ja
Inventor
チェン、リン
ドゥ、ユン
ウダヤクマラン、スメシュ
ジャン、チホン
グルバー、アンドリュー・イバン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2017516226A publication Critical patent/JP2017516226A/ja
Publication of JP2017516226A5 publication Critical patent/JP2017516226A5/ja
Application granted granted Critical
Publication of JP6301501B2 publication Critical patent/JP6301501B2/ja
Expired - Fee Related 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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
    • G06F9/3875Pipelining a single stage, e.g. superpipelining

Landscapes

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

Description

[0001]本開示は、処理ユニットに関し、より詳細には、処理ユニットの汎用レジスタ間で複数の値を移動することに関する。
[0002]グラフィックス処理ユニット(GPU:graphics processing unit)および中央処理ユニット(CPU:central processing unit)など、処理ユニットは、コンピューティングデバイス内の多種多様な動作を実施するために使用され得る。たとえば、GPUは、コンピュータグラフィックスを操作し、ディスプレイ上に表示するために利用される、グラフィックスレンダリングデバイスであり得る。GPUは、様々な複雑なアルゴリズムのために、一般的な汎用中央処理ユニット(CPU)よりも効率的な処理を可能にし得る高度並列構造で構築される。処理ユニットは、一般に、データを記憶するために使用される複数の汎用レジスタ(GPR:general purpose register)を含む。動作を実施するとき、処理ユニットは、一般に、処理ユニットにGPRの間で値を移動させる命令を実行する。
[0003]概して、本開示では、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニットについて説明する。処理ユニットは、複数の命令を含み得る命令セットアーキテクチャ(ISA:instruction set architecture)に従って動作するように構成され得、各命令は、処理ユニットによって実行され得る特定の動作を指定する。一例として、ISA中に含まれる移動命令は、ソースGPRから宛先GPRに値が移動されることを指定し得る。
[0004]一例では、方法は、処理ユニットが、複数のGPRのうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取ることを含む。この例では、本方法はまた、1つまたは複数の命令を受け取ったことに応答して、処理ユニットの初期論理ユニットが、第1のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに第1の値をコピーすることと、ここにおいて、複数のパイプラインレジスタが複数のGPRとは異なる、処理ユニットの初期論理ユニットが、第1のクロックサイクルの後にある第2のクロックサイクル中に、初期パイプラインレジスタに第2の値をコピーすることと、処理ユニットの最終論理ユニットが、第2のクロックサイクルの後にある第3のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第3のGPRに第1の値をコピーすることと、ここにおいて、第3のGPRにコピーされる第1の値が、第1のGPRからコピーされた同じ第1の値を表す、処理ユニットの最終論理ユニットが、第2のクロックサイクルの後にある第4のクロックサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーすることと、ここにおいて、第4のGPRにコピーされる第2の値が、第2のGPRからコピーされた同じ第2の値を表す、を含む。
[0005]別の例では、処理ユニットは、複数のGPRと、複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、複数のパイプラインレジスタが複数のGPRとは異なる、複数の論理ユニットと、コントローラとを含む。この例では、コントロールは、複数のGPRのうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取るように構成される。この例では、1つまたは複数の命令を受け取ったことに応答して、コントローラは、複数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、複数のパイプラインレジスタのうちの初期パイプラインレジスタに第1の値をコピーさせることと、初期論理ユニットに、第1のクロックサイクルの後にある第2のクロックサイクル中に、初期パイプラインレジスタに第2の値をコピーさせることと、複数の論理ユニットうちの最終論理ユニットに、第2のクロックサイクルの後にある第3のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第3のGPRに第1の値をコピーさせることと、ここにおいて、第3のGPRにコピーされる第1の値が、第1のGPRからコピーされた同じ第1の値を表す、最終論理ユニットに、第2のクロックサイクルの後にある第4のクロックサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーさせることと、ここにおいて、第4のGPRにコピーされる第2の値が、第2のGPRからコピーされた同じ第2の値を表す、を行うように構成される。
[0006]別の例では、非一時的コンピュータ可読記憶媒体は、複数のGPRのうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する、処理ユニットに対する1つまたは複数の命令を記憶する。この例では、実行されたとき、1つまたは複数の命令は、複数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに第1の値をコピーさせることと、初期論理ユニットに、第1のクロックサイクルの後にある第2のクロックサイクル中に、初期パイプラインレジスタに第2の値をコピーさせることと、複数の論理ユニットうちの最終論理ユニットに、第2のクロックサイクルの後にある第3のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第3のGPRに第1の値をコピーさせることと、ここにおいて、第3のGPRにコピーされる第1の値が、第1のGPRからコピーされた同じ第1の値を表す、最終論理ユニットに、第2のクロックサイクルの後にある第4のクロックサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーさせることと、ここにおいて、第4のGPRにコピーされる第2の値が、第2のGPRからコピーされた同じ第2の値を表す、を処理ユニットに行わせる。
[0007]別の例では、方法は、コンパイラモジュールがコードを受け取ることと、コンパイラモジュールが、コードによって示された複数の動作がコンボ移動(combo-move)命令に組み合わせられ得ると決定することに応答して、コンボ移動命令を生成することとを含む。この例では、処理ユニットによって実行されたとき、生成されたコンボ移動命令は、複数のGPRのうちの複数のソースGPRから複数のGPRのうちの複数の宛先GPRに複数の値を移動するとき、処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、複数のパイプラインレジスタは複数のGPRとは異なる。
[0008]1つまたは複数の例の詳細が添付の図面および以下の説明に記載されている。本発明の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかになろう。
[0009]本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、汎用レジスタ(GPR)間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニットを含む集積回路を示すブロック図。 [0010]本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニットを含む集積回路を示すブロック図。 [0011]本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図。 本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図。 本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図。 [0012]本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニットの例示的な動作を示すフローチャート。 [0013]本開示の1つまたは複数の技法による、コンボ移動命令を出力する例示的なコンパイラモジュールを示すブロック図。 [0014]本開示の1つまたは複数の技法による、コンボ移動命令を出力するコンパイラモジュールの例示的な動作を示すフローチャート。 [0015]本開示の1つまたは複数の技法による、図1の集積回路を含む例示的なデバイス100を示すブロック図。
[0016]概して、本開示では、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニットについて説明する。処理ユニットは、複数の命令を含み得る命令セットアーキテクチャ(ISA)に従って動作するように構成され得、各命令は、処理ユニットによって実行され得る特定の動作を指定する。一例として、ISA中に含まれる移動命令は、ソースGPRから宛先GPRに値が移動されることを指定し得る。いくつかの例では、レジスタ間で複数の値を移動するときなど、移動ごとに別個の命令を実行することは非効率的であり得る。
[0017]本開示の1つまたは複数の技法によれば、ISA中に含まれるコンボ移動命令は、複数のソースGPRから複数の宛先GPRに複数の値が移動されることを指定し得る。いくつかの例では、特定のGPRは、複数のソースGPRと複数の宛先GPRの両方中に含まれ得る。たとえば、スワップ(swap)命令など、コンボ移動命令は、第1のGPRに記憶された第1の値が第2のGPRに移動されることと、第2のGPRに記憶された第2の値が第1のGPRに移動されることとを指定し得る(たとえば、第1GPRに記憶された値と第2のGPRに記憶された値とをスワップする)。いくつかの例では、コンボ移動命令を実行するために、処理ユニットは、実行中に値のうちの1つを一時的に記憶するために第3のGPRを利用し得る。たとえば、処理ユニットは、第1のGPRから第3のGPRに第1の値をコピーし、第2のGPRから第1のGPRに第2の値をコピーし、第3のGPRから第2のGPRに第1の値をコピーし得る。
[0018]いくつかの例では、処理ユニットは、1つまたは複数のパイプラインを含み得る。パイプラインの各々は、少なくとも、初期論理ユニットと初期パイプラインレジスタとを含み得る初期段と、最終論理ユニットを含む最終段とを含む、複数の段を含み得る。したがって、いくつかの例では、N段パイプラインはN個の論理ユニットとN−1個のパイプラインレジスタとを含み得、第N−1の段中に含まれるパイプラインレジスタは最終パイプラインレジスタと呼ばれることがある。
[0019]動作中、N段パイプラインの初期論理ユニットは、第1のクロックサイクル中に処理ユニットの別の構成要素(たとえば、GPR)から値を受け取り得る。後続のクロックサイクル中に、値はパイプラインの後続の要素を通過し得、第Nのクロックサイクル中に、値は、最終段からコピーするために利用可能になり得る。たとえば、第1のクロックサイクル中に、初期論理ユニットは、値を受け取り、値に対して要求された論理演算を実施し、値を初期パイプラインレジスタに与え得、その結果、第1のクロックサイクルの終わりに、初期パイプラインレジスタは値を記憶する。次いで、第2のクロックサイクル中に、第2の論理ユニットは、初期パイプラインレジスタから値を受け取り、値に対して要求された論理演算を実施し、値を第2のパイプラインレジスタに与え得、その結果、第2のクロックサイクルの終わりに、第2のパイプラインレジスタは値を記憶する。パイプラインが3段パイプライン(すなわち、N=3)である場合、第3のクロックサイクル中に、第3の論理ユニットは、第2のパイプラインレジスタから値を受け取り、値に対して要求された論理演算を実施し、値を処理ユニットの1つまたは複数の他の構成要素(たとえば、GPR)に与え得、その結果、第3のクロックサイクルの終わりに、1つまたは複数の他の構成要素は値を記憶する。
[0020]いくつかの例では、初期論理ユニットは、第1の値がパイプラインを出る前に(たとえば、最終論理ユニットが第1の値をGPRにコピーする前に)、第2の値を受け取り得る。たとえば、第2のクロックサイクル中に、初期論理ユニットは、第2の値を受け取り、第2の値に対して要求された論理演算を実施し、第2の値を初期パイプラインレジスタに与え得、その結果、第2のクロックサイクルの終わりに、初期パイプラインレジスタは第2の値を記憶する。さらに、値が第1の値である上記の例で説明したように、第2のクロックサイクルの終わりに、第2のパイプラインレジスタは第1の値を記憶し得る。次いで、第3のクロックサイクル中に、第2の論理ユニットは、第1のパイプラインレジスタから第2の値を受け取り、第2の値に対して要求された論理演算を実施し、第2の値を第2のパイプラインレジスタに与え得、その結果、第2のクロックサイクルの終わりに、第2のパイプラインレジスタは第2の値を記憶する。このようにして、単一のクロックサイクル中に、パイプラインレジスタから第1の値がコピーされ得、パイプラインレジスタに第2の値がコピーされ得る。
[0021]一時的GPRの利用は、処理ユニットが命令の実行を完了することを可能にするが、いくつかの例では、追加のGPRを使用することが望ましくないことがある。本開示の1つまたは複数の技法によれば、処理ユニットは、一時的ストレージのために追加のGPRを使用することとは対照的に、処理ユニットのパイプラインレジスタを一時的ストレージとして利用し得る。たとえば、スワップ命令を実行するとき、処理ユニットは、第1のサイクル中に第1のGPRからパイプラインの初期パイプラインレジスタに第1の値をコピーし、第2のサイクル中に第2のGPRからパイプラインの初期レジスタに第2の値をコピーし、第3のサイクル中にパイプラインの最終パイプラインレジスタから第2のGPRに第1の値をコピーし、第4のサイクル中に最終パイプラインレジスタから第1のGPRに第2の値をコピーし得る。言い換えれば、処理ユニットは、パイプラインおよびそれの構成要素であるパイプラインレジスタを先入れ先出し(FIFO:first-in-first-out)キューとして使用し得、そこにおいて、パイプラインレジスタの各々中の値は、クロックサイクル中でそれぞれの次のパイプラインレジスタにコピーする。このようにして、処理ユニットは、一時的ストレージのために追加のGPRを使用することなしに、2つのGPRの値をスワップし得る。
[0022]以下でより詳細に説明するように、GPRとパイプラインレジスタとは異なり、パイプラインレジスタにアクセスすることは、GPRにアクセスすることよりも少ない電力を必要とし得る。したがって、一時的ストレージのためにGPRではなくパイプラインレジスタを使用することによって、本技法は、電力消費を低減し、ならびに、GPRを不必要に利用不可能にすること(たとえば、さもなければ一時的ストレージのために使用されたであろうGPR)を回避する。
[0023]図1は、本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニット2を含む集積回路1(「IC1」)を示すブロック図である。いくつかの例では、IC1は、モバイルコンピューティングデバイス(たとえば、「スマートフォン」)、コンピューティングデバイス(たとえば、デスクトップ、ラップトップ、サーバなど)、コンピューティングデバイスモジュール(たとえば、グラフィックスカード)、携帯情報端末(PDA)、ハンドヘルドビデオゲームデバイス、ゲームコンソール、および/またはテレビジョンデバイスなどのデバイス中に含まれ得る。いくつかの例では、IC1は、コンピュータグラフィックスを操作し、ディスプレイ上に表示するように構成されたグラフィックス処理ユニット(GPU)、および/または一般的な計算動作を実施するように構成された中央処理ユニット(CPU)を含み得る。たとえば、処理ユニット2はGPUのシェーダプロセッサであり得る。図1に示されているように、IC1は、汎用レジスタ(GPR)4A〜4N(まとめて「GPR4」)と、パイプライン6と、コントローラ12と、クロック14とを含む処理ユニット2を含み得る。
[0024]いくつかの例では、処理ユニット2は、処理ユニット2が使用するデータを記憶するように構成され得るGPR4を含み得る。GPR4は汎用レジスタであるので、GPR4は多種多様な情報を記憶し得る。GPRが記憶し得る情報の一例は、限定はしないが、整数値、浮動小数点値、文字、およびビットアレイなどのデータである。たとえば、GPR4のうちの1つまたは複数は、グラフィカルベクトルなど、ベクトル成分を記憶し得る。したがって、いくつかの例では、GPR4のうちの1つまたは複数はベクトルレジスタと見なされ得る。別の例として、GPR4のうちの1つまたは複数はアドレスを記憶し得る。
[0025]いくつかの例では、GPR4のすべては同じデータ容量を有し得る(すなわち、GPR4はすべて同じサイズであり得る)。たとえば、GPR4の各々は、8ビット、16ビット、32ビット、または64ビットのデータ容量を有し得る。いくつかの例では、GPR4は異なるサイズであり得る。たとえば、GPR4のうちの第1のGPRは32ビットのデータ容量を有し得、GPR4のうちの第2のGPRは64ビットのデータ容量を有し得る。
[0026]いくつかの例では、処理ユニット2は、データを処理するように構成され得るパイプライン6を含み得る。パイプライン6は、論理ユニット10A〜10N(まとめて「論理ユニット10」)を含む多段計算パイプラインであり得、そこにおいて、論理ユニット10の各論理ユニットは個別の段を表す。パイプライン6は、初期段(すなわち、論理ユニット10A)と最終段(すなわち、論理ユニット10N)とを含み得る。いくつかの例では、パイプライン6は、1つまたは複数の中間段(すなわち、論理ユニット10B〜論理ユニット10N−1)をも含み得る。段のうちの1つまたは複数(たとえば、論理ユニット10のうちの1つまたは複数)によって決定された値を保持するために、パイプライン6は、論理ユニット10のうちの1つまたは複数の後にパイプラインレジスタ8のうちの1つを含み得る。たとえば、パイプライン6は、論理ユニット10Aの後にパイプラインレジスタ8Aを含み得る。いくつかの例では、パイプラインレジスタ6は、最終段(すなわち、論理ユニット10N)の後にパイプラインレジスタを含まないことがある。したがって、いくつかの例では、パイプライン6がN個の段を含む場合、パイプライン6はN個の論理ユニット10とN−1個のパイプラインレジスタ8とを含み得、パイプラインレジスタ8N−1は最終パイプラインレジスタと呼ばれることがある。
[0027]上記で説明したように、パイプライン6は、値を処理するように構成され得る1つまたは複数の論理ユニット10を含み得る。たとえば、論理ユニット10の各々は、データを受け取り、1つまたは複数の演算(たとえば、2つの値を加算することなどの1つまたは複数の算術演算、2つの値の論理積をとることなどの1つまたは複数の論理演算、および/または1つまたは複数の他の数学演算)を実施し、結果を出力するように構成され得る。いくつかの例では、論理ユニット10のうちの1つまたは複数はプログラマブルであり得る。一例として、論理ユニット10のうちの1つまたは複数は、2つの値を加算するようにプログラムされ得る。別の例として、論理ユニット10のうちの1つまたは複数は、変更なしに値を渡すようにプログラムされ得る。別の例として、論理ユニット10のうちの1つまたは複数は、値を渡すと同時に値のデータ型を変更するようにプログラムされ得る。たとえば、本開示で説明する技法は、一時的ストレージのための汎用レジスタの使用を回避するために、一時的ストレージのためにパイプラインレジスタ8を利用する。したがって、パイプラインレジスタ8が一時的ストレージのために使用される場合など、いくつかの例では、論理ユニット10は、変更なしにまたはデータ型の変更とともに値を渡すように構成され得る。いくつかの例では、コントローラ12は、論理ユニット10のうちの1つまたは複数をプログラムし得る。いくつかの例では、論理ユニット10のより多くのうちの1つは算術論理ユニット(ALU:arithmetic logic unit)を含み得る。
[0028]パイプライン6は、クロック14から受け取られたクロック信号に応答して動作するように構成され得る。たとえば、クロック14から受け取られたクロック信号のエッジ(たとえば、立上りエッジまたは立下りエッジ)を受け取ったことに応答して、パイプライン6は次のサイクルに進み得る。したがって、いくつかの例では、パイプライン6のサイクルはクロックサイクルと呼ばれることがある。パイプライン6の各サイクル中で、論理ユニット10のうちの論理ユニットは、入力レジスタから入力値を受け取り、出力値を決定するために入力値を処理し、出力値を出力レジスタに与え得る。言い換えれば、各サイクル中で、値はパイプライン6を通って進み得る。一例として、サイクル中に、論理ユニット10Bは、パイプラインレジスタ8Aから第1の入力値を受け取り、第1の出力値を決定するために第1の入力値を処理し、第1の出力値をパイプラインレジスタ8Bに与え得る。また同じサイクル中に、論理ユニット10Aは、GPR4のうちのGPRから第2の入力値を受け取り、第2の出力値を決定するために第2の入力値を処理し、第2の出力値をパイプラインレジスタ8Aに与え得る。したがって、単一のサイクル中に、パイプラインレジスタ8Aは、論理ユニット10Bに第1の入力値を与えることと、論理ユニット10Aから第2の出力値を受け取ることの両方を行い得る。また別の例として、サイクル中に、論理ユニット10Nは、パイプラインレジスタ8Nから入力値を受け取り、出力値を決定するために入力値を処理し、出力値をGPR4のうちのGPRに与え得る。
[0029]パイプライン6が多段計算パイプラインである場合など、いくつかの例では、パイプライン6の始端に(すなわち、論理10Aに)値が与えられる最初のサイクルから、パイプライン6の終端において(すなわち、論理10Nから)得られた値が利用可能になる最後のサイクルまでの間にいくつかのサイクルがあり得る。いくつかの例では、このいくつかのサイクルはパイプライン6のレイテンシと呼ばれることがある。いくつかの例では、パイプライン6のレイテンシは、パイプライン6中に含まれる段の数に等しいことがある。たとえば、パイプライン6が4つの段を含む場合、パイプライン6は4のレイテンシを有し得る。
[0030]また上記で説明したように、パイプライン6は、各々が値を記憶するように構成され得る1つまたは複数のパイプラインレジスタ8を含み得る。たとえば、パイプラインレジスタ8のうちのパイプラインレジスタは、サイクル中に論理ユニット10のうちの論理ユニットによって決定された出力値を記憶し、次のサイクル中に論理ユニット10のうちの別の論理ユニットにその出力値を与えるように構成され得る。さらに、パイプラインレジスタ8の各々は、コントローラ12によって実行される命令など、ソフトウェアによって個々にアクセス可能および/またはアドレス指定可能でないことがある。いくつかの例では、処理ユニット2は、パイプラインレジスタ8のうちのパイプラインレジスタにアクセスするとき、GPR4のうちのGPRにアクセスするときよりも少ない電力量を消費し得る。たとえば、処理ユニット2は、パイプラインレジスタにアクセスするとき、GPRにアクセスするときと比較して半分の電力を消費し得る。いくつかの例では、パイプラインレジスタ8の各々は、GPR4のうちのGPRのデータ容量よりも大きいかまたはそれに等しいデータ容量を有し得る。
[0031]上記で説明したように、パイプラインレジスタ8は、ソフトウェアによって個々にアクセス可能および/またはアドレス指定可能でないことがある。たとえば、命令は、任意のパイプラインレジスタによって記憶された値を、別の任意のパイプラインレジスタまたは任意のGPRに移動することができない。パイプラインレジスタ6のこの特性は、各々がソフトウェアによって個々にアクセス可能および/またはアドレス指定可能であるGPR4とまったく対照的である。したがって、データは、パイプラインの始端(すなわち、論理10A)においてのみパイプライン6に挿入され得、パイプラインの終端(すなわち、論理10N)においてのみパイプライン6からアクセス(たとえば、GPRにコピー)され得、中間ではアクセスされないことがある(たとえば、パイプラインレジスタ8A〜8N中のデータは、それぞれの後続の論理ユニットおよび/または初期論理ユニット以外の構成要素によってアクセスされ得ない)。
[0032]処理ユニット2は、処理ユニット2の1つまたは複数の構成要素の動作を制御し得るコントローラ12を含み得る。たとえば、コントローラ12は、命令を受け取ったことに応答して、GPR4およびパイプライン6の動作を制御し得る。コントローラ12は、処理ユニット2のための特定のコントローラであるか、またはデバイス1の全体的な動作を制御するより一般的なコントローラであり得る。いくつかの例では、コントローラ12は命令デコーダを含み得る。
[0033]図2は、本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する例示的な処理ユニット2Aを含む集積回路1(「IC1」)を示すブロック図である。処理ユニット2Aは、図1の処理ユニット2と同様であり得る。たとえば、処理ユニット2Aは、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用し得る。図2に示されているように、処理ユニット2Aは、汎用レジスタ(GPR)4A〜4N(まとめて「GPR4」)と、パイプライン6Aと、コントローラ12と、クロック14とを含み得る。GPR4、コントローラ12、およびクロック14については、図1を参照しながら上記で説明したので、図2に関してGPR4、コントローラ12、およびクロック14についてのさらなる説明は行わない。
[0034]いくつかの例では、処理ユニット2Aは、データを処理するように構成され得るパイプライン6Aを含み得る。パイプライン6Aは、図1のパイプライン6と同様であり得る。たとえば、パイプライン6Aは、論理ユニット10とパイプラインレジスタ8とを含む多段パイプラインであり得る。図2の例に示されているように、パイプライン6Aは、バイパスチャネル9A〜9N−1(まとめて「バイパスチャネル9」)を含み得、バイパスチャネル9の各々は、パイプラインレジスタ8のそれぞれのパイプラインレジスタから初期論理ユニット10Aへの値のコピーを可能にするように構成され得る。たとえば、論理ユニット10Aは、パイプラインレジスタ8Bからパイプラインレジスタ8Aに値をコピーするためにバイパスチャネル9Bを利用し得る。
[0035]図3A〜図3Cは、本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニット内の例示的なデータフローを示すタイミング図である。図3A〜図3Cのデータフローは、図1の処理ユニット2または図2の処理ユニット2Aなど、処理ユニット内のデータフローを表し得る。説明の目的で、図3A〜図3Cのデータフローについて図1の処理ユニット2のコンテキスト内で説明するが、処理ユニット2のそれとは異なる構成を有する処理ユニットが図3A〜図3Cのデータフローと同様のデータフローを有し得る。
[0036]図3A〜図3Cの各々は、特定のコンボ移動命令の実行中の処理ユニット内の例示的なデータフローを示しており、データブロックの各々が、各時間サイクル中に各レジスタによってどんな値が記憶されるかを識別するように、複数の時間サイクル(たとえば、t0、t1など)を示す水平軸と、複数のGPR4と複数のパイプラインレジスタ8とを示す垂直軸とを含む。図3Aは、スウィズル(swizzle)命令の実行中の処理ユニット内の例示的なデータフローを示し、図3Bは、ギャザー(gather)命令の実行中の処理ユニット内の例示的なデータフローを示し、図3Cは、スキャッタ(scatter)命令の実行中の処理ユニット内の例示的なデータフローを示している。
[0037]本開示の1つまたは複数の技法によれば、コントローラ12は、汎用レジスタ(GPR)間で値を移動するとき、パイプラインレジスタを一時的ストレージとして使用することによって、コンボ移動命令を含む命令セットアーキテクチャ(ISA)に従って処理ユニット2の動作を制御するように構成され得る。コントローラ12によって実行可能なISA中に含まれ得るいくつかの例示的なコンボ移動命令は、限定はしないが、スウィズル命令と、スワップ命令と、ギャザー命令と、スキャッタ命令とを含む。コンボ移動命令を使用することによって、コントローラ12は、移動動作ごとに別個の命令を実行することとは対照的に、少なくともデータロケーションに関して、より少数の命令サイクル中で同じ最終結果を達成し、したがって、より高い性能を達成することが可能であり得る。いくつかの例では、コンボ移動命令のうちの1つまたは複数は割込み不可能であり得、これは、コントローラ12が、別の命令を実行する前に、割込み不可能な命令の実行を完了しなければならないことを意味する。
[0038]コントローラ12は、複数の任意のソースGPRから複数の任意の宛先GPRに複数の値を移動するようにコントローラ12に命令するスウィズル命令を受け取り得る。たとえば、コントローラ12は、以下の命令(1)による2値スウィズル命令を受け取り得、ここで、dst0はGPR4のうちの第1の宛先GPRを示し、dst1はGPR4のうちの第2の宛先GPRを示し、src0はGPR4のうちの第1のソースGPRを示し、src1はGPR4のうちの第2のソースGPRを示す。
Figure 0006301501
[0039]コントローラ12がn値スウィズル命令を実行することから生じる挙動は、以下のように表され得る。
Figure 0006301501
[0040]いくつかの例では、コントローラ12は、2つの命令サイクル中で2値スウィズル命令を実行し得る。いくつかの例では、命令は、ソースが命令自体によって上書きされた場合、古いソースを使用し得る。
[0041]図3Aは、第1のGPRが第2のGPRと値をスワップする、スウィズル命令の一種であるスワップコンボ移動命令の実行中の処理ユニットを通る例示的なデータフローを示している。たとえば、図3Aによって示されたデータフローは、スウィズル命令swz4B、4A、4A、4Bの実行中の処理ユニット2内のデータフローであり得る。以下の例では、パイプライン6は、5つの論理ユニット(すなわち、論理ユニット10A〜10E)間に点在する4つのパイプラインレジスタ(すなわち、パイプラインレジスタ8A〜8D)を含む5段パイプラインであり得る。
[0042]図3Aに示されているように、時間サイクルt0中に、GPR4Aは値VAを記憶し得、GPR4Bは値VBを記憶し得る。また時間サイクルt0中に、コントローラ12は、VAが初期パイプラインレジスタ8Aにコピーされるようにし得る。一例として、コントローラ12は、論理10Aに、GPR4AからVAを受け取らせ、VAをパイプラインレジスタ8Aに渡させ得る。VAが、時間サイクルt-1(たとえば、時間サイクルt0の直前の時間サイクル)の終わりにパイプラインレジスタ8Bによって記憶された場合など、別の例として、コントローラ12は、論理10Aに、バイパスチャネル(すなわち、図2のバイパスチャネル9B)を介してパイプラインレジスタ8BからVAを受け取らせ、VAをパイプラインレジスタ8Aに渡させ得る。
[0043]クロック14から信号を受け取ると、処理ユニット2は時間サイクルt1に進み得る。時間サイクルt1中に、論理10Bは、パイプラインレジスタ8AからVAを受け取り、VAをパイプラインレジスタ8Bに渡し得る。言い換えれば、時間サイクルt1中に、論理10BはVAをパイプラインレジスタ8Bにコピーし得る。また時間サイクルt1中に、コントローラ12は、VBが初期パイプラインレジスタ8Aにコピーされるようにし得る。一例として、コントローラ12は、論理10Aに、GPR4BからVBを受け取らせ、VBをパイプラインレジスタ8Aに渡させ得る。
[0044]クロック14から信号を受け取ると、処理ユニット2は時間サイクルt2に進み得る。時間サイクルt2中に、論理10Cは、パイプラインレジスタ8BからVAを受け取り、VAをパイプラインレジスタ8Cに渡し得る。また時間サイクルt2中に、論理10Bは、パイプラインレジスタ8AからVBを受け取り、VBをパイプラインレジスタ8Bに渡し得る。言い換えれば、時間サイクルt2中に、VAとVBの両方は、VAがパイプラインレジスタ8Cにコピーされ、VBがパイプラインレジスタ8Bにコピーされるように進み得る。
[0045]クロック14から信号を受け取ると、処理ユニット2は時間サイクルt3に進み得る。時間サイクルt3中に、論理10Dは、パイプラインレジスタ8CからVAを受け取り、VAをパイプラインレジスタ8Dに渡し得る。また時間サイクルt3中に、論理10Cは、パイプラインレジスタ8BからVBを受け取り、VBをパイプラインレジスタ8Cに渡し得る。言い換えれば、時間サイクルt3中に、VAとVBの両方は、VAがパイプラインレジスタ8Dにコピーされ、VBがパイプラインレジスタ8Cにコピーされるように進み得る。
[0046]クロック14から信号を受け取ると、処理ユニット2は時間サイクルt4に進み得る。時間サイクルt4中に、論理10Eは、パイプラインレジスタ8DからVAを受け取り、VAをGPR4Bに渡し得る。また時間サイクルt4中に、論理10Dは、パイプラインレジスタ8CからVBを受け取り、VBをパイプラインレジスタ8Dに渡し得る。言い換えれば、時間サイクルt4中に、VAは、GPR4Bに記憶される値が、時間サイクルt0中にGPR4Aに記憶された同じ値を表すように、最終パイプラインレジスタ8DからGPR4Bにコピーされ得、VBは、VBがパイプラインレジスタ8Dにコピーされるように進み得る。命令がVAのデータ型の変更を要求した場合など、いくつかの例では、GPR4Bによって記憶される値は、データ型のみが異なる、時間サイクルt0中にGPR4Aに記憶された値の表現であり得る。
[0047]クロック14から信号を受け取ると、処理ユニット2は時間サイクルt5に進み得る。時間サイクルt5中に、論理10Eは、パイプラインレジスタ8DからVBを受け取り、VBをGPR4Aに渡し得る。言い換えれば、時間サイクルt5中に、VBは、GPR4Aが、時間サイクルt0中にGPR4Bに記憶された同じ値を記憶するように、最終パイプラインレジスタ8DからGPR4Aにコピーされ得る。このようにして、コントローラ12は、(たとえば、第1のサイクル中に第1のGPRから一時的GPRに第1の値をコピーし、第2のサイクル中に第2のGPRから第1のGPRに第2の値をコピーし、第3のサイクル中に一時的GPRから第2のGPRに第1の値をコピーすることとは対照的に)一時的ストレージのために追加のGPRを使用することなしにスワップ/スウィズル命令を実行し得る。
[0048]コントローラ12は、複数の任意のソースGPRから複数の連続して位置する宛先GPRに複数の値を移動するようにコントローラ12に命令するギャザー命令を受け取り得る。たとえば、コントローラ12は、以下の命令(2)による4値ギャザー命令を受け取り得、ここで、dstはGPR4のうちの第1の宛先GPRを示し、src0はGPR4のうちの第1のソースGPRを示し、src1はGPR4のうちの第2のソースGPRを示し、src2はGPR4のうちの第3のソースGPRを示し、src3はGPR4のうちの第4のソースGPRを示す。
Figure 0006301501
[0049]コントローラ12がn値ギャザー命令を実行することから生じる挙動は、以下のように表され得る。
Figure 0006301501
[0050]いくつかの例では、コントローラ12は、4つの命令サイクル中で4値ギャザー命令を実行し得る。いくつかの例では、命令は、ソースが命令自体によって上書きされた場合、古いソースを使用し得る。
[0051]図3Bは、ギャザーコンボ移動命令の実行中の処理ユニットを通る例示的なデータフローを示している。たとえば、図3Bによって示されたデータフローは、3値ギャザー命令gat4B、4E、4B、4Dの実行中の処理ユニット2内のデータフローであり得る。
[0052]コントローラ12は、複数の連続して位置するソースGPRから複数の任意の宛先GPRに複数の値を移動するようにコントローラ12に命令するスキャッタ命令を受け取り得る。たとえば、コントローラ12は、以下の命令(3)による4値ギャザー命令を受け取り得、ここで、dst0はGPR4のうちの第1の宛先GPRを示し、dst1はGPR4のうちの第2の宛先GPRを示し、dst2はGPR4のうちの第3の宛先GPRを示し、dst3はGPR4のうちの第4の宛先GPRを示し、srcはGPR4のうちの第1のソースGPRを示す。
Figure 0006301501
[0053]コントローラ12がn値スキャッタ命令を実行することから生じる挙動は、以下のように表され得る。
Figure 0006301501
[0054]いくつかの例では、コントローラ12は、4つの命令サイクル中で4値ギャザー命令を実行し得る。いくつかの例では、命令は、ソースが命令自体によって上書きされた場合、古いソースを使用し得る。
[0055]図3Cは、スキャッタコンボ移動命令の実行中の処理ユニットを通る例示的なデータフローを示している。たとえば、図3Cによって示されたデータフローは、3値スキャッタ命令gat4B、4E、4B、4Dの実行中の処理ユニット2内のデータフローであり得る。
[0056]パイプライン6を通して、コピーされた各値を渡すように上記で説明したが、いくつかの例では、コントローラ12は、パイプライン6を通して、コピーされた値のサブセットのみを渡すことによってコンボ移動命令を実行し得る。たとえば、swz4C、4A、4B、4A、4B、4Cなど、3値スウィズル命令を実行するとき、コントローラ12は、第1のサイクル中に、GPR4Aによって記憶された値をパイプラインレジスタ8のうちの初期パイプラインレジスタにコピーし、第2のサイクル中に、GPR4Cによって記憶された値をGPR4Aにコピーし、第3のサイクル中に、GPR4Bによって記憶された値をGPR4Cにコピーし、第4のサイクル中に、パイプラインレジスタ8のうちの最終パイプラインレジスタからGPR4Bに値をコピーし得る。特定のGPRが複数の宛先GPRと複数のソースGPRの両方中に含まれない場合など、いくつかの例では、コントローラ12は、パイプライン6を通して値を渡すことなしにコンボ移動命令を実行し得る。
[0057]図4は、本開示の1つまたは複数の技法による、コンボ移動命令を実行するとき、GPR間で値を移動するためにパイプラインレジスタを使用する処理ユニットの例示的な動作を示すフローチャートである。図4の技法は、図1に示された処理ユニット2、または図2に示された処理ユニット2Aなど、処理ユニットによって実施され得る。説明の目的で、図4の技法について図1の処理ユニット2のコンテキスト内で説明するが、処理ユニット2のそれとは異なる構成を有する処理ユニットが図4の技法を実施し得る。
[0058]本開示の1つまたは複数の技法によれば、処理ユニット2のコントローラ12は1つまたは複数の命令を受け取り得る。たとえば、コントローラ12は、複数のGPRのうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取る(400)。いくつかの例では、命令は、第1の値のデータ型および/または第2の値のデータ型の一方または両方が変換されることをさらに要求し得る。たとえば、第1の値が整数として第1のGPRに記憶された場合、命令は、第1の値が、第3のGPRに移動され、浮動小数点値に変換されることを要求し得る。
[0059]1つまたは複数の命令を受け取ったことに応答して、コントローラ12は、パイプライン6の論理ユニット10のうちの初期論理ユニットに、第1のサイクル中に、パイプライン6のパイプラインレジスタ8のうちの初期パイプラインレジスタ(たとえば、パイプラインレジスタ8A)に第1の値をコピーさせる(402)。一例として、コントローラ12は、初期論理ユニットに、第1のGPRから第1の値を取り出させ、第1の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。別の例として、第1の値がパイプラインレジスタ8のうちの特定のパイプラインレジスタによってすでに記憶されている場合、コントローラ12は、初期論理ユニットに、特定のパイプラインレジスタから第1の値を取り出させ、第1の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。上記で説明したように、パイプラインレジスタ8は複数のGPR4とは異なる。さらに、上記で説明したように、処理ユニット2は、パイプラインレジスタ8のうちの1つのパイプラインレジスタにアクセスするとき、GPR4のうちのGPRにアクセスするときよりも少ない電力を消費し得る。たとえば、処理ユニット2は、パイプラインレジスタにアクセスするとき、GPRにアクセスするときと比較して半分の電力を消費し得る。命令が第1の値のデータ型の変換を要求する場合など、いくつかの例では、論理ユニットのうちの1つまたは複数はデータ型変換を実施し得る。たとえば、初期論理ユニットは、整数データ型から浮動小数点データ型に第1の値を変換し得る。初期論理ユニットは、第2のサイクル中に、GPR4のうちの第2のGPRから初期パイプラインレジスタに第2の値をコピーする(404)。一例として、コントローラ12は、初期論理ユニットに、第2のGPRから第2の値を取り出させ、第2の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。別の例として、第2の値がパイプラインレジスタ8のうちの特定のパイプラインレジスタによってすでに記憶されている場合、コントローラ12は、初期論理ユニットに、特定のパイプラインレジスタから第2の値を取り出させ、第2の値を初期パイプラインレジスタに記憶させる信号を初期論理ユニットに送り得る。上記で説明したように、また第2のサイクル中に、論理ユニット10のうちの後続の論理ユニット(たとえば、論理ユニット10B)は、パイプラインレジスタ8のうちの後続のパイプラインレジスタ(たとえば、パイプラインレジスタ8B)に第1の値をコピーし得る。たとえば、コントローラ12は、後続の論理ユニットに、初期パイプラインレジスタから第1の値を取り出させ、第1の値を後続のパイプラインレジスタに記憶させる信号を後続の論理ユニットに送り得る。
[0060]パイプライン6が2段パイプラインである場合、後続のパイプラインレジスタは、パイプラインレジスタ8のうちの最終パイプラインレジスタ(たとえば、パイプラインレジスタN−1)であり得る。しかしながら、パイプライン6が2段よりも多い段を有する場合、第1の値が最終パイプラインレジスタに記憶されるまで、第1の値および第2の値はパイプライン6の段を通って進み得る。したがって、第2のサイクルと第3のサイクルとの間に複数のサイクルがあり得る。
[0061]論理ユニット10のうちの最終論理ユニット(たとえば、論理ユニット10N)は、第3のサイクル中に、最終パイプラインレジスタから第3のGPRに第1の値をコピーする(406)。たとえば、コントローラ12は、最終論理ユニットに、最終パイプラインレジスタから第1の値を取り出させ、第1の値を第3のGPRに記憶させる信号を最終論理ユニットに送り得る。上記で説明したように、また第3のサイクル中に、第N−1の論理ユニット(すなわち、最後から2番目の論理ユニット)は、第N−1のパイプラインレジスタ(すなわち、最後から2番目のパイプラインレジスタ)から最終パイプラインレジスタに第2の値をコピーし得る。
[0062]最終論理ユニットは、第4のサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーする(408)。たとえば、コントローラ12は、最終論理ユニットに、最終パイプラインレジスタから第2の値を取り出させ、第2の値を第4のGPRに記憶させる信号を最終論理ユニットに送り得る。上記で説明したように、コントローラ12は、コンボ移動命令など、単一の命令を受け取ったことに応答して、論理ユニットに、値をコピー(すなわち、動作402〜408を実施)させ得る。
[0063]図5は、本開示の1つまたは複数の技法による、コンボ移動命令を出力する例示的なコンパイラモジュール16を示すブロック図である。図5の例に示されているように、コンパイラモジュール16は、コードを受け取り、命令を出力し得る。コンパイラモジュール16は、複数のGPRと、複数のパイプラインレジスタを含むパイプラインとを含む、図1の処理ユニット2または図2の処理ユニット2Aなど、処理ユニットが実行する命令を出力し得る。いくつかの例では、コンパイラモジュール16は、処理ユニットと同じデバイス中に含まれ得る。さらに、図5の例に示されているように、コンパイラモジュール16はコンボ移動モジュール18を含み得る。
[0064]コンボ移動モジュール18は、受け取られたコードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定するように構成され得る。たとえば、コンボ移動モジュール18は、コードによって示された複数の動作が、処理ユニットの複数のGPRの間で複数の値を移動することを含むかどうかを決定するために、コードを分析し得る。いずれの場合も、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、コンボ移動モジュール18は、処理ユニットによって実行されたとき、複数の動作と同じ結果を達成する単一のコンボ移動命令を生成し得る。一例として、コードによって示された複数の動作が、第1のGPRから一時的GPRに第1の値を移動し、第2のGPRから第1のGPRに第2の値を移動し、一時的GPRから第2のGPRに第1の値を移動することを含む場合、コンボ移動モジュールは、より少数の命令サイクル中で同じ結果を達成する単一のスウィズル命令を生成し得る。
[0065]いくつかの例では、コンパイラモジュール16は、コンパイルされていないコードを受け取り得る。そのような例では、コンパイラモジュール16はコードを命令にコンパイルし得る。いくつかの例では、コンボ移動モジュール18は、コンパイルプロセス中に、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定し得る。いくつかの例では、コンボ移動モジュール18は、コンパイルプロセスが完了した後に、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定し得る。いくつかの例では、コンパイラモジュール16は、コンパイルされたコード(たとえば、命令)を受け取り得る。そのような例では、コンボ移動モジュール18は、命令のいずれかがコンボ移動命令に組み合わせられ得るかどうかを決定するために、コード中に含まれる命令を分析し得る。
[0066]図6は、本開示の1つまたは複数の技法による、コンボ移動命令を出力するコンパイラモジュールの例示的な動作を示すフローチャートである。図6の技法は、図5に示されたコンパイラモジュール16など、コンパイラモジュールによって実施され得る。説明の目的で、図6の技法について図5のコンパイラモジュール16のコンテキスト内で説明するが、コンパイラモジュール16のそれとは異なる構成を有するコンパイラモジュールが図6の技法を実施し得る。
[0067]本開示の1つまたは複数の技法によれば、コンパイラモジュール16はコードを受け取る(602)。上記で説明したように、コードは、コンパイルされたコードまたはコンパイルされていないコードであり得る。コンパイラモジュール16のコンボ移動モジュール18は、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得るかどうかを決定する(604)。コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、コンボ移動モジュール18はコンボ移動命令を生成する(606)。上記で説明したように、いくつかの例示的なコンボ移動命令は、1つのスウィズル命令(a swizzle instruction)と、1つのギャザー命令(a gather instruction)と、1つのスキャッタ命令(a scatter instruction)とを含む。また上記で説明したように、コードが複数の命令を含む場合、コンボ移動モジュール18は、コンボ移動命令に組み合わせられ得る複数の動作に対応する命令を、生成されたコンボ移動命令と置き換え得る。このようにして、コンボ移動モジュール18は、動作を実施するために必要とされる命令の数を低減し得る。またこのようにして、コンボ移動モジュール18は、動作を実施するために処理モジュールによって必要とされる命令サイクルの数を低減し得る。
[0068]図7は、本開示の1つまたは複数の技法による、図1の集積回路を含む例示的なデバイス100を示すブロック図である。デバイス100の例としては、限定はしないが、ワイヤレスデバイス、携帯電話、携帯情報端末(PDA)、ビデオディスプレイを含むビデオゲーミングコンソール、モバイルビデオ会議ユニット、ラップトップコンピュータ、デスクトップコンピュータ、テレビジョンセットトップボックス、タブレットコンピューティングデバイス、電子ブックリーダーなどがある。デバイス100は、GPU17と、システムメモリ19と、プロセッサ20とを含む。図6に示された例では、GPU17およびプロセッサ20は、GPU17とプロセッサ20とが同じ集積回路中に形成され得ることを示すために破線で示されている。いくつかの例では、GPU17とプロセッサ20とは他の集積回路中に形成され(すなわち、異なるチップ中にあり)得る。いくつかの例では、GPU17とプロセッサ20の一方または両方は図1の集積回路1の例であり得る。たとえば、GPU17およびプロセッサ20の一方または両方は、複数の汎用レジスタ(GPR)のうちの複数のソースGPRから複数のGPRのうちの複数の宛先GPRに複数の値を移動するとき、複数のパイプラインレジスタを一時的ストレージとして利用するように構成され得る。
[0069]システムメモリ19はデバイス100のためのメモリと見なされ得る。システムメモリ19は1つまたは複数のコンピュータ可読記憶媒体を備え得る。システムメモリ19の例としては、限定はしないが、ランダムアクセスメモリ(RAM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM(登録商標))、フラッシュメモリ、あるいは命令および/またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用され得、コンピュータまたはプロセッサによってアクセスされ得る、任意の他の媒体がある。
[0070]いくつかの態様では、システムメモリ19は、本開示においてプロセッサ20およびGPU17に起因する機能をプロセッサ20および/またはGPU17に実施させる命令を含み得る。したがって、システムメモリ19は、実行されたとき、1つまたは複数のプロセッサ(たとえば、プロセッサ20およびGPU17)に様々な機能を実施させる命令を記憶したコンピュータ可読記憶媒体であり得る。システムメモリ19は、GPU17および/またはプロセッサ20に、本開示で説明する例示的な技法を実装させる命令を記憶し得る。
[0071]システムメモリ19は、いくつかの例では、非一時的記憶媒体と見なされ得る。「非一時的」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示し得る。ただし、「非一時的」という用語は、システムメモリ19が非可動であること、またはそれのコンテンツが静的であることを意味すると解釈されるべきではない。一例として、システムメモリ19は、デバイス100から取り外され、別のデバイスに移動され得る。別の例として、システムメモリ19と実質的に同様のメモリがデバイス100中に挿入され得る。いくつかの例では、非一時的記憶媒体は、時間とともに変化し得るデータを(たとえば、RAMに)記憶し得る。
[0072]プロセッサ20およびGPU17の例としては、限定はしないが、デジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路がある。いくつかの例では、GPU17は、グラフィックス処理に好適な超並列処理能力をGPU17に与える集積回路および/または個別論理回路を含む専用ハードウェアであり得る。いくつかの事例では、GPU17は、汎用処理能力をも含み得、汎用処理タスク(すなわち、非グラフィックス関係タスク)を実装するとき、汎用GPU(GPGPU)と呼ばれることがある。
[0073]プロセッサ20は様々なタイプのアプリケーションを実行し得る。アプリケーションの例としては、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、または表示のために閲覧可能オブジェクトを生成する他のアプリケーションがある。1つまたは複数のアプリケーションの実行のための命令はシステムメモリ19内に記憶され得る。プロセッサ20は、さらなる処理のために閲覧可能オブジェクトのグラフィックスデータをGPU17に送信し得る。
[0074]たとえば、プロセッサ120は、超並列動作を必要とするタスクなど、処理タスクをGPU17にオフロードし得る。一例として、グラフィックス処理は超並列動作を必要とし、プロセッサ20は、そのようなグラフィックス処理タスクをGPU17にオフロードし得る。プロセッサ20は、特定のアプリケーション処理インターフェース(API:application processing interface)に従ってGPU17と通信し得る。そのようなAPIの例としては、Microsoft(登録商標)によるDirectX(登録商標)API、クロノスグループによるOpenGL(登録商標)API、およびOpenCL(登録商標)APIがあるが、本開示の態様は、DirectX、OpenGL、またはOpenCL APIに限定されず、他のタイプのAPIに拡張され得る。その上、本開示で説明する技法は、APIに従って機能することを必要とせず、プロセッサ20およびGPU17は通信のために任意の技法を利用し得る。
[0075]グラフィックス演算を実施するために、GPU17はグラフィックス処理パイプラインを実装し得る。グラフィックス処理パイプラインは、GPU17上で実行するソフトウェアまたはファームウェアによって定義された機能を実施することと、まさに特定の機能を実施するように配線接続された固定機能ユニットによって機能を実施することとを含む。GPU17上で実行するソフトウェアまたはファームウェアはシェーダプログラム(shader programs)(または単にシェーダ)と呼ばれることがあり、シェーダプログラムは、GPU17の1つまたは複数のシェーダコア(シェーダプロセッサとも呼ばれる)上で実行し得る。ユーザは、任意の考えられる様式で所望のタスクを実施するようにシェーダプログラムを設計することができるので、シェーダプログラムはユーザに機能的フレキシビリティを与える。しかしながら、固定機能ユニットは、固定機能ユニットがタスクを実施する様式のために配線接続される。したがって、固定機能ユニットは多くの機能的フレキシビリティを与えないことがある。
[0076]たとえば、プロセッサ20は、ビデオゲームなどのアプリケーションを実行し得、プロセッサ20は、実行の一部としてグラフィックスデータを生成し得る。プロセッサ20は、GPU17によって処理するためにグラフィックスデータを出力し得る。GPU17は、次いで、グラフィックスパイプライン中でグラフィックスデータを処理し得る。いくつかの例では、グラフィックデータを処理するために、GPU17は、1つまたは複数のシェーダプログラムを実行する必要があり得る。たとえば、プロセッサ20上で実行しているアプリケーションは、システムメモリ19からシェーダプログラムを取り出すようにGPU17に命令することと、シェーダプログラムを実行するようにGPU17に命令することとをプロセッサ20に行わせ得る。
[0077]頂点シェーダ(vertex shaders)、ハルシェーダ(hull shaders)、ドメインシェーダ、ジオメトリシェーダ、フラグメントシェーダなど、様々なタイプのシェーダプログラムがある。これらの例示的なシェーダプログラムの各々は、グラフィックスパイプラインのある部分を形成し得る。たとえば、GPU17の固定機能ユニットは、例示的なシェーダプログラムのうちの1つまたは複数を実行するシェーダコアにデータを出力し得、例示的なシェーダプログラムのうちの1つまたは複数は、データを処理し、得られたデータをGPU17の別の固定機能ユニットに出力し得る。シェーダプログラムが、別のシェーダプログラムからデータを受け取るか、または別のシェーダプログラムにデータを出力することも可能であり得る。このようにして、シェーダプログラムはグラフィックスパイプラインの一部分として実装される。
[0078]頂点シェーダ、ハルシェーダ、ドメインシェーダ、ジオメトリシェーダ、フラグメントシェーダなど、様々なタイプのシェーダプログラムがある。これらの例示的なシェーダプログラムの各々は、グラフィックスパイプラインのある部分を形成し得る。たとえば、GPU16の固定機能ユニットは、例示的なシェーダプログラムのうちの1つまたは複数を実行するシェーダコアにデータを出力し得、例示的なシェーダプログラムのうちの1つまたは複数は、データを処理し、得られたデータをGPU16の別の固定機能ユニットに出力し得る。シェーダプログラムが、別のシェーダプログラムからデータを受け取るか、または別のシェーダプログラムにデータを出力することも可能であり得る。このようにして、シェーダプログラムはグラフィックスパイプラインの一部分として実装される。
[0079]デバイス100はまた、ディスプレイ60と、ユーザインターフェース62と、トランシーバモジュール64とを含み得る。デバイス100は、明快のために図7に示されていない追加のモジュールまたはユニットを含み得る。たとえば、デバイス100は、デバイス100がモバイルワイヤレス電話である例において電話通信を実現するために、そのいずれも図7に示されていないスピーカーおよびマイクロフォンを含み得る。さらに、デバイス100に示された様々なモジュールおよびユニットは、デバイス100のあらゆる例において必要であるとは限らない。たとえば、ユーザインターフェース62およびディスプレイ60は、デバイス100がデスクトップコンピュータである例においてデバイス100の外部にあり得る。別の例として、ユーザインターフェース62は、ディスプレイ60がモバイルデバイスのタッチセンシティブまたはプレゼンスセンシティブディスプレイである例においてディスプレイ60の一部であり得る。
[0080]ユーザインターフェース62の例としては、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスがある。ユーザインターフェース62はまた、タッチスクリーンであり得、ディスプレイ60の一部として組み込まれ得る。トランシーバモジュール64は、デバイス100と別のデバイスまたはネットワークとの間のワイヤレスまたはワイヤード通信を可能にするための回路を含み得る。トランシーバモジュール64は、ワイヤードまたはワイヤレス通信のための変調器、復調器、増幅器および他のそのような回路を含み得る。ディスプレイ60は、液晶ディスプレイ(LCD)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、タッチセンシティブディスプレイ、プレゼンスセンシティブディスプレイ、または別のタイプのディスプレイデバイスを備え得る。
[0081]例1。処理ユニットが、複数の汎用レジスタ(GPR)のうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取ることと、1つまたは複数の命令を受け取ったことに応答して、処理ユニットの初期論理ユニットが、第1のクロックサイクル中に、パイプラインの複数パイプラインレジスタのうちの初期パイプラインレジスタに第1の値をコピーすることと、ここにおいて、複数のパイプラインレジスタが複数のGPRとは異なる、処理ユニットの初期論理ユニットが、第1のクロックサイクルの後にある第2のクロックサイクル中に、初期パイプラインレジスタに第2の値をコピーすることと、処理ユニットの最終論理ユニットが、第2のクロックサイクルの後にある第3のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第3のGPRに第1の値をコピーすることと、ここにおいて、第3のGPRにコピーされる第1の値が、第1のGPRからコピーされた同じ第1の値を表す、処理ユニットの最終論理ユニットが、第2のクロックサイクルの後にある第4のクロックサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーすることと、ここにおいて、第4のGPRにコピーされる第2の値が、第2のGPRからコピーされた同じ第2の値を表す、を備える方法。
[0082]例2。1つまたは複数の命令が、第1のGPRと、第2のGPRと、第3のGPRと、第4のGPRとを識別し、1つまたは複数の命令がパイプラインレジスタのいずれをも個々に識別しない、例1に記載の方法。
[0083]例3。複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、複数のGPRが命令によって個々にアクセス可能である、例1から2の任意の組合せに記載の方法。
[0084]例4。処理ユニットが、複数のパイプラインレジスタのうちのパイプラインレジスタにアクセスするとき、複数のGPRのうちのGPRにアクセスするときよりも少ない電力を消費する、例1から3の任意の組合せに記載の方法。
[0085]例5。1つまたは複数の命令は、第1のGPRから第3のGPRに第1の値が移動されることと、第2のGPRから第4のGPRに第2の値が移動されることとを要求する単一の割込み不可能な命令を備える、例1から4の任意の組合せに記載の方法。
[0086]例6。命令が、スワップ命令と、ここにおいて、第3のGPRが第2のGPRであり、ここにおいて、第4のGPRが第1のGPRである、スウィズル命令と、ここにおいて、複数のGPRが任意に位置する、ギャザー命令と、ここにおいて、第1のGPRと第2のGPRとが連続して位置せず、ここにおいて、第3のGPRと第4のGPRとが連続して位置する、スキャッタ命令と、ここにおいて、第1のGPRと第2のGPRとが連続して位置し、ここにおいて、第3のGPRと第4のGPRとが連続して位置しない、からなるグループから選択される、例1から5の任意の組合せに記載の方法。
[0087]例7。パイプラインが、1つまたは複数の算術論理ユニット(ALU)を含むマルチサイクル計算パイプラインである、例1から6の任意の組合せに記載の方法。
[0088]例8。中間論理ユニットが、第1のクロックサイクルの後、および第3のクロックサイクルの前に、初期パイプラインレジスタから複数のパイプラインレジスタのうちの中間パイプラインレジスタに第1の値をコピーすることと、中間論理ユニットが、第2のクロックサイクルの後、および第4のクロックサイクルの前に、初期パイプラインレジスタから中間パイプラインレジスタに第2の値をコピーすることとをさらに備える、例1から7の任意の組合せに記載の方法。
[0089]例9。処理ユニットが、中央処理ユニット(CPU)またはグラフィカル処理ユニット(GPU)から構成される、例1から8の任意の組合せに記載の方法。
[0090]例10。初期パイプラインレジスタに第1の値をコピーすることが、第1のGPRから初期パイプラインレジスタに第1の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第1の値をコピーすることのいずれかを備え、初期パイプラインレジスタに第2の値をコピーすることが、第2のGPRから初期パイプラインレジスタに第2の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第2の値をコピーすることのいずれかを備える、例1から9の任意の組合せに記載の方法。
[0091]例11。第3のGPRが第2のGPRであり、および/または第4のGPRが第1のGPRである、例1から10の任意の組合せに記載の方法。
[0092]例12。複数の汎用レジスタ(GPR)と、複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、複数のパイプラインレジスタが複数のGPRとは異なる、複数の論理ユニットと、複数のGPRのうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取るように構成されたコントローラと、ここにおいて、1つまたは複数の命令を受け取ったことに応答して、コントローラが、複数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、複数のパイプラインレジスタのうちの初期パイプラインレジスタに第1の値をコピーさせることと、初期論理ユニットに、第1のクロックサイクルの後にある第2のクロックサイクル中に、初期パイプラインレジスタに第2の値をコピーさせることと、複数の論理ユニットのうちの最終論理ユニットに、第2のクロックサイクルの後にある第3のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第3のGPRに第1の値をコピーさせることと、ここにおいて、第3のGPRにコピーされる第1の値が、第1のGPRからコピーされた同じ第1の値を表す、最終論理ユニットに、第2のクロックサイクルの後にある第4のクロックサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーさせることと、ここにおいて、第4のGPRにコピーされる第2の値が、第2のGPRからコピーされた同じ第2の値を表す、を行うように構成された、を備える処理ユニット。
[0093]例13。1つまたは複数の命令が、第1のGPRと、第2のGPRと、第3のGPRと、第4のGPRとを識別し、1つまたは複数の命令がパイプラインレジスタのいずれをも個々に識別しない、例12に記載の処理ユニット。
[0094]例14。複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、複数のGPRが命令によって個々にアクセス可能である、例12から13の任意の組合せに記載の処理ユニット。
[0095]例15。処理ユニットが、複数のパイプラインレジスタのうちのパイプラインレジスタにアクセスするとき、複数のGPRのうちのGPRにアクセスするときよりも少ない電力を消費する、例12から14の任意の組合せに記載の処理ユニット。
[0096]例16。1つまたは複数の命令は、第1のGPRから第3のGPRに第1の値が移動されることと、第2のGPRから第4のGPRに第2の値が移動されることとを要求する単一の割込み不可能な命令を備える、例12から15の任意の組合せに記載の処理ユニット。
[0097]例17。命令が、スワップ命令と、ここにおいて、第3のGPRが第2のGPRであり、ここにおいて、第4のGPRが第1のGPRである、スウィズル命令と、ここにおいて、複数のGPRが任意に位置する、ギャザー命令と、ここにおいて、第1のGPRと第2のGPRとが連続して位置せず、ここにおいて、第3のGPRと第4のGPRとが連続して位置する、スキャッタ命令と、ここにおいて、第1のGPR、ここにおいて、第1のGPRと第2のGPRとが連続して位置し、ここにおいて、第3のGPRと第4のGPRとが連続して位置しない、からなるグループから選択される、例12から16の任意の組合せに記載の処理ユニット。
[0098]例18。パイプラインが、1つまたは複数の算術論理ユニット(ALU)を含むマルチサイクル計算パイプラインである、例12から17の任意の組合せに記載の処理ユニット。
[0099]例19。1つまたは複数の命令を受け取ったことに応答して、コントローラが、複数の論理ユニットのうちの中間論理ユニットに、第1のクロックサイクルの後、および第3のクロックサイクルの前に、初期パイプラインレジスタから複数のパイプラインレジスタのうちの中間パイプラインレジスタに第1の値をコピーさせることと、中間論理ユニットに、第2のクロックサイクルの後、および第4のクロックサイクルの前に、初期パイプラインレジスタから中間パイプラインレジスタに第2の値をコピーさせることとを行うようにさらに構成された、例12から18の任意の組合せに記載の処理ユニット。
[0100]例20。処理ユニットが、中央処理ユニット(CPU)またはグラフィカル処理ユニット(GPU)から構成される、例12から19の任意の組合せに記載の処理ユニット。
[0101]例21。初期論理ユニットが、第1のGPRから初期パイプラインレジスタに第1の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第1の値をコピーすることのいずれかによって初期パイプラインレジスタに第1の値をコピーするように構成され、初期論理ユニットが、第2のGPRから初期パイプラインレジスタに第2の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第2の値をコピーすることのいずれかによって初期パイプラインレジスタに第2の値をコピーするように構成された、例12から20の任意の組合せに記載の処理ユニット。
[0102]例22。第3のGPRが第2のGPRであり、および/または第4のGPRが第1のGPRである、例12から21の任意の組合せに記載の処理ユニット。
[0103]例23。複数のGPRのうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する、処理ユニットに対する1つまたは複数の命令を記憶する非一時的コンピュータ可読記憶媒体であって、1つまたは複数の命令が、実行されたとき、複数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに第1の値をコピーさせることと、初期論理ユニットに、第1のクロックサイクルの後にある第2のクロックサイクル中に、初期パイプラインレジスタに第2の値をコピーさせることと、複数の論理ユニットのうちの最終論理ユニットに、第2のクロックサイクルの後にある第3のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第3のGPRに第1の値をコピーさせることと、ここにおいて、第3のGPRにコピーされる第1の値が、第1のGPRからコピーされた同じ第1の値を表す、最終論理ユニットに、第2のクロックサイクルの後にある第4のクロックサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーさせることと、ここにおいて、第4のGPRにコピーされる第2の値が、第2のGPRからコピーされた同じ第2の値を表す、を処理ユニットに行わせる、非一時的コンピュータ可読記憶媒体。
[0104]例24。1つまたは複数の命令が、第1のGPRと、第2のGPRと、第3のGPRと、第4のGPRとを識別し、1つまたは複数の命令がパイプラインレジスタのいずれをも個々に識別しない、例23に記載の非一時的コンピュータ可読記憶媒体。
[0105]例25。複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、複数のGPRが命令によって個々にアクセス可能である、例23から24の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0106]例26。処理ユニットが、複数のパイプラインレジスタのうちのパイプラインレジスタにアクセスするとき、複数のGPRのうちのGPRにアクセスするときよりも少ない電力を消費する、例23から25の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0107]例27。処理ユニットが、単一の割込み不可能な命令を受け取ったことに応答して値をコピーする、例23から26の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0108]例28。命令が、スワップ命令と、ここにおいて、第3のGPRが第2のGPRであり、ここにおいて、第4のGPRが第1のGPRである、スウィズル命令と、ここにおいて、複数のGPRが任意に位置する、ギャザー命令と、ここにおいて、第1のGPRと第2のGPRとが連続して位置せず、ここにおいて、第3のGPRと第4のGPRとが連続して位置する、スキャッタ命令と、ここにおいて、第1のGPR、ここにおいて、第1のGPRと第2のGPRとが連続して位置し、ここにおいて、第3のGPRと第4のGPRとが連続して位置しない、からなるグループから選択される、例23から27の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0109]例29。パイプラインが、1つまたは複数の算術論理ユニット(ALU)を含むマルチサイクル計算パイプラインである、例23から28の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0110]例30。実行されたとき、1つまたは複数の命令が、複数の論理ユニットのうちの中間論理ユニットに、第1のクロックサイクルの後、および第3のクロックサイクルの前に、初期パイプラインレジスタから複数のパイプラインレジスタのうちの中間パイプラインレジスタに第1の値をコピーさせることと、中間論理ユニットに、第2のクロックサイクルの後、および第4のクロックサイクルの前に、初期パイプラインレジスタから中間パイプラインレジスタに第2の値をコピーさせることとを処理ユニットに行わせる、例23から29の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0111]例31。処理ユニットが、中央処理ユニット(CPU)またはグラフィカル処理ユニット(GPU)から構成される、例23から30の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0112]例32。初期論理ユニットが、第1のGPRから初期パイプラインレジスタに第1の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第1の値をコピーすることのいずれかによって初期パイプラインレジスタに第1の値をコピーするように構成され、初期論理ユニットが、第2のGPRから初期パイプラインレジスタに第2の値をコピーすること、または複数のパイプラインレジスタのうちのパイプラインレジスタから初期パイプラインレジスタに第2の値をコピーすることのいずれかによって初期パイプラインレジスタに第2の値をコピーするように構成された、例23から31の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0113]例33。第3のGPRが第2のGPRであり、および/または第4のGPRが第1のGPRである、例23から32の任意の組合せに記載の非一時的コンピュータ可読記憶媒体。
[0114]例34。コンパイラモジュールがコードを受け取ることと、コンパイラモジュールが、コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、コンボ移動命令を生成することとを備える方法であって、ここにおいて、処理ユニットによって実行されたとき、コンボ移動命令が、複数の汎用レジスタ(GPR)のうちの複数のソースGPRから複数のGPRのうちの複数の宛先GPRに複数の値を移動するとき、処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、複数のパイプラインレジスタが複数のGPRとは異なる、方法。
[0115]例35。コードによって示された複数の動作がコンボモード命令に組み合わせられ得ると決定することは、コードによって示された複数の動作が、複数のGPRの間で複数の値を移動することを含むと決定することに応答して、コードによって示された複数の動作がコンボモード命令に組み合わせられ得ると決定することを備える、例34に記載の方法。
[0116]例36。コードが複数の命令を備え、ここにおいて、上記方法が、コンボ移動命令に組み合わせられ得る複数の動作に対応する命令を、生成されたコンボ移動命令と置き換えることをさらに備える、例34から32の任意の組合せに記載の方法。
[0117]例37。例1から11および/または例34から36に記載の方法の任意の組合せを実施するための手段を備えるデバイス。
[0118]例38。例1から11および/または例34から36に記載の方法の任意の組合せを実施するための手段を備えるシステム。
[0119]例39。処理ユニットが、複数の汎用レジスタ(GPR)のうちの第1のGPRから複数のGPRのうちの第3のGPRに第1の値が移動されることと、複数のGPRのうちの第2のGPRから複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取るための手段と、1つまたは複数の命令を受け取ったことに応答して、処理ユニットの初期論理ユニットが、第1のクロックサイクル中に、パイプラインの複数パイプラインレジスタのうちの初期パイプラインレジスタに第1の値をコピーするための手段と、ここにおいて、複数のパイプラインレジスタが複数のGPRとは異なる、処理ユニットの初期論理ユニットが、第1のクロックサイクルの後にある第2のクロックサイクル中に、初期パイプラインレジスタに第2の値をコピーするための手段と、処理ユニットの最終論理ユニットが、第2のクロックサイクルの後にある第3のクロックサイクル中に、複数のパイプラインレジスタのうちの最終パイプラインレジスタから第3のGPRに第1の値をコピーするための手段と、ここにおいて、第3のGPRにコピーされる第1の値が、第1のGPRからコピーされた同じ第1の値を表す、処理ユニットの最終論理ユニットが、第2のクロックサイクルの後にある第4のクロックサイクル中に、最終パイプラインレジスタから第4のGPRに第2の値をコピーするための手段と、ここにおいて、第4のGPRにコピーされる第2の値が、第2のGPRからコピーされた同じ第2の値を表す、を備えるデバイス。
[0120]例40。例1から11に記載の方法の任意の組合せを実施するための手段をさらに備える、例40に記載のデバイス。
[0121]1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応する、コンピュータ可読記憶媒体を含み得るか、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、あるいは(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
[0122]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用してウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびblu−ray(登録商標)ディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0123]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび/またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
[0124]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示した技法を実施するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
[0125]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願発明の当初の特許請求の範囲に記載された発明を付記する。
[C1]
処理ユニットが、複数の汎用レジスタ(GPR)のうちの第1のGPRから前記複数のGPRのうちの第3のGPRに第1の値が移動されることと、前記複数のGPRのうちの第2のGPRから前記複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取ることと、
前記1つまたは複数の命令を受け取ったことに応答して、
前記処理ユニットの初期論理ユニットが、第1のクロックサイクル中に、パイプラインの複数パイプラインレジスタのうちの初期パイプラインレジスタに前記第1の値をコピーすることと、ここにおいて、前記複数のパイプラインレジスタが前記複数のGPRとは異なる、
前記処理ユニットの前記初期論理ユニットが、前記第1のクロックサイクルの後にある第2のクロックサイクル中に、前記初期パイプラインレジスタに前記第2の値をコピーすることと、
前記処理ユニットの最終論理ユニットが、前記第2のクロックサイクルの後にある第3のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第3のGPRに前記第1の値をコピーすることと、ここにおいて、前記第3のGPRにコピーされる前記第1の値が、前記第1のGPRからコピーされた前記同じ第1の値を表す、
前記処理ユニットの前記最終論理ユニットが、前記第2のクロックサイクルの後にある第4のクロックサイクル中に、前記最終パイプラインレジスタから前記第4のGPRに前記第2の値をコピーすることと、ここにおいて、前記第4のGPRにコピーされる前記第2の値が、前記第2のGPRからコピーされた前記同じ第2の値を表す、
を備える方法。
[C2]
前記1つまたは複数の命令が、前記第1のGPRと、前記第2のGPRと、前記第3のGPRと、前記第4のGPRとを識別し、
前記1つまたは複数の命令が前記パイプラインレジスタのいずれをも個々に識別しない、
C1に記載の方法。
[C3]
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のGPRが命令によって個々にアクセス可能である、C1に記載の方法。
[C4]
前記処理ユニットが、前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタにアクセスするとき、前記複数のGPRのうちの1つのGPRにアクセスするときよりも少ない電力を消費する、C1に記載の方法。
[C5]
前記1つまたは複数の命令は、前記第1のGPRから前記第3のGPRに前記第1の値が移動されることと、前記第2のGPRから前記第4のGPRに前記第2の値が移動されることとを要求する単一の割込み不可能な命令を備える、C1に記載の方法。
[C6]
前記命令が、
スワップ命令と、ここにおいて、前記第3のGPRが前記第2のGPRであり、ここにおいて、前記第4のGPRが前記第1のGPRである、
スウィズル命令と、ここにおいて、前記複数のGPRが任意に位置する、
ギャザー命令と、ここにおいて、前記第1のGPRと前記第2のGPRとが連続して位置せず、ここにおいて、前記第3のGPRと前記第4のGPRとが連続して位置する、
スキャッタ命令と、ここにおいて、前記第1のGPRと前記第2のGPRとが連続して位置し、ここにおいて、前記第3のGPRと前記第4のGPRとが連続して位置しない、
からなるグループから選択される、C5に記載の方法。
[C7]
前記パイプラインが、1つまたは複数の算術論理ユニット(ALU)を含むマルチサイクル計算パイプラインである、C1に記載の方法。
[C8]
中間論理ユニットが、前記第1のクロックサイクルの後、および前記第3のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの中間パイプラインレジスタに前記第1の値をコピーすることと、
前記中間論理ユニットが、前記第2のクロックサイクルの後、および前記第4のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第2の値をコピーすることと
をさらに備える、C1に記載の方法。
[C9]
前記処理ユニットが、中央処理ユニット(CPU)またはグラフィカル処理ユニット(GPU)から構成される、C1に記載の方法。
[C10]
前記初期パイプラインレジスタに前記第1の値をコピーすることが、
前記第1のGPRから前記初期パイプラインレジスタに前記第1の値をコピーすること、または
前記複数のパイプラインレジスタのうちのパイプラインレジスタから前記初期パイプラインレジスタに前記第1の値をコピーすること
のいずれかを備え、
前記初期パイプラインレジスタに前記第2の値をコピーすることが、
前記第2のGPRから前記初期パイプラインレジスタに前記第2の値をコピーすること、または
前記複数のパイプラインレジスタのうちのパイプラインレジスタから前記初期パイプラインレジスタに前記第2の値をコピーすること
のいずれかを備える、
C1に記載の方法。
[C11]
複数の汎用レジスタ(GPR)と、
複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、前記複数のパイプラインレジスタが前記複数のGPRとは異なる、
複数の論理ユニットと、
前記複数のGPRのうちの第1のGPRから前記複数のGPRのうちの第3のGPRに第1の値が移動されることと、前記複数のGPRのうちの第2のGPRから前記複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する1つまたは複数の命令を受け取るように構成されたコントローラと、
を備え、
前記1つまたは複数の命令を受け取ったことに応答して、前記コントローラが、
前記複数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、前記複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第1の値をコピーさせることと、
前記初期論理ユニットに、前記第1のクロックサイクルの後にある第2のクロックサイクル中に、前記初期パイプラインレジスタに前記第2の値をコピーさせることと、
前記複数の論理ユニットのうちの最終論理ユニットに、前記第2のクロックサイクルの後にある第3のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第3のGPRに前記第1の値をコピーさせることと、ここにおいて、前記第3のGPRにコピーされる前記第1の値が、前記第1のGPRからコピーされた前記同じ第1の値を表す、
前記最終論理ユニットに、前記第2のクロックサイクルの後にある第4のクロックサイクル中に、前記最終パイプラインレジスタから前記第4のGPRに前記第2の値をコピーさせることと、ここにおいて、前記第4のGPRにコピーされる前記第2の値が、前記第2のGPRからコピーされた前記同じ第2の値を表す、
を行うように構成された、処理ユニット。
[C12]
前記1つまたは複数の命令が、前記第1のGPRと、前記第2のGPRと、前記第3のGPRと、前記第4のGPRとを識別し、
前記1つまたは複数の命令が前記パイプラインレジスタのいずれをも個々に識別しない、
C11に記載の処理ユニット。
[C13]
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のGPRが命令によって個々にアクセス可能である、C11に記載の処理ユニット。
[C14]
前記処理ユニットが、前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタにアクセスするとき、前記複数のGPRのうちの1つのGPRにアクセスするときよりも少ない電力を消費する、C11に記載の処理ユニット。
[C15]
前記1つまたは複数の命令は、前記第1のGPRから前記第3のGPRに前記第1の値が移動されることと、前記第2のGPRから前記第4のGPRに前記第2の値が移動されることとを要求する単一の割込み不可能な命令を備える、C11に記載の処理ユニット。
[C16]
前記命令が、
スワップ命令と、ここにおいて、前記第3のGPRが前記第2のGPRであり、ここにおいて、前記第4のGPRが前記第1のGPRである、
スウィズル命令と、ここにおいて、前記複数のGPRが任意に位置する、
ギャザー命令と、ここにおいて、前記第1のGPRと前記第2のGPRとが連続して位置せず、ここにおいて、前記第3のGPRと前記第4のGPRとが連続して位置する、
スキャッタ命令と、ここにおいて、前記第1のGPR、ここにおいて、前記第1のGPRと前記第2のGPRとが連続して位置し、ここにおいて、前記第3のGPRと前記第4のGPRとが連続して位置しない、
からなるグループから選択される、C15に記載の処理ユニット。
[C17]
前記パイプラインが、1つまたは複数の算術論理ユニット(ALU)を含むマルチサイクル計算パイプラインである、C11に記載の処理ユニット。
[C18]
前記1つまたは複数の命令を受け取ったことに応答して、前記コントローラが、
前記複数の論理ユニットのうちの1つの中間論理ユニットに、前記第1のクロックサイクルの後、および前記第3のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの1つの中間パイプラインレジスタに前記第1の値をコピーさせることと、
前記中間論理ユニットに、前記第2のクロックサイクルの後、および前記第4のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第2の値をコピーさせることと
を行うようにさらに構成された、C11に記載の処理ユニット。
[C19]
前記処理ユニットが、1つの中央処理ユニット(CPU)または1つのグラフィカル処理ユニット(GPU)から構成される、C11に記載の処理ユニット。
[C20]
前記初期論理ユニットが、
前記第1のGPRから前記初期パイプラインレジスタに前記第1の値をコピーすること、または
前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタから前記初期パイプラインレジスタに前記第1の値をコピーすること
のいずれかによって前記初期パイプラインレジスタに前記第1の値をコピーするように構成され、
前記初期論理ユニットが、
前記第2のGPRから前記初期パイプラインレジスタに前記第2の値をコピーすること、または
前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタから前記初期パイプラインレジスタに前記第2の値をコピーすること
のいずれかによって前記初期パイプラインレジスタに前記第2の値をコピーするように構成された、
C11に記載の処理ユニット。
[C21]
複数のGPRのうちの第1のGPRから前記複数のGPRのうちの第3のGPRに第1の値が移動されることと、前記複数のGPRのうちの第2のGPRから前記複数のGPRのうちの第4のGPRに第2の値が移動されることとを要求する、処理ユニットに対する1つまたは複数の命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記1つまたは複数の命令が、実行されたとき、
前記複数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第1の値をコピーさせることと、
前記初期論理ユニットに、前記第1のクロックサイクルの後にある第2のクロックサイクル中に、前記初期パイプラインレジスタに前記第2の値をコピーさせることと、
前記複数の論理ユニットのうちの最終論理ユニットに、前記第2のクロックサイクルの後にある第3のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第3のGPRに前記第1の値をコピーさせることと、ここにおいて、前記第3のGPRにコピーされる前記第1の値が、前記第1のGPRからコピーされた前記同じ第1の値を表す、
前記最終論理ユニットに、前記第2のクロックサイクルの後にある第4のクロックサイクル中に、前記最終パイプラインレジスタから前記第4のGPRに前記第2の値をコピーさせることと、ここにおいて、前記第4のGPRにコピーされる前記第2の値が、前記第2のGPRからコピーされた前記同じ第2の値を表す、
を前記処理ユニットに行わせる、非一時的コンピュータ可読記憶媒体。
[C22]
前記1つまたは複数の命令が、前記第1のGPRと、前記第2のGPRと、前記第3のGPRと、前記第4のGPRとを識別し、
前記1つまたは複数の命令が前記パイプラインレジスタのいずれをも個々に識別しない、
C21に記載の非一時的コンピュータ可読記憶媒体。
[C23]
前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のGPRが命令によって個々にアクセス可能である、C21に記載の非一時的コンピュータ可読記憶媒体。
[C24]
前記処理ユニットが、前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタにアクセスするとき、前記複数のGPRのうちの1つのGPRにアクセスするときよりも少ない電力を消費する、C21に記載の非一時的コンピュータ可読記憶媒体。
[C25]
前記処理ユニットが、単一の割込み不可能な命令を受け取ったことに応答して前記値をコピーする、C21に記載の非一時的コンピュータ可読記憶媒体。
[C26]
前記命令が、
スワップ命令と、ここにおいて、前記第3のGPRが前記第2のGPRであり、ここにおいて、前記第4のGPRが前記第1のGPRである、
スウィズル命令と、ここにおいて、前記複数のGPRが任意に位置する、
ギャザー命令と、ここにおいて、前記第1のGPRと前記第2のGPRとが連続して位置せず、ここにおいて、前記第3のGPRと前記第4のGPRとが連続して位置する、
スキャッタ命令と、ここにおいて、前記第1のGPR、ここにおいて、前記第1のGPRと前記第2のGPRとが連続して位置し、ここにおいて、前記第3のGPRと前記第4のGPRとが連続して位置しない、
からなるグループから選択される、C25に記載の非一時的コンピュータ可読記憶媒体。
[C27]
実行されたとき、前記1つまたは複数の命令が、
前記複数の論理ユニットのうちの中間論理ユニットに、前記第1のクロックサイクルの後、および前記第3のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの1つの中間パイプラインレジスタに前記第1の値をコピーさせることと、
前記中間論理ユニットに、前記第2のクロックサイクルの後、および前記第4のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第2の値をコピーさせることと
を前記処理ユニットに行わせる、C21に記載の非一時的コンピュータ可読記憶媒体。
[C28]
コンパイラモジュールがコードを受け取ることと、
前記コンパイラモジュールが、前記コードによって示された複数の動作がコンボ移動命令に組み合わせられ得ると決定することに応答して、前記コンボ移動命令を生成することと
を備える方法であって、
ここにおいて、処理ユニットによって実行されたとき、前記コンボ移動命令が、前記複数の汎用レジスタ(GPR)のうちの複数のソースGPRから前記複数のGPRのうちの複数の宛先GPRに複数の値を移動するとき、前記処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、前記複数のソースGPRのうちの少なくとも1つのGPRが前記複数の宛先GPR中に含まれ、ここにおいて、前記複数のパイプラインレジスタが前記複数のGPRとは異なる、方法。
[C29]
前記コードによって示された前記複数の動作が前記コンボモード命令に組み合わせられ得ると決定することは、
前記コードによって示された前記複数の動作が、前記複数のGPRの間で複数の値を移動することを含むと決定することに応答して、前記コードによって示された前記複数の動作が前記コンボモード命令に組み合わせられ得ると決定すること
を備える、C28に記載の方法。
[C30]
前記コードが複数の命令を備え、ここにおいて、前記方法が、
前記コンボ移動命令に組み合わせられ得る前記複数の動作に対応する前記命令を、前記生成されたコンボ移動命令と置き換えること
をさらに備える、C28に記載の方法。

Claims (24)

  1. 処理ユニットが、複数の汎用レジスタ(GPR)のうちの複数のソースGPRのうちの第1のGPRから前記複数のGPRのうちの複数の宛先GPRのうちの第3のGPRに第1の値が移動されることと、前記複数のソースGPRのうちの第2のGPRから前記複数の宛先GPRのうちの第4のGPRに第2の値が移動されることと、前記複数のソースGPRのうちの第5のGPRから前記複数の宛先GPRのうちの第6のGPRに第3の値が移動されることとを要求する単一の命令を受け取ることと、ここにおいて、前記単一の命令が、
    前記宛先GPRのすべてを明確に識別しないギャザー命令であって、前記複数のソースGPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先GPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または
    前記ソースGPRのすべてを明確に識別しないスキャッタ命令であって、前記ソースGPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先GPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの1つであり、ここにおいて、前記単一の命令は、前記第1のGPRから前記第3のGPRに前記第1の値が移動されることと、前記第2のGPRから前記第4のGPRに前記第2の値が移動されることと、前記第5のGPRから前記第6のGPRに前記第3の値が移動されることとを要求する単一の割込み不可能な命令を備える、
    前記単一の命令を受け取ったことに応答して、
    前記処理ユニットの初期論理ユニットが、第1のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第1の値をコピーすることと、ここにおいて、前記複数のパイプラインレジスタが前記複数のGPRとは異なる、
    前記処理ユニットの前記初期論理ユニットが、前記第1のクロックサイクルの後にある第2のクロックサイクル中に、前記初期パイプラインレジスタに前記第2の値をコピーすることと、
    前記処理ユニットの最終論理ユニットが、前記第2のクロックサイクルの後にある第3のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第3のGPRに前記第1の値をコピーすることと、ここにおいて、前記第3のGPRにコピーされる前記第1の値が、前記第1のGPRからコピーされた前記第1の値と同じ値を表す、
    前記処理ユニットの前記最終論理ユニットが、前記第2のクロックサイクルの後にある第4のクロックサイクル中に、前記最終パイプラインレジスタから前記第4のGPRに前記第2の値をコピーすることと、ここにおいて、前記第4のGPRにコピーされる前記第2の値が、前記第2のGPRからコピーされた前記第2の値と同じ値を表す、
    を備える方法。
  2. 前記単一の命令が前記パイプラインレジスタのいずれをも個々に識別しない、請求項1に記載の方法。
  3. 前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のGPRが命令によって個々にアクセス可能である、請求項1に記載の方法。
  4. 前記処理ユニットが、前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタにアクセスするとき、前記複数のGPRのうちの1つのGPRにアクセスするときよりも少ない電力を消費する、請求項1に記載の方法。
  5. 前記パイプラインが、1つまたは複数の算術論理ユニット(ALU)を含むマルチサイクル計算パイプラインである、請求項1に記載の方法。
  6. 中間論理ユニットが、前記第1のクロックサイクルの後、および前記第3のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの1つの中間パイプラインレジスタに前記第1の値をコピーすることと、
    前記中間論理ユニットが、前記第2のクロックサイクルの後、および前記第4のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第2の値をコピーすることと
    をさらに備える、請求項1に記載の方法。
  7. 前記処理ユニットが、1つの中央処理ユニット(CPU)または1つのグラフィカル処理ユニット(GPU)から構成される、請求項1に記載の方法。
  8. 前記初期パイプラインレジスタに前記第1の値をコピーすることが、
    前記第1のGPRから前記初期パイプラインレジスタに前記第1の値をコピーすること、または
    前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタから前記初期パイプラインレジスタに前記第1の値をコピーすること
    のいずれかを備え、
    前記初期パイプラインレジスタに前記第2の値をコピーすることが、
    前記第2のGPRから前記初期パイプラインレジスタに前記第2の値をコピーすること、または
    前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタから前記初期パイプラインレジスタに前記第2の値をコピーすること
    のいずれかを備える、
    請求項1に記載の方法。
  9. 複数の汎用レジスタ(GPR)と、
    複数のパイプラインレジスタを備えるパイプラインと、ここにおいて、前記複数のパイプラインレジスタが前記複数のGPRとは異なる、
    複数の論理ユニットと、
    前記複数のGPRのうちの複数のソースGPRのうちの第1のGPRから前記複数のGPRのうちの複数の宛先GPRのうちの第3のGPRに第1の値が移動されることと、前記複数のソースGPRのうちの第2のGPRから前記複数の宛先GPRのうちの第4のGPRに第2の値が移動されることと、前記複数のソースGPRのうちの第5のGPRから前記複数の宛先GPRのうちの第6のGPRに第3の値が移動されることとを要求する単一の命令を受け取るように構成されたコントローラと、ここにおいて、前記単一の命令が、
    前記宛先GPRのすべてを明確に識別しないギャザー命令であって、前記複数のソースGPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先GPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または
    前記ソースGPRのすべてを明確に識別しないスキャッタ命令であって、前記ソースGPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先GPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの1つであり、ここにおいて、前記単一の命令は、前記第1のGPRから前記第3のGPRに前記第1の値が移動されることと、前記第2のGPRから前記第4のGPRに前記第2の値が移動されることと、前記第5のGPRから前記第6のGPRに前記第3の値が移動されることとを要求する単一の割込み不可能な命令を備え、前記単一の命令を受け取ったことに応答して、前記コントローラが、
    前記複数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、前記複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第1の値をコピーさせることと、
    前記初期論理ユニットに、前記第1のクロックサイクルの後にある第2のクロックサイクル中に、前記初期パイプラインレジスタに前記第2の値をコピーさせることと、
    前記複数の論理ユニットのうちの最終論理ユニットに、前記第2のクロックサイクルの後にある第3のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第3のGPRに前記第1の値をコピーさせることと、ここにおいて、前記第3のGPRにコピーされる前記第1の値が、前記第1のGPRからコピーされた前記第1の値と同じ値を表す、
    前記最終論理ユニットに、前記第2のクロックサイクルの後にある第4のクロックサイクル中に、前記最終パイプラインレジスタから前記第4のGPRに前記第2の値をコピーさせることと、ここにおいて、前記第4のGPRにコピーされる前記第2の値が、前記第2のGPRからコピーされた前記第2の値と同じ値を表す、
    を行うように構成された、
    を備える処理ユニット。
  10. 前記単一の命令が前記パイプラインレジスタのいずれをも個々に識別しない、請求項9に記載の処理ユニット。
  11. 前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のGPRが命令によって個々にアクセス可能である、請求項9に記載の処理ユニット。
  12. 前記処理ユニットが、前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタにアクセスするとき、前記複数のGPRのうちの1つのGPRにアクセスするときよりも少ない電力を消費する、請求項9に記載の処理ユニット。
  13. 前記パイプラインが、1つまたは複数の算術論理ユニット(ALU)を含むマルチサイクル計算パイプラインである、請求項9に記載の処理ユニット。
  14. 前記1つまたは複数の命令を受け取ったことに応答して、前記コントローラが、
    前記複数の論理ユニットのうちの1つの中間論理ユニットに、前記第1のクロックサイクルの後、および前記第3のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの1つの中間パイプラインレジスタに前記第1の値をコピーさせることと、
    前記中間論理ユニットに、前記第2のクロックサイクルの後、および前記第4のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第2の値をコピーさせることと
    を行うようにさらに構成された、請求項9に記載の処理ユニット。
  15. 前記処理ユニットが、1つの中央処理ユニット(CPU)または1つのグラフィカル処理ユニット(GPU)から構成される、請求項9に記載の処理ユニット。
  16. 前記初期論理ユニットが、
    前記第1のGPRから前記初期パイプラインレジスタに前記第1の値をコピーすること、または
    前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタから前記初期パイプラインレジスタに前記第1の値をコピーすること
    のいずれかによって前記初期パイプラインレジスタに前記第1の値をコピーするように構成され、
    前記初期論理ユニットが、
    前記第2のGPRから前記初期パイプラインレジスタに前記第2の値をコピーすること、または
    前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタから前記初期パイプラインレジスタに前記第2の値をコピーすること
    のいずれかによって前記初期パイプラインレジスタに前記第2の値をコピーするように構成された、
    請求項9に記載の処理ユニット。
  17. 複数の汎用レジスタ(GPR)のうちの複数のソースGPRのうちの第1のGPRから前記複数のGPRのうちの複数の宛先GPRのうちの第3のGPRに第1の値が移動されることと、前記複数のソースGPRのうちの第2のGPRから前記複数の宛先GPRのうちの第4のGPRに第2の値が移動されることと、前記複数のソースGPRのうちの第5のGPRから前記複数の宛先GPRのうちの第6のGPRに第3の値が移動されることとを要求する、処理ユニットに対する単一の命令を記憶する非一時的コンピュータ可読記憶媒体であって、ここにおいて、前記単一の命令が、前記宛先GPRのすべてを明確に識別しないギャザー命令であって、前記複数のソースGPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先GPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または前記ソースGPRのすべてを明確に識別しないスキャッタ命令であって、前記ソースGPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先GPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの1つであり、ここにおいて、前記単一の命令は、前記第1のGPRから前記第3のGPRに前記第1の値が移動されることと、前記第2のGPRから前記第4のGPRに前記第2の値が移動されることと、前記第5のGPRから前記第6のGPRに前記第3の値が移動されることとを要求する単一の割込み不可能な命令を備え、前記単一の命令が、実行されたとき
    数の論理ユニットのうちの初期論理ユニットに、第1のクロックサイクル中に、パイプラインの複数のパイプラインレジスタのうちの初期パイプラインレジスタに前記第1の値をコピーさせることと、
    前記初期論理ユニットに、前記第1のクロックサイクルの後にある第2のクロックサイクル中に、前記初期パイプラインレジスタに前記第2の値をコピーさせることと、
    前記複数の論理ユニットのうちの最終論理ユニットに、前記第2のクロックサイクルの後にある第3のクロックサイクル中に、前記複数のパイプラインレジスタのうちの最終パイプラインレジスタから前記第3のGPRに前記第1の値をコピーさせることと、ここにおいて、前記第3のGPRにコピーされる前記第1の値が、前記第1のGPRからコピーされた前記第1の値と同じ値を表す、
    前記最終論理ユニットに、前記第2のクロックサイクルの後にある第4のクロックサイクル中に、前記最終パイプラインレジスタから前記第4のGPRに前記第2の値をコピーさせることと、ここにおいて、前記第4のGPRにコピーされる前記第2の値が、前記第2のGPRからコピーされた前記第2の値と同じ値を表す、
    を前記処理ユニットに行わせる、非一時的コンピュータ可読記憶媒体。
  18. 前記単一の命令が前記パイプラインレジスタのいずれをも個々に識別しない、請求項17に記載の非一時的コンピュータ可読記憶媒体。
  19. 前記複数のパイプラインレジスタが命令によって個々にアクセス可能ではなく、前記複数のGPRが命令によって個々にアクセス可能である、請求項17に記載の非一時的コンピュータ可読記憶媒体。
  20. 前記処理ユニットが、前記複数のパイプラインレジスタのうちの1つのパイプラインレジスタにアクセスするとき、前記複数のGPRのうちの1つのGPRにアクセスするときよりも少ない電力を消費する、請求項17に記載の非一時的コンピュータ可読記憶媒体。
  21. 実行されたとき、前記単一の命令が、
    前記複数の論理ユニットのうちの1つの中間論理ユニットに、前記第1のクロックサイクルの後、および前記第3のクロックサイクルの前に、前記初期パイプラインレジスタから前記複数のパイプラインレジスタのうちの1つの中間パイプラインレジスタに前記第1の値をコピーさせることと、
    前記中間論理ユニットに、前記第2のクロックサイクルの後、および前記第4のクロックサイクルの前に、前記初期パイプラインレジスタから前記中間パイプラインレジスタに前記第2の値をコピーさせることと
    を前記処理ユニットに行わせる、請求項17に記載の非一時的コンピュータ可読記憶媒体。
  22. コンパイラモジュールがコードを受け取ることと、
    前記コンパイラモジュールが、前記コードによって示された複数の動作が単一のコンボ移動命令に組み合わせられ得ると決定することに応答して、前記単一のコンボ移動命令を生成することと
    を備える方法であって、
    ここにおいて、処理ユニットによって実行されたとき、前記コンボ移動命令が、複数の汎用レジスタ(GPR)のうちの複数のソースGPRから前記複数のGPRのうちの複数の宛先GPRに複数の値を移動させるとき、前記処理ユニットに複数のパイプラインレジスタを一時的ストレージとして利用させ、ここにおいて、前記単一のコンボ移動命令が、
    前記宛先GPRのすべてを明確に識別しないギャザー命令であって、前記複数のソースGPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置せず、前記宛先GPRが、前記単一の命令が前記ギャザー命令であるときに連続して位置するギャザー命令、または
    前記ソースGPRのすべてを明確に識別しないスキャッタ命令であって、前記ソースGPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置し、前記宛先GPRが、前記単一の命令が前記スキャッタ命令であるときに連続して位置しないスキャッタ命令、のうちの1つであり、ここにおいて、前記複数のソースGPRのうちの少なくとも1つのGPRが前記複数の宛先GPR中に含まれ、ここにおいて、前記複数のパイプラインレジスタが前記複数のGPRとは異なり、ここにおいて、前記単一の命令は、第1のGPRから第3のGPRに第1の値が移動されることと、第2のGPRから第4のGPRに第2の値が移動されることと、第5のGPRから第6のGPRに第3の値が移動されることとを要求する単一の割込み不可能な命令を備える、方法。
  23. 前記コードによって示された前記複数の動作が前記単一のコンボモード命令に組み合わせられ得ると決定することは、
    前記コードによって示された前記複数の動作が、前記複数のGPRの間で複数の値を移動することを含むと決定することに応答して、前記コードによって示された前記複数の動作が前記単一のコンボモード命令に組み合わせられ得ると決定すること
    を備える、請求項22に記載の方法。
  24. 前記コードが複数の命令を備え、ここにおいて、前記方法が、
    前記単一のコンボ移動命令に組み合わせられ得る前記複数の動作に対応する前記命令を、前記生成された単一のコンボ移動命令と置き換えること
    をさらに備える、請求項22に記載の方法。
JP2016567367A 2014-05-12 2015-04-21 パイプラインレジスタを中間ストレージとして利用すること Expired - Fee Related JP6301501B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/275,047 2014-05-12
US14/275,047 US9747104B2 (en) 2014-05-12 2014-05-12 Utilizing pipeline registers as intermediate storage
PCT/US2015/026850 WO2015175173A1 (en) 2014-05-12 2015-04-21 Utilizing pipeline registers as intermediate storage

Publications (3)

Publication Number Publication Date
JP2017516226A JP2017516226A (ja) 2017-06-15
JP2017516226A5 JP2017516226A5 (ja) 2017-11-09
JP6301501B2 true JP6301501B2 (ja) 2018-03-28

Family

ID=53267556

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016567367A Expired - Fee Related JP6301501B2 (ja) 2014-05-12 2015-04-21 パイプラインレジスタを中間ストレージとして利用すること

Country Status (6)

Country Link
US (1) US9747104B2 (ja)
EP (1) EP3143495B1 (ja)
JP (1) JP6301501B2 (ja)
KR (1) KR101863483B1 (ja)
CN (1) CN106462391B (ja)
WO (1) WO2015175173A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102299008B1 (ko) * 2014-10-16 2021-09-06 삼성전자주식회사 어플리케이션 프로세서와 이를 포함하는 반도체 시스템
US11144367B2 (en) 2019-02-08 2021-10-12 International Business Machines Corporation Write power optimization for hardware employing pipe-based duplicate register files

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6145075A (en) 1998-02-06 2000-11-07 Ip-First, L.L.C. Apparatus and method for executing a single-cycle exchange instruction to exchange contents of two locations in a register file
US6052769A (en) 1998-03-31 2000-04-18 Intel Corporation Method and apparatus for moving select non-contiguous bytes of packed data in a single instruction
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6745319B1 (en) * 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
JP3719509B2 (ja) * 2002-04-01 2005-11-24 株式会社ソニー・コンピュータエンタテインメント シリアル演算パイプライン、演算装置、算術論理演算回路およびシリアル演算パイプラインによる演算方法
US6934831B2 (en) * 2002-05-09 2005-08-23 International Business Machines Corporation Power reduction mechanism for floating point register file reads
CN1761940B (zh) * 2003-03-19 2010-06-16 皇家飞利浦电子股份有限公司 指令处理设备,指令执行方法和装置,指令编译方法和装置
US7337305B2 (en) * 2003-11-24 2008-02-26 Sun Microsystems, Inc. Method and pipeline architecture for processing multiple swap requests to reduce latency
GB2409059B (en) 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US7613905B2 (en) * 2006-04-06 2009-11-03 Texas Instruments Incorporated Partial register forwarding for CPUs with unequal delay functional units
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
WO2013101323A1 (en) 2011-12-30 2013-07-04 Intel Corporation Micro-architecture for eliminating mov operations
US9575754B2 (en) 2012-04-16 2017-02-21 Apple Inc. Zero cycle move

Also Published As

Publication number Publication date
WO2015175173A1 (en) 2015-11-19
EP3143495C0 (en) 2023-08-16
EP3143495A1 (en) 2017-03-22
US20150324196A1 (en) 2015-11-12
CN106462391B (zh) 2019-07-05
KR101863483B1 (ko) 2018-05-31
EP3143495B1 (en) 2023-08-16
US9747104B2 (en) 2017-08-29
KR20170007742A (ko) 2017-01-20
CN106462391A (zh) 2017-02-22
JP2017516226A (ja) 2017-06-15

Similar Documents

Publication Publication Date Title
JP6077018B2 (ja) 異種cpu−gpu計算のための実行モデル
KR101707289B1 (ko) 그래픽 병렬 처리 유닛에 대한 버퍼 관리
JP6062506B2 (ja) 汎用グラフィクス処理装置における計算リソースパイプライン化
US9799094B1 (en) Per-instance preamble for graphics processing
CN111580864A (zh) 一种向量运算装置及运算方法
JP2019508804A (ja) 処理ユニットのためのフレームベースのクロックレート調整
KR20130141446A (ko) 복수의 프로세싱 유닛들에서 온-칩 메모리를 사용하는 데이터 프로세싱
US10706494B2 (en) Uniform predicates in shaders for graphics processing units
US20180232846A1 (en) Dynamic shader instruction nullification for graphics processing
US9632783B2 (en) Operand conflict resolution for reduced port general purpose register
KR20160036067A (ko) 동적 폭 계산을 이용한 배리어 폭 동기화
EP3161817B1 (en) Load scheme for shared register in gpu
TWI478054B (zh) 在命令串流器之指令執行中的可程式化述語邏輯
JP6301501B2 (ja) パイプラインレジスタを中間ストレージとして利用すること
CN107004252B (zh) 用于在处理浮点值时实现功率节省技术的装置与方法
US20170371657A1 (en) Scatter to gather operation
US11023997B2 (en) Instruction storage
JP2017527014A (ja) 算術論理ユニットにおいて使用するためのベクトルスケーリング命令
KR20200144493A (ko) 무거운 가중치 및 가벼운 가중치 페어의 아키텍처를 갖는 쉐이더 코어 및 그것을 포함하는 그래픽 처리 유닛
US11307860B1 (en) Iterating group sum of multiple accumulate operations

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170927

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170927

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20170927

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20171026

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171031

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180111

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180228

R150 Certificate of patent or registration of utility model

Ref document number: 6301501

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees