【課題を解決するための手段】
【0005】
本発明の第1の態様は、ベクトルに関する演算を実行するためのベクトル命令のストリームを処理するためのデータ処理装置を提供し、そのベクトルはそれぞれ複数のデータ要素を含み、そのデータ処理装置は、
処理されているベクトルを記憶するための複数のレジスタを備えるレジスタ・バンクと、
ベクトル命令のストリームを処理するためのパイプライン化プロセッサとを備え、
パイプライン化プロセッサは、ベクトル命令のストリームによって処理され、複数のレジスタに記憶されるベクトルのためのデータ依存性を検出し、且つレジスタ・データ・ハザードが生じないようにベクトル命令のための実行のタイミングに関する制約を決定するように構成される回路を備え、レジスタ・データ・ハザードは、命令ストリーム内で後に生じるアクセスが、その命令ストリームにおいて先に生じているアクセスが完了する前に開始するように、そのうちの少なくとも一方が書込みである、同じレジスタへの2つのアクセスが、命令ストリームの順序と異なる順序において生じる場合に生じ、
パイプライン化プロセッサは、データ依存性が識別されたベクトル内のデータ要素のうちの少なくとも幾つかに関して、そのデータ要素の少なくとも幾つかの場合にそれぞれ、そのベクトルに対して識別されたデータ依存性があるか否かを判断し、データ依存性がない場合には、そのデータ要素を処理する命令のための実行のタイミングに関する決定された制約を緩和するように構成されるデータ要素ハザード判断回路を備える。
【0006】
本発明は、分割されたベクトル演算が数多くのデータハザードの可能性をもたらすことを認識している。これらのデータハザードを正しく扱うには、著しいコストがかかる可能性がある。また、本発明は、通常の使用パターンにおいて、これらのデータハザードはベクトル間に存在する場合があるが、それらのハザードをベクトル内の個々のデータ要素間のハザードと見なせるなら、これらのハザードのうちの多くが消失する場合があることも認識している。これを認識することによって、ベクトルを考慮するときに生成され、且つ最適化が行われた場合に、それらの最適化が安全であり、ベクトル内のデータを破損しないのを確実にするタイミング制約のうちの幾つかを緩和できるようになる。したがって、本発明は、ベクトル内のデータ要素のうちの少なくとも幾つかの間のデータハザードを判断し、ベクトル間のデータ整合性を確保するために必要とされるが、実際のデータ要素整合性のためには必要とされないタイミング制約を緩和する。この関連で、タイミングにする決定された制約を緩和することは、特定の演算が順番に実行されることを必要とするのではなく、それらの演算が互いに重複することを許される場合があるか、又はそれらの演算が異なる順序で実行されることを許される場合があることを意味することができる。
【0007】
先に言及されたように、そのうちの少なくとも一方が書込みである、同じレジスタへの2つのアクセスが命令ストリームの順序と異なる順序において生じる場合に、データハザードが生じる。この関連で、後続のアクセスが先行するアクセスより遅く完了する場合であっても、先行するアクセスが完了する前に命令ストリーム内の後続のアクセスが開始する場合には、命令ストリームの順序と異なる順序においてアクセスが生じると見なされ、先行するアクセスが完了する前に開始することは、誤ったデータがアクセスされる場合があるという点でデータハザードにつながる恐れがある。
【0008】
幾つかの実施例では、データ処理装置は、所定のアクセス順序においてベクトル内のデータ要素にアクセスするように構成され、データ要素ハザード判断回路は、ベクトル命令に応答してベクトル内で少なくとも1つのデータ要素が更新されることになるとき、そのベクトル内の所定のアクセス順序における後続のデータ要素が、変更される場合があり、破棄することができる値を現在含むことを判断し、且つ後続のデータ要素のうちの少なくとも1つを更新する少なくとも1つの更なるベクトル命令に応答して、少なくとも1つの演算を、そのデータ要素を更新するその演算に対して任意の順序において実行できること実行回路に知らせるように構成される。
【0009】
本発明の実施例は、多くの場合に、第1のデータ要素が更新され、その後、後続のデータ要素が更新されるというように、レジスタを更新するために用いられるコードが一般的に特定の順序において更新を行うことを認識している。したがって、異なるベクトル演算が実行されている場合であっても、それらのベクトル演算は同じベクトルに関して実行されている場合があり、最初の演算が最初の3つのデータ要素を満たす場合があり、一方、次の演算が次の3つのデータ要素を満たす場合がある。これを念頭に置いて、データ処理装置は、データ要素の更新を検出し、その際、ベクトル内の後続のデータ要素内に記憶される値が後に更新され、したがって、後に不要になり、破棄することができることを認識するように構成される。これを認識することによって、これらの値を上書きすることになるベクトル演算を、先行するデータ要素の更新を待つことなく、直ちに実行できるようになる。したがって、特定のベクトルを更新する後続の演算を互いに同時に、又は命令ストリームの順序と異なる順序において互いに並列に実行することができる。
【0010】
幾つかの実施例では、ベクトルは複数の区画に分割され、各区画は少なくとも1つのデータ要素を含み、区画は複数のデータ要素を含み、複数のデータ要素は隣接するデータ要素であり、データ処理装置は、所定のアクセス順序においてベクトル内の区画にアクセスするように構成される。
【0011】
ベクトル演算は単一のデータ要素に関して演算することができるが、幾つかの実施例では、ベクトルは分割され、各演算は特定の区画に関して演算する。1つの区画は単一のデータ要素を含む場合があるか、又は複数の隣接するデータ要素を含む場合がある。
【0012】
幾つかの実施例では、データ要素ハザード判断回路は状態機械を含み、その状態機械は、命令によってベクトルがアクセスされるのに応じて、ベクトル内のデータ要素によって記憶される値の状態を指示し、その状態は、そのデータ要素が保存されることになるデータ値を記憶しているか、破棄することができるデータ値を記憶しているかを指示する。
【0013】
データ要素ハザードを判断する1つの方法は、ベクトルが命令によってアクセスされた時点でベクトルのデータ要素内に記憶される値の状態を指示する状態機械を用いることによる。この関連で、実際のアクセスが行われるのに先立って、どの状態が存在することになるかをこの時点で判断する。アクセスに先立って判断を行うことによって、収集された情報を用いて、他の演算のタイミングに影響を及ぼすことができ、最適化を実行できるようになる。その状態は、記憶されるデータ要素が保存される必要があるか、破棄することができるかを指示する。アクセス順序制約を用いて、ベクトル内のどの要素が依然としてアクセスされることになるか、それゆえ、破棄することができるかを判断することによってこれを行うことができ、一方、既に更新されている要素は保存される必要がある。
【0014】
幾つかの実施例では、ベクトル命令のストリームによって処理されるベクトルのためのデータ依存性を検出するように構成される回路は、データ依存性を判断するときに、データ依存性がないことを指示する、ベクトル命令に関連する注釈に応答する。
【0015】
本発明の実施例は、データ依存性が予想される場合がある命令に関して、実際にはデータ依存性でないことを指示する、データ依存性に関連付けられる注釈を有する命令を与える。そのような場合に、予想されるデータ依存性に関連する命令の実行のスケジューリングに関する制約を緩和することができる。この関連で、ベクトル内の個々の要素を更新する命令が存在し、そのベクトルを一見すると、同じベクトルを更新する後続の命令が順番に実行されるべきであるが、それらの命令が異なる個々の要素をそれぞれ更新する場合には、これは必要ではなく、命令内の注釈はこのことを指示することができ、それにより、タイミング制約を緩和することができる。
【0016】
幾つかの実施例では、状態機械は3つの状態機械、すなわち、全てのデータ要素が保存されることになるデータ値を含むことを指示する未知状態(unknown state)と、ベクトル命令によって現在アクセスされている現在の区画の後の全てのデータ要素を破棄することができ、他の全てのデータが保存されることになることを指示するアクセス現在状態(access current state)と、現在の区画内の全てのデータ要素と、全ての後続のデータ要素とを破棄することができ、全ての先行するデータ要素が保存されることになるデータ値を有することを指示する先行区画アクセス状態(accessed by previous partition state)とを含む。
【0017】
状態機械は複数の状態を含む場合があるが、幾つかの実施例では、必要とされる情報を与えるのに3つの状態で十分な場合がある。未知状態が存在する場合があり、安全性の理由から、未知状態では、全てのデータ要素が保存されるべきであるとマークされる。これは、許容できない場合に、これらの要素が上書きされるのを防ぐ。その後、命令がベクトル内の特定の要素又は区画にアクセスしているときに生じるアクセス現在状態が存在し、この時点で、現在の要素又は区画の後の全てのデータ要素を破棄することができ、他の全てのデータ要素が更新されたか、又は更新されつつあるので保存される必要があることがわかる。更なる状態が存在し、その状態は先行区画アクセス状態であり、その状態は、次の区画が更新されることになるが、まだ更新されていないことを指示する。したがって、この新たな現在の区画内の全てのデータ要素及び後続の全てのデータ要素を破棄することができ、一方、先行する全てのデータ要素は、保存されることになるデータ値を有する。これらの状態は、最適化を判断する際に有用である。未知状態では、最適化は不可能である。先行区画状態では、現在の区画に関するベクトル演算及び先行する区画に関するベクトル演算は任意の順序において実行することができ、それゆえ、先行する区画に関する演算を最初に実行する必要があった任意のタイミング制約は緩和することができる。
【0018】
幾つかの実施例では、データ処理装置は、その命令が区画のうちのいずれに関して演算することになるかを制御するための複数のベクトル制御レジスタと、複数のベクトル制御レジスタのうちのどのベクトル制御レジスタが現在の区画を指示しているかを指示する値を記憶するための記憶装置とを備え、記憶された値から、次の位置を指示するベクトル制御レジスタのうちの1つが、先行する区画を指示したベクトル制御レジスタと異なることを検出するのに応答して、その状態機械は未知状態に切り替えられる。
【0019】
どの区画がアクセスされることになるかを制御することができる2つ以上のベクトル制御レジスタが存在することがある。これは独自の問題を提起し、そのような場合に、現在の区画を指示するベクトル制御レジスタを示す値を記憶するデータ記憶装置が必要とされる。このようにして、異なるベクトル制御レジスタの制御下でレジスタの次の区画がアクセスされる場合には、記憶されたデータ値からこれを判断することができ、状態機械内の値は新たなベクトル制御レジスタにとってもはや適切ではなく、それゆえ、状態機械は未知に設定されるべきである。
【0020】
幾つかの実施例では、データ処理装置は、ベクトル命令内のレジスタ識別子によって識別されるレジスタをレジスタ・バンク内の複数のレジスタのうちの1つとマッピングするためのレジスタ・リネーミング回路を更に備え、データ要素ハザード判定回路が、ベクトル命令に応答してベクトル内の少なくとも1つのデータ要素が更新されることになること、且つそのベクトル内の所定のアクセス順序における後続のデータ要素が、変更される場合があり、破棄することができる値を現在含むことを判断するのに応答して、パイプライン化プロセッサは、ベクトル命令内のレジスタ識別子によって識別されたレジスタに現在マッピングされているレジスタを更新するように構成される。
【0021】
データ処理装置がレジスタ・リネーミング回路を有する場合に、ベクトル演算を用いてレジスタを更新するとき、個々の要素が異なる時点で更新されるのに応じて、このベクトル演算のために新たなレジスタがリネームされる必要があり、以前にリネームされたレジスタからのデータは、演算が実行されるときに、このレジスタの中に併合される必要がある。これは非常にコストがかかる演算である。本発明の実施例は、特定のデータ要素を破棄できるという判断は、以前にリマッピングされたレジスタ内に記憶される値が実際には必要でない場合があり、それゆえ、それらの値を併合するのに意味はなく、それらの値を新たな値で単に上書きできることを意味することを認識している。この結果、著しい節約になる。
【0022】
したがって、ベクトル演算に応答して後続のデータ要素を更新するときに、リネーミング回路によって現在マッピングされている物理レジスタは単に書き込むことができ、データを更にリネームしたり、コピーしたりする必要はないことがある。実際には、これらの演算のためのレジスタ・リネーミングを抑止し、大量の時間及び電力を節約する。
【0023】
幾つかの実施例では、パイプライン化プロセッサは、アクセス順序におけるベクトルの第1のデータ要素が更新されることになる時点を判断し、そのベクトルを現在使用されていない任意のレジスタに書き込むことができることを指示する信号を送信するための付加回路を備える。
【0024】
データ処理装置に、ベクトルの第1のデータ要素が更新されることになる時点を判断する付加回路を設けることになれば、レジスタ・リネーミングが存在する場合、この第1の値を新たなレジスタに書き込み、この新たなレジスタをリネームことができる。その後、その中の値がアクセスされたとき、以前にマッピングされたレジスタは破棄することができる。以前にマッピングされたレジスタ内に記憶される値が新たなプロセスによって上書きされず、これらの値が通常どおりに終了したときに、レジスタは割当てを解除されることになるので、これはタイミング制約を改善することができる。したがって、新たな書込みは、他の値が使用されるのを待つ必要はない。実際には、本発明の実施例は、第1のデータ要素の更新のためにリネーミングをトリガし、後続の更新の場合にリネーミングを抑止する。
【0025】
幾つかの実施例では、その付加回路は、未知状態を指示する第1の状態と、アクセスされることになるベクトルの第1の要素が更新されることを指示する少なくとも1つの更なる状態とを有する状態機械を含む。
【0026】
第1の要素が更新されている時点を判断するために、少なくとも2つの状態を有する更なる状態機械を用いることができ、一方の状態は第1の未知状態であり、他方の状態は、ベクトルの第1の要素がアクセスされることを指示する状態である。幾つかの実施例では、実施態様に応じて、更なる状態を有する場合もある。
【0027】
幾つかの実施例では、データ処理装置は、ベクトル内のデータ要素ごとに、そのデータ要素が現在、保存されるべきデータ値を記憶しているか、破棄することができるデータ値を記憶しているかを指示する指示を与える指示子を記憶するためのデータ記憶装置を更に備え、
データ要素ハザード判断回路が、この指示子記憶装置を更新するように構成される。
【0028】
場合によっては、どのデータ要素が保存されることになり、どのデータ要素を破棄することができるかを記録しておくことが有利な場合がある。この記録は、レジスタ・リネーミングが存在する場合、レジスタ・リネーミング回路内に保持することができるか、又はレジスタ・リネーミングが存在しない場合、ベクトル・レジスタに関連して保持することができる。その指示は、データ要素ごとに、有効なデータが記憶されるか、有効でないデータが記憶されるかを、すなわち、データを保存することができるか、破棄することができるかを指示する指示子の形をとることができるか、又は3つまでの要素が保存されるべきであり、3つを超える要素を破棄することができるなどの別の形において行うことができる。
【0029】
幾つかの実施例では、そのデータ処理装置は、ベクトルをメモリに記憶する命令に応答して、破棄することができるデータ値を記憶するとマークされた区画内のデータ要素ごとに、そのデータ要素内に現在記憶されている値の代わりに所定の値を記憶するように構成される。
【0030】
そのデータが妥当であるか否かの指示を記憶することは、ベクトルが読み出されるときなどの場合に有用な場合がある。この場合、レジスタから破棄することができる値を読み出すのではなく、1又は0のような所定の値を単に読み出すことができる。これは、必要とされないこれらのデータ値がレジスタから読み出されるのを回避し、これは、セキュリティが問題であり、データ値が機密情報を含む場合に、現在必要とされていないデータ値が出力されるべきでない場合に重要なことがある。
【0031】
幾つかの実施例では、パイプライン化プロセッサは、ベクトル命令を発行し、実行するための発行回路及び実行回路を備え、発行回路は、データ要素ハザード検出回路を備える。
【0032】
パイプライン化プロセッサは、発行回路及び実行回路を備えることができる。発行回路は、プロセッサのフロントエンドにあり、命令の取込み、復号化、及びデータ冗長検査を実行する。パイプライン内でこれらのデータ冗長検査を早期に実行することは、潜在的な最適化がその手順において早期に判断され、これにより、更なる最適化を実行できることを意味する。
【0033】
幾つかの実施例では、データ処理装置は同期回路を備え、同期回路は、実行回路によって現在処理されているデータ要素の状態を定期的に判断し、その状態情報を発行回路に送信するように構成される。
【0034】
幾つかの実施例では、データ処理装置は同期回路を備えることができ、同期回路を用いて、現在処理されているデータ要素の状態を定期的に判断し、この情報を発行回路に返送することができる。幾つかの理由から、状態機械はデータの状態を正確に追跡せず、その情報を容易に回復できないことがある。長い符号長にわたってこれが生じる場合には、潜在的な最適化が不可能になる。したがって、定期的に起動するか、又は同期エラーを引き起こす可能性がある特定のイベントに応答して起動するか、又は最近、最適化が実行されていないことを検出するのに応答して起動する同期回路を有することが有利な場合がある。この同期回路は、実行回路からの要素の状態を検出し、これを発行回路にフィードバックし、発行回路は状態機械をリセットし、最適化を継続できるようにする。
【0035】
幾つかの実施例では、そのベクトルは、ベクトル演算によって演算されることになるデータ要素を識別するように構成されるベクトル・マスクを含み、データ要素ハザード判断回路は、ベクトル・マスクから、データ要素のうちの少なくとも幾つかのデータ要素の場合にそれぞれ、そのベクトルに関して識別されたデータ依存性があるか否か判断し、データ依存性がない場合には、そのデータ要素を処理する命令のための実行のタイミングに関して決定された制約を緩和するように構成される。
【0036】
ベクトル演算によって演算されることになるデータ要素及び演算されないデータ要素を識別するベクトル・マスクが存在する場合がある。そのような場合、データ要素ハザード判断回路は、これらのマスクから、演算されているベクトル内のデータ要素の一部のみに起因して、そのベクトルに関して識別されたデータ依存性が生じないことを判断できる場合がある。したがって、これらのマスクを解析することによって、タイミングのうちの幾つかを緩和できる場合がある。
【0037】
幾つかの実施例では、そのベクトルは、ベクトル演算によって演算されることになるベクトル区画内のデータ要素を識別するように構成されるベクトル・マスクを含み、データ処理装置は、1つのベクトル・マスクの制御下で1つのベクトル区画に関する1つの演算を実行し、そのベクトル・マスクの反転の制御下でそのベクトル区画に関する更なる演算を実行するように構成され、その状態機械は、そのベクトル命令によって現在アクセスされている現在の区画の後の全てのデータ要素と、そのデータ区画内のマスクされたデータ要素とを破棄することができ、他の全てのデータ要素が保存されることを指示する、マスクアクセス現在状態(masked access current state)を含む少なくとも1つの更なる状態を含む。
【0038】
データ依存性を緩和することができる1つの実例は、分割されたベクトル内でベクトル・マスクを用いて、その区画のサブセットを選択し、そのマスクの反転を用いて他のサブセットを選択する場合である。そのような場合に、分割されたベクトルのために3つの状態が用いられる状態機械に類似であるが、幾つかの更なる状態を有する状態機械を用いることができ、これらの更なる状態は、マスクによって制御される区画のどの部分を破棄することができ、どの部分が保存される必要があるかを指示する。このようにして、どのデータを上書きできるかを知ることによって、動作の順序付けを決定することができる。
【0039】
本発明の第2の態様は、データ処理装置内でベクトルに関する演算を実行するためのベクトル命令のストリームを処理する方法を提供し、ベクトルはそれぞれ複数のデータ要素を含み、データ処理装置内のレジスタに記憶され、その方法は、
ベクトル命令のストリームによって処理され、複数のレジスタ内に記憶されるベクトルのためのデータ依存性を検出することであって、レジスタ・データ・ハザードが生じないように、ベクトル命令のための実行のタイミングに関する制約を決定し、レジスタ・データ・ハザードは、命令ストリーム内で後に生じるアクセスが、その命令ストリーム内で先に生じているアクセスが完了する前に開始するように、そのうちの少なくとも一方が書込みである、同じレジスタへの2つのアクセスが、命令ストリームの順序と異なる順序において生じる場合に生じる、検出することと、
データ依存性が識別されたベクトル内のデータ要素の少なくとも幾つかのデータ要素に関して、データ要素のうちの少なくとも幾つかのデータ要素の場合にそれぞれ、そのベクトルに対して識別されたデータ依存性があるか否かを判断することと、データ依存性がない場合には、
データ要素を処理する命令のための実行のタイミングに関して決定された制約を緩和することとを含む。
【0040】
本発明の第3の態様は、コンピュータ・プログラムを変換する方法を提供し、そのコンピュータ・プログラムは、ベクトルに関する演算を実行するための複数のベクトル命令を含み、ベクトルはそれぞれ複数のデータ要素を含み、コンパイルする方法は、
複数のベクトル命令を解析することと、
複数のベクトル命令によって処理されるベクトルのためのデータ依存性を検出することであって、レジスタ・データ・ハザードが生じないように、ベクトル命令のための実行のタイミングに関する制約を決定し、レジスタ・データ・ハザードは、命令ストリーム内で後に生じるアクセスが、その命令ストリームにおいて先に生じているアクセスが完了する前に開始するように、そのうちの少なくとも一方が書込みである、同じレジスタへの2つのアクセスが、命令ストリームの順序と異なる順序において生じる場合に生じる、検出することと、
データ依存性が識別されたベクトル内のデータ要素のうちの少なくとも幾つかのデータ要素に関して、データ要素のうちの少なくとも幾つかのデータ要素の場合にそれぞれ、そのベクトルに関して識別されたデータ依存性があるか否かを判断することと、データ依存性がない場合には、
データ要素を処理する命令のための実行のタイミングに関して決定された制約を緩和することと、
そのコンピュータ・プログラムをデータ処理システム上で実行するのに適したコードに変換することとを含む。
【0041】
本発明の第4の態様は、コンピュータ上で実行されるときに、本発明の第3の態様による方法のステップを実行するようにコンピュータを制御するコンピュータ・プログラムを提供する。
【0042】
本発明は、一例にすぎないが、添付の図面において例示される実施例を参照しながら更に説明されることになる。