JP2011113457A - Simultaneous multi-threading processor, control method, program, compiling method, and information processor - Google Patents
Simultaneous multi-threading processor, control method, program, compiling method, and information processor Download PDFInfo
- Publication number
- JP2011113457A JP2011113457A JP2009271499A JP2009271499A JP2011113457A JP 2011113457 A JP2011113457 A JP 2011113457A JP 2009271499 A JP2009271499 A JP 2009271499A JP 2009271499 A JP2009271499 A JP 2009271499A JP 2011113457 A JP2011113457 A JP 2011113457A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- instruction
- instructions
- threads
- identifier
- 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
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Description
本発明は、同時マルチスレッディング方式で複数のスレッドを実行する技術に関する。 The present invention relates to a technique for executing a plurality of threads by a simultaneous multi-threading method.
近年、物理的に単一のプロセッサ上で、複数のスレッドを実行するマルチスレッド方式がいくつかのプロセッサに採用されている。特許文献1および特許文献2に開示されたプロセッサは、このマルチスレッド方式を採用しており、複数のスレッドを切り替えることで演算器の利用率を向上させたり、メモリアクセスレイテンシなどを隠蔽したりすることができる。
In recent years, a multi-thread method for executing a plurality of threads on a physically single processor has been adopted for some processors. The processors disclosed in
マルチスレッド方式には、スレッド切り替えのタイミングをどのように制御するかに関して複数の方式がある。 The multi-thread method includes a plurality of methods regarding how to control the timing of thread switching.
例えば、一定時間ごとにスレッドを切り替える時分割型マルチスレッディング方式、キャッシュミスなどによってプロセッサが待機状態になるときに別スレッドに切り替える方式、複数スレッドの命令列に対して個々の命令ごとに実行の可否を判断する同時マルチスレッディング方式などがある。 For example, a time-division multi-threading method that switches threads at regular intervals, a method that switches to another thread when the processor enters a standby state due to a cache miss, etc. There are simultaneous multi-threading methods to judge.
ここでは、同時マルチスレッディング方式について説明する。非特許文献1には、同時マルチスレッディングを導入したハイパースレッディング(登録商標)技術が記載されている。
Here, the simultaneous multi-threading method will be described. Non-Patent
図17は、非特許文献1に記載された同時マルチスレッディングプロセッサ801の構成を示すブロック図である。同図を参照すると、同時マルチスレッディングプロセッサ801において、実行リソース804は単一であるが、プロセスの状態を保持するレジスタ等のアーキテクチャ・ステート(802および803)は、スレッドの数だけ多重化されている。一般的には、アーキテクチャ・ステートは二重化される。
FIG. 17 is a block diagram illustrating a configuration of the simultaneous
図18は、非特許文献1に記載されたプロセッサのパイプライン構造を説明するための図である。同図では、説明の簡略化のために、キャッシュヒットした場合における、命令フェッチからアウト・オブ・オーダー実行のレジスタ書き込みまでの部分のみを抜き出し、その他の部分を省略している。
FIG. 18 is a diagram for explaining the pipeline structure of the processor described in
命令ポインタ901は、各スレッドの命令実行状況を追跡するために用いられる。キャッシュメモリ902には、実行対象の命令列がキャッシュされる。
The
プロセッサは、キャッシュメモリ902にキャッシュされた命令列のうち、命令ポインタ901で指定された命令をフェッチする。命令フェッチキュー903は、フェッチされた命令を保持する。
The processor fetches the instruction specified by the
デコード部904は、命令フェッチキュー903から取り出された命令を解釈し、マイクロオペコードにより記述された命令に変換する。
The
オペコードキュー905は、変換後の命令列を保持する。レジスタ・リネーム及び割り当て制御ステージ906では、アウト・オブ・オーダー実行を行っても誤動作しないように、レジスタ・リネーミングと、命令へのリソースの割り当てとが行われる。リソースが割り当てられた命令は、キュー907に格納され、スケジューラ908によりアウト・オブ・オーダーで実行判定が行われる。
The
レジスタ読み出しステージ909で、ソースレジスタからデータが読み出され、実行ステージ910で、読み出されたデータが、命令に対応する回路で処理される。処理結果は、レジスタ書き込みステージ911で、デスティネーションレジスタに書き込まれる。
In the register read
なお、ここで、非特許文献1に記載されたプロセッサは、実際には、デコード済みの命令を格納するトレースキャッシュを有し、プログラム内の命令は、ほとんどの場合、このトレースキャッシュからフェッチされる。しかし、図18では、簡略化のため、トレースキャッシュを省略し、プロセッサは、キャッシュメモリ902から直接、命令ポインタ901の示す命令を読み出し、デコード後にオペコードキュー905に入力する構成としている。
Note that the processor described in Non-Patent
また、実行ステージ910の後には、実際には、レジスタ書き込みステージの前にストアバッファおよびL1Dキャッシュへの書き込みステージがあるが、これらも、説明の簡略化のため、図18では省略されている。
Further, after the
このような、命令のフェッチ、デコード、および実行の手順は、同時マルチスレッディング方式を導入するか否かに関わらず、プロセッサの一般的な動作である。 Such an instruction fetch, decode, and execution procedure is a general operation of a processor regardless of whether or not a simultaneous multi-threading scheme is introduced.
次に、同時マルチスレッディング方式を採用する場合の動作の特徴について説明する。この場合、命令ポインタ901は多重化され、プロセッサは、それらの命令ポインタを参照することにより、複数スレッドの命令列を命令フェッチキュー903にフェッチし、それぞれをデコードしてオペコードキュー905に追加する。
Next, characteristics of the operation when the simultaneous multi-threading method is adopted will be described. In this case, the
そして、図18に示すように、命令ポインタ901、命令フェッチキュー903、およびオペコードキュー905は、それぞれ二重化されている。
As shown in FIG. 18, the
レジスタ・リネーム及び割り当て制御ステージ906では、プロセッサは、スレッドごとにレジスタを管理する。つまり、プロセッサは、スレッド1の命令では、そのスレッド1に属するレジスタを使用し、スレッド2の命令では、そのスレッド2に属するレジスタを使用する。
In the register rename and
但し、レジスタ・リネーム後の物理レジスタ番号は、スレッドごとに区別して管理されない。このため、レジスタ・リネーム及び割り当て制御ステージ906においては、命令はスレッドごとに管理される必要がなく、スレッド1の命令と、スレッド2の命令とが混在することになる。
However, physical register numbers after register renaming are not managed separately for each thread. For this reason, in the register renaming and
また、スケジューラ908以降のステージでは、レジスタは、物理レジスタ番号によって区別されているため、プロセッサは、実行対象の命令がスレッド1、2いずれの命令であるかを意識する必要はない。プロセッサは、物理レジスタ番号で指定されたレジスタを使用して、処理を実行する。
In the stage after the
同時マルチスレッディング方式を導入したプロセッサは、上述の手順で、複数の命令列より供給された命令から、スケジューラが実行可能なものを選択して実行ステージに送り込む。 A processor that has introduced the simultaneous multi-threading method selects instructions that can be executed by the scheduler from instructions supplied from a plurality of instruction sequences and sends them to the execution stage in the above-described procedure.
単一の命令列から命令が供給された場合、スケジューラが実行可能な命令を選択できず、実行ステージで空き時間が生じることがある。この場合であっても、同時マルチスレッディング方式のプロセッサでは、この空き時間に別スレッドの命令を実行できる可能性がある。この結果、実行リソースの利用率が向上する。これにより、データ待ち時間が隠蔽され、全体の処理時間、すなわち複数スレッドの処理時間の総計を小さくできるという効果が得られる。 When an instruction is supplied from a single instruction sequence, an instruction that can be executed by the scheduler cannot be selected, and an idle time may occur in the execution stage. Even in this case, the simultaneous multi-threading type processor may be able to execute an instruction of another thread during this idle time. As a result, the utilization rate of execution resources is improved. As a result, the data waiting time is concealed, and the total processing time, that is, the total processing time of a plurality of threads can be reduced.
しかし、非特許文献1に記載されたプロセッサでは、スレッドの実行時間の削減が困難であるというという問題があった。
However, the processor described in Non-Patent
上述したように、非特許文献1に記載された、同時マルチスレッディング方式の採用により、演算器等のリソースの利用効率は向上する。このため、プロセッサの処理能力を有効に活用できる。
As described above, by using the simultaneous multi-threading method described in Non-Patent
ところが、同時マルチスレッディングプロセッサでは、複数のスレッドが物理的に単一のリソースをシェアするので、単一のスレッドのみに着目すれば、実行時間が増加してしまうという問題があった。 However, in the simultaneous multithreading processor, since a plurality of threads physically share a single resource, there is a problem that if only a single thread is focused, the execution time increases.
この実行時間の増加について、図15を参照して説明する。同図(a)に示すように、スレッド1を単独で実行した場合の実行時間がT1であるとする。このうち、実際に演算器が使用された時間は、t1であるとすると、データの到着待ちなどの理由で「T1−t1」の間、その演算器は使用されていないことになる。
This increase in execution time will be described with reference to FIG. As shown in FIG. 5A, it is assumed that the execution time when the
そして、図15(b)に示すように、スレッド1に続いて、スレッド2を単独で実行した場合の実行時間がT2であり、演算器が使用された時間がt2であるとすると、「T2−t2」の間、その演算器は使用されていないことになる。
Then, as shown in FIG. 15B, if the execution time when the
シングルスレッドのみしか実行できないプロセッサでは、スレッド1およびスレッド2の処理を完了するには、「T1+T2」の実行時間を要する。
In a processor that can execute only a single thread, the execution time of “T1 + T2” is required to complete the processing of the
これに対し、同時マルチスレッディング方式のプロセッサであれば、スレッド1で演算器が使用されていない時間に、スレッド2の命令を実行できる。時間A、Bに対して、時間t1、t2が十分に小さければ、プロセッサは、処理時間の長い方のスレッド、例えばスレッド1の待ち時間「T1−t1」の時間だけで、もう一方のスレッド2の処理を完了できる可能性がある。
On the other hand, the processor of the simultaneous multi-threading method can execute the instruction of the
このため、時間T1、T2に対して、時間t1、t2が十分に小さければ、同時マルチスレッディングにより性能は十分に改善しうる。 For this reason, if the times t1 and t2 are sufficiently smaller than the times T1 and T2, the performance can be sufficiently improved by simultaneous multithreading.
しかしながら、時間T1、T2に対して、時間t1、t2があまり小さくない場合、処理時間が、処理時間の長い方のスレッドの待ち時間内に、もう一方のスレッドの処理を完了できないことがある。この場合、データ待ちの時間を隠蔽できたとしても、性能改善は、ごく僅かにとどまる。2スレッド分の命令を供給するために生じるオーバーヘッドや、キャッシュメモリ上でのスレッド同士の競合により、シングルスレッドのプロセッサより性能が低下するケースもある。 However, if the times t1 and t2 are not so small with respect to the times T1 and T2, the processing of the other thread may not be completed within the waiting time of the thread having the longer processing time. In this case, even if the data waiting time can be concealed, the performance improvement is negligible. In some cases, the performance may be lower than that of a single-thread processor due to the overhead caused by supplying instructions for two threads and the competition between threads on the cache memory.
このように、データ待ち時間に対して、演算器の使用時間が長いと、同時マルチスレッディング方式を適用しても、実行時間が増えて、性能が向上しないことがある。 As described above, when the operation time of the arithmetic unit is long with respect to the data waiting time, even if the simultaneous multi-threading method is applied, the execution time increases and the performance may not be improved.
単一のスレッドの実行時間を短縮するには、データ待ち時間を削減することが有効である。データ待ち時間を削減するための方法には、データをレジスタに供給するロード命令を、プロセッサがなるべく早く発行するという方法や、プロセッサがロード命令を同時に多数発行できるように制御するという方法がある。 In order to shorten the execution time of a single thread, it is effective to reduce the data waiting time. As a method for reducing the data waiting time, there are a method in which a processor issues a load instruction for supplying data to a register as early as possible, and a method in which the processor controls so that a number of load instructions can be issued simultaneously.
しかしながら、データ待ち時間を削減するための、これらの方法は、プログラムが利用可能なレジスタであるソフト見えレジスタの数によって、その効果が制限されてしまう。例えば、各命令が利用可能な空きレジスタがなければ、プロセッサは、そもそもロード命令を先行して発行することができない。このため、データ待ち時間を削減するには、十分な数のソフト見えレジスタが必要となる。 However, the effectiveness of these methods for reducing data latency is limited by the number of soft-looking registers that are available to the program. For example, if there is no free register available for each instruction, the processor cannot issue a load instruction in the first place. For this reason, a sufficient number of soft appearance registers are required to reduce data latency.
ロード命令の発行に関して、例えば、論理的なソフト見えレジスタ数に対して多数の物理レジスタを用意して、レジスタ名をハードウェアがリネーム(すなわち、レジスタ・リネーム)することで、ロード命令を先行して発行する技術がある。 Regarding issuance of a load instruction, for example, a large number of physical registers are prepared for the number of logical soft-looking registers, and the register name is renamed by hardware (ie, register renaming). There is a technology to issue.
しかし、このレジスタ・リネーミングを行っても、ロード・ストア命令そのものは削除されない。このため、レジスタ上のデータを明示的に入れ替えるレジスタスピルが起こるようなケースにおいては、データ待ち時間を削減する効果は限定的なものになってしまう。 However, even with this register renaming, the load / store instruction itself is not deleted. For this reason, in the case where a register spill that explicitly replaces the data on the register occurs, the effect of reducing the data waiting time is limited.
このため、同時マルチスレッディングプロセッサにおいて、スレッドの実行時間、特にデータ待ち時間を削減することが困難であった。 For this reason, in the simultaneous multithreading processor, it is difficult to reduce the thread execution time, particularly the data waiting time.
本発明は、同時マルチスレッディングプロセッサで実行する、スレッドの実行時間を削減する技術を提供することを目的とする。 An object of the present invention is to provide a technique for reducing the execution time of a thread executed by a simultaneous multi-threading processor.
上記目的を達成するために、本発明の同時マルチスレッディングプロセッサは、デコード後に複数のスレッドで実行されるように、該複数のスレッドのうち、該命令が実行されるスレッドを識別するためのスレッド識別子が付加された、単一のスレッドに属する複数の命令をフェッチするフェッチ手段と、前記フェッチ手段によりフェッチされた前記複数の命令をデコードし、前記複数のスレッドを生成し、それぞれの該命令に付加された前記スレッド識別子の示すスレッドに、該命令を割り当てるデコード手段と、前記デコード手段により生成された前記複数のスレッドを並列に動作させることにより、前記複数の命令を実行する実行手段と、を有する。 In order to achieve the above object, the simultaneous multithreading processor of the present invention has a thread identifier for identifying a thread in which the instruction is executed among the plurality of threads so that the thread is executed in a plurality of threads after decoding. A fetch means for fetching a plurality of instructions belonging to a single thread, and a plurality of instructions fetched by the fetch means are decoded to generate the plurality of threads, which are added to the instructions. A decoding unit that assigns the instruction to the thread indicated by the thread identifier; and an execution unit that executes the plurality of instructions by operating the plurality of threads generated by the decoding unit in parallel.
本発明の同時マルチスレッディングプロセッサの制御方法は、デコード後に複数のスレッドで実行されるように、該複数のスレッドのうち、該命令が実行されるスレッドを識別するためのスレッド識別子が付加された、単一のスレッドに属する複数の命令をフェッチし、フェッチした前記複数の命令をデコードし、前記複数のスレッドを生成し、それぞれの該命令に付加された前記スレッド識別子の示すスレッドに、該命令を割り当て、生成した前記複数のスレッドを並列に動作させることにより、前記複数の命令を実行する、同時マルチスレッディングプロセッサの制御方法である。 The control method of the simultaneous multi-threading processor of the present invention is such that a thread identifier for identifying a thread in which the instruction is executed among the plurality of threads is added so that the thread is executed by a plurality of threads after decoding. Fetch a plurality of instructions belonging to one thread, decode the fetched instructions, generate the plurality of threads, and assign the instructions to threads indicated by the thread identifier added to the instructions A method for controlling a simultaneous multi-threading processor that executes the plurality of instructions by operating the plurality of generated threads in parallel.
本発明のプログラムは、コンパイルを行うためのプログラムであって、コンピュータに、デコード後に複数のスレッドで実行されるように、ソースコードを単一のスレッドに属する複数の命令に変換する変換手順、及び前記複数のスレッドのうち、命令が実行されるスレッドを識別するためのスレッド識別子を、それぞれの前記命令に付加する付加手順、を実行させるためのプログラムである。 A program according to the present invention is a program for compiling, and a conversion procedure for converting a source code into a plurality of instructions belonging to a single thread so that the computer can be executed by a plurality of threads after decoding, and It is a program for executing an additional procedure for adding a thread identifier for identifying a thread in which an instruction is executed among the plurality of threads to each of the instructions.
本発明のコンパイル方法は、デコード後に複数のスレッドで実行されるように、ソースコードを単一のスレッドに属する複数の命令に変換し、前記複数のスレッドのうち、命令が実行されるスレッドを識別するためのスレッド識別子を、それぞれの前記命令に付加する、コンパイル方法である。 The compiling method of the present invention converts the source code into a plurality of instructions belonging to a single thread so that it is executed in a plurality of threads after decoding, and identifies a thread in which the instructions are executed among the plurality of threads. This is a compiling method in which a thread identifier for performing is added to each instruction.
本発明の情報処理装置は、デコード後に複数のスレッドで実行されるように、ソースコードを単一のスレッドに属する複数の命令に変換し、該複数のスレッドのうち、命令が実行されるスレッドを識別するためのスレッド識別子を、それぞれの該命令に付加する、コンパイラと、前記コンパイラによりスレッド識別子が付加された前記複数の命令をフェッチし、フェッチした該複数の命令をデコードし、前記複数のスレッドを生成し、それぞれの該命令に付加された前記スレッド識別子の示すスレッドに、該命令を割り当て、生成した該複数のスレッドを並列に動作させることにより、該複数の命令を実行する、同時マルチスレッディングプロセッサと、を有する。 The information processing apparatus according to the present invention converts the source code into a plurality of instructions belonging to a single thread so that the information is executed by a plurality of threads after decoding. A compiler for adding a thread identifier for identification to each of the instructions; and fetching the plurality of instructions to which the thread identifier is added by the compiler; decoding the plurality of fetched instructions; A multithreading processor that executes the plurality of instructions by assigning the instruction to a thread indicated by the thread identifier added to each instruction and causing the plurality of generated threads to operate in parallel. And having.
本発明によれば、同時マルチスレッディングプロセッサは、単一のスレッドに属する複数の命令をフェッチし、複数のスレッドを生成して、スレッド識別子の示すスレッドに命令を割り当てるので、デコード前に単一のスレッドに属する複数の命令を、デコード後に複数のスレッドで処理することができる。このため、単一のスレッドが、複数のスレッド分のリソースを使用することができ、スレッドの実行時間が削減される。 According to the present invention, the simultaneous multi-threading processor fetches a plurality of instructions belonging to a single thread, generates a plurality of threads, and assigns an instruction to the thread indicated by the thread identifier. A plurality of instructions belonging to can be processed by a plurality of threads after decoding. For this reason, a single thread can use resources for a plurality of threads, and the execution time of the thread is reduced.
(第1の実施形態)
本発明を実施するための第1の実施形態について図面を参照して詳細に説明する。図1は、本実施形態の情報処理装置1の一構成例を示すブロック図である。同図を参照すると、情報処理装置1は、プロセッサ10、メインメモリ20、および記憶部30を有する。
(First embodiment)
A first embodiment for carrying out the present invention will be described in detail with reference to the drawings. FIG. 1 is a block diagram illustrating a configuration example of the
プロセッサ10は、複数のスレッドを同時マルチスレッディング方式で実行可能なマイクロプロセッサである。本発明の特徴となる処理メインメモリ20は、データやプログラムを一時的に蓄えておく主記憶装置である。記憶部30には、コンパイラ301が格納される。
The
図2を参照して、コンパイラ301について説明する。同図は、本実施形態の婚コンパイル方法を示すフローチャートである。このフローチャートは、コンパイラ301をプロセッサ10が実行することにより実現される。
The
プロセッサ10は、ソースコードを、プロセッサ10で実行可能な命令列を含むオブジェクトコードに変換する(ステップS1)。本実施形態では、コンパイラ10は、変換において、デコード後に複数のスレッドで実行することを前提として、単一のスレッドに属する命令列を生成する。
The
そして、プロセッサ10は、各命令に、スレッド識別子を付加する(ステップS2)。ここで、スレッド識別子とは、命令が実行されるスレッドを識別するための識別子である。
Then, the
各命令にスレッド識別子の付加する方法の一例について説明する。例えば、DOループ文を、デコード後に2つのスレッドで実行することを想定する。この場合、プロセッサ10は、ループ変数が奇数番号の処理は一方のスレッドで実行され、ループ変数が偶数番号の処理は他方のスレッドで実行されるように、それぞれの処理に対応する命令にスレッド識別子を付加する。
An example of a method for adding a thread identifier to each instruction will be described. For example, assume that a DO loop statement is executed by two threads after decoding. In this case, the
次に、各命令について、その内容を記述するための命令語のフォーマットについて説明する。図3は、本実施形態で使用される命令語401のフォーマットの一例を示す図である。同図を参照すると、命令語401は、固定長のビット列であり、命令コード402、デスティネーションレジスタ指定フィールド403、ソースレジスタ指定フィールド404、およびスレッド識別子405を有する。
Next, the format of an instruction word for describing the contents of each instruction will be described. FIG. 3 is a diagram showing an example of the format of the
命令コード402には、プロセッサ10に実行させる命令を指定するための番号が格納される。デスティネーションレジスタ指定フィールド403には、命令の実行結果の書き込み先のレジスタの番号が格納される。ソースレジスタ指定フィールド404には、命令実行時に利用されるデータの読み出し先のレジスタの番号が格納される。スレッド識別子405は、命令コード402に対応するスレッド識別子である。
The
ここで、ソースレジスタ指定フィールド404では通常、1つまたは複数のレジスタ番号が指定されるが、その数は命令コードごとに異なる。命令セットアーキテクチャによっては、暗黙的に使用用途が限定されたレジスタが、デスティネーションレジスタやソースレジスタとして使用され、命令語中の明示的な指定が省略されることもある。いずれの場合もデスティネーションレジスタ、またはソースレジスタとして指定可能なレジスタは、単一スレッドのアーキテクチャ・ステート内のレジスタに限られる。
Here, in the source
本実施形態では、スレッド識別子405は、図3に示すように、命令語401のフィールド内に格納され、プロセッサ10により、命令コード402と合わせてデコードされる。
In the present embodiment, the
プロセッサ10は、コンパイラ301を実行することにより、スレッド識別子が付加された命令列を含むオブジェクトコードを生成し、実行する。
The
図4は、本実施形態のプロセッサ10の一構成例を示すブロック図である。同図を参照すると、プロセッサ10は、命令フェッチ部101、デコード部102、制御部103、および実行部104を有する。
FIG. 4 is a block diagram illustrating a configuration example of the
デコード部102は、スレッド識別子判定部1021を有し、制御部103は、出力先識別子判定部1031を有する。
The
命令フェッチ部101は、コンパイラ301から出力されたオブジェクトコードの中から、命令ポインタで指定される命令をフェッチする。
The instruction fetch
デコード部102は、フェッチされた複数の命令をデコードする。スレッド識別子判定部1021は、複数のスレッドを生成し、各命令に付加されたスレッド識別子を参照して、そのスレッド識別子に対応するスレッドに、その命令を割り当てる。
The
また、スレッド識別子判定部1021は、命令語に付加されたスレッド識別子に応じて、各命令語に出力先識別子を付加する。出力先識別子は、命令の実行結果の出力先とするレジスタを識別するための識別子である。より具体的には、出力先識別子は、複数のスレッドのうち、出力先のレジスタの属するスレッドを特定するための識別子である。
Further, the thread
制御部103は、出力先識別子に従って、レジスタ・リネーミング、および割り当て制御を行う。
The
図5は、出力先識別子が付加された、命令語401を示す図である。同図に示すように、命令語401には、スレッド識別子405の代わりに出力先識別子406が付加される。
FIG. 5 is a diagram illustrating an
実行部104について説明する。図6は、実行部104の一構成例を示すブロック図である。同図に示すように、実行部104は、レジスタ群1041、および1042と、演算器1043とを有する。
The
レジスタ群1041、および1042は、それぞれ異なるスレッドに属し、演算器1043を共有する。
The
図6のレジスタ群1041、および1042は、図17のアーキテクチャ・ステートに相当する。図6の演算器1043は、図17の実行リソースの一例である。
The
実際には、レジスタファイル自体にスレッドの区別はなく、その都度、物理番号でスレッドに対応するレジスタが指定されるのだが、図6では、説明を容易にするため、論理的にスレッドごとに区分された状態のレジスタ群を表記している。 Actually, there is no distinction between threads in the register file itself, and each time a register corresponding to a thread is specified by a physical number. In FIG. 6, for ease of explanation, logical division is made for each thread. A group of registers in the selected state is shown.
また、実行リソースには、通常、複数の演算器が含まれるが、図6では、説明を容易にするため、演算器1043以外の演算器を省略している。
In addition, the execution resource usually includes a plurality of arithmetic units, but in FIG. 6, arithmetic units other than the
実行部104は、アウト・オブ・オーダー実行で、スケジューリングを行う。実行部104は、命令に対応する演算器で、ソースレジスタから読み出したデータを処理し、処理結果をデスティネーションレジスタに格納する。
The
続いて、プロセッサ10のパイプライン構造について詳細に説明する。図7は、プロセッサ10のパイプライン構造の一例を示す図である。
Next, the pipeline structure of the
キャッシュメモリ1012には、オブジェクトコード内の命令列が供給される。プロセッサ10は、その命令列の中から、命令ポインタ1011で指定された命令をフェッチし、命令フェッチキューC1に追加する。命令フェッチキューC1は、フェッチされた命令を保持する。
The
デコード部102は、命令フェッチキューC1から取り出された命令を解釈し、マイクロオペコードで記述された命令に変換する。
The
スレッド識別子判定部1021は、スレッド識別子に応じて、どのオペコードキューに命令を追加するかを判定する。本実施形態では、オペコードキューは、C2、およびC3に多重化されており、オペコードキューC1、およびC2のうち、いずれか一方、または、両方に命令が追加される。
The thread
また、スレッド識別子判定部1021は、命令に付加されたスレッド識別子に応じて、命令に出力先識別子を付加する。
Further, the thread
オペコードキューC1、およびC2は、追加された命令を、付加された出力識別子とともに保持する。 The opcode queues C1 and C2 hold the added instruction together with the added output identifier.
出力先識別子判定部1031は、命令に付加された出力識別子に基づいて、出力先のレジスタを、いずれのスレッドに属するレジスタにするかを決定する。言い換えれば、出力先識別子判定部1031は、出力先識別子に応じて、デスティネーションレジスタの属するスレッドを切り替える。
Based on the output identifier added to the instruction, the output destination
制御部103は、出力先識別子判定部1031の決定に従って、各命令について、レジスタ・リネーミング、およびレジスタの割り当てを行う。制御部103は、レジスタが割り当てられた命令をキューC4に追加する。キューC4は、追加された命令を保持する。
The
実行部104内のスケジューラは、キューC4から取り出した命令について、アウト・オブ・オーダーで実行判定を行う(S11)。
The scheduler in the
実行部104は、ソースレジスタからデータを読み出す(S12)。実行部104は、読み出したデータを命令に対応する回路で処理することにより、命令を実行する(S13)。実行部104は、命令の実行結果をデスティネーションレジスタに書き込む(S13)。
The
図7で説明した本実施形態のパイプライン構造と、図18で説明した、一般的なパイプライン構造との間の相違について整理して説明する。 Differences between the pipeline structure of the present embodiment described in FIG. 7 and the general pipeline structure described in FIG. 18 will be summarized and described.
まず、上述したように、本実施形態のデコード部102は、図7に示すようにスレッド識別子判定部1021を有しているのに対し、図18のデコード部904は有していない。
First, as described above, the
次に、本実施形態のオペコードキューC2、C3は、図7に示すように、命令のみならず、デコード前に命令に付加された出力先識別子を保持する。これに対して、図18のオペコードキュー905には、出力先識別子が保持されない。
Next, as shown in FIG. 7, the operation code queues C2 and C3 of this embodiment hold not only instructions but also output destination identifiers added to the instructions before decoding. On the other hand, the output code identifier is not held in the
更に、本実施形態の制御部103は、図7に示すように出力先識別子判定部1031を有し、出力先識別子に従って、出力先のレジスタを指定するが、図18のレジスタ・リネーム及び割り当て制御ステージ906では、出力先識別子に従ってレジスタの指定が行われることはない。
Further, the
ここで、本実施形態の命令ポインタ1011、および命令フェッチキューC1は、図7では多重化されていないように記載されているが、実際には、図18の命令ポインタおよび命令フェッチキューのように物理的または論理的に多重化されている。本実施形態のプロセッサ10は、単一スレッドの性能を向上させることを目的としており、以後の説明に不要であるため、図7では、命令ポインタ1011、および命令フェッチキューC1の多重化に関する記載を省略している。
Here, the
命令ポインタ1011、および命令フェッチキューC1が多重化されている場合、多重化されたもののうち、少なくとも1つが有効に動作していれば、本発明を適用可能である。
When the
まとめると、本実施形態のパイプライン構造は、スレッド識別子判定部1021、および出力先識別子判定部1031を有し、オペコードキューが出力先識別子を更に保持する点で、図18のパイプライン構造と異なる。
In summary, the pipeline structure of this embodiment has a thread
図8〜図10を参照して、スレッド識別子判定部1021の動作について説明する。図8〜図10は、スレッド識別子判定部1021の動作を説明するための図である。
The operation of the thread
本実施形態において、スレッド識別子は3ビットで定義される。最上位のビットは、命令が割り当てられるスレッドの個数を示すビットとする。2ビット目は、1つのスレッドに命令を割り当てる場合に、2つのスレッドのうち、いずれのスレッドに割り当てるのかを示すビットとする。最下位のビットは、付加する出力先識別子を示すビットとする。 In this embodiment, the thread identifier is defined by 3 bits. The most significant bit is a bit indicating the number of threads to which an instruction is assigned. The second bit is a bit indicating which of the two threads is allocated when an instruction is allocated to one thread. The least significant bit is a bit indicating an output destination identifier to be added.
例えば、最上位のビットが「0」である場合、1つのスレッドに命令が割り当てられ、「1」である場合、2つのスレッドに割り当てられる。2ビット目が「0」である場合、OC21が属するスレッドに命令が割り当てられ、「1」である場合、OC22が属するスレッドに割り当てられる。最下位のビットが「0」である場合、出力先識別子「0」が付加され、「1」である場合、出力先識別子「1」が付加される。 For example, when the most significant bit is “0”, an instruction is assigned to one thread, and when it is “1”, it is assigned to two threads. When the second bit is “0”, an instruction is assigned to the thread to which the OC 21 belongs, and when it is “1”, the instruction is assigned to the thread to which the OC 22 belongs. When the least significant bit is “0”, the output destination identifier “0” is added, and when it is “1”, the output destination identifier “1” is added.
出力先識別子「0」は、デスティネーションレジスタを、ソースレジスタの属するスレッドと同じスレッドに属するレジスタにするための識別子とする。出力先識別子「1」は、デスティネーションレジスタを、ソースレジスタの属するスレッドと異なるスレッドに属するレジスタにするための識別子とする。 The output destination identifier “0” is an identifier for making the destination register a register belonging to the same thread as the thread to which the source register belongs. The output destination identifier “1” is an identifier for making the destination register a register belonging to a thread different from the thread to which the source register belongs.
出力先識別子は、命令列の示す処理内容や、スレッドの分割の仕方などに応じて、コンパイラ301が決定する。
The output destination identifier is determined by the
例えば、処理を複数スレッドに分割した後、それらのスレッドの結果を集約する場合、出力識別子「1」が付加される。 For example, when the process is divided into a plurality of threads and then the results of those threads are aggregated, the output identifier “1” is added.
具体的には、ループ変数を1〜256の「I」として、A=A+B(I)の計算を行う場合を考える。コンパイラ301は、スレッド1で「I」が奇数のときのBの総和を求め、スレッド2で「I」が奇数のときのBの総和を求め、ループ外で両スレッドの実行結果を加算することを前提として、命令列を生成する。この場合、両スレッドの実行結果を加算する命令に出力先識別子「1」が付加される。
Specifically, consider a case where the loop variable is set to “I” of 1 to 256, and A = A + B (I) is calculated. The
図8(a)は、スレッド識別子「000」が付加された命令をデコードする場合の、スレッド識別子判定部1021の動作を説明するための図である。最上位のビットが「0」なので、スレッド識別子判定部1021は、1つのスレッドに命令を割り当て、2ビット目が「0」なので、命令が割り当てられるスレッドは、OC21が属するスレッドである。また、最下位のビットが「0」なので、スレッド識別子判定部1021は、出力先識別子「0」を付加する。
FIG. 8A is a diagram for explaining the operation of the thread
図8(b)は、スレッド識別子「001」が付加された命令をデコードする場合の、スレッド識別子判定部1021の動作を説明するための図である。最上位のビットが「0」、2ビット目が「0」なので、スレッド識別子判定部1021は、OC21が属するスレッドに命令を割り当てる。また、最下位のビットが「1」なので、スレッド識別子判定部1021は、出力先識別子「1」を付加する。
FIG. 8B is a diagram for explaining the operation of the thread
図9(a)は、スレッド識別子「010」が付加された命令をデコードする場合の、スレッド識別子判定部1021の動作を説明するための図である。最上位のビットが「0」、2ビット目が「1」なので、スレッド識別子判定部1021は、OC22が属するスレッドに命令を割り当てる。また、最下位のビットが「0」なので、スレッド識別子判定部1021は、出力先識別子「0」を付加する。
FIG. 9A is a diagram for explaining the operation of the thread
図9(b)は、スレッド識別子「011」が付加された命令をデコードする場合の、スレッド識別子判定部1021の動作を説明するための図である。最上位のビットが「0」、2ビット目が「1」なので、スレッド識別子判定部1021は、OC22が属するスレッドに命令を割り当てる。また、最下位のビットが「1」なので、スレッド識別子判定部1021は、出力先識別子「1」を付加する。
FIG. 9B is a diagram for explaining the operation of the thread
図10は、スレッド識別子「100」が付加された命令をデコードする場合の、スレッド識別子判定部1021の動作を説明するための図である。最上位のビットが「1」なので、スレッド識別子判定部1021は、2つのスレッドに命令を割り当てる。また、最下位のビットが「0」なので、スレッド識別子判定部1021は、出力先識別子「0」を付加する。
FIG. 10 is a diagram for explaining the operation of the thread
図11および図12を参照して、出力先識別子判定部1031の動作結果について説明する。図11および図12は、出力先識別子判定部1031の制御による、実行部104の動作を説明するための図である。
The operation result of the output destination
出力先識別子判定部1031は、命令に付加された出力先識別子に基づいて、レジスタ・リネーミングと、リソースの割り当てとを行う。
The output destination
具体的には、出力先識別子が「0」の場合、出力先識別子判定部1031は、ソースレジスタの属するスレッドと、デスティネーションレジスタの属するスレッドが、同じスレッドとなるように、レジスタ・リネーミング、および割り当て制御を行う。
Specifically, when the output destination identifier is “0”, the output destination
出力先識別子が「1」の場合、出力先識別子判定部1031は、ソースレジスタの属するスレッドと、デスティネーションレジスタの属するスレッドが、異なるスレッドとなるように、レジスタ・リネーミング、および割り当て制御を行う。
When the output destination identifier is “1”, the output destination
出力先識別子が「0」で、ソースレジスタがレジスタ群1041に属するレジスタであった場合、図11(a)に示すように、演算器1043は、実行結果を、同一のレジスタ群1041に属するレジスタへ出力する。
When the output destination identifier is “0” and the source register is a register belonging to the
出力先識別子が「0」で、ソースレジスタがレジスタ群1042に属するレジスタであった場合、図11(b)に示すように、演算器1043は、実行結果を、同一のレジスタ群1042に属するレジスタへ出力する。
When the output destination identifier is “0” and the source register is a register belonging to the
出力先識別子が「1」で、ソースレジスタがレジスタ群1041に属するレジスタであった場合、図12(a)に示すように、演算器1043は、実行結果を、異なるレジスタ群1042に属するレジスタへ出力する。
When the output destination identifier is “1” and the source register is a register belonging to the
出力先識別子が「1」で、ソースレジスタがレジスタ群1042に属するレジスタであった場合、図12(b)に示すように、演算器1043は、実行結果を、異なるレジスタ群1041に属するレジスタへ出力する。
When the output destination identifier is “1” and the source register is a register belonging to the
図11、図12において、レジスタ群から演算器への矢印は、処理対象の入力データを示している。また、演算器からレジスタ群への矢印は、実行結果のデータを示している。演算器1043は、例えば、加算器である。この場合、レジスタ群から演算器への2本の矢印は、被加算値、加算値のデータであり、演算器からレジスタ群への矢印は、加算結果のデータである。
11 and 12, the arrows from the register group to the computing unit indicate the input data to be processed. An arrow from the arithmetic unit to the register group indicates execution result data. The
続いて、図13〜図15を参照して、本実施形態のソースコード、オブジェクトコードの一例について説明する。 Subsequently, an example of the source code and the object code of the present embodiment will be described with reference to FIGS.
図13は、プロセッサ10で所定の処理を実行するためのソースコードの一例である。このソースコードには、ループ変数「I」の値を変えながら、同じ処理を繰り返し実行するためのDOループ文が、記述されている。このソースコードは、単一のスレッドで処理を実行することを前提として記載されている。
FIG. 13 is an example of source code for executing predetermined processing by the
プロセッサ10は、コンパイラ301の実行により、単一のスレッドに命令列を、デコード後に複数のスレッドで実行できるように、図13のソースコードをオブジェクトコードの命令列に変換し、各命令にスレッド先識別子を付加する。
The
図14は、図13のソースコードから変換され、命令フェッチキューC1に入力される命令列の一例である。図14の命令列は、前述したように、複数スレッドに割り当てることを前提として生成されている。例えば、ポインタを設定するための命令として、スレッド1用の命令OC1およびOC2のほか、スレッド2用の命令OC3およびOC4が生成される。
FIG. 14 is an example of an instruction sequence converted from the source code of FIG. 13 and input to the instruction fetch queue C1. As described above, the instruction sequence in FIG. 14 is generated on the assumption that it is assigned to a plurality of threads. For example, as instructions for setting a pointer, instructions OC3 and OC4 for
また、命令列内の命令コード402のそれぞれには、命令が実行されるスレッドに対応するスレッド識別子405が付加されている。
Also, a
図14において、デスティネーションレジスタ指定フィールド403、およびソースレジスタ指定フィールド404は省略されている。また、命令コード402の欄には、命令コード自体でなく、命令コードの定義が記述されている。
In FIG. 14, the destination
命令OC1および命令OC2は、スレッド1の使用する変数のポインタを初期設定するための命令である。これらポインタは、スレッド1のみで使用するため、上述したスレッド識別子の定義に従って、これらの命令にはスレッド識別子「000」が付加される。
The instruction OC1 and the instruction OC2 are instructions for initializing variable pointers used by the
命令OC3およびOC4は、スレッド2の使用する変数のポインタのポインタを初期設定するための命令である。これらのポインタは、スレッド2のみで使用するため、これらの命令にはスレッド識別子「010」が付加される。
Instructions OC3 and OC4 are instructions for initializing pointers of pointers of variables used by the
命令OC5は、ループ変数「I」の初期設定をするための命令である。この命令は、スレッド1のみで実行すればよいので、この命令にはスレッド識別子「000」が付加される。
The instruction OC5 is an instruction for initial setting of the loop variable “I”. Since this instruction only needs to be executed by the
命令OC6およびOC7は、変数A、Bをロードするための命令、命令OC8は、加算を実行するための命令、そして、命令OC9は、計算結果Aのストアを実行するための命令である。これらの命令は、ポインタを変えて、スレッド1、2のそれぞれで実行される。具体的には、ループ変数「I」が奇数の場合の処理は、スレッド1で実行され、ループ変数「I」が偶数の場合の処理は、スレッド2で実行される。両スレッドで実行する必要があるので、これらの命令にはスレッド識別子「100」が付加される。
The instructions OC6 and OC7 are instructions for loading the variables A and B, the instruction OC8 is an instruction for executing addition, and the instruction OC9 is an instruction for executing a store of the calculation result A. These instructions are executed in each of the
命令OC11およびOC12は、各スレッドが使用する変数A,Bのポインタを更新するための命令である。この命令は、両スレッドで実行する必要があるので、これらの命令にはスレッド識別子「100」が付加される。 Instructions OC11 and OC12 are instructions for updating the pointers of variables A and B used by each thread. Since this instruction needs to be executed by both threads, a thread identifier “100” is added to these instructions.
命令OC13は、分岐命令であり、スレッド1のみで実行されるので、スレッド識別子「000」が付加される。
Since the instruction OC13 is a branch instruction and is executed only by the
デコード部102は、命令フェッチキューC1から取り出された命令を解釈し、マイクロオペコードで記述された命令に変換する。
The
スレッド識別子判定部1021は、スレッド識別子に応じて、オペコードキューC2、C3のうち、どのオペコードキューに命令を追加するかを判定する。また、スレッド識別子判定部1021は、命令に付加されたスレッド識別子に応じて、命令に出力先識別子を付加する。
The thread
図15(a)は、オペコードキューC2に追加された命令列の一例である。図15(b)は、オペコードC3に追加された命令列の一例である。同図(a)、(b)に示すように、命令列内の命令コード402のそれぞれに、出力先識別子406が付加されている。図14において、デスティネーションレジスタ指定フィールド403、およびソースレジスタ指定フィールド404は省略されている。また、命令コード402の欄には、命令コード自体でなく、命令コードの定義が記述されている。
FIG. 15A is an example of an instruction sequence added to the opcode queue C2. FIG. 15B is an example of an instruction sequence added to the operation code C3. As shown in FIGS. 4A and 4B, an
図15(a)に示すように、スレッド1に対応するオペコードキューC2には、スレッド識別子「000」または「100」が付加されていた命令OC1、OC2、およびOC5〜OC13が入力される。図15(b)に示すように、スレッド2に対応するオペコードキューC3には、スレッド識別子「010」が付加されていた命令OC3、OC4が入力され、スレッド識別子「100」が付加されていたOC6〜OC12が、複製して入力される。また、全ての命令に、出力先識別子「0」が付加されている。
As shown in FIG. 15A, instructions OC1, OC2, and OC5 to OC13, to which the thread identifier “000” or “100” is added, are input to the opcode queue C2 corresponding to the
図15に示したように、プロセッサ10は、単一のスレッドに属する命令列を分解または複製し、複数スレッドのそれぞれに割り当てる。そして、プロセッサ10は、各命令に、スレッドに対応するレジスタを割り当てる。例えば、オペコードキューC1、およびC2には、OC8など、同じ命令が入力されている。しかし、これらの命令は、別々のスレッドに属する命令なので、別々のスレッドに属するレジスタが割り当てられる。従って、OC8等についても、別々の演算が実行される。
As shown in FIG. 15, the
図7で説明したキューC7以降は、単一のスレッドに属する命令列と同様に、本実施形態の命令列が処理される。しかし、図18で示した方式と比較すると、本実施形態では、ソースコードにおける単一のスレッドに、レジスタ群1041、1042などの多重化されたアーキテクチャ・ステートを割り当てることができる。このため、利用できるソフト見えレジスタ数が増加し、データ待ち時間の隠蔽によって、ソースコードにおける単一のスレッドの実行時間を短縮することができる。
After the queue C7 described in FIG. 7, the instruction sequence of this embodiment is processed in the same manner as the instruction sequence belonging to a single thread. However, compared with the method shown in FIG. 18, in this embodiment, multiplexed architecture states such as
なお、図3では、命令コード402からソースレジスタ指定フィールド404までと、スレッド識別子405とを1つの命令語として定義する例を示したが、命令コード402からソースレジスタ指定フィールド404までと、スレッド識別子405とを別々の命令語として定義してもよい。その場合、スレッド識別子405を含む命令語は、後続の命令語のスレッド指定を変更する特殊命令として解釈される。
FIG. 3 shows an example in which the
本実施形態では、出力先識別子は、1ビットで定義されるが、2ビット以上で定義してもよいのは勿論である。単一のスレッドを、3つ以上のスレッドで処理する場合、出力先のレジスタが属するスレッドを指定するために、2ビット以上の出力先識別子が定義される。 In this embodiment, the output destination identifier is defined by 1 bit, but may be defined by 2 bits or more. When a single thread is processed by three or more threads, an output destination identifier of 2 bits or more is defined to specify a thread to which an output destination register belongs.
本実施形態では、制御部103に、出力先識別子判定部1031を設ける構成としているが、出力先のレジスタに対応するスレッドを切り替える必要がなければ、出力先識別子判定部1031を設けない構成としてもよい。
In this embodiment, the
図13に例示したソースコードには、繰り返し処理が記述されているが、繰り返し処理以外の処理が記述されたソースコードをコンパイラ301が、複数スレッドで実行するために変換する構成であってもよいのは、勿論である。
In the source code illustrated in FIG. 13, iterative processing is described. However, the
以上、説明したように、本実施形態によれば、同時マルチスレッディングプロセッサは、単一のスレッドに属する複数の命令をフェッチし、複数のスレッドを生成して、スレッド識別子の示すスレッドに命令を割り当てるので、デコード前に単一のスレッドに属する複数の命令を、デコード後に複数のスレッドで処理することができる。このため、単一のスレッドが、複数のスレッド分のリソースを使用することができ、単一のスレッドの実行時間が削減される。 As described above, according to this embodiment, the simultaneous multi-threading processor fetches a plurality of instructions belonging to a single thread, generates a plurality of threads, and assigns the instruction to the thread indicated by the thread identifier. A plurality of instructions belonging to a single thread before decoding can be processed by a plurality of threads after decoding. For this reason, a single thread can use resources for a plurality of threads, and the execution time of the single thread is reduced.
そして、本発明を適用する場合、スケジューラ、レジスタファイル、および、演算器などの実行リソースへの改造は不要であり、デコード部、および制御部以外は、通常の同時マルチスレッディングプロセッサの機構をそのまま流用できる。 When the present invention is applied, it is not necessary to modify the execution resources such as the scheduler, the register file, and the arithmetic unit, and the mechanism of the normal simultaneous multithreading processor can be used as it is except for the decoding unit and the control unit. .
また、同時マルチスレッディングプロセッサは、出力先識別子に基づいて、出力先のレジスタが属するスレッドを切り替えるので、多様な処理内容の命令列を処理できる。 Further, the simultaneous multithreading processor switches the thread to which the output destination register belongs based on the output destination identifier, so that it can process instruction strings having various processing contents.
繰り返し処理は、複数のスレッドに分割しやすいので、コンパイラ301が対象とする処理を、単一のスレッドに属する繰り返し処理とすれば、コンパイラの負荷が軽減される。
Since the iterative process is easily divided into a plurality of threads, if the process targeted by the
(第2の実施形態)
本発明の第2の実施形態について図16を参照して説明する。本実施形態のプロセッサは、あるスレッドに属する命令の実行結果を、多重化された全てのスレッドの、それぞれに属するレジスタへ書き込む点で、第1の実施形態のプロセッサと異なる。
(Second Embodiment)
A second embodiment of the present invention will be described with reference to FIG. The processor according to the present embodiment is different from the processor according to the first embodiment in that an execution result of an instruction belonging to a certain thread is written to a register belonging to each of all multiplexed threads.
図16は、図4に示した出力先識別子判定部1031の制御による、実行部104の本実施形態における動作を説明するための図である。他の構成については、第1の実施形態と同様であるため、本実施形態では、その詳細な説明を省略する。
FIG. 16 is a diagram for explaining the operation of the
図16に示すように、演算器1043は、レジスタ群1041、および1042の両方に、命令の実行結果を出力する。
As shown in FIG. 16, the
なお、全てのスレッドに対応するレジスタでなく、3つ以上のスレッドのうち、いずれか2つ以上のスレッドに属するレジスタへ、演算器が実行結果を出力する構成としてもよいのは、勿論である。 Of course, the arithmetic unit may output the execution result to a register belonging to any two or more of the three or more threads instead of the registers corresponding to all the threads. .
以上説明したように、本実施形態によれば、第1の実施形態の構成と比較して、単一のスレッドの命令の実行結果を、複数のスレッドの命令で使用する場合に、より効率的に命令列を処理することが可能となる。 As described above, according to the present embodiment, compared to the configuration of the first embodiment, the execution result of a single thread instruction is more efficient when used by a plurality of thread instructions. It is possible to process an instruction sequence.
1 情報処理装置
10 プロセッサ
20 メインメモリ
30 記憶部
101 命令フェッチ部
102 デコード部
103 制御部
104 実行部
301 コンパイラ
401 命令コード
402 デスティネーションレジスタ指定フィールド
403 ソースレジスタ指定フィールド
404 スレッド識別子
405 出力先識別子
801 プロセッサ
802、803 アーキテクチャ・ステート
804 実行リソース
901 命令ポインタ
902 キャッシュメモリ
903 命令フェッチキュー
904 デコード部
905 オペコードキュー
906 制御部
907 キュー
908 スケジューラ
909 レジスタ読み出しステージ
910 実行ステージ
911 レジスタ書き込みステージ
1011 命令ポインタ
1012 キャッシュメモリ
1021 スレッド識別子判定部
1031 出力先識別子判定部
1041、1042 レジスタ群
1043 演算器
3011 変換部
3012 スレッド識別子付加部
C1 命令フェッチキュー
C2、C3 オペコードキュー
C4 キュー
S1 スケジューラ
S2 レジスタ読み出しステージ
S3 実行ステージ
S4 レジスタ書き込みステージ
DESCRIPTION OF
Claims (10)
前記フェッチ手段によりフェッチされた前記複数の命令をデコードし、前記複数のスレッドを生成し、それぞれの該命令に付加された前記スレッド識別子の示すスレッドに、該命令を割り当てるデコード手段と、
前記デコード手段により生成された前記複数のスレッドを並列に動作させることにより、前記複数の命令を実行する実行手段と、
を有する同時マルチスレッディングプロセッサ。 Fetch a plurality of instructions belonging to a single thread to which a thread identifier for identifying a thread in which the instruction is executed is added among the plurality of threads so as to be executed by a plurality of threads after decoding. Fetch means;
Decoding means for decoding the plurality of instructions fetched by the fetch means, generating the plurality of threads, and assigning the instructions to threads indicated by the thread identifiers added to the respective instructions;
Execution means for executing the plurality of instructions by operating the plurality of threads generated by the decoding means in parallel;
A simultaneous multi-threading processor.
前記実行手段は、前記複数のアーキテクチャ・ユニットが共有する実行リソースを使用することにより前記複数のスレッドを並列に動作させ、それぞれのスレッドに属する前記命令を実行し、該命令の実行結果を、該命令に付加された前記出力先識別子の示す前記アーキテクチャ・ユニットへ出力する、請求項1又は2に記載の同時マルチスレッディングプロセッサ。 The decoding means adds, to the instruction, an output destination identifier for identifying an architecture unit that is an output destination of the execution result of the instruction among a plurality of architecture units based on the thread identifier added to the instruction. And
The execution means causes the plurality of threads to operate in parallel by using execution resources shared by the plurality of architecture units, executes the instructions belonging to the respective threads, and executes the execution results of the instructions, The simultaneous multithreading processor according to claim 1, wherein the simultaneous multithreading processor outputs to the architecture unit indicated by the output destination identifier added to the instruction.
前記実行手段は、前記命令の実行結果を、前記制御手段により指定された前記アーキテクチャ・ユニットへ出力する、請求項3に記載の同時マルチスレッディングプロセッサ。 Control means for designating the architecture unit indicated by the output destination identifier added to the instruction by the decoding means as an output destination of the instruction;
4. The simultaneous multithreading processor according to claim 3, wherein the execution means outputs the execution result of the instruction to the architecture unit designated by the control means.
フェッチした前記複数の命令をデコードし、
前記複数のスレッドを生成し、
それぞれの該命令に付加された前記スレッド識別子の示すスレッドに、該命令を割り当て、
生成した前記複数のスレッドを並列に動作させることにより、前記複数の命令を実行する、同時マルチスレッディングプロセッサの制御方法。 Fetch a plurality of instructions belonging to a single thread to which a thread identifier for identifying a thread in which the instruction is executed is added among the plurality of threads so that the plurality of threads are executed after decoding. ,
Decoding the plurality of fetched instructions;
Creating the plurality of threads;
Assigning the instruction to a thread indicated by the thread identifier added to each instruction;
A method for controlling a simultaneous multi-threading processor, wherein the plurality of instructions are executed by operating the plurality of generated threads in parallel.
コンピュータに、
デコード後に複数のスレッドで実行されるように、ソースコードを単一のスレッドに属する複数の命令に変換する変換手順、及び
前記複数のスレッドのうち、命令が実行されるスレッドを識別するためのスレッド識別子を、それぞれの前記命令に付加する付加手順、
を実行させるためのプログラム。 A program for compiling,
On the computer,
A conversion procedure for converting the source code into a plurality of instructions belonging to a single thread so as to be executed by a plurality of threads after decoding, and a thread for identifying a thread in which the instructions are executed among the plurality of threads An additional procedure for adding an identifier to each said instruction;
A program for running
前記複数のスレッドのうち、命令が実行されるスレッドを識別するためのスレッド識別子を、それぞれの前記命令に付加する、コンパイル方法。 Convert the source code into multiple instructions belonging to a single thread so that it can be executed in multiple threads after decoding,
A compiling method, wherein a thread identifier for identifying a thread in which an instruction is executed among the plurality of threads is added to each of the instructions.
前記コンパイラによりスレッド識別子が付加された前記複数の命令をフェッチし、フェッチした該複数の命令をデコードし、前記複数のスレッドを生成し、それぞれの該命令に付加された前記スレッド識別子の示すスレッドに、該命令を割り当て、生成した該複数のスレッドを並列に動作させることにより、該複数の命令を実行する、同時マルチスレッディングプロセッサと、
を有する情報処理装置。 The source code is converted into a plurality of instructions belonging to a single thread so as to be executed in a plurality of threads after decoding, and a thread identifier for identifying a thread in which the instructions are executed among the plurality of threads, A compiler attached to each of the instructions;
The plurality of instructions to which a thread identifier is added by the compiler are fetched, the plurality of fetched instructions are decoded, the plurality of threads are generated, and the thread indicated by the thread identifier added to each of the instructions A simultaneous multi-threading processor that executes the plurality of instructions by allocating the instructions and operating the generated threads in parallel;
An information processing apparatus.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009271499A JP2011113457A (en) | 2009-11-30 | 2009-11-30 | Simultaneous multi-threading processor, control method, program, compiling method, and information processor |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009271499A JP2011113457A (en) | 2009-11-30 | 2009-11-30 | Simultaneous multi-threading processor, control method, program, compiling method, and information processor |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011113457A true JP2011113457A (en) | 2011-06-09 |
Family
ID=44235715
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009271499A Pending JP2011113457A (en) | 2009-11-30 | 2009-11-30 | Simultaneous multi-threading processor, control method, program, compiling method, and information processor |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011113457A (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2519103A (en) * | 2013-10-09 | 2015-04-15 | Advanced Risc Mach Ltd | Decoding a complex program instruction corresponding to multiple micro-operations |
-
2009
- 2009-11-30 JP JP2009271499A patent/JP2011113457A/en active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2519103A (en) * | 2013-10-09 | 2015-04-15 | Advanced Risc Mach Ltd | Decoding a complex program instruction corresponding to multiple micro-operations |
US9934037B2 (en) | 2013-10-09 | 2018-04-03 | Arm Limited | Decoding a complex program instruction corresponding to multiple micro-operations |
GB2519103B (en) * | 2013-10-09 | 2020-05-06 | Advanced Risc Mach Ltd | Decoding a complex program instruction corresponding to multiple micro-operations |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4818918B2 (en) | An instruction that starts a concurrent instruction stream on a multithreaded microprocessor | |
CN113703834B (en) | Block-based processor core compound register | |
KR101966712B1 (en) | Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines | |
JP3832623B2 (en) | Method and apparatus for assigning functional units in a multithreaded VLIW processor | |
EP3314401B1 (en) | Block-based architecture with parallel execution of successive blocks | |
KR101620676B1 (en) | Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines | |
KR101638225B1 (en) | Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines | |
US20140047219A1 (en) | Managing A Register Cache Based on an Architected Computer Instruction Set having Operand Last-User Information | |
JP3780449B2 (en) | Method and apparatus for releasing functional units in a multithreaded VLIW processor | |
JP3777541B2 (en) | Method and apparatus for packet division in a multi-threaded VLIW processor | |
JP2001306324A (en) | Method and device for identifying separable packet in multi-thread vliw processor | |
US20130339711A1 (en) | Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor | |
US20190171462A1 (en) | Processing core having shared front end unit | |
JP2004171573A (en) | Coprocessor extension architecture built by using novel splint-instruction transaction model | |
KR20100111700A (en) | System and method for performing locked operations | |
TWI730312B (en) | Managing instruction order in a processor pipeline | |
WO2005022384A1 (en) | Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor | |
JP2004518183A (en) | Instruction fetch and dispatch in multithreaded systems | |
JP2008527501A (en) | A mechanism for instruction set based on thread execution in multiple instruction sequencers | |
WO2024093541A1 (en) | Decoding method for multi-thread processor, processor, chip, and electronic device | |
JP2011113457A (en) | Simultaneous multi-threading processor, control method, program, compiling method, and information processor | |
JP2005108086A (en) | Data processor | |
JP2007109057A (en) | Processor | |
US20230342153A1 (en) | Microprocessor with a time counter for statically dispatching extended instructions | |
Lenir et al. | Exploiting instruction-level parallelism: the multithreaded approach |