JP4557748B2 - 演算処理装置 - Google Patents

演算処理装置 Download PDF

Info

Publication number
JP4557748B2
JP4557748B2 JP2005053396A JP2005053396A JP4557748B2 JP 4557748 B2 JP4557748 B2 JP 4557748B2 JP 2005053396 A JP2005053396 A JP 2005053396A JP 2005053396 A JP2005053396 A JP 2005053396A JP 4557748 B2 JP4557748 B2 JP 4557748B2
Authority
JP
Japan
Prior art keywords
instruction
instruction stream
stream
execution
resource
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
JP2005053396A
Other languages
English (en)
Other versions
JP2006236245A (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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2005053396A priority Critical patent/JP4557748B2/ja
Priority to US11/190,062 priority patent/US7937562B2/en
Priority to TW094125605A priority patent/TW200630876A/zh
Publication of JP2006236245A publication Critical patent/JP2006236245A/ja
Application granted granted Critical
Publication of JP4557748B2 publication Critical patent/JP4557748B2/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

本発明は、演算処理装置に関するもので、特に、複数の演算リソース(演算パイプ)を共有し、複数の命令ストリーム(プログラム列)を同時に実行することが可能なDSP(Digital Signal Processor)に関する。
近年、微細加工技術の進歩により、1つのLSI(Large Scale Integrated Circuit)中に多くの回路を搭載させることが可能になってきている。このような大規模なLSIにおいては、非常に多くの演算リソースをもち、より複雑な演算を高速に行うことができるようになっている(たとえば、非特許文献1参照)。
特に、複数の命令ストリームを同時に実行することができる高性能なDSPでは、その性能を最大限に発揮させるために、1つの命令ストリームの実行が終了するまで、演算リソースを占有できるようにする必要がある。つまり、一旦、命令ストリームの実行が開始されると、命令ストリーム中のある命令が使用する演算リソースを、その命令ストリームの実行が終了するまで開放(パイプライン・ストール)しないようにすることにより、命令ストリームの処理スピードの高速化が図られている。
しかしながら、1つの命令ストリームの実行が終了するまで演算リソースを開放しないようなDSPの場合、演算の効率が非常に悪いという問題があった。
Dynamically Allocating Processor Resources between Nearby and Distant ILP,Rajeev Balasubramonian et al 著,0−7695−1162−7/01 2001 IEEE International Symposium on Computer Architecture
本発明は、上記の問題点を解決すべくなされたもので、その目的は、複数の演算リソースを有効に活用でき、複数の命令ストリームを高速に処理することが可能な演算処理装置を提供することにある。
本願発明の一態様によれば、複数の演算リソースを共有し、複数の命令ストリームを同時に実行することが可能な演算処理装置であって、前記複数の演算リソースのうちのいくつかを使用して、前記複数の命令ストリームをそれぞれ実行する実行ステージと、前記実行ステージによって、前記複数の命令ストリームのうちの最初の命令ストリームを実行した際に使用した演算リソースの数量をカウントする第1のリソースカウンタと、前記第1のリソースカウンタのカウント値を記憶する管理テーブルと、前記複数の演算リソースのうち、使用されていない演算リソースの数量データを保持する第2のリソースカウンタと、後続の命令ストリームを実行する際に、前記管理テーブルに記憶されている前記第1のリソースカウンタのカウント値を読み出し、そのカウント値を前記第2のリソースカウンタで保持されている前記数量データより減算した減算結果に応じて、前記後続の命令ストリームの実行の開始を制御する制御回路とを具備し、前記制御回路は、前記後続の命令ストリームの実行を開始する前に、前記減算結果から、その命令ストリームが必要とする数量の演算リソースを確保できるかどうかをチェックし、確保できる場合に前記後続の命令ストリームの実行を開始することを特徴とする演算処理装置が提供される。
上記の構成により、複数の演算リソースを有効に活用でき、複数の命令ストリームを高速に処理することが可能な演算処理装置を提供できる。
以下、本発明の実施の形態について図面を参照して説明する。
[第1の実施形態]
図1は、この発明の第1の実施形態にしたがった、演算処理装置(DSP)の構成を示すものである。なお、ここでは、同一の命令ストリーム(プログラム列)を、データを変えながら最大で3つ同時に実行可能に構成した場合について説明する。また、命令ストリームの実行が開始されてから終了するまでの間に占有される演算リソース(ユニット)は1種類で、このDSP内に5つ存在するものとする。また、同一の命令ストリームを最大で3つ同時に実行するために使用される演算リソース以外のハードウェアはパイプライン化されているか、もしくは、3つの命令ストリームを並列に実行できるだけのハードウェアを備えているものとする。
図1において、命令ストリーム・アドレス・レジスタ11は、実行予定の命令ストリームが格納されたメモリ(たとえば、後述する命令キャッシュ)の、格納先の先頭アドレスを登録するためのレジスタである。本実施形態の場合、最大で5つの命令ストリームの先頭アドレスを登録しておくことができるようになっている。なお、命令ストリームの先頭アドレスの登録は、たとえば外部の制御装置(図示していない)によって行われる。
演算リソース管理テーブル12は、連想メモリ(Content Addressable Memory(CAM))によって構成されている。このテーブル12には、アドレスn(たとえば、n=0〜7)ごとに、「Tag」、「Valid」、および、「#ofRes(ナンバーオブリソース)」のフィールドが設けられ、全部で8つのリソース管理情報を登録することが可能となっている。各リソース管理情報において、「Tag」のフィールドは、対応する命令ストリームの先頭アドレスの一部もしくはすべてを格納する場所である。「Valid」のフィールドは、その登録(リソース管理情報)が有効か否かを示す情報を格納するための場所である。「#ofRes」のフィールドは、対応する命令ストリームを実行する際に必要とされる演算リソース数(必要演算リソース数)を格納するための場所である。
この演算リソース管理テーブル12は、上記命令ストリーム・アドレス・レジスタ11に登録された、命令ストリームの先頭アドレスを用いて検索される。この検索により、先頭アドレスと「Tag」の値とが一致(ヒット)し、かつ、「Valid」の値が“1”の場合に、対応する「#ofRes」に格納されている必要演算リソース数が読み出される。なお、「Tag」の値が命令ストリームの先頭アドレスの一部である場合には、同一の命令ストリームか否かの正確な判断は別の手段(たとえば、通常のマイクロプロセッサで使用されている命令キャッシュにヒットした場合に使用されるような手段)を用いて別途検査されるものとする。
制御回路であるウェイクアップ・ロジック(Wake Up Logic)13は、命令ストリーム・アドレス・レジスタ11に登録された先頭アドレスをもとに、演算リソース管理テーブル12の検索を行う。また、このウェイクアップ・ロジック13は、命令ストリーム・アドレス・レジスタ11に登録されている先頭アドレスの1つを、たとえば3つのカレント・プログラム・カウンタ(CurrPC)14a,14b,14cのうちのいずれか1つにセットする。また、このウェイクアップ・ロジック13は、必要演算リソース数に応じて、第2のリソースカウンタであるカレント・リソース・カウンタ(Curr Res Counter)15のカウントアップおよびカウントダウンを制御する。さらに、このウェイクアップ・ロジック13は、デコーダ(Decoder)16の出力にもとづいて、アップデート・ロジック(Update Logic)17の制御などを行うようになっている。
アップデート・ロジック17は、上記演算リソース管理テーブル12へのリソース管理情報の登録、つまり、「Tag」の格納、「Valid」の設定、および、「#ofRes」の格納などを行うものである。
カレント・リソース・カウンタ15は、現時点で未使用となっている演算リソース数を管理するものである。
カレント・プログラム・カウンタ14a,14b,14cは、それぞれ、上記ウェイクアップ・ロジック13によってセットされた命令ストリームの先頭アドレスにしたがって、たとえば命令キャッシュ(Inst$)18をアクセスするものである。
デコーダ16は、上記命令キャッシュ18より読み出された命令(プログラム)をデコードするものである。また、このデコーダ16は、命令ストリームの実行が終了したことを検出し、上記ウェイクアップ・ロジック13および上記アップデート・ロジック17に通知するようになっている。さらに、このデコーダ16は、デコードした命令が演算リソースを必要とするような命令であった場合に、第1のリソースカウンタとしてのリソース・カウンタ(Res Counter)19の値を1つインクリメントさせるものである。なお、上記命令キャッシュ18からフェッチしてきた命令が演算リソースを使用しない命令の場合には、上記リソース・カウンタ19でのインクリメントは行われない。
命令実行ステージ(Execute)20は、上記デコーダ16によってデコードされた命令の実行を行うものである。なお、図中の命令実行ステージ20は一つのブロックとして示されているが、内部は複数のハードウェアによって構成されており、これらのハードウェアのうちの5つが、複数のサイクルを有し、かつ、命令ストリームが使用を開始すると終了するまでは開放されることのないような演算リソースとなっている。
ここで、データを変えながら同一の命令ストリームを複数回実行する場合、順次、命令ストリームが実行される。そして、デコーダ16によって最初の命令ストリーム(1パス目)の実行の終了が検出されると、そのときのリソース・カウンタ19の値が上記アップデート・ロジック17に送られる。これにより、リソース・カウンタ19の値が、アップデート・ロジック17によって、演算リソース管理テーブル12の「#ofRes」のフィールドに格納される。また、「Valid」の値が“1”に設定される。したがって、演算リソース管理テーブル12の「#ofRes」の値、および、カレント・リソース・カウンタ15の値を参照することにより、次ぎの命令ストリームが必要とする演算リソース数の把握とともに、命令ストリームの並列実行が可能か否かの判断が容易となる。
次に、図2を参照しつつ、上記した構成の動作について説明する。なお、図2は、動作にかかる処理の流れを示すフローチャートである。
<実施例1>
この実施例1の説明では、実行予定のある命令ストリームを、たとえばStream1−1,Stream1−2,Stream1−3とする。命令ストリームStream1−1,Stream1−2,Stream1−3は同一の命令ストリームであり、たとえば図3に示すように、命令Inst_1〜Inst_4および2つの命令INST_Aを含むものとする。なお、命令Inst_1〜Inst_4は演算リソース(たとえば、UNIT_A)を必要としない命令であり、命令INST_Aは、一旦、命令ストリームの実行がスタートすると、その命令ストリームの実行が終了するまでは演算リソースを占有することが必要な命令である。すなわち、本実施例1の場合、DSPが備える5つの演算リソースUNIT_Aのうち、上記各命令ストリームStream1−1,1−2,1−3は、それぞれ、2つの演算リソースUNIT_Aを使用するプログラム列となっている。
また、命令ストリームStream1−1の先頭アドレスは命令ストリーム・アドレス・レジスタ11のT0_PCに、命令ストリームStream1−2の先頭アドレスはT1_PCに、命令ストリームStream1−3の先頭アドレスはT2_PCに、おのおの登録されるものとして説明する。
まず、実行予定のある命令ストリームStream1−1,1−2,1−3の各先頭アドレスが、命令ストリーム・アドレス・レジスタ11に登録されているとする(ステップST11)。すると、ウェイクアップ・ロジック13が、命令ストリーム・アドレス・レジスタ11のT0_PCに登録された先頭アドレスをもとに、演算リソース管理テーブル12の検索を行う(ステップST12)。
本実施例1においては、今回が、この命令ストリームStream1−1の1回目の実行(1パス目)である場合を想定している。つまり、今回のこの命令ストリームStream1−1の実行より前にこの命令ストリームStream1−1を実行したことがない場合、テーブル12上のどの登録(リソース管理情報)ともヒットしない(ステップST13)。この場合、ウェイクアップ・ロジック13からの指示により、命令ストリームStream1−1の先頭アドレスの一部またはすべてが、アップデート・ロジック17によって演算リソース管理テーブル12の、たとえばアドレス「n」に対応する「Tag」のフィールドに格納される(ステップST01)。
この後、ウェイクアップ・ロジック13は、カレント・リソース・カウンタ15の値をチェックする(ステップST02)。そして、すべての演算リソースUNIT_Aが開放されていない場合には(ステップST03)、すべての演算リソースUNIT_Aが開放されるまで待機する。本実施例1においては、カレント・リソース・カウンタ15の値が“5”の場合に、すべての演算リソースUNIT_Aが開放されている、つまり、すべての演算リソースUNIT_Aは未使用(未占有)の状態にあると判断される。
すべての演算リソースUNIT_Aが開放されている場合には(ステップST03)、ウェイクアップ・ロジック13によって、命令ストリームStream1−1の先頭アドレスが、カレントPC14a,14b,14cのうちのいずれか1つにセットされる(ステップST16)。これにより、実行に応じてインクリメントされるアドレスに応じて、命令キャッシュ18がアクセスされる(ステップST17)。そして、命令キャッシュ18より取り出された命令が、デコーダ16によってデコードされる(ステップST18)。このとき、その命令が演算リソースUNIT_Aを必要とするような命令であった場合には(ステップST19)、リソース・カウンタ19の値が1つインクリメントされる(ステップST20)。
こうして、すべての演算リソースUNIT_Aの開放によって、先行するすべての命令ストリームの実行の終了が判断されると、命令実行ステージ20にて、実際に命令の実行が行われる(ステップST21)。その際、ウェイクアップ・ロジック13により、命令ストリームStream1−1の実行に用いられる演算リソースUNIT_Aの総数(2)に応じて、カレント・リソース・カウンタ15の値が更新(5−2)される。
しかる後、デコーダ16によって、命令ストリームStream1−1の実行の終了が検出される(ステップST22)。すると、そのときのリソース・カウンタ19の値(2)が、アップデート・ロジック17に送られる。これにより、上記リソース・カウンタ19の値(2)が、演算リソース管理テーブル12上の、上記アドレス「n」に対応する「#ofRes」のフィールドに格納される(ステップST23)。また、上記アドレス「n」に対応する「Valid」の値が“1”に変更される。こうして、演算リソース管理テーブル12上に、命令ストリームStream1−1に対するリソース管理情報が登録される。
また、命令ストリームStream1−1の実行が終了されると、命令ストリームStream1−1の実行に用いられた演算リソースUNIT_Aの開放が行われる(ステップST24)。これにより、ウェイクアップ・ロジック13によって、命令ストリームStream1−1の実行に用いられた演算リソースUNIT_Aの総数(2)に応じて、カレント・リソース・カウンタ15の値が更新(3+2)される。
続いて、ウェイクアップ・ロジック13により、すべての命令ストリームStream1−1,1−2,1−3の実行が終了したか否かが判断される(ステップST25)。終わっている場合には、処理は終了される。
一方、終わっていない場合には、処理は上記ステップST12に移行される。つまり、同一の命令ストリームを繰り返し実行する場合、たとえば、命令ストリームStream1−1の実行が終了した後、命令ストリームStream1−2の実行を開始するために、まず、ウェイクアップ・ロジック13による演算リソース管理テーブル12の検索が行われる(ステップST12)。その際、ウェイクアップ・ロジック13は、命令ストリーム・アドレス・レジスタ11のT1_PCに登録されている命令ストリームStream1−2の先頭アドレスをもとに、演算リソース管理テーブル12の検索を行う。このとき、演算リソース管理テーブル12上には、すでに命令ストリームStream1−1のリソース管理情報が登録されている。すなわち、命令ストリームStream1−1および命令ストリームStream1−2は同一の開始アドレスのため、その命令ストリームStream1−1のリソース管理情報がヒットする(ステップST13)。
ヒットしたリソース管理情報があると、そのリソース管理情報の「#ofRes」の値(2)が、カレント・リソース・カウンタ15の値(5)から減算される。減算の結果は、ウェイクアップ・ロジック13に送られる(ステップST14,ST15)。減算の結果が負の値でないということは、命令ストリームStream1−2を実行するために必要な演算リソースUNIT_Aがまだ残っていることを示している。
そこで、ウェイクアップ・ロジック13は、命令ストリーム・アドレス・レジスタ11のT1_PCに登録されている先頭アドレスを、使用されていないカレントPC14a,14b,14cのいずれか1つにセットする(ステップST16)。これ以降、上記したステップST17〜の処理が繰り返される。これにより、命令ストリームStream1−2の実行が開始される。
なお、カレント・リソース・カウンタ15は、減算の結果が負の値でない場合に限って更新される。もしも、減算の結果が負の値の場合、その命令ストリームStream1−2を実行するのに必要な数だけ演算リソースUNIT_Aが残っていないことを示している。そのため、演算リソースUNIT_Aが十分な数量となるまで、ウェイクアップ・ロジック13は、新たな命令ストリームStream1−2の実行を開始させない。
本実施例1の場合、命令ストリームStream1−2の実行を開始できるかどうかをチェックする時点で、すでに命令ストリームStream1−1の実行が終了している。このため、カレント・リソース・カウンタ15の値は“5”になっている。これに対し、命令ストリームStream1−2を実行するために必要な、演算リソースUNIT_Aの総数は“2”である。したがって、ウェイクアップ・ロジック13は、カレントPC14a,14b,14cのいずれか1つに命令ストリームStream1−2の先頭アドレスをセットすることにより、命令ストリームStream1−2の実行を開始させることができる。
さて、演算リソース管理テーブル12上にリソース管理情報が登録されている状態においては、命令ストリームStream1−2の実行を行っている最中に、並列的に命令ストリームStream1−3を実行できるか否かが判断される。つまり、命令ストリーム・アドレス・レジスタ11に、さらに同一の命令ストリームStream1−3が登録されている場合、命令ストリームStream1−2の実行を行っている最中に、上記ステップST12〜ST15において、命令ストリームStream1−3の実行を開始できるかどうかのチェックが行われる。
この実施例1の場合、命令ストリームStream1−2の実行が開始された時点では、カレント・リソース・カウンタ15の値は“3”となっている。そのため、命令ストリームStream1−2の実行に並列して、命令ストリームStream1−3の実行も可能ということになる。すなわち、ウェイクアップ・ロジック13は、カレント・リソース・カウンタ15の値(減算の結果)が負の値でないことがわかった時点で(ステップST14,ST15)、命令ストリームStream1−3の実行を開始させる。つまり、命令ストリーム・アドレス・レジスタ11のT2_PCに登録されている先頭アドレスを、使用されていないカレントPC14a,14b,14cのいずれか1つにセットする。これにより、命令ストリームStream1−1,1−2,1−3は、たとえば図3に示すようなタイミングによってそれぞれ実行される。
なお、カレント・リソース・カウンタ15は減算の結果(3−2)によって更新され、命令ストリームStream1−3の実行が開始された時点の、カレント・リソース・カウンタ15の値は“1”となる。
<実施例2>
この実施例2の説明では、実行予定のある命令ストリームを、たとえばStream1−1,Stream1−2,Stream1−3,Stream1−4とする。命令ストリームStream1−4は、命令ストリームStream1−1,Stream1−2,Stream1−3と同一の命令ストリームであり、たとえば図4に示すように、命令Inst_1〜Inst_4および2つの命令INST_Aを含むものとする。
また、命令ストリームStream1−1の先頭アドレスは命令ストリーム・アドレス・レジスタ11のT0_PCに、命令ストリームStream1−2の先頭アドレスはT1_PCに、命令ストリームStream1−3の先頭アドレスはT2_PCに、命令ストリームStream1−4の先頭アドレスはT3_PCに、おのおの登録されるものとして説明する。
上述したように、たとえば命令ストリームStream1−3の実行が開始されている状態において、さらに、命令ストリームStream1−1,1−2,1−3と同一の命令ストリームStream1−4の先頭アドレスが、命令ストリーム・アドレス・レジスタ11に登録されているとする。すると、実施例1の場合と同様にして、ウェイクアップ・ロジック13により、命令ストリーム・アドレス・レジスタ11のT3_PCに登録された先頭アドレスをもとに、演算リソース管理テーブル12の検索が行われる(ステップST12)。
本実施例2の場合も、演算リソース管理テーブル12上にすでに登録されている命令ストリームStream1−1のリソース管理情報がヒットする(ステップST13)。しかしながら、命令ストリームStream1−3の実行が開始された時点で、カレント・リソース・カウンタ15の値は“1”となっている(ステップST14)。この場合、カレント・リソース・カウンタ15の値(1)から、ヒットしたリソース管理情報の「#ofRes」の値(2)を減算した結果が負の値(−1)となる。そのため、演算リソースUNIT_Aが十分な数量となるまで(ステップST15)、ウェイクアップ・ロジック13は、新たな命令ストリームStream1−4の実行を開始させない。
すなわち、命令ストリームStream1−2,1−3が実行されている最中においては、命令ストリームStream1−4を実行するのに必要な数の演算リソースUNIT_Aが不足する。命令ストリームStream1−2の実行が終了した時点で、命令ストリームStream1−2が占有していた2つの演算リソースUNIT_Aが開放される。すると、カレント・リソース・カウンタ15の値が更新(1+2)される。これにより、命令ストリームStream1−4を実行するのに必要な数の演算リソースUNIT_Aを確保することが可能となる。その結果、たとえば図4に示すタイミングにより、命令ストリームStream1−4の実行が開始される。
<実施例3>
この実施例3の説明では、実行予定のある命令ストリームを、たとえばStream1−1,Stream1−2,Stream1−3,Stream2−1とする。命令ストリームStream1−1,Stream1−2,Stream1−3は同一の命令ストリームであり、たとえば図5に示すように、命令Inst_1〜Inst_4および2つの命令INST_Aを含むものとする。これに対し、命令ストリームStream2−1は、命令ストリームStream1−1,Stream1−2,Stream1−3とは異なる命令ストリームであり、たとえば図5に示すように、命令Inst_1〜Inst_4および4つの命令INST_Aを含むものとする。すなわち、本実施例3の場合、DSPが備える5つの演算リソースUNIT_Aのうち、上記命令ストリームStream1−1,1−2,1−3はそれぞれ2つの演算リソースUNIT_Aを使用するプログラム列であり、上記命令ストリームStream2−1は4つの演算リソースUNIT_Aを使用するプログラム列となっている。
また、命令ストリームStream1−1の先頭アドレスは命令ストリーム・アドレス・レジスタ11のT0_PCに、命令ストリームStream1−2の先頭アドレスはT1_PCに、命令ストリームStream1−3の先頭アドレスはT2_PCに、命令ストリームStream2−1の先頭アドレスはT3_PCに、おのおの登録されるものとして説明する。
上述したように、たとえば命令ストリームStream1−3の実行が開始されている状態において、さらに、命令ストリームStream1−1,1−2,1−3とは異なる命令ストリームStream2−1の先頭アドレスが、命令ストリーム・アドレス・レジスタ11に登録されているとする。すると、実施例2の場合と同様にして、ウェイクアップ・ロジック13により、命令ストリーム・アドレス・レジスタ11のT3_PCに登録された先頭アドレスをもとに、演算リソース管理テーブル12の検索が行われる(ステップST12)。
すなわち、上記した命令ストリームStream1−4ではなく、これまでに実行したことのない命令ストリームStream2−1の先頭アドレスが、命令ストリーム・アドレス・レジスタ11に登録されている場合、演算リソース管理テーブル12には、まだ、命令ストリームStream2−1のリソース管理情報が登録されていないので、演算リソース管理テーブル12の検索はミス(ノーヒット)となる(ステップST13)。この場合、命令ストリームStream2−1を実行するのに必要な演算リソース数がわからないため、すべての実行中の命令ストリームが終了するまで、命令ストリームStream2−1の実行を開始することができない。
したがって、実施例1で説明した通り、まず、演算リソース管理テーブル12上に命令ストリームStream2−1のリソース管理情報を登録するために、ステップST01〜の処理が行われる。これにより、命令ストリームStream2−1を実行するのに必要な演算リソース数の取得が行われる。つまり、命令ストリームStream2−1の実行は、たとえば図5に示すように、命令ストリームStream1−3の実行が終了した時点(ステップST03)で開始される。
上記したように、同一の命令ストリームを、データを変えて複数回実行させるような場合に、ある命令ストリームの実行の途中において、別の命令ストリームの並列実行が可能かどうかを容易に判断できるようにしている。すなわち、同一の命令ストリームを複数回実行させる場合、まず、すべての演算リソースが空いている状態で、1パス目の命令ストリームを実行させ、そのときに使用した演算リソース量(数)をテーブル上に記憶しておき、それ以降、同一の命令ストリームを実行する際には、このテーブルを参照することによって、必要とする演算リソース数を自動的に把握できるようにしている。これにより、命令ストリームによって占有されるリソース数をいちいちユーザが設定したりすることなしに、並列実行が可能な命令ストリームのウェイクアップが容易に可能となる。しかも、演算リソースのパイプラインをストール可能なように設計した場合に、演算リソースの動作スピードが遅くなるといった不具合をも改善できるようになる。したがって、複数の演算リソースを有効に活用でき、複数の命令ストリームを高速に処理することが可能となるものである。
なお、上記した第1の実施形態においては、2つの命令ストリームを並列実行可能にした場合に限らず、たとえば3つ以上の命令ストリームを並列実行可能なように構成することも可能である。
[第2の実施形態]
図6は、この発明の第2の実施形態にしたがった、演算処理装置(DSP)の構成を示すものである。なお、ここでは図1に示した構成のDSPにおいて、さらに、演算リソースが必要なくなった時点で、命令ストリームの実行の終了を待つことなく、演算リソースを開放することができるように構成した場合について説明する。また、図1と同一部分には同一符号を付して、詳しい説明は割愛する。
また、この第2の実施形態においては、たとえば図7に示すように、実行予定のある命令ストリームを、Stream11−1,Stream11−2,Stream11−3,Stream11−4とする。命令ストリームStream11−1,Stream11−2,Stream11−3,Stream11−4は同一の命令ストリームであり、たとえば、命令Inst_1〜Inst_7および2つの命令INST_Aを含むものとする。なお、命令Inst_1〜Inst_7は演算リソース(たとえば、UNIT_A)を必要としない命令であり、命令INST_Aは演算リソースを必要とする命令で、たとえば、命令Inst_4の実行が終了するまでは演算リソースを占有することが必要な命令となっている。
また、命令ストリームStream11−1の先頭アドレスは命令ストリーム・アドレス・レジスタ11のT0_PCに、命令ストリームStream11−2の先頭アドレスはT1_PCに、命令ストリームStream11−3の先頭アドレスはT2_PCに、命令ストリームStream11−4の先頭アドレスはT3_PCに、おのおの登録されるものとして説明する。
この第2の実施形態の場合、たとえば図6に示すように、演算リソース管理テーブル12a上の各リソース管理情報に対し、さらに、「End」のフィールドが追加されている。「End」のフィールドは、それぞれ、命令ストリームの実行が終了する前に、演算リソースの開放を可能にする時点の判断の基準となるデータを格納するための場所である。「End」のデータは、たとえば、演算リソースUNIT_A内にデータを保持するレジスタがあると仮定すると、そのレジスタを最後にアクセスするような特殊な命令(本実施形態の場合、Inst_4)のアドレスである。
デコーダ16aは、命令キャッシュ18より読み出された命令(プログラム)をデコードするもので、たとえば入力された命令が演算リソースUNIT_A内のレジスタをアクセスするような特殊な命令かどうかを判定する機能が付加されている。
レジスタ(RefAdr)21は特殊な命令のアドレスを記憶するためのもので、デコーダ16aによって特殊な命令がデコードされるたびに、その内容が更新されるものである。なお、同一の命令ストリームを、データを変えて複数回実行させるような場合において、1パス目の命令ストリームを実行した際に、このレジスタ21に最終的に記憶されたアドレスが、アップデータ・ロジック17によって、上記演算リソース管理テーブル12aの「End」のフィールドに格納される。
ウェイクアップ・ロジック13は、1パス目以降の、同一の命令ストリームが実行されるごとに、必要演算リソース数(「#ofRes」の値)とともに、対応する「End」のデータを、命令リソース管理テーブル12aから読み出す。そして、その「End」のデータとカレントPC14a,14b,14cの値との比較を行い、両者が一致した場合に、カレント・リソース・カウンタ15の値に、その実行中の命令ストリームの必要演算リソース数を加算し、カレント・リソース・カウンタ15の値を更新する。こうすることによって、命令ストリームの実行の終了時ではなく、演算リソースの占有が必要なくなった時点で、演算リソースの開放を行うことが可能になる。
次に、図8を参照しつつ、上記した構成の動作について説明する。なお、図8は、動作にかかる処理の流れを示すフローチャートである。
まず、実行予定のある命令ストリームStream11−1,11−2,11−3,11−4の各先頭アドレスが、命令ストリーム・アドレス・レジスタ11に登録されているとする(ステップST11)。すると、ウェイクアップ・ロジック13が、命令ストリーム・アドレス・レジスタ11のT0_PCに登録された先頭アドレスをもとに、演算リソース管理テーブル12aの検索を行う(ステップST12)。
今回が、命令ストリームStream11−1の1回目の実行(1パス目)である場合、テーブル12a上のどの登録(リソース管理情報)ともヒットしない(ステップST13)。この場合、ウェイクアップ・ロジック13からの指示により、命令ストリームStream11−1の先頭アドレスの一部またはすべてが、アップデート・ロジック17によって演算リソース管理テーブル12aの、たとえばアドレス「n」に対応する「Tag」のフィールドに格納される(ステップST01)。
この後、ウェイクアップ・ロジック13は、カレント・リソース・カウンタ15の値をチェックする(ステップST02)。そして、すべての演算リソースUNIT_Aが開放されていない場合には(ステップST03)、すべての演算リソースUNIT_Aが開放されるまで待機する。本実施形態の場合においては、カレント・リソース・カウンタ15の値が“5”の場合に、すべての演算リソースUNIT_Aが開放されている、つまり、すべての演算リソースUNIT_Aは未使用(未占有)の状態にあると判断される。
すべての演算リソースUNIT_Aが開放されている場合には(ステップST03)、ウェイクアップ・ロジック13によって、命令ストリームStream11−1の先頭アドレスが、カレントPC14a,14b,14cのうちのいずれか1つにセットされる(ステップST16)。これにより、その先頭アドレスに応じて、命令キャッシュ18がアクセスされる(ステップST17)。そして、命令キャッシュ18より取り出された命令が、デコーダ16aによってデコードされる(ステップST18)。このとき、その命令が演算リソースUNIT_Aを必要とするような命令であった場合には(ステップST19)、リソース・カウンタ19の値が1つインクリメントされる(ステップST20)。
また、デコーダ16aによって、デコードされた命令が演算リソースUNIT_Aのレジスタをアクセスするような特殊な命令かどうかの判定が行われる(ステップST111)。もし、特殊な命令である場合には、その命令のアドレスの一部もしくはすべてがレジスタ21にセットされる(ステップST112)。これにより、レジスタ21は、デコーダ16aによって特殊な命令がデコードされるたびに、その内容が更新される。
こうして、すべての演算リソースUNIT_Aの開放によって、先行するすべての命令ストリームの実行の終了が判断された場合にのみ、命令実行ステージ20にて、実際に命令の実行が行われる(ステップST21)。その際、ウェイクアップ・ロジック13により、命令ストリームStream11−1の実行に用いられる演算リソースUNIT_Aの総数(2)に応じて、カレント・リソース・カウンタ15の値が更新(5−2)される。
しかる後、デコーダ16aによって、命令ストリームStream11−1の実行の終了が検出される(ステップST22)。すると、そのときのリソース・カウンタ19の値(2)が、アップデート・ロジック17に送られる。これにより、上記リソース・カウンタ19の値が、演算リソース管理テーブル12a上の、上記アドレス「n」に対応する「#ofRes」のフィールドに格納される(ステップST23)。同様に、そのときのレジスタ21の内容(Inst_4のアドレス)が、アップデート・ロジック17に送られる。これにより、上記レジスタ21の内容が、演算リソース管理テーブル12a上の、上記アドレス「n」に対応する「End」のフィールドに格納される(ステップST23)。また、上記アドレス「n」に対応する「Valid」の値が“1”に変更される。こうして、演算リソース管理テーブル12a上に、命令ストリームStream11−1に対するリソース管理情報が登録される。
また、命令ストリームStream11−1の実行が終了されると、命令ストリームStream11−1の実行に用いられた演算リソースUNIT_Aの開放が行われる(ステップST24)。これにより、ウェイクアップ・ロジック13によって、命令ストリームStream11−1の実行に用いられた演算リソースUNIT_Aの総数(2)に応じて、カレント・リソース・カウンタ15の値が更新(3+2)される。
続いて、ウェイクアップ・ロジック13により、すべての命令ストリームStream11−1,11−2,11−3,11−4の実行が終了したか否かが判断される(ステップST25)。終わっている場合には、処理は終了される。
一方、終わっていない場合には、処理は上記ステップST12に移行される。つまり、同一の命令ストリームを繰り返し実行する場合、たとえば、命令ストリームStream11−1の実行が終了した後、命令ストリームStream11−2の実行を開始するために、まず、ウェイクアップ・ロジック13による演算リソース管理テーブル12aの検索が行われる(ステップST12)。このとき、演算リソース管理テーブル12a上には、すでに命令ストリームStream11−1のリソース管理情報が登録されている。すなわち、命令ストリームStream11−1および命令ストリームStream11−2は同一の開始アドレスのため、その命令ストリームStream11−1のリソース管理情報がヒットする(ステップST13)。
ヒットしたリソース管理情報があると、そのリソース管理情報の「#ofRes」の値(2)および「End」のデータ(Inst_4のアドレス)が読み出される。そして、「#ofRes」の値が、カレント・リソース・カウンタ15の値(5)から減算される。この減算の結果は、ウェイクアップ・ロジック13に送られる(ステップST14,ST15)。
減算の結果が負の値でない場合、ウェイクアップ・ロジック13は、命令ストリーム・アドレス・レジスタ11のT1_PCに登録されている先頭アドレスを、使用されていないカレントPC14a,14b,14cのいずれか1つにセットする(ステップST16)。これ以降、上記したステップST17〜の処理が繰り返される。これにより、命令ストリームStream11−2の実行が開始される。
もし、減算の結果が負の値の場合、演算リソースUNIT_Aが十分な数量となるまで、ウェイクアップ・ロジック13は、新たな命令ストリームStream11−2の実行を開始させない。
一方、命令ストリームStream11−2の実行の途中において、演算リソース管理テーブル12aより読み出された、そのリソース管理情報の「End」のデータ(Inst_4のアドレス)は、ウェイクアップ・ロジック13によって、カレントPC14a,14b,14cのいずれかにセットされ、実行にともなってインクリメントされる命令ストリームStream11−1のアドレスと比較される(ステップST113)。「End」のデータとカレントPC14a,14b,14cのいずれかにセットされているアドレスとが一致しない場合には、上記したステップST17以降の処理が繰り返される。
これに対し、「End」のデータとカレントPC14a,14b,14cのいずれかにセットされているアドレスとが一致した場合には、カレント・リソース・カウンタ15の値に、その実行中の命令ストリームStream11−2の必要演算リソース数を加算(3+2)し、カレント・リソース・カウンタ15の値を更新させる(ステップST24)。こうすることによって、命令ストリームStream11−2の実行の終了時ではなく、命令Inst_4の実行が終了した時点、つまり、演算リソースUNIT_Aの占有が必要なくなった時点で、演算リソースUNIT_Aの開放を行うことが可能になる。
すなわち、本実施形態のように、各命令ストリームStream11−1,11−2,11−3,11−4の命令Inst_4が、それぞれ、命令INST_Aが使用する演算リソースUNIT_Aのレジスタをアクセスする最後の命令であるとした場合、この命令Inst_4のアドレスを特殊な命令として管理することにより、命令ストリームStream11−1,11−2,11−3,11−4を実行している途中において、演算リソースUNIT_Aの占有が必要なくなった時点を判断することが可能となる。たとえば、命令Inst_4の実行が終了するまでは演算リソースUNIT_Aの占有が必要であるが、それ以降の命令Inst5〜7では演算リソースUNIT_Aの占有を必要としない命令ストリームStream11−1,11−2,11−3,11−4については、命令Inst_4の実行が終了した時点で、演算リソースUNIT_Aの開放が可能である。したがって、演算リソースUNIT_Aの占有が必要な最後の命令Inst_4を検出し、命令ストリームStream11−2の実行が終了する前に演算リソースUNIT_Aの開放を行うことにより、たとえば図7に示すように、後続の命令ストリームStream11−3に限らず、命令ストリームStream11−3に続く、命令ストリームStream11−4の実行の開始をも早めることが可能となる。
なお、本実施形態の場合においても、DSPや命令ストリームの構成などに関しては、これに限定されるものではない。
その他、本願発明は、上記(各)実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、上記(各)実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。たとえば、(各)実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題(の少なくとも1つ)が解決でき、発明の効果の欄で述べられている効果(の少なくとも1つ)が得られる場合には、その構成要件が削除された構成が発明として抽出され得る。
本発明の第1の実施形態にしたがった、演算処理装置(DSP)の構成例を示すブロック図。 図1に示したDSPの動作を説明するために示すフローチャート。 実施例1にかかる動作を説明するために示す図。 実施例2にかかる動作を説明するために示す図。 実施例3にかかる動作を説明するために示す図。 本発明の第2の実施形態にしたがった、演算処理装置の構成例を示すブロック図。 図6に示したDSPの動作を説明するために示す図。 図6に示したDSPの動作を説明するために示すフローチャート。
符号の説明
11…命令ストリーム・アドレス・レジスタ、12,12a…演算リソース管理テーブル、13…ウェイクアップ・ロジック、14a,14b,14c…カレント・プログラム・カウンタ、15…カレント・リソース・カウンタ、16,16a…デコーダ、17…アップデート・ロジック、18…命令キャッシュ、19…リソース・カウンタ、20…命令実行ステージ、21…レジスタ。

Claims (5)

  1. 複数の演算リソースを共有し、複数の命令ストリームを同時に実行することが可能な演算処理装置であって、
    前記複数の演算リソースのうちのいくつかを使用して、前記複数の命令ストリームをそれぞれ実行する実行ステージと、
    前記実行ステージによって、前記複数の命令ストリームのうちの最初の命令ストリームを実行した際に使用した演算リソースの数量をカウントする第1のリソースカウンタと、
    前記第1のリソースカウンタのカウント値を記憶する管理テーブルと、
    前記複数の演算リソースのうち、使用されていない演算リソースの数量データを保持する第2のリソースカウンタと、
    後続の命令ストリームを実行する際に、前記管理テーブルに記憶されている前記第1のリソースカウンタのカウント値を読み出し、そのカウント値を前記第2のリソースカウンタで保持されている前記数量データより減算した減算結果に応じて、前記後続の命令ストリームの実行の開始を制御する制御回路と
    を具備し、
    前記制御回路は、前記後続の命令ストリームの実行を開始する前に、前記減算結果から、その命令ストリームが必要とする数量の演算リソースを確保できるかどうかをチェックし、確保できる場合に前記後続の命令ストリームの実行を開始することを特徴とする演算処理装置。
  2. 前記複数の命令ストリームは、データを変えながら繰り返し実行される同一の命令ストリームであることを特徴とする請求項1に記載の演算処理装置。
  3. 前記複数の演算リソースは、その演算リソースを使用する命令ストリームの実行が終了するまでは開放されないことを特徴とする請求項1に記載の演算処理装置。
  4. 前記第1のリソースカウンタは、前記最初の命令ストリームを実行する際にデコードした、演算リソースを必要とする命令の数をカウントするものであることを特徴とする請求項1に記載の演算処理装置。
  5. さらに、
    前記実行ステージによって、前記最初の命令ストリームを実行した際の、演算リソースを必要とする命令のアドレスにより更新されるレジスタと、
    前記最初の命令ストリームの実行が終了した際に、前記レジスタで保持されている最終アドレスを、前記管理テーブルに格納するロジック回路と
    を具備し、
    前記制御回路は、後続の命令ストリームを実行する際に、前記管理テーブルに記憶されている前記最終アドレスを読み出し、その最終アドレスを前記後続の命令ストリームを実行する際にデコードした命令のアドレスと比較し、一致した場合に前記後続の命令ストリームが使用した演算リソースを開放するようにしたことを特徴とする請求項1に記載の演算処理装置。
JP2005053396A 2005-02-28 2005-02-28 演算処理装置 Expired - Fee Related JP4557748B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2005053396A JP4557748B2 (ja) 2005-02-28 2005-02-28 演算処理装置
US11/190,062 US7937562B2 (en) 2005-02-28 2005-07-27 Processing apparatus
TW094125605A TW200630876A (en) 2005-02-28 2005-07-28 Processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005053396A JP4557748B2 (ja) 2005-02-28 2005-02-28 演算処理装置

Publications (2)

Publication Number Publication Date
JP2006236245A JP2006236245A (ja) 2006-09-07
JP4557748B2 true JP4557748B2 (ja) 2010-10-06

Family

ID=36933136

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005053396A Expired - Fee Related JP4557748B2 (ja) 2005-02-28 2005-02-28 演算処理装置

Country Status (3)

Country Link
US (1) US7937562B2 (ja)
JP (1) JP4557748B2 (ja)
TW (1) TW200630876A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4768574B2 (ja) * 2006-10-26 2011-09-07 エヌイーシーコンピュータテクノ株式会社 電源制御システム及び方法、電子装置、プログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002259146A (ja) * 2000-05-15 2002-09-13 Matsushita Electric Ind Co Ltd アプリケーション実行装置及び方法
JP2003108389A (ja) * 2001-09-27 2003-04-11 Fujitsu Ltd スレッドスケジューリング方式
JP2004038777A (ja) * 2002-07-05 2004-02-05 Ricoh Co Ltd 画像形成装置およびアプリケーションid割付方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2760273B2 (ja) * 1993-12-24 1998-05-28 日本電気株式会社 演算装置及びその制御方法
JP3760035B2 (ja) * 1996-08-27 2006-03-29 松下電器産業株式会社 複数の命令流を独立に処理し、命令流単位に処理性能を柔軟に制御するマルチスレッドプロセッサ
US7051329B1 (en) * 1999-12-28 2006-05-23 Intel Corporation Method and apparatus for managing resources in a multithreaded processor
KR100415742B1 (ko) 2000-12-11 2004-01-24 패러데이 테크놀로지 코퍼레이션 프로세서에서 소프트웨어의 제어를 받는 예외 처리 흐름용장치 및 그 동작 방법
KR100902513B1 (ko) 2001-04-13 2009-06-15 프리스케일 세미컨덕터, 인크. 데이터 스트림 프로세서들에서 데이터 스트림들의 조작
JP3655266B2 (ja) * 2002-07-16 2005-06-02 株式会社東芝 情報処理装置
US7013400B2 (en) 2003-04-24 2006-03-14 International Business Machines Corporation Method for managing power in a simultaneous multithread processor by loading instructions into pipeline circuit during select times based on clock signal frequency and selected power mode

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002259146A (ja) * 2000-05-15 2002-09-13 Matsushita Electric Ind Co Ltd アプリケーション実行装置及び方法
JP2003108389A (ja) * 2001-09-27 2003-04-11 Fujitsu Ltd スレッドスケジューリング方式
JP2004038777A (ja) * 2002-07-05 2004-02-05 Ricoh Co Ltd 画像形成装置およびアプリケーションid割付方法

Also Published As

Publication number Publication date
US20060195679A1 (en) 2006-08-31
TW200630876A (en) 2006-09-01
JP2006236245A (ja) 2006-09-07
US7937562B2 (en) 2011-05-03

Similar Documents

Publication Publication Date Title
US5499349A (en) Pipelined processor with fork, join, and start instructions using tokens to indicate the next instruction for each of multiple threads of execution
US9965274B2 (en) Computer processor employing bypass network using result tags for routing result operands
US5353418A (en) System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread
JP3569014B2 (ja) マルチコンテキストをサポートするプロセッサおよび処理方法
JP4230504B2 (ja) データプロセッサ
JP2011513843A (ja) 実行装置内のデータ転送のシステムおよび方法
CN108257078B (zh) 存储器知晓重排序源
CN105814538B (zh) 用于仿真共享内存架构的支持浮点的流水线
US10073782B2 (en) Memory unit for data memory references of multi-threaded processor with interleaved inter-thread pipeline in emulated shared memory architectures
US7203821B2 (en) Method and apparatus to handle window management instructions without post serialization in an out of order multi-issue processor supporting multiple strands
US6324640B1 (en) System and method for dispatching groups of instructions using pipelined register renaming
CN112559037B (zh) 一种指令执行方法、单元、装置及系统
CN115640047A (zh) 指令操作方法及装置、电子装置及存储介质
JP5128382B2 (ja) 複数のロード命令を実行するための方法および装置
JPH10143365A (ja) 並列処理装置及びその命令発行方式
JP4557748B2 (ja) 演算処理装置
JP5630281B2 (ja) ベクトル命令制御回路及びリストベクトルの追い越し制御方法
JP2008071061A (ja) 情報処理装置
CN112540789B (zh) 一种指令处理装置、处理器及其处理方法
JP5493837B2 (ja) 演算処理装置、情報処理装置及び演算処理装置のパイプライン制御方法
JP2015184979A (ja) 演算装置および命令フェッチ方法
Chiu et al. Design of Instruction Address Queue for High Degree X86 Superscalar Architecture.
JP3473506B2 (ja) パイプライン処理装置
Sen et al. Synchronisation in a Multithreaded Processor
JP2017134443A (ja) プロセッサ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071211

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100212

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100720

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130730

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees