Un predicteur indirect et qq tweak ici la (equivalent a wmt->psc ou cd->c2d)Envoyé par Foudge
Celui la est interressant, as supposer qu'ils passent a 4 fetch/decode/allocate en parallele, quel est le pourcentage de quadruplet d'instructions x86 qui depasse les 16 octets et justifie un passage a 32 ? Sur du code SSE4 et 64 bits ca doit arriver de temps en temps mais sur du code 32 bits je ne vois pas ca se produire tres souvent.32B instruction fetch
- Benefits integer code too
- Reduced split-fetch instruction cases
Mouais, ca ne veut pas dire grand chose, mais bon vu qu'ils ont pas mal de marge d'amelioreation de ce cote c'est probablement un placeholder qui en cache plus.Core prefetchers
- DC Prefetcher fills directly to L1 Cache
- IC Prefetcher more flexible
* 2 outstanding requests to any address
Il etait temps , meme commentaire que les branchSideband Stack Optimizer
- Perform stack adjustments for PUSH/POP operations "on the side"
- Stack adjustments don't occupy functional unit bandwidth
- Breaks serial dependence chains for consecutive PUSH/POPs
<=> (CD=>C2D)Out-of-order load execution
- New technology allows load instructions to bypass:
* Other loads
* Other stores which are known not to alias with the load
- Significantly mitigates L2 cache latency
AMD only.TLB Optimisations
- Support for 1G pages
- 48bit physical address (256T
- Larger TLBs key for:
* Virtualized workloads
* Large-footprint databases and
* transaction processing
Les comm FP<=>int sont tres lentes sur K8 et etaient clairement une faiblesse versus l architecture core (en fait tellement lent que c'etait une faiblesse meme vs P4). En general ce n'est pas fondamental pour la perf, mais les applis qui en faisaient trop (povray dans mes souvenirs par ex) exposaient une faiblesse du K8.Additional fastpath instructions
– CALL and RET-Imm instructions
– Data movement between FP & INT
Enfin !Bit Manipulation extensions
- LZCNT/POPCNT
rattrapage standrad de version de SSE.SSE extensions
- EXTRQ/INSERTQ (SSE4A)
- MOVNTSD/MOVNTSS (SSE4A)
- MWAIT/MONITOR (SSE3)
Plus ou moins equivalent a CD=> C2D. Ils ont toujours leur scheduler FP separe (ce qui est une des sources de penalite quand on communique avec int). Ils ont 3 ports 128 bits qui peuvent faire du FP, 1 mul, 1 add, 1 mov/store alros que C2D a 1Mul, 1 add , 1 store, 1 mov+shuffle. Au final c'est kif-kif. A propos de l'alignement il semble que ce soient juste des fix mineurs ameliorant les conditions de fusion, mais ne permettant pas au load non alignes de s'executer de la meme maniere qu'un load aligne. De toutes facons en dehors de l'estimation de mouvement en video et des codes compiles avec les pieds ca n'a pas d'impact (et en video il y a le lddqu de SSE3 qui fix le pb).Comprehensive Upgrades for SSE
- Dual 128-bit SSE dataflow
- Up to 4 dual precision FP OPS/cycle
- Dual 128-bit loads per cycle
- New vector code, SSE128
- Can perform SSE MOVs in the FP "store" pipe
- Execute two generic SSE ops + SSE MOV each cycle (+ two 128-bit SSE loads)
- FP Scheduler can hold 36 Dedicated x 128-bit ops
- SSE Unaligned Load-Execute mode:
* Remove alignment requirements for SSE ld-op instructions
* Eliminate awkward pairs of separate load and compute instructions
* To improve instruction packing and decoding efficiency
Je crois que je vais partir en croisade contre la notion de "native" quad core design. Tu mets 4 core sur un meme package c'est un quad core point (meme si ils communiquent entre eux par pigeons voyageurs). Apres si tu design un cache partage ou a des liens point a point entre les core ou meme un bus on package c'est une archi differente mais ca ne le rend pas plus "native" qu'un autre. En gros ils essayent de dire que leur version du quad core est meilleure que celle du concurent intrinsequement alors que c'est loin d'etre evident. Il y a des applis qui preferent avoir des caches split, d'autres qui preferent le cache shared, des applis pour lesquelles un bus entre les n-cores sera plus efficace pour acceder a la memoire qu'un hop a travers un autre core, etc... Bref le native a autant de sens que le "hyper" de la version d'Intel du simultaneous multithreading.Quad-core
- Native quad-core design
- Redesigned and improved crossbar(northbridge)
- Improved power management
- New level of cache added, L3 VICTIM
Quand au L3 etant un victim cache, quand tu as deja les protocoles tout faits pour des victim cache plutot que des caches inclusifs, pourquoi s'ennuyer a faire autrement. Secondo quand ton cache est assez petit par rapport a la somme des niveux inferieurs cela peut presenter un interet.
Standard, la frequence et le nombre de core augmente relativement a celle du controleur, donc il faut avoir plus de buffering, ca ouvre plus d'opportunites de scheduling (plus de stream en //) et la DDR3 arrive.Redesigned northbridge for higher bandwidth
- Increase buffer sizes
- Optimize schedulers
- Ready to support future DRAM technologies
Normal sachant que l'on est dans des plateformes dont la perf est limitee par le power, donc reduire le power de tout ce qui n'est pas on est forcement une bonne idee. Je suppose que la granularite de ce type de management ne va pas cesser de se reduire a l'avenir, aussi bien chez Intel que AMD. A priori la dessus ils sont un peu en avance sur Intel.Power management - DICE(Dynamic Independent Core Engagement)
- Supports separate CPU core and memory controller power planes to allow CPU to lower its power state while the memory controller is running full bore
- Enhanced AMD's PowerNow allows individual core frequencies to lower while other cores may be running full bore
Elargi le datapath pour le FP128, je serais curieux de voir si ils ont descendu la latence de 1 cycle ou si il supporte juste une plus haute frequence et que la reduction de latence est donc en ps plutot qu'en cycles.Dedicated L1 cache
- 256bit 64kB instruction, 64kB data
- 2 x 128bit loads/cycle
- reduced latency
J'espere bien que la latence est reduite, parce que vu d'ou ils partent sur leur version 65nm du K8 c'est pas difficile (ils ont bcp ajoute en passant de 90 a 65).Dedicated L2 cache
- 128bit 512kB
- 128bit bus to northbridge
- reduced latency
La partie interressante est le "sharing aware" LRU, je me demande ce qui peut se cacher derriere ca ? A priori ils empechent peut etre 1 core de monopoliser toutes les way du LLC. Le victime cache, quand tu as 4x 512k de L2 et 2M de L3 un L3 inclusif est strictemen inutile donc ils n'avaient pas le choix.Shared L3 cache
- Victim-cache architecture maximizes efficiency of cache hierarchy
- Fills from L3 leave likely shared lines in the L3
- Sharing-aware replacement policy
- Exapndable
Plus de core sur un meme die => besoin de plus de bande passante memoire et surtout besoin de track plus de pages en // parce que le nombre de streams parallele augmente. Tout cela est parfaitement raisonable.Independent DRAM controllers
- Concurrency
- More DRAM banks reduces page conflicts
- Longer burst length improves command efficiency
- Dual channel unbuffered 1066 support(applies to socket AM2+ and s1207+ QFX only)
- Channel Interleaving
Optimized DRAM paging
- Increase page hits
- Decrease page conflicts
Write bursting
- Minimize Rd/Wr Turnaround
DRAM prefetcher
- Track positive and negative, unit and non-unit strides
- Dedicated buffer for prefetched data
- Aggressively fill idle DRAM cycles
HyperTransport 3
- 4 16bit cHT links
- up to 5200MT/s per link
- un-ganging mode: each 16bit HT link can be divided in two 8bit virutal Links
Je n'ai pas encore trop regarde les benchmarks de virtualization, mais c'est plutot une preparation pour un avenir semi lointain que quelque chose d'interressant aujourd'hui. Les performances actuelels des implementations hard de machine virtuelles etant plutot mauvaise d'apres ce que j'en ai entendu (un peu comme toute premiere implementation d'une technologie pas encore eprouvee).Virtualization improvements
- Nested Paging(NP):
* Guest and Host page tables both exist in memory.(The CPU walks both page tables)
* Nested walk can have up to 24 memory acesses! (Hardware caching accelerates the walk)
* "Wire-to-wire" translations are cached in TLBs
* NP eliminates Hypervisor cycles spent managing shadow pages(As much as 75% Hypervisor time)
- Reduced world-switch time by 25%:
* World-switch time: round-trup to Hypervisor and back