(57)【要約】【課題】  パイプライン処理を行うプロセッサにおいて、レジスタのゲート数を低減しつつ、複数のタスクあるいはスレッドを効率的に処理すること。【解決手段】  パイプライン処理装置１は、レジスタファイルに代えて、メモリによって構成されたレジスタ用メモリ１００を備えていると共に、ＰＣを構成するレジスタに代えて、メモリによって構成されたプログラムカウンタ用メモリ３０を備えている。したがって、これらをレジスタによって構成する場合に比べ、レジスタのゲート数が低減すると共に、コンテキストの入れ替えを行うことなく、アドレスの指定によってコンテキストスイッチを行うことができるため、複数のタスクあるいはスレッドを効率的に処理することが可能となる。【選択図】  図１
2006139645.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサの外部に備えられる外部メモリから実行対象となる命令をフェッチしてデコードし、実行ユニットを用いて演算を行うプロセッサであって、
前記実行ユニットにおける演算対象あるいは演算結果であるデータを記憶するレジスタファイル用のメモリと、
実行対象となる命令が記憶された前記外部メモリのアドレスを指し示すプログラムカウンタを記憶するプログラムカウンタ用のメモリと、
を含むことを特徴とするプロセッサ。
【請求項２】
前記レジスタファイル用のメモリは、複数のタスクあるいはスレッドそれぞれに対応するメモリ空間に区分され、
前記プログラムカウンタ用のメモリは、前記複数のタスクあるいはスレッドそれぞれに関するプログラムカウンタを記憶していることを特徴とする請求項１記載のプロセッサ。
【請求項３】
取り扱われているタスクあるいはスレッドのうち、実行対象のタスクあるいはスレッドを指定する情報を上位アドレスに対応させ、デコードされた命令に含まれるレジスタ番号を下位アドレスに対応させることにより、前記レジスタファイル用のメモリにおける読み出しアドレスあるいは書き込みアドレスを指定するアドレス指定手段を含むことを特徴とする請求項１または２記載のプロセッサ。
【請求項４】
プロセッサの外部に備えられる外部メモリから実行対象となる命令をフェッチしてデコードし、実行ユニットを用いて演算を行うプロセッサにおける演算処理方法であって、
前記実行ユニットにおける演算対象あるいは演算結果であるデータを記憶するレジスタファイルと、実行対象となる命令が記憶された前記外部メモリのアドレスを指し示すプログラムカウンタとをそれぞれメモリによって構成し、前記レジスタファイルおよびプログラムカウンタを構成するメモリの所定アドレスに、複数のタスクあるいはスレッドそれぞれに対応する演算対象あるいは演算結果であるデータとプログラムカウンタとを記憶し、それらメモリのアドレスを切り換えることによりコンテキストスイッチを行いながら演算を行うことを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテキストスイッチを行いながら演算処理を実行するプロセッサおよび演算処理方法に関する。
【背景技術】
【０００２】
従来、パイプライン処理を行うプロセッサにおいて、複数のタスクあるいはスレッドを処理可能なものが知られている。
このようなプロセッサにおいて、複数のタスクあるいはスレッドを同時に処理する場合、処理されるタスクあるいはスレッドそれぞれのためにレジスタファイルも複数セット備えておく必要がある。
【０００３】
そのため、レジスタファイルの規模が大型化し、ゲート数が増大するという問題があった。
ここで、レジスタファイルのゲート数を低減可能な技術として、特許文献１に記載された技術が知られている。
特許文献１に記載された技術は、レジスタファイルに代えて、プロセッサに備えられたキャッシュメモリを用いて演算処理を行う技術である。
【特許文献１】特開平８−３３９３３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載された技術においては、タスクの切り換えが行われる場合、レジスタとして使用されているキャッシュメモリの領域からメモリへコンテキストを退避させる等、データの入れ替えを行う機会が比較的頻繁に発生することとなる。
そのため、複数のタスクあるいはスレッドを同時に処理する場合には、データの入れ替えのために要する処理時間および消費電力が増大し、処理効率が低下する可能性があった。
【０００５】
また、特許文献１に記載された技術においては、プログラムカウンタをレジスタによって構成しているため、タスクの切り換え時にプログラムカウンタの値をメモリに退避させる必要があると共に、プログラムカウンタを構成するレジスタについてはゲート数を低減できないという問題があった。
このように、パイプライン処理を行うプロセッサにおいて、レジスタのゲート数を低減しつつ、複数のタスクあるいはスレッドを効率的に処理することは困難であった。
【０００６】
本発明の課題は、パイプライン処理を行うプロセッサにおいて、レジスタのゲート数を低減しつつ、複数のタスクあるいはスレッドを効率的に処理することである。
【課題を解決するための手段】
【０００７】
以上の課題を解決するため、本発明は、
プロセッサの外部に備えられる外部メモリから実行対象となる命令をフェッチしてデコードし、実行ユニットを用いて演算を行うプロセッサであって、前記実行ユニットにおける演算対象あるいは演算結果であるデータを記憶するレジスタファイル用のメモリ（例えば、図１のレジスタ用メモリ１００）と、実行対象となる命令が記憶された前記外部メモリのアドレスを指し示すプログラムカウンタを記憶するプログラムカウンタ用のメモリ（例えば、図１のプログラムカウンタ用メモリ３０）とを含むことを特徴としている。
【０００８】
このような構成により、レジスタファイルおよびプログラムカウンタがメモリによって構成されるため、レジスタのゲート数を低減することができる。また、レジスタファイル用のメモリとプログラムカウンタ用のメモリにおけるアドレスを切り換えることにより、コンテキストスイッチを行うことができるため、データの入れ替えのために要する処理時間および消費電力が削減され、複数のタスクあるいはスレッドを効率的に処理することが可能となる。
【０００９】
即ち、本発明によれば、パイプライン処理を行うプロセッサにおいて、レジスタのゲート数を低減しつつ、複数のタスクあるいはスレッドを効率的に処理することが可能となる。
また、前記レジスタファイル用のメモリは、複数のタスクあるいはスレッドそれぞれに対応するメモリ空間に区分され、前記プログラムカウンタ用のメモリは、前記複数のタスクあるいはスレッドそれぞれに関するプログラムカウンタを記憶していることを特徴としている。
【００１０】
このような構成により、マルチスレッド処理を行う場合に、レジスタファイルを、処理されるタスクあるいはスレッド数に対応する複数セット備える必要がないため、ゲート数を低減することが可能となる。
また、取り扱われているスレッドのうち、実行対象のタスクあるいはスレッドを指定する情報を上位アドレスに対応させ、デコードされた命令に含まれるレジスタ番号を下位アドレスに対応させることにより、前記レジスタファイル用のメモリにおける読み出しアドレスあるいは書き込みアドレスを指定するアドレス指定手段（例えば、図１の加算器６０，７０）を含むことを特徴としている。
【００１１】
このような構成により、レジスタファイル用のメモリにおけるメモリ空間を、複数のタスクあるいはスレッドそれぞれに容易に割り当てて使用することが可能となる。
また、本発明は、
プロセッサの外部に備えられる外部メモリから実行対象となる命令をフェッチしてデコードし、実行ユニットを用いて演算を行うプロセッサにおける演算処理方法であって、前記実行ユニットにおける演算対象あるいは演算結果であるデータをプロセッサ内部において記憶するレジスタファイルと、実行対象となる命令が記憶された前記外部メモリのアドレスを指し示すプログラムカウンタとをそれぞれメモリによって構成し、前記レジスタファイルおよびプログラムカウンタを構成するメモリの所定アドレスに、複数のタスクあるいはスレッドそれぞれに対応する演算対象あるいは演算結果であるデータとプログラムカウンタとを記憶し、それらメモリのアドレスを切り換えることによりコンテキストスイッチを行いながら演算を行うことを特徴としている。
【００１２】
このように、本発明によれば、パイプライン処理を行うプロセッサにおいて、レジスタのゲート数を低減しつつ、複数のタスクあるいはスレッドを効率的に処理することが可能となる。
【発明を実施するための最良の形態】
【００１３】
以下、図を参照して本発明に係るプロセッサの実施の形態を説明する。
まず、構成を説明する。
図１は、本発明を適用したプロセッサ３を備えるパイプライン処理装置１の機能構成を示すブロック図である。
図１において、パイプライン処理装置１は、外部メモリ２と、プロセッサ３とを含んで構成される。
【００１４】
外部メモリ２は、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）等の記憶素子によって構成されたメモリであり、パイプライン処理装置１において実行される命令コードおよび演算対象となるデータを記憶している。
プロセッサ３は、複数のタスクあるいはスレッドを並行してパイプライン処理可能なプロセッサであり、タスク／スレッド情報管理部１０と、実行制御部２０と、プログラムカウンタ用メモリ３０と、実行中情報保持部４０と、デコードユニット５０と、加算器６０，７０と、パイプラインレジスタ８０と、実行ユニット９０と、レジスタ用メモリ１００とを含んで構成される。
【００１５】
タスク／スレッド情報管理部１０は、パイプライン処理装置１において生成されたタスクあるいはスレッド、および、それらのうち実行中であるタスクあるいはスレッドを管理する。なお、タスク／スレッド情報管理部１０は、タスクあるいはスレッドそれぞれを識別するタスク／スレッド識別子によって、各タスクあるいはスレッドを管理している。このタスク／スレッド識別子は、レジスタ用メモリ１００の上位アドレスとして各タスクあるいはスレッドに固有の数値が割り当てられている。即ち、タスク／スレッド識別子は、レジスタ用メモリ１００における各タスクあるいはスレッドの使用領域を示している（図２（ａ）参照）。
【００１６】
実行制御部２０は、タスク／スレッド情報管理部１０において管理されているタスクあるいはスレッドを、優先度および入力順序に従って実行させる。
プログラムカウンタ用メモリ３０は、ＳＲＡＭ（Synchronous Random Access Memory）等、外部メモリ２より高速にアクセス可能な記憶素子によって構成されたメモリであり、パイプライン処理装置１において実行されているスレッドそれぞれに関するプログラムカウンタ（以下、「ＰＣ」と言う。）を構成している。そして、実行されるスレッドを切り換え、コンテキストスイッチを行う場合、プログラムカウンタ用メモリ３０は、ＰＣの値を外部メモリ２に退避することなく、次に実行されるスレッドのＰＣのアドレスを指定することにより、コンテキストスイッチを行う。
【００１７】
また、プログラムカウンタ用メモリ３０は、コンテキストスイッチが行われる際、実行制御部２０によって実行対象となるタスクあるいはスレッドのタスク／スレッド識別子が入力されると、それに対応するプログラムカウンタが示す外部メモリ２のアドレスを出力する。
さらに、プログラムカウンタ用メモリ３０は、実行制御部２０によって入力されたタスク／スレッド識別子を実行中情報保持部４０に出力する。
【００１８】
上述のように、プログラムカウンタ用メモリ３０がメモリによって構成されていることから、ＰＣのアドレス指定を変更するのみでコンテキストスイッチを行うことができ、データ（ＰＣの値）の入れ替えを行う必要がなくなると共に、ＰＣをレジスタによって構成する場合に比べ、ゲート数を低減することが可能となる。
なお、プログラムカウンタ用メモリ３０は、ノーウェイトによって読み出しおよび書き込みが可能なメモリである。そのため、データの読み出しおよび書き込みがレジスタより比較的低速なメモリによってＰＣを構成しても、パイプライン処理の遅延を生じさせることなくコンテキストスイッチを行うことができる。また、プログラムカウンタ用メモリ３０は、実行ユニット９０によってブランチ先のアドレスに対応するＰＣの値が入力されると、そのＰＣに示されるアドレスを外部メモリ２に出力する。
【００１９】
実行中情報保持部４０は、プログラムカウンタ用メモリ３０によって入力されたタスク／スレッド識別子を記憶し、処理のステージに合わせてタスク／スレッド識別子を加算器６０，７０に出力する。また、実行中情報保持部４０は、デコードユニット５０によって入力された書き込みレジスタ番号を記憶し、処理のステージに合わせて書き込みレジスタ番号を加算器７０に出力する。
【００２０】
具体的には、実行中情報保持部４０は、スレッドＩＤ保持部４１〜４４および書き込みレジスタ番号保持部４５，４６を含んで構成される。
スレッドＩＤ保持部４１は、プログラムカウンタ用メモリ３０によって入力されたタスク／スレッド識別子を一時的に保持し、１サイクル遅延させてスレッドＩＤ保持部４２に出力する。
【００２１】
スレッドＩＤ保持部４２は、スレッドＩＤ保持部４１によって入力されたタスク／スレッド識別子を一時的に保持し、１サイクル遅延させてスレッドＩＤ保持部４３および加算器６０に出力する。
スレッドＩＤ保持部４３は、スレッドＩＤ保持部４２によって入力されたタスク／スレッド識別子を一時的に保持し、１サイクル遅延させてスレッドＩＤ保持部４４に出力する。
【００２２】
スレッドＩＤ保持部４４は、スレッドＩＤ保持部４３によって入力されたタスク／スレッド識別子を一時的に保持し、１サイクル遅延させて加算器７０に出力する。
書き込みレジスタ番号保持部４５は、デコードユニット５０によって入力された書き込みレジスタ番号を一時的に保持し、１サイクル遅延させて書き込みレジスタ番号保持部４６に出力する。
【００２３】
書き込みレジスタ番号保持部４６は、書き込みレジスタ番号保持部４５によって入力された書き込みレジスタ番号を一時的に保持し、１サイクル遅延させて加算器７０に出力する。
デコードユニット５０は、外部メモリ２から読み出した命令コードをデコードし、オペコードによって示された演算の指示をパイプラインレジスタ８０に出力する。また、デコードユニット５０は、命令コードのオペランドによって示された読み出しレジスタ番号を加算器６０に出力すると共に、書き込みレジスタ番号を書き込みレジスタ番号保持部４５に出力する。
【００２４】
加算器６０は、スレッドＩＤ保持部４１によって入力されたタスク／スレッド識別子と、デコードユニット５０によって入力された読み出しレジスタ番号とを加算し、レジスタ用メモリ１００に読み出しレジスタアドレスとして出力する。このとき、加算器６０は、図２（ａ）に示すように、スレッドＩＤ保持部４１によって入力されたタスク／スレッド識別子を上位アドレス、デコードユニット５０によって入力された読み出しレジスタ番号を下位アドレスとして加算し、レジスタ用メモリ１００の読み出しレジスタアドレスとする。
【００２５】
加算器７０は、スレッドＩＤ保持部４４によって入力されたタスク／スレッド識別子と、デコードユニット５０によって入力された読み出しレジスタ番号とを加算し、レジスタ用メモリ１００に書き込みレジスタアドレスとして出力する。このとき、加算器７０は、スレッドＩＤ保持部４４によって入力されたタスク／スレッド識別子を上位アドレス、デコードユニット５０によって入力された読み出しレジスタ番号を下位アドレスとして加算し、レジスタ用メモリ１００の書き込みレジスタアドレスとする（図２（ａ）参照）。
【００２６】
なお、本実施の形態においては、レジスタ用メモリ１００が、専用のメモリとして構成されているため、図２（ａ）のようなアドレスの算出が行われるが、図３に示すように、汎用の外部メモリにおいて、一部の領域をレジスタ用メモリ１００として使用する場合、その領域の先頭を示すベースアドレスをさらに上位に付加し、図２（ｂ）のようにアドレスの算出が行われる。
【００２７】
パイプラインレジスタ８０は、デコードユニット５０によって入力された演算の指示を示すデータを一時的に保持し、レジスタ用メモリ１００から読み出されたレジスタの値が実行ユニット９０に入力されるタイミングと合わせて、保持している演算の指示を示すデータを実行ユニット９０に出力する。
実行ユニット９０は、数値演算あるいは論理演算を行う演算器や、データのロードあるいはストアを行うロードユニット、ストアユニットを含んで構成される。また、実行ユニット９０は、パイプラインレジスタ８０によって入力された演算の指示に従って、レジスタ用メモリ１００から読み出されたレジスタの値に対する数値演算、論理演算あるいはロード、ストア処理を行う。そして、実行ユニット９０は、数値演算あるいは論理演算の結果をレジスタ用メモリ１００に出力したり、ロード処理によって外部メモリ２から読み込んだデータをレジスタ用メモリ１００に出力したり、ストア処理によって外部メモリ２に書き込むデータをレジスタ用メモリ１００から読み出して外部メモリ２に出力したりする。
【００２８】
なお、実行ユニット９０は、ブランチ命令を実行した場合、ブランチ先のアドレスに対応するＰＣの値をプログラムカウンタ用メモリ３０に出力する。
レジスタ用メモリ１００は、ＳＲＡＭ等、外部メモリ２より高速にアクセス可能な記憶素子によって構成されたメモリであり、加算器６０によって読み出しアドレスが入力されると、そのアドレスに記憶されたデータを実行ユニット９０に出力する。また、レジスタ用メモリ１００は、加算器７０によって入力された書き込みアドレスに、実行ユニット９０によって入力された数値演算あるいは論理演算の結果や、ロード処理によって外部メモリ２から読み込まれたデータを記憶する。
【００２９】
上述のように、レジスタ用メモリ１００がメモリによって構成されていることから、コンテキストの格納領域のアドレス指定（即ち、タスク／スレッド識別子）を変更するのみでコンテキストスイッチを行うことができ、データ（コンテキスト）の入れ替えを行う必要がなくなると共に、コンテキストをレジスタファイルに格納する場合に比べ、ゲート数を低減することが可能となる。
【００３０】
なお、レジスタ用メモリ１００は、ノーウェイトによって読み出しおよび書き込みが可能なメモリである。そのため、データの読み出しおよび書き込みがレジスタより比較的低速なメモリによってレジスタファイルを構成しても、パイプライン処理の遅延を生じさせることなくコンテキストスイッチを行うことができる。
次に、動作を説明する。
【００３１】
以下、パイプライン処理装置１における処理サイクルを追って、各部の動作を説明する。なお、ここでは、レジスタ用メモリ１００におけるソースデータ間の演算が実行される場合の動作を例に挙げて説明する。
初めに、サイクル１において、実行制御部２０がタスク／スレッド情報管理部１０から、各タスクあるいはスレッドについて管理されている情報を取得し、その情報を基に、次に実行するタスクあるいはスレッドを選択する。そして、実行制御部２０は、選択したタスクあるいはスレッドのタスク／スレッド識別子をプログラムカウンタ用メモリ３０に出力する。
【００３２】
次に、サイクル２において、プログラムカウンタ用メモリ３０が、実行制御部２０によって入力されたタスク／スレッド識別子に応じたＰＣの値（命令アドレス）を読み出し、読み出した命令アドレスを外部メモリ２に出力する。また、プログラムカウンタ用メモリ３０は、実行制御部２０によって入力されたタスク／スレッド識別子を実行中情報保持部４０に出力する。
【００３３】
続いて、サイクル３において、外部メモリ２がプログラムカウンタ用メモリ３０によって入力された命令アドレスに記憶されたデータ（命令コード）をデコードユニット５０に出力する。また、実行中情報保持部４０がプログラムカウンタ用メモリ３０によって入力されたタスク／スレッド識別子をスレッドＩＤ保持部４１に記憶する。
次いで、サイクル４において、デコードユニット５０が外部メモリ２によって入力された命令コードを解読し、演算の指示内容と読み出しレジスタ番号および書き込みレジスタ番号を取得する。そして、デコードユニット５０は、演算の指示をパイプラインレジスタ８０に出力すると共に、読み出しレジスタ番号を加算器６０に、書き込みレジスタ番号を書き込みレジスタ番号保持部４５にそれぞれ出力する。
【００３４】
また、実行中情報保持部４０が、スレッドＩＤ保持部４１に記憶されたタスク／スレッド識別子をスレッドＩＤ保持部４２にシフトさせ、スレッドＩＤ保持部４２が、シフトされたタスク／スレッド識別子を加算器６０に出力する。
さらに、加算器６０が、スレッドＩＤ保持部４２によって入力されたタスク／スレッド識別子と、デコードユニット５０によって入力された読み出しレジスタ番号とから、レジスタ用メモリ１００の読み出しレジスタアドレスを算出し、レジスタ用メモリ１００に出力する。
【００３５】
次に、サイクル５において、レジスタ用メモリ１００が、加算器６０によって入力された読み出しレジスタアドレスに対応するデータ（ソースデータ）を実行ユニット９０に出力する。また、パイプラインレジスタ８０が、デコードユニット５０によって入力された演算の指示を示すデータを記憶する。さらに、実行中情報保持部４０が、スレッドＩＤ保持部４２に記憶されたタスク／スレッド識別子をスレッドＩＤ保持部４３にシフトさせると共に、デコードユニット５０によって入力された書き込みレジスタ番号を書き込みレジスタ番号保持部４５に記憶する。
【００３６】
続いて、サイクル６において、実行ユニット９０が、パイプラインレジスタ８０に記憶された演算の指示を示すデータを取得し、レジスタ用メモリ１００によって入力されたデータ（ソースデータ）に対し、演算処理を行う。そして、実行ユニット９０は、演算結果をレジスタ用メモリ１００に出力する。
また、実行中情報保持部４０が、スレッドＩＤ保持部４３に記憶されたタスク／スレッド識別子をスレッドＩＤ保持部４４にシフトさせると共に、書き込みレジスタ番号保持部４５に記憶された書き込みレジスタ番号を書き込みレジスタ番号保持部４６にシフトさせる。そして、実行中情報保持部４０は、スレッドＩＤ保持部４４に記憶されたタスク／スレッド識別子および書き込みレジスタ番号保持部４５に記憶された書き込みアドレス番号を加算器７０に出力する。
【００３７】
さらに、加算器７０は、スレッドＩＤ保持部４４によって入力されたタスク／スレッド識別子および書き込みレジスタ番号保持部４５によって入力された書き込みアドレス番号とから、レジスタ用メモリ１００の書き込みレジスタアドレス（デスティネーションアドレス）を算出し、レジスタ用メモリ１００に出力する。
そして、サイクル７において、レジスタ用メモリ１００が、実行ユニット９０によって入力された演算結果を、加算器７０によって入力された書き込みレジスタアドレスに記憶する。
【００３８】
以後、処理対象となるタスクあるいはスレッドについて、上述の動作を繰り返すことにより、パイプライン処理装置１における処理が遂行される。
なお、ここでは命令の処理単位がスレッドである場合について説明したが、命令の処理単位がタスクである場合についても同様である。
以上のように、本発明を適用したパイプライン処理装置１は、レジスタファイルに代えて、メモリによって構成されたレジスタ用メモリ１００を備えていると共に、ＰＣを構成するレジスタに代えて、メモリによって構成されたプログラムカウンタ用メモリ３０を備えている。
【００３９】
したがって、これらをレジスタによって構成する場合に比べ、レジスタのゲート数が低減すると共に、コンテキストの入れ替えを行うことなく、アドレスの指定によってコンテキストスイッチを行うことができるため、複数のタスクあるいはスレッドを効率的に処理することが可能となる。
また、タスク／スレッド識別子がレジスタ用メモリ１００の上位アドレスに対応し、命令コードの読み出しレジスタ番号および書き込みレジスタ番号がレジスタ用メモリ１００の下位アドレスに対応されているため、レジスタ用メモリ１００のメモリ空間を複数のタスクあるいはスレッドそれぞれに容易に割り当てて使用することが可能となる。
【００４０】
また、このようなメモリアクセス方式とすることにより、他のタスクあるいはスレッドによって誤ってコンテキストにアクセスされる事態を防ぐことができる。
【図面の簡単な説明】
【００４１】
【図１】本発明を適用したプロセッサ３を備えるパイプライン処理装置１の機能構成を示すブロック図である。
【図２】レジスタ用メモリ１００のアドレスの構成を説明する図である。
【図３】汎用の外部メモリにおいて、一部の領域をレジスタ用メモリ１００として使用する場合のパイプライン制御装置１の構成例を示す図である。
【符号の説明】
【００４２】
１  パイプライン処理装置、２  外部メモリ、３  プロセッサ、１０  タスク／スレッド情報管理部、２０  実行制御部、３０  プログラムカウンタ用メモリ、４０  実行中情報保持部、４１〜４４  スレッドＩＤ保持部、４５，４６  書き込みレジスタ番号保持部、５０  デコードユニット、６０，７０  加算器、８０  パイプラインレジスタ、９０  実行ユニット、１００  レジスタ用メモリ
【図１】
2006139645.tif 000003
【図２】
2006139645.tif 000004
【図３】
2006139645.tif 000005