Nai schrieb:
Kann ich bei einer solchen Architektur nicht auch Peak-Performance mit 128 Bit Befehlen erreichen?
Theoretisch ja, und zwei Vorteile hast du auch genannt. Weiterhin könnte reiner 128 Bit-Code schlicht vom IPC-Limit des Frontends limitiert werden, v.a. wenn nebenher noch ein Thread mit Integer-Befehlen läuft.
Ein Nachteil, den Zen höchstwahrscheinlich von der Bulldozer-Reihe erben wird, ist, dass die beiden µOps einer 256 Bit-Operation immer zur selben Zeit ausgeführt werden müssen und dadurch das Scheduling suboptimal ist, wenn
a) 128- und 256-Bit-Code ausgeführt wird,
b) Befehle verwendet werden, für die nur eine 128 Bit-Pipeline zur Verfügung steht.
Problem b) lässt sich bei den Bulldozer-Derivaten durchaus real beobachten, wenn man entsprechenden Code hat:
Code:
// 256 Bit
FMA0 FMA1 // Pipe
vperm
vperm
vadd vadd
// 128 Bit
FMA0 FMA1
vperm vadd
vperm vadd
Ob das bei Zen praktisch zum Problem wird, hängt dann eben davon ab, ob relativ häufig verwendete Befehle - Permute-, Shuffle- und Packing-Befehle zähle ich da mal zu - eben zweimal gleichzeitig abgearbeitet werden können oder nicht.
Und davon würde ich dann auch abhängig machen, auf der Architektur AVX-128 oder AVX-256 zu verwenden. Bei allen BD-Derivaten nehme ich in meinem Code nen AVX-128-Codepfad mit FMA - bis einschließlich Piledriver gibt es bei 256 Bit noch andere Performance-Probleme, und ab Kaveri ist der theoretische Befehlsdurchsatz
pro Thread höher als das, was die FPU maximal schafft.