読者です 読者をやめる 読者になる 読者になる

Skylakeの改良点を予想する

SoC版が2015後半、ノート・デスクトップ向けが2016の登場になるのではないかと思われるIntelの新マイクロアーキテクチャ Skylakeの変更点を予想する。

最近のIntelは、同じプログラムの実行速度を従来より落とさない・電力あたりパフォーマンスを上げる というのが傾向なのでそれに沿った方針で予想する。

すでに分かっていることとして、gatherの高速化・AVX512の実装(Xeonから) とかあるけどそれ以外で。

 

ソースレジスタ3本まで1uOPに変換できるようになる

既にHaswellでFMAはソース3本で1uOPに出来ているので、スケジューラの拡張は終わっている。これを他の命令にも適用する。

 

MacroFusionの強化

デコーダ段での命令数の削減は後ろのすべてのステージの帯域・エントリを節約できるので、最初に考えるべき。特にSNBでuOP$が導入されているので、デコーダがちょっと複雑になっても多くの命令がuOP$から供給されれば電力ペナルティは少ない。3ソースレジスタが可能になると選択肢が広がる。

MacroFusionはアーキテクチャ上の複数命令を1命令とみなす。デコーダで実装する以上、前後の命令列と関係なくパターンマッチで実現できないといけない。1命令に変換するのでデスティネーションのレジスタは1本、x86なのでメモリオペランドは1つ、スケジューラの制限でソースレジスタは3本まで、とかの制限があるはず。既に分岐命令をいろいろFusionしてくれるようになっているが他に何がありえるか考えてみる。

cmp + cmov -> cmpmov

今すぐできそう。

mov r0, x + alu r0, y -> alu r0, x, y

x86はAVX以外2オペランドの命令セットなのでソースを上書きしたくないときはレジスタ間movをする必要がある。IVB以降、レジスタリネーミング段でmovを消すようになったが、それでもuOP$の帯域・エントリを消費するのでもったいない。

broadcast r0, ptr + alu r0, r0, x -> alu r0, x, ptr(broadcast)

メモリオペランドは大抵MicroFusionで1uOPに変換できる。broadcastはport2,3のみで実行できるのでLNIやAVX512みたいに命令セットが許せば1uOPにFusionできるはず。これをMacroFusionで実現する。

and r0, x, y + or r0, r0, z -> ternery r0, x, y, z, imm (例)

AVX512では3項論理命令が追加される。XeonでないSkylakeはAVX512をサポートしないが、機能的に実装されることはありえる。これを使えば論理命令2個を融合できる場合がある。

push x + push y -> push2 x, y

夢のSimdification。rspがデスティネーションで被っているが専用スタックエンジンがあるので問題ないはず。ストア時に例外が発生すると巻き戻しがめんどくさい。

 

とりあえずフロントエンド周りについて思いついたものを書いた。他にもuOP<->L1の切り替えペナルティの低減とか細かいところはあると思う。

L1I$からのフェッチ帯域の増量はないと思う。現状フェッチ帯域ボトルネックになるのはAVXのくそ長い命令が高密度で並んでいるコードで、そういうのは元々人間の手間がかかっているのでuOP$に入るようにがんばれという方針でそれほど問題ない。