JP5333433B2 - 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム - Google Patents

低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム Download PDF

Info

Publication number
JP5333433B2
JP5333433B2 JP2010500628A JP2010500628A JP5333433B2 JP 5333433 B2 JP5333433 B2 JP 5333433B2 JP 2010500628 A JP2010500628 A JP 2010500628A JP 2010500628 A JP2010500628 A JP 2010500628A JP 5333433 B2 JP5333433 B2 JP 5333433B2
Authority
JP
Japan
Prior art keywords
instruction
instruction stream
stream
priority
long
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
JP2010500628A
Other languages
English (en)
Other versions
JPWO2009107462A1 (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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2010500628A priority Critical patent/JP5333433B2/ja
Publication of JPWO2009107462A1 publication Critical patent/JPWO2009107462A1/ja
Application granted granted Critical
Publication of JP5333433B2 publication Critical patent/JP5333433B2/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • 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, 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
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Description

本発明は、複数命令流を同時実行するプロセッサ、その方法及びそのプログラムに関する。
複数の命令語(演算、ロードなど)から構成される超長命令語(VLIW:Very Long Instruction Word)を同時に実行するVLIWプロセッサが提案されている。VLIWプロセッサでは、プログラムのコンパイル時に、命令間の順序関係やデータ依存関係を解析し、同時実行可能な命令群を抽出している。これにより、ランタイムオーバーヘッド無しに、複数命令の同時実行による性能向上を実現している。
しかし、1つのプログラム(命令流)において、同時に実行可能な命令数には限りがあり、平均的には、2〜3命令/Cycleが上限と言われており、これ以上の性能向上が困難となっていた。
このため、近年では、複数の命令流を同時実行することにより、さらなる性能向上を実現するVLIWプロセッサが出現している(例えば特許文献1参照)。特許文献1のプロセッサでは、図2に示すように、M個の命令流(命令アドレス1〜M)を同時に実行するため命令流毎の命令を格納する命令キャッシュ1〜M、フェッチした命令を一時格納する命令バッファ1〜M、複数の命令流から同時実行する命令を抽出し、選択する命令セレクタが必要となる。更に、命令流毎に、命令シーケンスを制御するプログラムカウンタ(PC)が必要となる(図2には示していない。)。命令アドレス1〜Mは前記PCより供給される。また、当該プロセッサが、最大K個の命令から構成される超長命令語を実行する命令流を、M個実行する場合を例として説明する。
この場合、特許文献1では、各命令流がフェッチした命令群が分割可能な場合には、M個の命令群を分割し、命令流の優先順位や同時実行可能な演算器数が最大(K個)となるように、各命令流から命令を選択し、演算器に提供する。これにより、同時に実行する命令数を増やして、性能を向上させる事が出来る。
また、非特許文献1に記載のプロセッサでは、図3に示すように、M個の命令流を同時に実行するため、各命令流(命令アドレス1〜M)を供給するM個のプログラムカウンタ(PC)、1つの命令キャッシュ、1つのアドレスセレクタが必要となる。なお、プログラムカウンタ(PC)は図3には示していない。
プログラムカウンタ(PC)は、命令シーケンスを制御する。1つの命令キャッシュは、M個の命令流命令を格納する。アドレスセレクタは、命令流制御情報に基づき、M個のPCが指定する命令アドレスを1つ選択し、命令キャッシュに供給する。
当該プロセッサでは、1つの命令流において、データのキャッシュミスによるストールなどが発生した場合に、前記アドレスセレクタが、異なる命令流のPCが指定する命令アドレスを選択し、実行することにより、ストールによる性能低下を最小限に抑えることが出来る。
特開2001−306324号公報 マルチスレッド処理をサポートするVLIWプロセッサ・アーキテクチャ、IPSJ SIG Notes、Vol.93、 No.91(1993年10月21日) pp.17−24
前述したように、特許文献1に記載のプロセッサでは、複数命令流の命令を同時にフェッチし、複数命令流から同時実行可能な命令を選択することにより、高い性能を得ている。しかし、特許文献1の構成を実現するためには非常に多量のハードウェアが要求される。そして、多量のハードウェアが必要となるということは、低コストなハードウェアで高い性能を実現するというVLIWプロセッサの目的に反する。特に、M個の命令メモリのハードウェアコストが問題となる。
一般的には、命令キャッシュは、K個の命令を格納するL個の命令メモリと、その管理情報であるキャッシュタグから構成され、特に、大きなハードウェアコストを要求する命令メモリが問題となる。特許文献1に記載の技術では、命令メモリは、最大K個の命令を同時にフェッチするためのL個のメモリバンクから構成される。よって、最大M×L個の1Read/1Writeのメモリバンクが必要となる。また、キャッシュに用いられるタグと、そのセクレタ群も、Mセット必要となる。
これらのことから、低コストなシステムや、組み込み向けの画像処理など、限られたハードウェア規模で、複数の命令流を実行するプロセッサを構成する必要がある場合に、特許文献1の方法では、複数命令流を実行するプロセッサを実現することは、困難であると言える。
また、非特許文献1に記載のプロセッサでは、1つの命令キャッシュのみで実現できるため、前述したハードウェア規模の課題を解決することが出来る。しかし、1サイクル毎に、異なる1つの命令流からのみ命令アドレスを選択し、命令キャッシュに供給するため、命令フェッチのバンド幅を有効に活用できない場合があり、結果として性能の低下を招くこととなる。
例えば、4つのメモリバンクから構成される命令メモリを使って、1サイクルに最大4命令がフェッチ可能な場合を考える。命令流Aが実行する命令列の命令数が、3、2、1、2とし、命令流Bが実行する命令列の命令数が、1、2、3、2とする。この場合に、非特許文献1では、時分割に命令流AとBを切り替えるため、両命令流の命令フェッチが終了するのに、8サイクルを要してしまう。また、1サイクルにフェッチした命令数を計算すると2命令/サイクルである。つまり本例では、1サイクル当たりに、最大で4つの命令フェッチが可能であるにも関わらず、その半分程度の性能しか生かすことが出来ていない。
そこで、本発明は、単一の命令流を実行するプロセッサに対して僅かなハードウェアを追加するだけで、複数の命令流の実行を可能とし、プロセッサの命令フェッチのバンド幅を最大限に有効活用することにより、ハードウェアの性能を最大限に発揮することが可能な低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラムを提供することを目的とする。
本発明の第1の観点によれば、複数個の命令から構成される超長命令語を実行するプロセッサであって、M個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるN(N<M)個の命令キャッシュから、最大M個の命令流の前記超長命令語を同時にフェッチする際に、各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置を備えることを特徴とするプロセッサが提供される。
本発明の第2の観点によれば、プロセッサを用いて複数個の命令から構成される超長命令語を実行する超長命令語実行方法であって、M個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるN(N<M)個の命令キャッシュから、最大M個の命令流の前記超長命令語を同時にフェッチする際に、
各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給することを特徴とする超長命令語実行方法が提供される。
本発明の第3の観点によれば、複数個の命令から構成される超長命令語を実行するプロセッサが備えるアドレス供給装置としてコンピュータを機能させるための超長命令語実行プログラムであって、前記プロセッサがM個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるN(N<M)個の命令キャッシュから、最大M個の命令流の前記超長命令語を同時にフェッチする際に、各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置として前記コンピュータを機能させることを特徴とする超長命令語実行プログラムが提供される。
本発明によれば、各命令流が使用するメモリバンクを特定し、使用するメモリバンク数が最大となるように、複数命令流の命令フェッチを決定することから、単一の命令流を実行するプロセッサに対して僅かなハードウェアを追加するだけで、複数の命令流の実行を可能とし、プロセッサの命令フェッチのバンド幅を最大限に有効活用することにより、ハードウェアの性能を最大限に発揮し、プロセッサ全体の性能向上を図ることが可能となる。
本発明の実施形態の基本的構成を表す図である。 特許文献1の実施形態の全体構成を示すブロック図である。 非特許文献1の実施形態の全体構成を示すブロック図である。 本発明の実施形態の全体構成を示すブロック図である。 超長命令語の構成を示す図である。 メモリバンクにおける超長命令語の配置図である。 本発明の最良の実施形態の動作を示すフローチャートである。 本発明の第一の実施形態の全体構成を示すブロック図である。 本発明の第一の実施形態の動作を示すフローチャートである。 本発明の第二の実施形態の全体構成を示すブロック図である。 メモリバンクにおける一般的な超長命令語の配置図である。 図11に示す一般的な超長命令語の配置で処理を実行した場合のサイクル図である。 メモリバンクにおいて提案する超長命令語の配置図である。 図13において提案する超長命令語の配置で処理を実行した場合のサイクル図である。
符号の説明
1 プロセッサ
2 プログラムメモリ
3 データメモリ
11 命令供給ユニット
12 演算ユニット
13 レジスタユニット
101 アドレス供給装置
102 命令キャッシュ
103 命令セレクタ
104 加算器群104
以下、図面を参照して本発明を実施するための最良の形態について詳細に説明する。
次に、本発明の実施の形態について図面を参照して詳細に説明する。
尚、本発明の実施の形態は、下記で説明する実施形態及び実施例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な形態をとりえる。また、本明細書において用いられる命令流とは、プログラムによって記述された一連の機能単位のことをいう。そして、命令流毎に、異なるシーケンスを持つ。さらには、命令流は、スレッド、プロセス、タスクなどの他の用語で置き換えることも可能で、それらの用語の相違により、本発明の実施の範囲が狭められるものではない。
図1は、本発明の実施形態の構成について表すブロック図である。本実施形態ではプロセッサ1と、プログラムメモリ2と、データメモリ3を有する。また。プロセッサ1は命令供給ユニット11と、演算ユニット12と、レジスタユニット13を有する。
プロセッサ1は複数個の命令から構成される超長命令語を実行し、M(≧2)個の命令流の超長命令語を実行する。プログラムメモリ2は、プログラムが格納されているメモリである。また、データメモリ3はプロセッサ1で演算処理を行う際に必要なデータが格納されているメモリである。
命令供給ユニット11は演算ユニット12に対して命令を供給するユニットである。演算ユニット12は命令供給ユニット11から供給された命令に従い演算処理を行う。また、レジスタユニット13は、演算や実行状態の保持に用いる記憶素子である。
図4は、命令供給ユニット11の構造を示すブロック図であり、複数個の命令から構成される超長命令語を実行し、M(≧2)個の命令流の超長命令語を実行するプロセッサの概念図である。
命令供給ユニット11は、命令アドレス(命令アドレス1〜M)、メモリバンク(メモリバンク1〜L)(L≧1)、アドレス供給装置101、命令キャッシュ102、バンク数情報及び命令流優先度を有する。
命令アドレス1〜Mは、命令流毎に供給される命令アドレスである。メモリバンク1〜L(L≧1)は、各命令流の超長命令語が格納される複数のメモリバンクである。命令キャッシュ102はマルチバンクメモリのデータ管理を行う。バンク数情報は、各命令流が使用する前記メモリバンクの数を指定する情報である。命令流優先度は、実行する命令流の優先度を示す情報である。
アドレス供給装置101は、命令アドレス1〜Mと、バンク数情報に基づき、各命令流が使用するメモリバンクを特定する。また、複数の命令流が同一のメモリバンクを使用する場合には、命令流優先度に基づき、優先度の高い命令流の命令アドレスを、当該メモリバンクに供給する。
以下では、前記アドレス供給装置101に供給されるバンク数情報の実装について、詳細に説明する。尚、超長命令語をフェッチする前に、超長命令語が用いるバンク数情報を得る実装方法は、様々に考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な実装が考えられる。
バンク数情報を得る実装の1例として、まず、各命令流の超長命令語が格納されるメモリバンク数を固定とする実装が考えられる(以下この実装をA1と表記する)。
実装A1では、命令流毎に、これからフェッチする超長命令語が格納されるメモリバンク数を格納するレジスタを設ける。そして、アドレス供給装置101が、前記レジスタをメモリバンク数情報として利用する。前記レジスタに設定される値は、プロセッサ外部からの制御信号や、前記レジスタを設定・変更する命令によって、制御される。
次に、命令流毎に、バンク数情報を格納する専用のメモリを設ける実装も考えられる(以下この実装をA2と表記する)。
実装A2では、前記メモリは、各命令流の命令アドレスで参照され、当該命令流が次にフェッチする超長命令語が、何個のメモリバンクを使用するかの情報を格納する。また、当該メモリの内容を、プログラム起動前に設定する実装や、キャッシュとして更新する実装が考えられる。キャッシュとして実装する場合には、図4の命令キャッシュ102のキャッシュ制御機構を用いることにより、必要となるハードウェアコストを抑えるという実装も考えられる。
次に、図5に示すように、超長命令語を、最大K個の命令と、次サイクルの命令フェッチで用いるメモリバンク数を示す情報から構成し、前サイクルにフェッチした超長命令語に含まれる前記情報を、バンク数情報として使う実装も考えられる(以下この実装をA3と表記する)。また、この際に前記超長命令に含まれる命令数は、固定でであってもよく、また、可変としてもよい。
また、実装A3では、命令流の最初の超長命令語をフェッチする場合には、バンク数情報が不明である。よって、命令流の最初の超長命令語をフェッチする場合には、あらかじめ固定の値をバンク数情報として用いるか、命令流の最初の命令フェッチ前のバンク数情報を供給するレジスタを設け、前記レジスタの情報をバンク数情報として用いる。また前記レジスタは、プロセッサ外部からの制御信号や、前記レジスタを設定・変更する命令によって、設定するという実装が考えられる。
さらに、実装A3の実装では、超長命令語に分岐命令が含まれる場合には、分岐成立時と不成立時の2パターンのそれぞれに対応するバンク数情報を用意する必要がある。そのための実装としては、分岐成立時・不成立時の2つのバンク数情報を超長命令語の一部とする実装が考えられる。命令流毎に、2つのバンク数情報を格納するレジスタを2つ設け、分岐命令がフェッチされた次のサイクルには、分岐不成立時のバンク数情報を用い、分岐命令の分岐が成立した場合には、分岐成立時のバンク数情報を用いる実装とする。また、分岐成立時・不成立時の2つのバンク数情報の一方は固定数とし、もう一方のみを超長命令語の一部とする実装も考えられる。その固定数は、プロセッサ外部からの制御信号や、設定・変更する命令によって、変更できる実装であってもよい。
以下では、前記アドレス供給装置101に供給される命令流優先度の実装について、詳細に説明する。命令流優先度を設定するための実装としては、様々な実装が考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な方法が考えられる。
命令流優先度を実装する1例としては、まず、各命令流の命令流優先度を固定とする実装が考えられる(以下この実装をB1と表記する)。
実装B1では、命令流毎に、優先度が格納されたレジスタを設け、前記レジスタを命令流優先度として利用する。前記レジスタに設定される値は、プロセッサ外部からの制御信号や、前記レジスタを設定・変更する命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令流優先度変更フラグを設け、前記フラグにより、制御される実装が考えられる。命令流優先度を固定とする一例としては、2つの命令流がある場合には、主命令流と副命令流に分類し、主命令流に、負荷の重い処理を割り当てる実装が考えられる。
次に、高い優先度を与える命令流を順繰りに変更していくラウンドロビン方式が考えられる(以下この実装をB2と表記する)。
実装B2は、最も高い優先度を持つ命令流を示すポインタと、より低い優先度を持つ命令流を決定するルールによって実現される。前記ルールとして単純なのは、各命令流を一列に並べ、高い優先度を持つ命令流の一方の命令流方向に向かって、優先度を順次、低くしていく方法が考えられる。また、前サイクルにフェッチされた超長命令語の一部のフィールドとして優先度ポインタを設け、最も高い優先度を持つ命令流を指定するのに、前記ポインタに代えて、前記優先度ポインタを用いる実装も考えられる。
次に、命令流毎に、命令流の命令がフェッチされた、または、されなかった回数に基づき、命令流優先度を決定する実装が考えられる(以下この実装をB3と表記する)。
実装B3としては、例えば、フェッチされなかった回数を数えるカウンタを、命令流毎に設け、カウント値の高い命令流から順に、高い優先度を与える実装が考えられる。また、実装B1、実装B2及び実装B3を組み合わせた実装も考えられる。例えば、2つの命令流の優先度を固定して、一方の命令流に高い優先度を与え、もう一方の命令流の命令がフェッチされない回数をカウントし、カウント値が一定値を超えた場合のみ、優先度の低い命令流に高い優先度を与える実装が考えられる。また、ラウンドロビン方式で一番高い優先度を与える命令流を、フェッチされなかった回数の最も多い命令流に与える実装も考えられる。上記以外にも様々な組合せが考えられる。
[動作の説明]
以下では、具体的な例を用いて、本発明における、複数命令流の命令フェッチの動作を詳細に説明する。今回説明に用いる具体例は、実行する命令流数Mが4、超長命令語に含まれる最大命令数Kが4、メモリバンク数Lが4、命令キャッシュ数Nが1、あるサイクルにおける、命令アドレスが命令流毎にIA1、IA2、IA3、IA4、バンク数情報が命令流毎に3、2、1、1、命令流優先度が、命令流2の優先度が一番高く、命令流3、4、1と優先度が低くなる場合を考える。本例を用いて、本発明の動作フローを詳細に説明する。また、実際の運用においては、前述した各種パラメータは、任意の値を取ることに、留意されたい。
図6に、前述した命令流毎のパラメータと、各メモリバンクに対する前記アドレス供給装置101の選択結果を示す。その際のアドレス供給装置101の動作フローを、図7のフローチャートに示す。また、本実施形態においては、係るフローチャートで示される動作が、ハードウェアによって実現されているが、CPUによるソフトウェアによって、実現されても良い。また、ソフトウェアとハードウェアの協働により実現されても良い。
以下では、本発明における複数命令流の命令フェッチの動作について、詳細に説明する。
まず、命令流毎に、各命令流の命令アドレス(IA:Instruction address)中のTbitを用いて、前記命令アドレスに対応する命令が格納されるメモリバンク(MB:memory bank)を、全てのMBから特定する(ステップS100)。ここで、Tbitは、命令アドレス中の任意位置のビットでよいが、一般的には、命令アドレスの下位Tbitが用いられる。例えば、図6のパラメータ設定である場合には、命令アドレスの下位2bitを用いて、4つのメモリバンクの何れから命令フェッチを開始するかを指定する。
次に、命令流毎に、ステップS100で求めたメモリバンク位置と、各命令流に与えられたバンク数情報とに基づいて、各命令流が使用するメモリバンクを特定する。命令流毎に、ステップS100で求めたメモリバンク位置から数えて、「バンク数情報」個までのメモリバンクを、各命令流が使用するメモリバンクとして特定する(ステップS101)。
ここでのメモリバンクの数え方は任意であってよいが、一般的には、メモリバンクを連続して、一方向に数えていく。例えば、図6のパラメータ設定である場合には、時計回り(バンク1→バンク4)に、隣接するメモリバンクを連続して数えていく。命令流1の場合には、命令アドレスが指定するメモリバンクがバンク1であり、バンク数情報が3であることから、バンク1から時計方向に数えて3個目であるバンク1から3までが、命令流1が使用するメモリバンクとして特定される。
続いて、S102からS106は、命令流優先度が高い方から順に行われる処理である。ここでは、一時変数Sを用いて逐次的に動作を記述しているが、説明を簡易にするためであり、必ずしも逐次的に行う必要は無く、実際のハードウェアにおいては、等価な回路で、複数命令流に対して並列に処理しても構わない。
まず、命令流の優先順位を指定する一時変数Sに1を指定する(ステップS102)。なお、ここでは、優先度が一番高い命令流を1としているが、図7に示す動作と等価な動作が可能であれば、他の表現方法であってもよい。
次に、命令流優先度の指定する優先度がS番目に高い命令流が使用するメモリバンクが、既に他の命令流に使用されていて、使用不可でないかを確認する。優先度がS番目の命令流が使用するメモリバンクが使用可能である場合には、ステップS104の処理を実行する。一方、メモリバンクが使用不可能である場合には、ステップS105の処理を実行する(ステップS103)。
優先度がS番目の命令流の命令アドレス(IA)を、当該命令流が使用するメモリバンクに供給する(ステップS104)。ここで、メモリバンクに提供する命令アドレスは、命令アドレスの一部、または、命令アドレスの全部または一部から計算されたアドレスであっても良い。例えば、命令アドレスの下位Tbitより上位のRbitを切り出し、下位Tbitが指定するメモリバンクには、前記Rbitを供給する。
また、当該命令流が複数のメモリバンクを使用する場合には、アドレスが連続してフェッチする命令を示すための規定値を前記命令アドレスに加算し、その下位Tbitより上位のRbitを切り出し、同時使用するメモリバンクに供給する。前記規定値は、実装によって様々である。図6において命令アドレス(IA1〜IA3)のビット幅を12bitとすると、命令流2に着目すると、命令アドレスの下位2bitより上位の10bitを切り出し、下位2bitが指定するバンク2に、当該10bitを供給する。また、同時に使用するバンク3には、当該メモリアドレスに1を加算した値の下位2bitより上位の10bitを切り出し、バンク3に供給する(ステップS104)。
優先度がS番目の命令流の処理が終わったので、次に、優先度がS+1番目の命令流を処理するために、一時変数Sをインクリメントする(ステップS105)。
次に、一時変数Sが実行する命令流数よりも大きくなったか否かを判定する。ここで、一時変数Sが実行する命令流数よりも大きくなった事は、全ての命令流に対する処理が終わった事を示すため、各命令流の命令アドレスをメモリバンクに割り当てる作業を完了し、命令をメモリバンクからフェッチする(ステップS106のYes)。一方、一時変数Sが実行する命令流数よりも大きくなっていないということは、未だ処理がされていない命令流があるということなのでステップS103から処理を再開する(ステップS106のNo)。
図7のフローチャートの処理を行うことにより、例えば図6のパラメータ設定である場合であれば、優先度が一番高い命令流2が、当該命令流の命令アドレス(IA2)が指定するバンク2からバンク3の2つのメモリバンクを使用する。すなわち、バンク2からバンク3の2つのメモリバンクのそれぞれに、IA2から生成されたアドレスを供給する。この段階では、バンク1と4が空いているため、次に優先度の高い命令流3のアドレス(IA3)から生成されたアドレスがバンク4に提供され、最後に、命令流4のアドレス(IA4)から生成されたアドレスがバンク1に提供される。
以上のように本実施形態によれば、複数バンクからなる命令キャッシュ102を用いて、複数命令流からの命令フェッチが可能となる。また、各サイクルで使用されていないメモリバンクを使って、別の命令流の命令をフェッチするため、命令キャッシュ102の命令フェッチバンド幅を最大限に活用できる。さらに、複数命令流が、命令流数より少ない命令キャッシュ102を共有することにより、実行する命令流数に合わせて、命令キャッシュ102の数を増加させる必要が無い。このため、少ないコストで、命令フェッチバンド幅を最大限に活用した、複数命令流の命令フェッチを行うことが出来る。
図8に、本発明を実装したVLIWプロセッサのブロック図を示す。これは、本発明の実施の1実施例であり、本発明の実施の形態は、下記の実施例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な形態をとりえる。
図8は、M個の命令流の超長命令語を実行するVLIWプロセッサの構成図である。前記超長命令語は、図5に示すように、最大K個の命令と、次サイクルの命令フェッチで、いくつのメモリバンクを使用するかを示す情報(バンク数情報)から構成される。
図8のVLIWプロセッサは、プログラムカウンタ(PC1〜PCM)、命令キャッシュ102、命令バッファ(命令バッファ1〜M)、命令セレクタ103及びアドレス供給装置101を有する。
PC1〜PCMは、各命令流を管理するプログラムカウンタである。命令キャッシュ102は最大K個の命令がフェッチ可能なL個のメモリバンクである。命令バッファ1〜Mは、命令キャッシュ102からフェッチされた前記超長命令語を命令流毎に保存する命令バッファである。命令セレクタ103は、命令バッファから実行する命令を選択し演算ユニットに供給する。
アドレス供給装置101は、前記命令バッファの超長命令語に含まれるバンク数情報と命令流優先度に基づき、前記プログラムカウンタからの命令アドレスを選択し、前記メモリバンク毎に供給する。
図4で示される本発明の実施形態を、実際にVLIWプロセッサに実装した一例が図8であり、多くのコンポーネントが図4と図8で共通であり、機能も同じである。このため、図4と図8の異なる部分についてのみ、詳細に説明する。
まず、図4の命令アドレス1〜Mが、図8では、プログラムカウンタ(PC1〜M)として表現されている。一般的なプロセッサでは、命令流を制御するために、現時点でのプログラムの命令アドレスを示すプログラムカウンタが用いられる。そして、当該プログラムカウンタで示された位置からの命令フェッチが終了した時点で、次の命令が格納されるアドレスに更新される。
次に、図8では、フェッチされた超長命令語を命令流毎に保存する命令バッファ(命令バッファ1〜M)と、命令バッファに格納された超長命令語から、実行する命令を選択する命令セレクタ103が追加された。プロセッサの実装によるが、演算ユニットの競合等により、同時にフェッチした複数命令流の超長命令語が同時実行できない場合がある。この場合に、フェッチした超長命令語を一旦、命令バッファに格納し、その後で、命令セクレタにより、実行する命令を命令バッファから選択し、演算ユニットに供給する構成が考えられる。
本実施例では、フェッチした全ての超長命令語を一旦、命令バッファに格納し、前記命令バッファから命令を選択する構成としているが、必ずしも、この構成である必要は無い。例えば、フェッチした超長命令語を解析し、同時実行できる命令は、演算ユニットに供給し、実行できなかった命令のみを命令バッファに格納する等の方法が考えられる。さらに、フェッチされた命令が格納されるメモリバンクの位置と、演算ユニットの種類が一対一に対応する場合であれば、同時にフェッチされた命令は、同時に実行可能である。よって、前記の命令バッファと命令セレクタ103が不要となる。また、フェッチされる命令の個数と同数の演算ユニットが用意され、全ての演算ユニットが全ての命令を実行可能である場合も、同様に、前記の命令バッファと命令セレクタ103が不要となる。
以下では、フェッチした全ての命令が、同時実行することが不可能である場合の、命令セレクタ103の動作例について説明する。命令セレクタ103の実装には、様々な方法が考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な方法が考えられる。
まず、実行する命令流の優先度に基づき、時分割に実行する命令流を選択する実装が考えられる(以下この実装をC1と表記する)。
この場合の優先度の決定の仕方としては、様々な実装が考えられる。例えば、命令バッファを順繰りに選択するラウンドロビンを用いる実装が考えられる(C1−1)。また、命令バッファ毎に、選択されなかったサイクルを数えるカウンタを設け、選択されていないサイクルが最も長い命令流を選択する実装が考えられる(C1−2)。
また、一定の割合で、各命令流を選択する実装が考えられる(C1−3)。
更に、上記の実装における優先度を、プロセッサ外部からの制御信号や、命令セレクタ優先度を設定・変更する命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令セレクタ優先度フラグを設け、前記フラグにより、制御される実装が考えられる。
次に、複数命令流からの命令を同時に選択する実装が考えられる(以下この実装をC2と表記する)。実装C2は、実装C1に比べ、演算ユニットを有効に活用することができるが、制御に要するハードウェアが増加する。
例えば、優先度の高い命令流から順に、実行する演算ユニットを選択する方法が考えられる(C2−1)。この際の優先度は、プロセッサ外部からの制御信号や、命令セレクタ優先度を設定・変更する命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令セレクタ優先度フラグを設け、前記フラグにより、制御される実装が考えられる。
また、各命令流の超長命令語を命令単位まで分割し、同時に使用する演算ユニットの個数が最大となる組合せを実現する実装も考えられる(C2−2)。
本実施例のように、命令バッファを用いる場合には、アドレス供給装置101の動作について、図7の動作フローに比べて、異なる点が発生する。以下では、その異なる点について説明する。
命令バッファがある場合のアドレス供給装置101の動作フローを、図9のフローチャートに示す。
また、本実施例においては、係るフローチャートにおける動作が、ハードウェアによって実現されているが、ソフトウェアによって、実現されても良い。また、ソフトウェアとハードウェアの協働により実現されても良い。
以下では、図9を用いて、命令バッファがある場合のアドレス供給装置101の動作フローについて説明する。
まず、図9の各ステップ(ステップS200〜S206)は、図7の各ステップ(ステップS100〜S106)に対応して、同じ動作をする。図7と図9の相違点は、S203とS204の間に、S207が追加された点である。
次に、S207の動作を以下で説明する。命令バッファが無い場合には、アドレス供給装置101は、実行中の全ての命令流のプログラムカウンタから供給される命令アドレスから、各メモリバンクに供給する命令アドレスを生成すればよい。しかし、命令バッファが有る場合には、前サイクルにフェッチした超長命令語が、命令セレクタ103で選択されずに、命令バッファに格納されている場合がある。この場合には、当該命令流の超長命令語を新たにフェッチしても、命令バッファに格納することができず、命令フェッチバンド幅を無駄に使ってしまうことになる。
このため、前サイクルにフェッチした超長命令語が命令バッファ内に滞在している場合には、前記アドレス供給装置101は、命令流優先度に関わらず、当該命令流の命令アドレスから生成するアドレスを、メモリバンクに供給しない(ステップS207)。
図10を用いて、本発明の別の実施形態について説明する。実施例2では、本発明をより効果的に実現するための、プログラミング手段、コンパイラについて、詳細に説明する。
図10は、プログラミング手段、コンパイラによる最適の実現をハードウェアでサポートした複数命令流を実行するプロセッサである。
これは、本発明の実施の形態を実現するための実施例の一つである。よって、本発明の実施の形態は、下記の実施例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な形態をとりえる。
まず、プログラミング手段、コンパイラの必要性について説明をする。ここでは、例として、実行する命令流数Mが2、メモリバンク数Lが4である環境を想定する。また、ある4サイクルにおける、2つの命令流の超長命令語が、図11のようなメモリバンクを使う命令アドレスに配置された場合を考える。そして、命令流優先度は、常に、命令流Aが命令流Bにより、高い優先度を与える場合について、説明する。
図11で示されたメモリバンクの使用状況は、一般的なプロセッサで使われるプログラミング手段、コンパイラを使った場合に、想定される配置である。IA1〜IA4までの各超長命令語は、隣接した命令アドレスに配置されていくため、各サイクルにおいて、用いられるメモリバンクは、図11のようになる。
上記の設定で、2つの命令流を実行する。図12に示すように、まず、最初のサイクルにおいては、命令流AとBのそれぞれが、メモリバンク1と2を使うため、優先度の高い命令流AのIA1のみが命令フェッチされる。
次のサイクルでは、命令流AとBのそれぞれが、メモリバンク1を使うため、優先度の高い命令流AのIA2のみが命令フェッチされる。
同様にして、命令流AとBの全ての命令フェッチを実行すると、最初の4サイクルにおいて、命令流AとBが使用するメモリバンクにおいて競合が発生するため、優先度の高い命令流Aの命令フェッチが行われ、その後、命令流Bの命令フェッチが行われる。
このため、図12に示すように、命令流AとBの全ての命令フェッチを終了するのに、8サイクルを要する。図12において、IAは命令流Aの超長命令語を、IBは命令流Bの超長命令語を表す。
上記のように、一般的なプロセッサで使われるプログラミング手段、コンパイラを使った場合では、本発明が提案するプロセッサの性能を活かしきれないという事態が発生してしまう。このため、プログラミング手段、コンパイラ、それらの実行をサポートする図10のプロセッサが必要となる。
上記の事態を回避するためには、各命令流が使用するメモリバンクの競合が最小となるようにするべく、各命令流の超長命令語が、可能な限り異なるメモリバンクを使用するように、各命令流の超長命令語の命令アドレスを調整する必要がある。
以下では、その実現手段および実装について説明する。なお様々な実装が考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的範囲に属する限り様々な方法が考えられる。
まず、命令アドレスを調整するための実装例として、各命令流が使用するメモリバンク数を指定できるプログラミング手段を用意する実装が考えられる。前記のプログラミング手段を用意し、当該プログラムをコンパイルした際に、前記指定が反映されるように、各命令流で同時実行する命令の組合せや、各命令流の超長命令語の命令アドレスを設定する実装である。上記の例で言えば、命令流A、B共に、使用するメモリバンク数を2とすることにより、2サイクルに1回は、命令流AとBの双方の命令を、同時にフェッチすることが出来る。
次に、命令アドレスを調整するための他の実装例として、各命令流が使用するメモリバンクを指定できるプログラミング手段を用意する実装が考えられる。前記のプログラミング手段を用意し、当該プログラムをコンパイルした際に、前記指定が反映されるように、各命令流の超長命令語の命令アドレスを設定する実装である。上記の例で言えば、命令流Aが極力、バンク1、2を使うように設定し、命令流Bが極力、バンク3、4を使うような設定が考えられる。そうした場合の、命令流Aと命令流Bのメモリバンクの使用状況を図13に示す。
図13の命令配置で、2つの命令流を実行する。まず、最初のサイクルにおいては、命令流Aと命令流Bが使用するメモリバンクに重複がないため、IA1とIB1が同時に命令フェッチされる。次のサイクルでは、命令流AとBのそれぞれが、メモリバンク1と3を使うため、優先度の高い命令流AのIA2のみがフェッチされる。同様にして、命令流AとBの全ての命令フェッチを実行すると、図14に示すような結果となり、命令流AとBの全ての命令フェッチを終了するのに、5サイクルを要することが判る。この結果から、図13の命令配置を用いることにより、従来の図12の命令配置に比べ、3サイクル高速に命令フェッチできることが判る。
以下では、図13の命令配置をしたプログラムの効率的な実現を、ハードウェアでサポートし、複数命令流を実行するプロセッサについて説明する。
まず、図13の命令配置をしたプログラムを、通常のプロセッサで実行した場合について述べる。図13の命令配置をしたプログラムでは、フェッチする超長命令語の命令アドレスが連続ではないために、通常のプロセッサで実現する場合には、超長命令語毎に、ジャンプ命令を実行する必要がある。このため、メモリバンクの競合を減らせる一方で、各命令流の実行効率は大きく低下してしまう。そこで、図13の命令配置をしたプログラムの効率的な実現を、サポートするハードウェアが必要となる。前記実装を追加した複数命令流を実行するVLIWプロセッサを図10に示す。
実施例1で示されたVLIWプロセッサに、前述したハードウェア機構を追加したのが、図10のVLIWプロセッサである。ここで、実施例1の図8と図10において、同じ名前を持つコンポーネントは、プログラムカウンタ(PC1〜N)を除き、同様の機能を持つため、以下では、それ以外のコンポーネントについて、説明する。
図10では、図8では省略されていたプログラムカウンタを更新するための機構が明示されている。まず、プログラムカウンタと、更新するための機構について説明する。なお、図10では、プログラムカウンタ(PC1〜N)は、現サイクルにおいて、フェッチする超長命令語の命令アドレスを格納するレジスタのみを表現している。
一般的なプロセッサでは、当該プログラムカウンタの示す命令アドレスによる命令フェッチが行われた場合には、フェッチした命令数に基づくPC更新値が、当該プログラムカウンタ値に加算され、当該加算値により、当該プログラムカウンタは更新される。図10は、フェッチした命令数と使用するバンク数が一対一に対応する場合であり、フェッチした命令数の代わりに、バンク数情報が加算値として用いられている。
一方で、図10では、バンク数情報に加え、命令流毎のオフセット値(命令流オフセット)が、プログラムカウンタに加算されている。命令流オフセット値をさらに加算することにより、図13の命令配置をしたプログラムを、効率的に実行することができる。
以下では、図13の命令流Aを例に、命令流オフセットについて説明する。図13の命令流Aの命令配置を可能とするためには、プログラムカウンタ(命令アドレス)の更新を以下のように行う必要がある。図13の命令流Aにおいて、IA1をフェッチ後に、IA2を示す命令アドレスを得るには、バンク数情報(この場合は2)に加えて、オフセットとなる2をIA1に加える必要がある。同様に、IA3とIA4を得るためには、オフセットとして、それぞれ、1と3を加える。図10の構成においては、前述した値が命令流オフセットより供給され、命令流Aの次プログラムカウンタ値を生成するために、用いられる。
上記の動作は、図10における命令流オフセットと、図10において破線で囲まれた加算器群104でハードウェアサポートされる。前記命令流オフセットは、各命令流に対して、上記の例のオフセットをサイクル毎に供給する。また、点線で囲まれた加算器群104は、各命令流がフェッチした命令数に基づくPC更新値と前記命令流オフセットが供給するオフセット値を加算して、プログラムカウンタに加算する加算値を提供する。
図10の例では、各命令流がフェッチした命令数に基づくPC更新値と、各命令流が使用するバンク数の数が等価であるため、前記PC更新値として、バンク数情報が用いられている。実際の実装においては、前PC更新値として、必ずしも、バンク数情報が使われるとは限らない。例えば、2つの命令を3つのメモリバンクに格納する実装などが考えられる。他にも、一般的なプロセッサにおいて、プログラムカウンタを更新するために算出される値が、前記PC更新値として用いられる。
以下では、命令流オフセットの実装について、詳細に説明する。命令流毎に、オフセットを供給する実装は、様々に考えられる。以下では、その一例を挙げるが、本発明の実施の形態は、下記の例に何ら限定されることはなく、本発明の技術的思想の範囲に属する限り様々な方法が考えられる。
まず、プログラミング手段、コンパイラによって、命令流オフセットに格納するオフセット値が生成される。図13の命令流Aを例とすると、前記のプログラミング手段によって、命令流Aが極力、バンク1、2を使うように設定する。また、命令流Bが極力、バンク3、4を使うように設定する。そして、前記コンパイラによって、命令流Aの各サイクルにおけるオフセットが生成される。この例では、IA1に対して2が生成され、IA2とIA3に対して、それぞれに、1と3が生成される。
次に、生成されたオフセットを、図10の命令流オフセットに供給する手段について説明する。手段としては、各命令流に供給する命令流オフセットを固定数とする実装が考えられる。命令流毎に、オフセットが格納されたレジスタを設け、前記レジスタを命令流オフセットとして利用する。前記レジスタに設定される値は、プロセッサ外部からの命令流オフセット制御信号や、前記レジスタを設定・変更する命令流オフセットの変更命令、あるいは、前サイクルにフェッチされた超長命令語の一部のフィールドとして命令流オフセット変更フラグを設け、前記フラグにより、制御される実装が考えられる。
また、プロセッサ外部からの命令流オフセット設定信号や、前記レジスタを設定・変更する命令流オフセットの設定命令、または、前サイクルにフェッチされた超長命令語の一部のフィールドとして、命令流オフセット設定フラグを設け、それらが命令流オフセットとして、供給される実装が考えられる。
さらには、命令流毎に、命令流オフセットを格納する専用のメモリを設ける実装も考えられる。前記メモリは、各命令流の命令アドレスで参照され、当該命令流に対する命令流オフセットを格納する。また、当該メモリの内容を、プログラム起動前に設定する実装や、キャッシュとして更新する実装が考えられる。キャッシュとして実装する場合には、図4の命令キャッシュ102のキャッシュ制御機構を用いることにより、必要となるハードウェアコストを抑える実装も考えられる。
本発明の実施形態によれば、各命令流の命令アドレスと、何個のメモリバンクを用いるかの情報から、各命令流が使用するメモリバンクを特定し、使用するメモリバンク数が最大となるように、複数命令流の命令フェッチを決定する。これにより、実行する命令流数に応じた複数の命令キャッシュを用いることなく、追加するハードウェアコストを抑えて、複数命令流の実行が可能となる。
また、例えば、4つのメモリバンクを使って、1サイクルに最大4命令がフェッチ可能な場合を考える。命令流Aが実行する命令列の命令数が、3、2、1、2とし、命令流Bが実行する命令列の命令数が、1、2、3、2とする。この場合に、従来技術では、時分割に命令流AとBを切り替えるため、両命令流の命令をフェッチするのに、8サイクルを要してしまう。一方で、本発明の実施形態によれば、各サイクルにおいて、使用するメモリバンク数が最大となるように、実行する命令流を選択して、複数命令流の命令をフェッチするため、各サイクルにおける、命令流Aと命令流Bの命令が、異なるメモリバンクを用いる場合には、1サイクルで、命令流Aと命令流Bの双方の命令がフェッチできることから、最短4サイクルで、両命令流の命令をフェッチすることが出来る。このように、命令フェッチのバンド幅を最大限に活用し、高い性能を実現することが可能となる。
なお、本発明の実施形態である低コストに複数命令流を実行するプロセッサは、ハードウェア、ソフトウェア又はこれらの組合せにより実現することができる。
本願は、日本の特願2008−044274(2008年2月26日に出願)に基づいたものであり、又、特願2008−044274に基づくパリ条約の優先権を主張するものである。特願2008−044274の開示内容は、特願2008−044274を参照することにより本明細書に援用される。
本発明の代表的な実施形態が詳細に述べられたが、様々な変更(changes)、置き換え(substitutions)及び選択(alternatives)が請求項で定義された発明の精神と範囲から逸脱することなくなされることが理解されるべきである。また、仮にクレームが出願手続きにおいて補正されたとしても、クレームされた発明の均等の範囲は維持されるものと発明者は意図する。

Claims (23)

  1. 複数個の命令から構成される超長命令語を実行するプロセッサであって、M個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるN(N<M)個の命令キャッシュから、最大M個の命令流の前記超長命令語を同時にフェッチする際に、
    各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置を備えることを特徴とするプロセッサ。
  2. 前記バンク数情報が、前サイクルにフェッチされた、前記超長命令語の一部のフィールドであることを特徴とする請求項に記載のプロセッサ。
  3. 前記バンク数情報が、命令流の最初の命令をフェッチする場合に、命令流毎に固定数であることを特徴とする請求項又はに記載のプロセッサ。
  4. 前記超長命令語に分岐命令が含まれる場合に、各分岐結果に対応する複数のバンク数情報が、前サイクルにフェッチされた前記超長命令語の一部のフィールドであることを特徴とする請求項乃至の何れか1項に記載のプロセッサ。
  5. 各分岐結果に対応する複数の前記バンク数情報は2つであり、それぞれ、分岐が成立した場合又は不成立した場合のバンク数情報として、用いられることを特徴とする請求項に記載のプロセッサ。
  6. 前記超長命令語に分岐命令が含まれる場合に、一つのバンク数情報と固定数が、それぞれ、分岐成立時または不成立時のバンク数情報として用いられ、前記一つのバンク数情報が、前サイクルにフェッチされた前記超長命令語の一部のフィールドであり、前記固定数は、外部の制御信号又はバンク数情報の変更命令により、設定される数値であることを特徴とする請求項又はに記載のプロセッサ。
  7. 前記バンク数情報が、命令流毎に固定数であり、前記固定数は、外部からのバンク数制御信号又はバンク数情報の変更命令により、設定及び変更されることを特徴とする請求項に記載のプロセッサ。
  8. 前記バンク数情報が、命令流毎に用意されたメモリに格納され、前記メモリは、各命令流の命令アドレスに基づいて参照されることを特徴とする請求項に記載のプロセッサ。
  9. 前記命令流優先度は、命令流毎に固定値であり、当該固定値は、外部からの命令流優先度制御信号、命令流優先度の変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度変更フラグ、の何れかにより設定及び変更されることを特徴とする請求項乃至の何れか1項に記載のプロセッサ。
  10. 前記命令流優先度は、ラウンドロビン方式により決定され、最も高い優先度を与える命令流や優先度が変化する順序が、外部からの制御信号、命令流優先度の変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度変更フラグ、の何れかにより設定及び変更されることを特徴とする請求項乃至の何れか1項に記載のプロセッサ。
  11. 前サイクルにフェッチされた超長命令語の一部のフィールドである優先度ポインタにより、前記ラウンドロビン方式で、最も高い前記命令流優先度を持つ命令流を設定することを特徴とする請求項1に記載のプロセッサ。
  12. 各命令流の命令がフェッチされた又はされなかった回数に基づき、命令流優先度が変更されることを特徴とする請求項乃至1の何れか1項に記載のプロセッサ。
  13. 各命令流の命令がフェッチされた回数の少ない順に、より高い命令流優先度を与えることを特徴とする請求項乃至1の何れか1項に記載のプロセッサ。
  14. 前記命令流優先度は、各命令流の命令がフェッチされなかった回数が多い順に、より高い優先度を与えることを特徴とする請求項乃至1の何れか1項に記載のプロセッサ。
  15. 前記命令流優先度は、特定の命令流では固定値であり、それ以外の命令流については、ラウンドロビン方式、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流優先度フラグ、命令流の命令がフェッチされた回数の少ない順により高い優先度、命令流の命令がフェッチされなかった回数が多い順により高い優先度、の何れか又はその組合せにより決定されることを特徴とする請求項乃至1の何れか1項に記載のプロセッサ。
  16. 命令流毎に、各命令流が使用するメモリバンク数を指定できるプログラミング手段又はコンパイラを備えることを特徴とする請求項乃至1の何れか1項に記載のプロセッサ。
  17. 命令流毎に、各命令流が使用するメモリバンクを指定できるプログラミング手段又はコンパイラを備えることを特徴とする請求項乃至1の何れか1項に記載のプロセッサ。
  18. 前記命令アドレスは、各命令流の超長命令語がフェッチされた場合に、前記命令アドレスに、フェッチした超長命令語の長さに応じた値と、命令流毎の命令流オフセットとを加算した値が、次サイクルにおける当該命令流の命令アドレスとなることを特徴とする請求項乃至1の何れか1項に記載のプロセッサ。
  19. 前記命令流オフセットは、前記プログラミング手段又は前記コンパイラによって、設定されることを特徴とする請求項18に記載のプロセッサ。
  20. 前記命令流オフセットは、命令流毎に固定数であり、当該前記固定数は、外部からの命令流オフセット制御信号、命令流オフセットの変更命令、前サイクルにフェッチされた超長命令語の一部のフィールドである命令流オフセット変更フラグ、の何れかにより設定、変更されることを特徴とする請求項19に記載のプロセッサ。
  21. 前記命令流オフセット制御信号、命令流オフセットの変更命令、命令流オフセット変更フラグは、前記プログラミング手段又は前記コンパイラによって、設定されることを特徴とする請求項18乃至2の何れか1項に記載のプロセッサ。
  22. プロセッサを用いて複数個の命令から構成される超長命令語を実行する超長命令語実行方法であって、M個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるN(N<M)個の命令キャッシュから、最大M個の命令流の前記超長命令語を同時にフェッチする際に、
    各命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給することを特徴とする超長命令語実行方法。
  23. 複数個の命令から構成される超長命令語を実行するプロセッサが備えるアドレス供給装置としてコンピュータを機能させるための超長命令語実行プログラムであって、
    前記プロセッサがM個の命令流の前記超長命令語を格納する複数のメモリバンクを備えるN(N<M)個の命令キャッシュから、最大M個の命令流の前記超長命令語を同時にフェッチする際
    命令流に命令流優先度を設定し、各命令流が使用するメモリバンクの数を示すバンク数情報と、各命令流の命令アドレスとに基づき、各命令流が使用するメモリバンクを全メモリバンクの中から特定し、複数命令流が同一メモリバンクを使用する場合には、前記命令流優先度に基づき、優先度の高い命令流から順に、命令流が使用するメモリバンクを決定し、当該命令流の命令アドレスを当該メモリバンクに供給するアドレス供給装置として前記コンピュータを機能させることを特徴とする超長命令語実行プログラム。
JP2010500628A 2008-02-26 2009-02-03 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム Active JP5333433B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010500628A JP5333433B2 (ja) 2008-02-26 2009-02-03 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2008044274 2008-02-26
JP2008044274 2008-02-26
PCT/JP2009/051753 WO2009107462A1 (ja) 2008-02-26 2009-02-03 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム
JP2010500628A JP5333433B2 (ja) 2008-02-26 2009-02-03 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム

Publications (2)

Publication Number Publication Date
JPWO2009107462A1 JPWO2009107462A1 (ja) 2011-06-30
JP5333433B2 true JP5333433B2 (ja) 2013-11-06

Family

ID=41015865

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010500628A Active JP5333433B2 (ja) 2008-02-26 2009-02-03 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム

Country Status (3)

Country Link
US (1) US8745359B2 (ja)
JP (1) JP5333433B2 (ja)
WO (1) WO2009107462A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117348932B (zh) * 2023-12-04 2024-03-15 中科亿海微电子科技(苏州)有限公司 支持axi深度乱序传输的从机装置及工作方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04123230A (ja) * 1990-09-14 1992-04-23 Hitachi Ltd データ処理装置
JPH07121371A (ja) * 1993-10-25 1995-05-12 Nkk Corp 複数命令同時取込み機構
JPH10116191A (ja) * 1996-10-14 1998-05-06 Hitachi Ltd 圧縮命令用バッファを備えたプロセッサ

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5404469A (en) 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
WO1994027216A1 (en) * 1993-05-14 1994-11-24 Massachusetts Institute Of Technology Multiprocessor coupling system with integrated compile and run time scheduling for parallelism
JPH09101916A (ja) * 1995-10-06 1997-04-15 Fujitsu Ltd マルチプロセス処理装置
JPH09190348A (ja) 1996-01-09 1997-07-22 Matsushita Electric Ind Co Ltd 命令プリフェッチバッファ制御方法、命令プリフェッチバッファ制御装置、及び命令プリフェッチバッファフラッシュ方法
EP0881575A4 (en) 1996-02-16 2002-04-17 Hitachi Ltd MULTIPLE ACCESS MEMORY AND DATA PROCESSOR PROVIDING ACCESS TO THE MEMORY
JP3760035B2 (ja) 1996-08-27 2006-03-29 松下電器産業株式会社 複数の命令流を独立に処理し、命令流単位に処理性能を柔軟に制御するマルチスレッドプロセッサ
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
JP2000222208A (ja) 1999-01-29 2000-08-11 Mitsubishi Electric Corp 情報処理装置、命令割当て制御方法、命令割当て制御装置および命令割当て制御プログラムを記録したコンピュータで読取り可能な記録媒体
CN1168025C (zh) 1999-03-10 2004-09-22 国际商业机器公司 用于多线程处理机的指令高速缓存器
US7096343B1 (en) * 2000-03-30 2006-08-22 Agere Systems Inc. Method and apparatus for splitting packets in multithreaded VLIW processor
US6658551B1 (en) 2000-03-30 2003-12-02 Agere Systems Inc. Method and apparatus for identifying splittable packets in a multithreaded VLIW processor
US6549987B1 (en) * 2000-11-16 2003-04-15 Intel Corporation Cache structure for storing variable length data
JP3796124B2 (ja) * 2001-03-07 2006-07-12 株式会社ルネサステクノロジ スレッド間優先度可変プロセッサ
US6968546B2 (en) * 2001-03-30 2005-11-22 Intel Corporation Debugging support using dynamic re-compilation
US6898694B2 (en) * 2001-06-28 2005-05-24 Intel Corporation High instruction fetch bandwidth in multithread processor using temporary instruction cache to deliver portion of cache line in subsequent clock cycle
WO2004034252A2 (en) * 2002-10-11 2004-04-22 Koninklijke Philips Electronics N.V. Vliw processor with instruction address modification
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
JP2006343872A (ja) 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法
GB2430773A (en) 2005-10-03 2007-04-04 Advanced Risc Mach Ltd Alignment of variable length program instructions

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04123230A (ja) * 1990-09-14 1992-04-23 Hitachi Ltd データ処理装置
JPH07121371A (ja) * 1993-10-25 1995-05-12 Nkk Corp 複数命令同時取込み機構
JPH10116191A (ja) * 1996-10-14 1998-05-06 Hitachi Ltd 圧縮命令用バッファを備えたプロセッサ

Also Published As

Publication number Publication date
WO2009107462A1 (ja) 2009-09-03
JPWO2009107462A1 (ja) 2011-06-30
US20110010527A1 (en) 2011-01-13
US8745359B2 (en) 2014-06-03

Similar Documents

Publication Publication Date Title
JP4234925B2 (ja) データ処理装置、制御方法およびその記録媒体
KR101966712B1 (ko) 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
KR101638225B1 (ko) 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 명령어 시퀀스 코드 블록의 실행
KR101620676B1 (ko) 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
CN105701022B (zh) 组相联高速缓存
EP2372530A1 (en) Data processing method and device
JP4624098B2 (ja) プロセッサのアドレス発生ユニット
WO2011155097A1 (ja) 命令発行制御装置及び方法
TWI764966B (zh) 用於控制矢量記憶體存取之資料處理裝置及方法
CN110347431A (zh) 自适应空间访问预取器装置和方法
US20240028338A1 (en) Histogram operation
US11074080B2 (en) Apparatus and branch prediction circuitry having first and second branch prediction schemes, and method
US10402199B2 (en) Conditional execution specification of instructions using conditional extension slots in the same execute packet in a VLIW processor
US11042502B2 (en) Vector processing core shared by a plurality of scalar processing cores for scheduling and executing vector instructions
US20060095746A1 (en) Branch predictor, processor and branch prediction method
JP5333433B2 (ja) 低コストに複数命令流を実行するプロセッサ、その方法及びそのプログラム
WO2008043287A1 (en) Configurable single instruction multiple data unit
JP2020502669A (ja) ベクトル生成命令
JP6191457B2 (ja) 演算処理装置、演算処理方法
JP4560705B2 (ja) データ処理装置の制御方法
US20210042111A1 (en) Efficient encoding of high fanout communications
JP2005535045A (ja) Vliw命令を処理するためのプロセッサおよび方法
CN111124494A (zh) 一种cpu中加速无条件跳转的方法及电路
JP2003517679A (ja) 分離された条件及びアドレスを有する分岐命令
CN115398393A (zh) 在粗粒度可重构阵列处理器中处理多个图、上下文和程序

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120112

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130409

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130610

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130715

R150 Certificate of patent or registration of utility model

Ref document number: 5333433

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150