その他色々(Photo14)
コアそのものに関するその他の改善項目は他にもいくつかある。簡単に説明すると、
・Data-dependent divide latency : 整数の除算器(Divider)の構造変更。これは文章で説明するより表で見ていただいたほうが早いだろう。Athlon 64 X2までの整数除算器のLatencyは表5に示す通りで、被除数や除数の値に関わらず、そのデータ幅でレイテンシが一意に決まっていた。これがPhenomでは表6の様にデータ幅だけでなくデータの値そのもの(厳密に言えば、被除数に含まれるSignificant bitの数)でもレイテンシが変わってくるようになった。
表5 |
表6 |
恐らくは除算器の構造を変えたのであろうとは想像されるが、結果としてややレイテンシが増える事になっているあたり、この変更の目的はいまいちはっきりしない。以前のYorkfieldのテストと同じくUtil31を掛けた結果はグラフ50の通りで、ちょっとした計算程度だとその差は判らない程度でしかない。このあたりはまた機会があれば、AMDの関係者に意図を確認したいところだ。
・More Fastpath instructions : Photo15はPhenomのコアの概略図であるが、Fetch後のDecodeにDirectPathとVectorPathの2つがある事が判る。DirectPathはハードワイヤードでデコード可能な簡単なx86命令を処理し、Vector Pathはマイクロコードを使ってデコードする複雑なx86命令を処理する。どちらもスループットは3命令/Cycleであるが、当然ながらレイテンシはVectorPathの方が長い。そこで、Phenomでは従来VectorPathを使っていたいくつかの命令をDirectPathに移した。具体的にはCALLとかRET命令で、これにより命令が処理されるまでの時間が減り、高速に実行できるようになったという事である。またFPUとALU/AGUのデータ交換を高速化したことで、SSE系命令と整数演算命令を交互に使うようなケースの処理性能向上を図った。
Photo15:こちらも"Software Optimization Guide for AMD Family 10h Processors"のA.4からの抜粋。 |
・Bit Manipulation extensions : ビット操作演算であるが、ちょっと特殊な用途向けである。POPCNTとは、値を2進数に展開し、1が立っている数を返してくれるというものだ。例えば255(0x0FF=011111111)なら8、256(0x100=100000000)なら1という具合だ。LZCNTは、やはり値を2進数に展開し、先頭からいくつ0が続いたか、という数を返してくれる。255ならこのケースだと1だし、256だと0になるわけだ。
これらの命令そのものは「あると便利」という類のもので、特に画像演算などでBitmaskを比較するのに使いやすいが、このPOPCNTという命令をIntelはSSE4として提供しているのがちょっと面白い。Opcodeはどちらも同じF3 0F B8で、返す結果も同じであり、フラグの設定も同じとなっており、このためBinary Compatibleではあるが、こうした命令はSSE系命令ではなく、x86命令の拡張と位置づけているのが特徴である。また、LZCNTにあたる命令をIntelは提供予定がなく、このあたりはプログラマが取り扱いに困りそうだ。
・SSE extentions : EXTRQ/INSERTQはSSEレジスタに対する、bitfield操作を伴うコピーであり、MOVNTSS/MOVNTSDはSSEレジスタからメモリへのデータの移動だが、既にあるMOVNTPD/MOVNTPSという命令の拡張となる(違いはデータの扱い方のみ)。