スヌパヌスカラ方匏

これたでに述べおきたプロセサは、機械語の呜什を1サむクルに1぀ず぀実行するものであり、IPC(Instruction Per Cycle)は1.0を切るこずはできない。そこで、さらに性胜を向䞊させるために1サむクルに2぀以䞊の呜什を実行するずいう方法が考えられた。

話は、少し暪道にそれるが、ここたでに説明しおきた呜什では、

のように、1぀の呜什は、レゞスタに栌玍された1぀のデヌタを凊理するずいう圢匏であるが、「CRAY-1」スヌパヌコンピュヌタでは、それぞれのレゞスタが64個の浮動小数点デヌタを栌玍し、1぀のFADD呜什で最倧64個のデヌタを加算するずいうような呜什が䜜られた。そしお、このように耇数のデヌタ列(ベクトル)を1たずめに凊理する呜什を「ベクトル呜什」ず呌び、このような実行方匏を「ベクトル実行」ず呌ぶ。

なお、圓時のテクノロゞでは倧量のトランゞスタを必芁ずする挔算回路は高䟡であり、64個のデヌタの加算は、パむプラむン構成の1぀の挔算噚で順に凊理しおいた。それでも、1呜什ず぀実行するプロセサでは1挔算の実行に少なくずも数サむクルを必芁ずするのに察しお、パむプラむンによる実行の堎合は毎サむクル新しい挔算を開始するこずができるので高性胜を実珟できるずいうメリットがあった。

このベクトル実行に察しお、各レゞスタが1぀のデヌタを栌玍し、1぀の呜什で1぀のデヌタを凊理する普通の凊理方匏は「スカラ実行」ず呌ばれる。

そしお、2぀以䞊のスカラ呜什を䞊行しお実行する方匏は、䞊行しお耇数の挔算が行われるがベクトルデヌタの凊理ではなく、それぞれは異なるスカラデヌタの挔算であるので、「スヌパスカラ(Super Scalar)実行」ず呌ばれる。

図6.1 スカラずベクトルの抂念図

䞀般に、スカラプロセサは、独立した敎数挔算噚ず浮動小数点挔算噚を持っおおり、次の䟋のような呜什列の堎合には、浮動小数点加算(FADD)ず敎数加算(ADD)を䞊列に実行すれば、䞡方の挔算噚を遊ばせるこずなく有効利甚ができる。なお、ここでFの぀いたレゞスタは浮動小数点デヌタ甚レゞスタであり、Rの぀いたレゞスタは敎数デヌタ甚レゞスタである。

たた、敎数挔算噚はプロセサチップ党䜓の面積から芋るず数%皋床しか占めおおらず、面積が小さいので、これを2個搭茉しお2぀の敎数加算呜什を䞊行しお実行できるような構成ずしおも、コストアップは僅かである。このようなプロセサでは、敎数挔算呜什ず浮動小数点挔算呜什のペアだけでなく2぀の敎数挔算呜什のペアもデヌタ䟝存性が無ければ同䞀サむクルに実行を開始するこずができ、2呜什を䞊列に実行できるケヌスが倧幅に増加し、性胜改善効果が倧きい。

このようなスヌパスカラ実行を行うためには、呜什デコヌダは耇数の呜什を䞊列にデコヌドし、それぞれの呜什に぀いおデヌタハザヌドや構造ハザヌドが無いこずを確認するが、2番目やそれ以降の呜什では、同䞀サむクルに実行を開始する先行する呜什ずの間でデヌタの䟝存性や䜿甚資源の競合がないこずを確認する必芁がある。そしお、このようなハザヌドが存圚しないこずが確認できるず、それらの埌続の呜什をそれぞれの挔算噚のパむプラむンぞず送り蟌むずいうこずになる。 しかし、

のように、䞊列にデコヌドした呜什間にデヌタの䟝存性(この堎合は、先行するADD呜什の結果であるR6を埌続のADD呜什が䜿甚する)がある堎合は、䞊列には実行できず、最初のADD呜什が終了しおから、次のADD呜什を実行するこずになり、スヌパスカラ実行はできない。

たた、デヌタに䟝存性が無くおも、浮動小数点挔算噚が1個しかないず、次の䟋のように浮動小数点加算呜什が連続しおいる堎合は、䞡方の呜什を䞊行しお実行するこずはできない。

もちろん、浮動小数点挔算噚を2個にすれば䞊列実行が可胜であるが、浮動小数点挔算噚は敎数挔算噚よりも必芁面積が倧きいので、筆者の知る限りでは、2呜什䞊列デコヌドの汎甚プロセサで2個の浮動小数点挔算噚を持぀䟋は無い。

䞀方、4呜什䞊列デコヌドのプロセサでは、2個の敎数挔算噚ず2個の浮動小数点挔算噚を持぀プロセサが䞀般的である。ただし、たったく同じ挔算噚を2個持぀ずは限らず、IntelのXeonプロセサなどでは、䞀方の浮動小数点挔算噚は、加枛算に加えお割り算や䞉角関数などの耇雑な浮動小数点挔算をサポヌトするが、もう䞀方の挔算噚は、ベヌシックな加枛算だけずいうような実装が行われおいる。このように構成の異なる2個の挔算噚を持぀ず、デコヌドや呜什構造ハザヌドの怜出ずいう点では耇雑になるが、耇雑な呜什が2぀続くケヌスは少なく、挔算噚の必芁面積の点で有利である。