JP7506718B2 - ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム - Google Patents

ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム Download PDF

Info

Publication number
JP7506718B2
JP7506718B2 JP2022125913A JP2022125913A JP7506718B2 JP 7506718 B2 JP7506718 B2 JP 7506718B2 JP 2022125913 A JP2022125913 A JP 2022125913A JP 2022125913 A JP2022125913 A JP 2022125913A JP 7506718 B2 JP7506718 B2 JP 7506718B2
Authority
JP
Japan
Prior art keywords
instruction
jump destination
machine instruction
machine
jump
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.)
Active
Application number
JP2022125913A
Other languages
English (en)
Other versions
JP2024022371A (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.)
TAKEOKA LAB CORPORATION
Tokyo Electron Ltd
Original Assignee
TAKEOKA LAB CORPORATION
Tokyo Electron Ltd
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 TAKEOKA LAB CORPORATION, Tokyo Electron Ltd filed Critical TAKEOKA LAB CORPORATION
Priority to JP2022125913A priority Critical patent/JP7506718B2/ja
Priority to PCT/JP2023/020054 priority patent/WO2024029174A1/ja
Publication of JP2024022371A publication Critical patent/JP2024022371A/ja
Application granted granted Critical
Publication of JP7506718B2 publication Critical patent/JP7506718B2/ja
Active 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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

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

本開示は、パイプライン処理を実行するプロセッサの技術に関する。特に、RISC(Reduced Instruction Set Computer)アーキテクチャに基づくものに適する。
RISCは、縮小命令セットアーキテクチャとして設計されたものである。特に、命令における総数や種類、フォーマットを少なくし、それぞれの命令の処理やオペランドのアドレッシングを単純化したものである。
また、RISCは、複数段階の処理要素を、パイプライン処理によって高速化している。パイプライン処理とは、前段の処理要素の出力が後段の処理要素の入力となるように、直列に連結したものである。そして、列の処理要素をクロックに応じてシフトさせていき、並行に処理する。また、処理要素間に、バッファを置いて、1クロック毎の同期をとる。
図1は、従来技術におけるパイプライン処理を表す説明図である。
図1によれば、RISCの4段パイプライン処理としては、以下の処理要素が連結されている。
命令フェッチ部(IF (Instruction Fetch))
:プログラムカウンタにセットされたメモリアドレスから、機械語命令を
フェッチする
デコード部(ID (Instruction Decode/register read))
:命令フェッチ部から出力された機械語命令を、制御情報(命令エンコーディ
ング形式の制御ビット列)にデコードする
実行部(EX (EXecution/address calculation))
:デコード部から出力された制御情報を実行する
書き込み部(WB (Write Back))
:メモリの読み出し及び書き込み・レジスタへの書き込み
命令フェッチ部、デコード部、実行部、書き込み部はそれぞれ、クロック同期して内部情報をシフトさせながら実行される。各処理要素を並列に処理することによって、クロックを無駄にすることがない。
従来、CISC(Complex Instruction Set Computer)型プロセッサのデータ構造及びコードを、RISC型プロセッサに適用できるよう変換する技術がある(例えば特許文献1参照)。この技術によれば、メモリ内の一連のアドレスから機械語命令をフェッチし、その機械語命令をデコードする。次に、このとき、フェッチされた機械語命令の中でジャンプ命令を検出した際に、ジャンプ先のターゲットアドレスを含むレジスタのアドレスを抽出する。そして、ジャンプ命令を実行する前に、一連のアドレスでからはなく、レジスタが指すターゲットアドレスから機械語命令をフェッチする。
また、複雑な回路構成にすることなく、1サイクルで分岐を実行し、命令のパイプラインを分断させない分岐予測の技術もある(例えば特許文献2参照)。この技術によれば、RISCに適した割り込みルーチンを処理するために、以下の段階を処理する。
(段階1)割り込み発生の2サイクル前にパイプラインに投入された命令のロケーション指示部をセーブする。
(段階2)割り込み発生の1サイクル前に投入された命令のロケーション指示部をセーブする。
(段階3)割り込みルーチンを処理する。
(段階4)割り込みルーチンから復帰する前に、段階1でセーブされたロケーション指示部にある命令をパイプラインに投入する。
(段階5)割り込みルーチンから復帰する前に、段階2でセーブされたロケーション指示部にある命令をパイプラインに投入する。
特開平6-103067号公報 特開平9-171463号公報
図2は、ジャンプ命令の際に無駄なクロックとして生じるバブルを表す説明図である。
図2によれば、命令フェッチ部は、プログラムカウンタにセットされたメインメモリのアドレスから、機械語命令をフェッチする。このとき、プログラムカウンタは、次の機械語命令のメモリアドレスへカウントアップされる。
ここで、命令フェッチ部によってフェッチされた機械語命令が、ジャンプ命令(JAL(Jump And Link)及びJALR(Jump And Link Register))であったとする。
次に、デコード部は、そのジャンプの機械語命令を、制御情報にデコードする。
そして、実行部は、その制御情報を実行する。このとき、実行部は、ジャンプの制御情報を実行することによって、プログラムカウンタを、ジャンプ先の先頭アドレスにセットする。
注目すべきは、そのジャンプ命令の制御情報が実行部で実行されるまで、ジャンプ先のアドレスが、プログラムカウンタにセットされることはない、ことにある。即ち、ジャンプ命令の制御情報が実行部で実行された時には、既に、命令フェッチ部及びデコード部は、プログラムカウンタのカウントアップによって処理を進行している。そのために、その命令フェッチ部及びデコード部の処理は無駄なもの(バブル)となる。
即ち、ジャンプ命令の制御情報が実行部で実行された後、ジャンプ先の先頭アドレスが、プログラムカウンタにセットされ、命令フェッチ部は次のクロックで改めて、そのプログラムカウンタに応じた機械語命令をフェッチしなければならない。
これは、パイプライン処理の中で、ジャンプ命令が実行される毎に、パイプライン・バブルを生じることとなり、プロセッサの処理能力を低下させる原因となっていた。
そこで、本開示は、ジャンプ命令が実行される場合であってもパイプライン・バブルをできる限り生じないように、パイプライン処理を制御するプロセッサ及びプログラムを提供することを目的とする。
本開示によれば、
ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
を有することを特徴とする。
また、本開示のプロセッサにおける他の実施形態によれば、
ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
を有し、
ソースコードのジャンプ元コードに、ジャンプ先ラベル、及び、ジャンプ先の先頭機械語命令が記述されており、
テーブルには、ジャンプ先ラベル毎に、ジャンプ先の先頭アドレス及び先頭機械語命令が記述され、
テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
ことを特徴とする。
本開示のプロセッサにおける他の実施形態によれば、
パイプライン制御手段の処理の後、
デコード手段がジャンプ先の先頭機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の2番目機械語命令をフェッチする
ことも好ましい。
本開示のプロセッサにおける他の実施形態によれば、
命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファを更に有し、
パイプライン制御手段は、当該ジャンプ先の先頭機械語命令を第1のバッファにセットする
ことも好ましい。
本開示によれば、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を実行するプロセッサにおいて、
ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
を有することを特徴とする。
本開示のプロセッサにおける他の実施形態によれば、
パイプライン制御手段の処理の後、
第1のクロックによって、実行手段がジャンプ先の先頭機械語命令の制御情報を実行すると共に、デコード手段がジャンプ先の2番目機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の3番目機械語命令をフェッチする
ことも好ましい。
本開示のプロセッサにおける他の実施形態によれば、
命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファと、
第1のクロックによってデコード手段から出力された制御情報を一時的に記憶した後、第2のクロックによって当該制御情報を実行手段へ入力する第2のバッファと
を更に有し、
パイプライン制御手段は、当該ジャンプ先の2番目機械語命令を第1のバッファにセットし、当該ジャンプ先の先頭機械語命令の制御情報を第2のバッファにセットする
ことも好ましい。
本開示のプロセッサにおける他の実施形態によれば、
当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
テーブルは、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される
ことも好ましい。
本開示のプロセッサにおける他の実施形態によれば、
当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
ソースコードのジャンプ元コードに、ジャンプ先ラベル、ジャンプ先の先頭機械語命令、及び、ジャンプ先の2番目機械語命令が記述されており、
テーブルには、ジャンプ先ラベル毎に、ジャンプ先の2番目機械語命令と、ジャンプ先の先頭機械語命令を変換した制御情報とが記述され、
テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
ことも好ましい。
本開示によれば、
プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に
ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
してプロセッサを機能させることを特徴とする。
本開示によれば、
プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
デコード手段から出力された制御情報を実行する実行手段と
を連結したパイプライン処理を有すると共に、
ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
してプロセッサを機能させることを特徴とする。
本開示のプロセッサ及びプログラムによれば、ジャンプ命令が実行される場合であってもパイプライン・バブルをできる限り生じないように、パイプライン処理を制御することができる。
従来技術におけるパイプライン処理を表す説明図である。 ジャンプ命令の際に無駄なクロックとして生じるバブルを表す説明図である。 本開示におけるプロセッサの機能構成図である。 第1の実施形態におけるパイプライン制御部の説明図である。 図4におけるテーブルを表す説明図である。 第2の実施形態におけるパイプライン制御部の説明図である。 図6におけるテーブルを表す説明図である。
以下、本開示の実施の形態について、図面を用いて詳細に説明する。
図3は、本開示におけるプロセッサの機能構成図である。
図3によれば、一般的なRISCのプロセッサにおける機能構成として、プログラムカウンタ101と、命令フェッチ部11と、デコード部12と、実行部13と、書き込み部14とを有する。これは、一般に、4段パイプラインと称される。
また、本開示の特徴として更に、テーブル102と、パイプライン制御部103とを有する。
プロセッサは、PLD(Programmable Logic Device)やFPGA(Field Programmable Gate Array)、LSI(Large Scale Integration)であって、半導体チップの回路設計に基づくハードウェア記述言語によって記述されたものであってもよい。ハードウェア記述言語は、プログラミング言語に似た構文や表記法で、回路に含まれる素子の構成やそれぞれの動作条件、素子間の配線などを記述することができる。回路図を、PLDやFPGA、LSIに書き込むことによって、プロセッサチップを製造することができる。
本開示について、以下のように2つの実施形態がある。
<第1の実施形態>:パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令とを制御する。
<第2の実施形態>:パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令と、実行部13に入力される制御情報(命令エンコーディング形式の制御ビット列)とを制御する。
<第1の実施形態>
図4は、第1の実施形態におけるパイプライン制御部の説明図である。
図4によれば、パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令とを制御する。
[テーブル102]
テーブル102は、一般に「ディスパッチテーブル」とも称され、ジャンプ先(又はサブルーチン)の命令を記述したものである。テーブル102は、プロセッサ1のコア部10内に、揮発性又は不揮発性のメモリとして記憶され、小容量且つ高速なアクセスを実現する。
図4によれば、ソフトウェア記述言語の第1のソースコードと、その第1のソースコードをコンパイルした一部のジャンプ元・機械語命令及びジャンプ先・機械語命令とが記述されている。
<第1のソースコード>
void type0sub(){printf("000\n"); }
void type1sub(){printf("111\n"); }
void type2sub(){printf("222\n"); }
void (*func_table[])(void)={ type0sub, type1sub, type2sub };
void main()
{int tag;
:
(*func_table[tag])();
}
<ジャンプ元・機械語命令>
ld a1,[a0] ;a0(tag)が指すジャンプ先アドレスをa1にロード
fast_dispatch a1 ;ディスパッチテーブルを参照し、a1が指すアドレスへ
ジャンプ
(プログラムカウンタを、a1が指すアドレスにセット)
<ジャンプ先・機械語命令>
type0sub: ;ジャンプ先のラベル(ジャンプ先の先頭アドレスとなる)
ShiftRight a0,a0,3 ;ジャンプ先の先頭機械語命令
addi a0,a0,2 ;ジャンプ先の2番目機械語命令
また、第1のソースコードは、例えば以下の第2のソースコードのように記載されるものであってもよい。
<第2のソースコード>
switch(tag){
case 0: jump type0sub(); break;
case 1: jump type1sub(); break;
case 2: jump type2proc(); break;
}
<ジャンプ元・機械語命令>
ld a1,[a0] ;a0が指すジャンプ先アドレスをa1にロード
jmp a1 ;a1が指すアドレスへジャンプ
(プログラムカウンタを、a1が指すアドレスにセット)
<ジャンプ先・機械語命令>
type0sub: ;ジャンプ先のラベル(ジャンプ先の先頭アドレスとなる)
ShiftRight a0,a0,3 ;ジャンプ先の先頭機械語命令
addi a0,a0,2 ;ジャンプ先の2番目機械語命令
テーブル102には、ジャンプ(又はサブルーチン)毎に、<先頭アドレス>及び<2番目機械語命令>が記述される。例えばジャンプ先のラベル毎に、以下のように記述される。
<ジャンプ先> <先頭アドレス> <先頭機械語命令>
type0 type0subアドレス ShiftRight a0,a0,3
type1 type1subアドレス subi a1,a1,22
type2 type2subアドレス ・・・・・
ジャンプ先コードの先頭機械語命令は、確定していることを前提とする。
尚、テーブル102には、呼び出し回数が多いジャンプ(及びサブルーチン)ほど、登録しておくことが好ましい。これによって、テーブル102に登録されたジャンプ等が呼び出される毎に、バブルクロックをできる限り生じないようにすることができ、プロセッサとして全体的な高速化に寄与する。
[パイプライン制御部103]
パイプライン制御部103は、以下の2つの制御を処理する。
<制御11>実行部13によってジャンプの制御情報が実行された際に、テーブル102を用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットする。
<制御12>当該ジャンプ先の先頭機械語命令をデコード部12に入力する。
そして、パイプライン処理によって、命令フェッチ部11及びデコード部12はそれぞれ、クロック同期してシフトしながら実行される。
パイプライン制御部103の処理の後、以下のように処理が進行する。
<処理11>デコード部12が、ジャンプ先の先頭機械語命令を制御情報にデコードする。
<処理12>命令フェッチ部11が、ジャンプ先の2番目機械語命令をフェッチする。
また、命令フェッチ部11、デコード部12及び実行部13は、クロックに同期して連続する複数の機械語命令を並列に実行する。
ここで、図4によれば、命令フェッチ部11とデコード部12との間に、第1のバッファが置かれている。第1のバッファは、第1のクロックによって命令フェッチ部11から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード部12へ入力する。前述した制御12では、パイプライン制御部103は、当該ジャンプ先の先頭機械語命令を第1のバッファにセットする。
これによって、ジャンプ先コードの先頭機械語命令を、メモリからフェッチすることなく、デコード部12の処理から開始することができる。ジャンプ先アドレスからジャンプ先コードへの遷移で、バブルとなる無駄な1クロックを生じることなく、高速に実行することができる。
図5は、図4におけるテーブルを表す説明図である。
テーブル102は、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される。
本実施形態のプロセッサは、ハードウェア記述言語のソースコードによって記述されている。そのソースコードをコンパイルした後、複数のライブラリと「リンク」することによって、実行形式に変換される。勿論、ハードウェア記述言語で記述されることに限られず、布線論理によって実現することもできる。
また、テーブル102は、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成することもできる。
図5によれば、ソースコードのジャンプ元コードに、<ジャンプ先ラベル>及び<ジャンプ先の先頭機械語命令>が記述されている。
<ソースコード>
switch(tag){
case 0: call_and_NextInst_is(type0sub, 'ShiftRight a0,a0,3'); break;
case 1: call type1sub(); break;
case 2: jump type2proc(); break;
}
テーブル102には、ジャンプ先ラベル毎に、<先頭アドレス>及び<ジャンプ先の先頭機械語命令>が記述される。
<ジャンプ先> <先頭アドレス> <先頭機械語命令>
type0 type0subアドレス ShiftRight a0,a0,3
<第2の実施形態>
図6は、第2の実施形態におけるパイプライン制御部の説明図である。
図6によれば、パイプライン制御部103は、命令フェッチ部11が参照するプログラムカウンタと、デコード部12に入力される機械語命令と、実行部13に入力される制御情報(命令エンコーディング形式の制御ビット列)とを制御する。
[テーブル102]
テーブル102には、ジャンプ(又はサブルーチン)先毎に、<先頭アドレス>、<2番目機械語命令>及び<先頭機械語命令の制御情報>が記述される。例えばジャンプ先のラベル毎に、以下のように記述される。
<ジャンプ先> <先頭アドレス> <2番目機械語命令>
<先頭機械語命令の制御情報>
type0 type0subアドレス addi a0,a0,3 00000000
type1 type1subアドレス ・・・・・ ・・・・・
type2 type2subアドレス ・・・・・ ・・・・・
ジャンプ先コードの先頭機械語命令及び2番目機械語命令は、確定していることを前提とする。
[パイプライン制御部103]
パイプライン制御部103は、以下の3つの制御を処理する。
<制御21>実行部13によってジャンプの制御情報が実行された際に、テーブル102を用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットする。
<制御22>当該ジャンプの2番目機械語命令をデコード部12に入力する。
<制御23>当該ジャンプ先の先頭機械語命令の制御情報を実行部13に入力する。
そして、パイプライン処理によって、命令フェッチ部11、デコード部12及び実行部13は共に、クロックに同期して連続する機械語命令を並列に実行される。
パイプライン制御部103の処理の後、以下のように処理が進行する。
<処理21>実行部13がジャンプ先の先頭機械語命令の制御情報を実行する。
<処理22>デコード部12がジャンプ先の2番目機械語命令を制御情報にデコードする。
<処理23>命令フェッチ部11がジャンプ先の3番目機械語命令をフェッチする。
図6によれば、テーブル102に記述される<先頭機械語命令の制御情報>は、ジャンプ先の先頭機械語命令のデコード済みのビット列である。そのために、直ぐに実行部13によって処理可能となり、デコードのためのクロックを要しない。
また、<2番目機械語命令>も、直ぐにデコード部12によって処理可能となり、命令フェッチのためのクロックを要しない。
即ち、命令フェッチ部11及びデコード部12について、パイプライン・バブルをできる限り生じないようにすることができる。
また、命令フェッチ部11、デコード部12及び実行部13は、クロックに同期して連続する複数の機械語命令を並列に実行される。
ここで、図6によれば、命令フェッチ部11とデコード部12との間に、第1のバッファと、デコード部12と実行部13との間に、第2のバッファとが置かれている。
第1のバッファは、第1のクロックによって命令フェッチ部11から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード部12へ入力する。
第2のバッファは、第1のクロックによってデコード部12から出力された制御情報を一時的に記憶した後、第2のクロックによって当該制御情報を実行部13へ出力する。
前述した制御22では、パイプライン制御部103は、当該ジャンプの2番目機械語命令を第1のバッファにセットする。
前述した制御23では、パイプライン制御部103は、当該ジャンプ先の先頭機械語命令の制御情報を第2のバッファにセットする。
これによって、ジャンプ先コードの<先頭機械語命令>と<2番目機械語命令>とを、メモリからフェッチすることなく、デコード部12及び実行部13の処理から開始することができる。ジャンプ先アドレスからジャンプ先コードへの遷移で、バブルとなる無駄な2クロックを生じることなく、高速に実行することができる。
図7は、図6におけるテーブルを表す説明図である。
テーブル102は、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される。
また、テーブル102は、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成することもできる。
図7によれば、ソースコードのジャンプ元コードに、<ジャンプ先ラベル>、<ジャンプ先の先頭機械語命令>及び<ジャンプ先の2番目機械語命令>が記述されている。
<ソースコード>
switch(tag){
case 0: call_and_AfterNextInst_is(type0sub, 'ShiftRight a0,a0,3',
'addi a0,a0,2'); break;
case 1: call type1sub(); break;
case 2: jump type2proc(); break;
}
テーブル102には、ジャンプ先ラベル毎に、<先頭アドレス>及び<ジャンプ先の2番目機械語命令>と、<ジャンプ先の先頭機械語命令の制御情報>とが記述される。
<ジャンプ先> <先頭アドレス> <2番目機械語命令>
<先頭機械語命令の制御情報>
type0 type0subアドレス addi a0,a0,3 00000000・・・
制御情報は、機械語命令から、デコード部12の処理アルゴリズムによって予め変換されたものである。
第2の実施形態によれば、特にJava(登録商標)仮想マシン(VM:Virtual Machine)のインタプリタやLispマシン、Prologのコンパイル済み機械語コードなどの高速化に適する。即ち、Java仮想マシンの制御情報から、対応する処理ルーチンを高速にディスパッチすることができる。
インタプリタ方式では、機械語命令を逐次処理するために、負荷が大きく、高速処理が困難となる。Java仮想マシン・インタープリタやLispは、データ・オブジェクトに付加されたタグ情報を参照して、機械語ルーチンをディスパッチすることがほとんどである。そのタグ・ディスパッチ部分の機械語命令を、例えばRISCプロセッサの制御情報として直接生成することができる。このような制御情報を、テーブル102に直接的に記述しておくことによって、ジャンプ(又はサブルーチン)の際に生じるパイプライン・バブルを生じることなく、高速化を図ることができる。
以上、詳細に説明したように、本開示のプロセッサ及びプログラムによれば、ジャンプ命令が実行される場合であってもパイプライン・バブルをできる限り生じないように、パイプライン処理を制御することができる。
前述した本開示の種々の実施形態について、本開示の技術思想及び見地の範囲の種々の変更、修正及び省略は、当業者によれば容易に行うことができる。前述の説明はあくまで例であって、何ら制約しようとするものではない。本開示は、特許請求の範囲及びその均等物として限定するものにのみ制約される。
1 プロセッサ
10 コア部
101 プログラムカウンタ
102 テーブル
103 パイプライン制御部
11 命令フェッチ部
12 デコード部
13 実行部
14 書き込み部

Claims (11)

  1. ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
    プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
    命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
    デコード手段から出力された制御情報を実行する実行手段と
    を有して、連結したパイプライン処理を実行すると共に、
    ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
    実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
    を有することを特徴とするプロセッサ。
  2. ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるプロセッサであって、
    プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
    命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
    デコード手段から出力された制御情報を実行する実行手段と
    を有して、連結したパイプライン処理を実行すると共に、
    ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
    実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
    を有し、
    ソースコードのジャンプ元コードに、ジャンプ先ラベル、及び、ジャンプ先の先頭機械語命令が記述されており、
    テーブルには、ジャンプ先ラベル毎に、ジャンプ先の先頭アドレス及び先頭機械語命令が記述され、
    テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
    ことを特徴とするプロセッサ。
  3. パイプライン制御手段による処理の後、
    デコード手段がジャンプ先の先頭機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の2番目機械語命令をフェッチする
    ことを特徴とする請求項1に記載のプロセッサ。
  4. 命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
    当該プロセッサは、第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファを更に有し、
    パイプライン制御手段は、当該ジャンプ先の先頭機械語命令を第1のバッファにセットする
    ことを特徴とする請求項3に記載のプロセッサ。
  5. プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
    命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
    デコード手段から出力された制御情報を実行する実行手段と
    を連結したパイプライン処理を実行するプロセッサであって、
    ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
    実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
    を有することを特徴とするプロセッサ。
  6. パイプライン制御手段による処理の後、
    第1のクロックによって、実行手段がジャンプ先の先頭機械語命令の制御情報を実行すると共に、デコード手段がジャンプ先の2番目機械語命令を制御情報にデコードし、命令フェッチ手段がジャンプ先の3番目機械語命令をフェッチする
    ことを特徴とする請求項5に記載のプロセッサ。
  7. 命令フェッチ手段、デコード手段及び実行手段は、クロックに同期して連続する複数の機械語命令を並列に実行するものであり、
    当該プロセッサは、
    第1のクロックによって命令フェッチ手段から出力された機械語命令を一時的に記憶した後、第2のクロックによって当該機械語命令をデコード手段へ入力する第1のバッファと、
    第1のクロックによってデコード手段から出力された制御情報を一時的に記憶した後、第2のクロックによって当該制御情報を実行手段へ入力する第2のバッファと
    を更に有し、
    パイプライン制御手段は、当該ジャンプ先の2番目機械語命令を第1のバッファにセットし、当該ジャンプ先の先頭機械語命令の制御情報を第2のバッファにセットする
    ことを特徴とする請求項6に記載のプロセッサ。
  8. 当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
    テーブルは、ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成される
    ことを特徴とする請求項5に記載のプロセッサ。
  9. 当該プロセッサは、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されたプログラムを機能させるものであり、
    ソースコードのジャンプ元コードに、ジャンプ先ラベル、ジャンプ先の先頭機械語命令、及び、ジャンプ先の2番目機械語命令が記述されており、
    テーブルには、ジャンプ先ラベル毎に、ジャンプ先の2番目機械語命令と、ジャンプ先の先頭機械語命令を変換した制御情報とが記述され、
    テーブルは、ジャンプ先コードを参照することなく、ジャンプ元コードのみから作成される
    ことを特徴とする請求項5に記載のプロセッサ。
  10. プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
    プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
    命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
    デコード手段から出力された制御情報を実行する実行手段と
    して機能させ、連結したパイプライン処理を実行させると共に、
    ジャンプ元コードの機械語命令とジャンプ先コードの機械語命令とをリンクする際に作成された、先頭アドレス及び先頭機械語命令を記述したテーブルと、
    実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の2番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の先頭機械語命令をデコード手段に入力するパイプライン制御手段と
    してプロセッサを機能させることを特徴とするプログラム。
  11. プロセッサを機能させるために、ハードウェア記述言語のソースコードをコンパイルし且つリンクすることによって実行形式に変換されるプログラムであって、
    プログラムカウンタにセットされたメモリアドレスから機械語命令をフェッチする命令フェッチ手段と、
    命令フェッチ手段から出力された機械語命令を制御情報にデコードするデコード手段と、
    デコード手段から出力された制御情報を実行する実行手段と
    して機能させ、連結したパイプライン処理を実行させると共に、
    ジャンプ先毎に、先頭アドレス、2番目機械語命令、及び、先頭機械語命令の制御情報を記述したテーブルと、
    実行手段によってジャンプの制御情報が実行された際に、テーブルを用いて、当該ジャンプ先の3番目機械語命令を指すアドレスをプログラムカウンタにセットすると共に、当該ジャンプ先の2番目機械語命令をデコード手段に入力し、当該ジャンプ先の先頭機械語命令の制御情報を実行手段に入力するパイプライン制御手段と
    してプロセッサを機能させることを特徴とするプログラム。
JP2022125913A 2022-08-05 2022-08-05 ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム Active JP7506718B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2022125913A JP7506718B2 (ja) 2022-08-05 2022-08-05 ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム
PCT/JP2023/020054 WO2024029174A1 (ja) 2022-08-05 2023-05-30 ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2022125913A JP7506718B2 (ja) 2022-08-05 2022-08-05 ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム

Publications (2)

Publication Number Publication Date
JP2024022371A JP2024022371A (ja) 2024-02-16
JP7506718B2 true JP7506718B2 (ja) 2024-06-26

Family

ID=89849128

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022125913A Active JP7506718B2 (ja) 2022-08-05 2022-08-05 ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム

Country Status (2)

Country Link
JP (1) JP7506718B2 (ja)
WO (1) WO2024029174A1 (ja)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000029696A (ja) * 1998-07-08 2000-01-28 Sony Corp プロセッサおよびパイプライン処理制御方法
JP4986431B2 (ja) * 2005-09-29 2012-07-25 ルネサスエレクトロニクス株式会社 プロセッサ

Also Published As

Publication number Publication date
JP2024022371A (ja) 2024-02-16
WO2024029174A1 (ja) 2024-02-08

Similar Documents

Publication Publication Date Title
KR100208889B1 (ko) 병렬처리장치 및 병렬처리방법
US5303356A (en) System for issuing instructions for parallel execution subsequent to branch into a group of member instructions with compoundability in dictation tag
US6647489B1 (en) Compare branch instruction pairing within a single integer pipeline
US5504932A (en) System for executing scalar instructions in parallel based on control bits appended by compounding decoder
EP0476722A2 (en) Data processing system
JP2001273138A (ja) プログラム変換装置および方法
US6012138A (en) Dynamically variable length CPU pipeline for efficiently executing two instruction sets
KR100573334B1 (ko) 실시간 동적 수정이 가능한 명령어 집합을 가지는 컴퓨터
US10338926B2 (en) Processor with conditional instructions
CN112182999B (zh) 一种基于mips32指令系统的三级流水线cpu设计方法
KR100431975B1 (ko) 분기에의한중단이없는파이프라인방식의마이크로프로세서를위한다중명령디스패치시스템
KR100374401B1 (ko) 마이크로 명령을 기초로 프로그램 가능한 명령을 실행하는하드웨어 장치
CN117193861A (zh) 指令处理方法、装置、计算机设备和存储介质
JP7506718B2 (ja) ジャンプ命令に基づくパイプライン処理を制御するプロセッサ及びプログラム
JPS62226231A (ja) プロセツサ
US6115807A (en) Static instruction decoder utilizing a circular queue to decode instructions and select instructions to be issued
EP1190305B1 (en) Method and apparatus for jump delay slot control in a pipelined processor
EP1194835A2 (en) Method and apparatus for loose register encoding within a pipelined processor
US5361338A (en) Pipelined system for decomposing instruction into two decoding parts and either concurrently generating two operands addresses of merging decomposing decoding codes based upon the second operand
US6049864A (en) Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor
CN113779755A (zh) 一种硅基多光谱集成电路芯片的设计方法和集成电路芯片
EP0545927B1 (en) System for preparing instructions for instruction parallel processor and system with mechanism for branching in the middle of a compound instruction
JP3541356B2 (ja) 階層型命令を実行する計算機
EP0825529A2 (en) System for preparing instructions for instruction parallel processor and system with mechanism for branching in the middle of a compound instruction
EP0862111B1 (en) Dynamic conversion between different instruction codes by recombination of instruction elements

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231130

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231130

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20231130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240313

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240614