From WikiChip
Editing intel/microarchitectures/haswell (client)
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
This page supports semantic in-text annotations (e.g. "[[Is specified as::World Heritage Site]]") to build structured and queryable content provided by Semantic MediaWiki. For a comprehensive description on how to use annotations or the #ask parser function, please have a look at the getting started, in-text annotation, or inline queries help pages.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
{{intel title|Haswell|arch}} | {{intel title|Haswell|arch}} | ||
{{microarchitecture | {{microarchitecture | ||
− | |atype=CPU | + | | atype = CPU |
− | |name=Haswell | + | | name = Haswell |
− | |designer=Intel | + | | designer = Intel |
− | |manufacturer=Intel | + | | manufacturer = Intel |
− | |introduction=June 4, 2013 | + | | introduction = June 4, 2013 |
− | |phase-out=2015 | + | | phase-out = 2015 |
− | |process=22 nm | + | | process = 22 nm |
− | |cores=2 | + | | cores = 2 |
− | |cores 2=4 | + | | cores 2 = 4 |
− | |cores 3=6 | + | | cores 3 = 6 |
− | |cores 4=8 | + | | cores 4 = 8 |
− | |cores 5= | + | | cores 5 = 16 |
− | |cores 6= | + | | cores 6 = |
− | + | ||
− | | | + | | pipeline = Yes |
− | | | + | | type = Superscalar |
− | | | + | | OoOE = Yes |
− | |speculative=Yes | + | | speculative = Yes |
− | |renaming=Yes | + | | renaming = Yes |
− | |stages min=14 | + | | isa = IA-32 |
− | |stages max=19 | + | | isa 2 = x86-64 |
− | | | + | | stages min = 14 |
− | |extension=MOVBE | + | | stages max = 19 |
− | |extension 2=MMX | + | | issues = 4 |
− | |extension 3=SSE | + | |
− | |extension 4=SSE2 | + | | inst = Yes |
− | |extension 5=SSE3 | + | | feature = |
− | |extension 6=SSSE3 | + | | extension = MOVBE |
− | |extension 7=SSE4.1 | + | | extension 2 = MMX |
− | |extension 8=SSE4.2 | + | | extension 3 = SSE |
− | |extension 9=POPCNT | + | | extension 4 = SSE2 |
− | |extension 10=AVX | + | | extension 5 = SSE3 |
− | |extension 11=AVX2 | + | | extension 6 = SSSE3 |
− | |extension 12=AES | + | | extension 7 = SSE4.1 |
− | |extension 13=PCLMUL | + | | extension 8 = SSE4.2 |
− | |extension 14=FSGSBASE | + | | extension 9 = POPCNT |
− | |extension 15=RDRND | + | | extension 10 = AVX |
− | |extension 16=FMA3 | + | | extension 11 = AVX2 |
− | |extension 17=BMI | + | | extension 12 = AES |
− | |extension 18=BMI2 | + | | extension 13 = PCLMUL |
− | |extension 19=F16C | + | | extension 14 = FSGSBASE |
− | |extension 20=VT-x | + | | extension 15 = RDRND |
− | |extension 21=VT-d | + | | extension 16 = FMA3 |
− | |extension 22=TXT | + | | extension 17 = BMI |
− | |extension 23=TSX | + | | extension 18 = BMI2 |
− | |l1i=32 KB | + | | extension 19 = F16C |
− | |l1i per=core | + | | extension 20 = VT-x |
− | |l1i desc=8-way set associative | + | | extension 21 = VT-d |
− | |l1d=32 KB | + | | extension 22 = TXT |
− | |l1d per=core | + | | extension 23 = TSX |
− | |l1d desc=8-way set associative | + | |
− | |l2=256 KB | + | | cache = Yes |
− | |l2 per=core | + | | l1i = 32 KB |
− | |l2 desc=8-way set associative | + | | l1i per = core |
− | |l3= | + | | l1i desc = 8-way set associative |
− | |l3 per=core | + | | l1d = 32 KB |
− | |l3 desc= | + | | l1d per = core |
− | |l4=128 MB | + | | l1d desc = 8-way set associative |
− | |l4 per=package | + | | l2 = 256 KB |
− | |l4 desc=on Iris Pro GPUs only | + | | l2 per = core |
− | |core name=Haswell H | + | | l2 desc = 8-way set associative |
− | |core name 2=Haswell E | + | | l3 = 1.5 MB |
− | |core name 3=Haswell EP | + | | l3 per = core |
− | |core name 4=Haswell EX | + | | l3 desc = |
− | |core name 5=Haswell DT | + | | l4 = 128 MB |
− | |core name 6=Haswell MB | + | | l4 per = package |
− | |core name 7=Haswell ULT | + | | l4 desc = on Iris Pro GPUs only |
− | |core name 8=Haswell ULX | + | |
− | |predecessor=Ivy Bridge | + | | core names = Yes |
− | |predecessor link=intel/microarchitectures/ivy bridge | + | | core name = Haswell H |
− | |successor=Broadwell | + | | core name 2 = Haswell E |
− | |successor link=intel/microarchitectures/broadwell | + | | core name 3 = Haswell EP |
− | + | | core name 4 = Haswell EX | |
− | + | | core name 5 = Haswell DT | |
− | + | | core name 6 = Haswell MB | |
− | + | | core name 7 = Haswell ULT | |
− | + | | core name 8 = Haswell ULX | |
− | + | ||
− | + | | succession = Yes | |
+ | | predecessor = Ivy Bridge | ||
+ | | predecessor link = intel/microarchitectures/ivy bridge | ||
+ | | successor = Broadwell | ||
+ | | successor link = intel/microarchitectures/broadwell | ||
}} | }} | ||
'''Haswell''' ('''HSW''') is [[Intel]]'s [[microarchitecture]] based on the [[22 nm process]] for mobile, desktops, and servers. Haswell, which was introduced in 2013, became the successor to {{\\|Ivy Bridge}}. Haswell is named after [[wikipedia:Haswell, Colorado|Haswell, Colorado]] (Originally Molalla after [[wikipedia:Molalla, Oregon|Molalla, Oregon]], it was later renamed due to the difficult pronunciation). In 2014 Intel introduced Haswell's successor, {{\\|Broadwell}}. | '''Haswell''' ('''HSW''') is [[Intel]]'s [[microarchitecture]] based on the [[22 nm process]] for mobile, desktops, and servers. Haswell, which was introduced in 2013, became the successor to {{\\|Ivy Bridge}}. Haswell is named after [[wikipedia:Haswell, Colorado|Haswell, Colorado]] (Originally Molalla after [[wikipedia:Molalla, Oregon|Molalla, Oregon]], it was later renamed due to the difficult pronunciation). In 2014 Intel introduced Haswell's successor, {{\\|Broadwell}}. | ||
Line 111: | Line 115: | ||
== Architecture == | == Architecture == | ||
− | While sharing a lot of similarities with its predecessor {{\\|Ivy Bridge}}, Haswell introduces many new enhancements and features. Haswell is the first desktop-line of x86s by Intel tailored for a [[system on chip]] architecture. This is a significant move that will continue to be developed over the next couple of microarchitectures. Overall Haswell shares the same basic flow as {{\\|Sandy Bridge}} and {{\\|Ivy Bridge|Ivy}} but | + | While sharing a lot of similarities with its predecessor {{\\|Ivy Bridge}}, Haswell introduces many new enhancements and features. Haswell is the first desktop-line of x86s by Intel tailored for a [[system on chip]] architecture. This is a significant move that will continue to be developed over the next couple of microarchitectures. Overall Haswell shares the same basic flow as {{\\|Sandy Bridge}} and {{\\|Ivy Bridge|Ivy}} but expends on them considerably in the execution engine with wider execution units and additional scheduler ports. |
=== Key changes from {{\\|Ivy Bridge}} === | === Key changes from {{\\|Ivy Bridge}} === | ||
− | |||
* 3.5x performance/watt over {{\\|Nehalem}} | * 3.5x performance/watt over {{\\|Nehalem}} | ||
* Platform Controller Hub (PCH) | * Platform Controller Hub (PCH) | ||
** Shrink from [[65 nm]] to [[32 nm]] | ** Shrink from [[65 nm]] to [[32 nm]] | ||
* Support for DDR4 (server/enthusiast segments) | * Support for DDR4 (server/enthusiast segments) | ||
− | * | + | * Integrated voltage regulator (IVR) |
* New C6 & C7 sleep states | * New C6 & C7 sleep states | ||
* Cache | * Cache | ||
Line 138: | Line 141: | ||
==== CPU changes ==== | ==== CPU changes ==== | ||
− | Haswell can | + | Haswell can execute more classes of instructions with 4 ops/cycle throughput. SandyBridge/Ivybridge could do so only for NOPs, CLC, some vector MOVs and some zeroing instructions (SUB, XOR and vector analogs). |
* MOVSX and MOVZX have 4 op/cycle throughput for 8->32, 8->64 and 16->64 bit forms. | * MOVSX and MOVZX have 4 op/cycle throughput for 8->32, 8->64 and 16->64 bit forms. | ||
− | * | + | * Some ALU operations have 4 op/cycle throughput for 32-bit registers: XOR, OR, NEG, NOT, although not all (ADD, SUB, CMP and AND don't). |
* Variable shifts and rotates (SHL r32, CL etc) latency increased from 1 cycle to 2 cycles, variable SHLD/SHRD from 2 cycles to 4 cycles. | * Variable shifts and rotates (SHL r32, CL etc) latency increased from 1 cycle to 2 cycles, variable SHLD/SHRD from 2 cycles to 4 cycles. | ||
* REP MOVS copy is twice as fast: now ~52 bytes/cycle. | * REP MOVS copy is twice as fast: now ~52 bytes/cycle. | ||
Line 152: | Line 155: | ||
====New instructions ==== | ====New instructions ==== | ||
+ | {{main|#Added instructions|l1=See #Added_instructions for the complete list}} | ||
Haswell introduced a number of new instructions: | Haswell introduced a number of new instructions: | ||
* {{x86|AVX2|<code>AVX2</code>}} - Advanced Vector Extensions 2; an extension that extends most integer instructions to 256 bits vectors. | * {{x86|AVX2|<code>AVX2</code>}} - Advanced Vector Extensions 2; an extension that extends most integer instructions to 256 bits vectors. | ||
+ | ** Vector Gather supprt | ||
+ | ** Any-to-Any permutes | ||
+ | ** Vector-Vector Shifts | ||
* {{x86|BMI1|<code>BMI1</code>}} - Bit Manipulation Instructions Sets 1 | * {{x86|BMI1|<code>BMI1</code>}} - Bit Manipulation Instructions Sets 1 | ||
* {{x86|BMI2|<code>BMI2</code>}} - Bit Manipulation Instructions Sets 2 | * {{x86|BMI2|<code>BMI2</code>}} - Bit Manipulation Instructions Sets 2 | ||
Line 159: | Line 166: | ||
* {{x86|FMA3|<code>FMA3</code>}} - Floating Point Multiply Accumulate, 3 operands | * {{x86|FMA3|<code>FMA3</code>}} - Floating Point Multiply Accumulate, 3 operands | ||
* {{x86|TSX|<code>TSX</code>}} - Transactional Synchronization Extensions | * {{x86|TSX|<code>TSX</code>}} - Transactional Synchronization Extensions | ||
− | |||
− | |||
=== Block Diagram === | === Block Diagram === | ||
+ | Due to the success of the front end in {{\\|Ivy Bridge}}, very few changes were done in Haswell. | ||
− | |||
[[File:haswell block diagram.svg]] | [[File:haswell block diagram.svg]] | ||
=== Memory Hierarchy === | === Memory Hierarchy === | ||
− | The memory hierarchy in Haswell had a number of changes from its predecessor. The cache bandwidth for both load and store have been doubled (64B/cycle for load and 32B/cycle for store; up from 32/16 respectively). Significant enhancements have been done to support the new gather instructions and transactional memory. With | + | The memory hierarchy in Haswell had a number of changes from its predecessor. The cache bandwidth for both load and store have been doubled (64B/cycle for load and 32B/cycle for store; up from 32/16 respectively). Significant enhancements have been done to support the new gather instructions and transactional memory. With haswell new port 7 which adds an address generation for stores, up to two loads and one store are possible each cycle. |
* Cache | * Cache | ||
Line 221: | Line 226: | ||
**** shared | **** shared | ||
− | |||
=== Pipeline === | === Pipeline === | ||
Haswell, like its predecessor Ivy Bridge, also has a dual-threaded and out-of-order pipeline. | Haswell, like its predecessor Ivy Bridge, also has a dual-threaded and out-of-order pipeline. | ||
==== Front-end ==== | ==== Front-end ==== | ||
− | The front-end is the complicated part of the microarchitecture | + | The front-end is the complicated part of the microarchitecture has it deals with variable length x86 instructions ranging from 1 to 15 bytes. The main goal here is to fetch and decode correctly the next set of instructions. The caches have not changed in Haswell from {{\\|Ivy Bridge}}, with the [[L1i$]] still 32KB , 8-way set associative shared dynamically by the two threads. Instruction cache instruction fetching remains 16B/cycle. [[TLB]] is also still 128-entries, 4-way for 4KB pages and 8-entries, [[fully associative]] for 2MB page mode. The fetched instructions are then moved on to an instruction queue which has 40 entries, 20 for each thread. Haswell continued to improve the branch misses although the exact details have not been made public. |
Haswell has the same µOps cache as Ivy Bridge - 1,536 entries organized in 32 sets of 8 cache lines with 6 µOps each. Hits can yield up to 4-µOps/cycle. The cache supports microcoded instructions (being pointers to ROM entries). Cache is shared by the two threads. | Haswell has the same µOps cache as Ivy Bridge - 1,536 entries organized in 32 sets of 8 cache lines with 6 µOps each. Hits can yield up to 4-µOps/cycle. The cache supports microcoded instructions (being pointers to ROM entries). Cache is shared by the two threads. | ||
Line 233: | Line 237: | ||
==== Execution engine ==== | ==== Execution engine ==== | ||
− | Continuing with the decoder is the [[register renaming]] stage. This is crucial for out-of-order execution. In this stage the architectural x86 registers get mapped into one of the many physical registers. The integer physical register file (PRF) has been enlarged by 8 addition registers for a total 168. Likewise the FP PRF was extended by 24 registers bringing it too to 168 registers. The larger increase in the FP PRF is likely to accommodate the new {{x86|AVX2}} extension. The [[reorder buffer|ROB]] in Haswell has been increased to 192 entries (from 168 in Ivy) where each entry corresponds to a single µOp. The | + | Continuing with the decoder is the [[register renaming]] stage. This is crucial for out-of-order execution. In this stage the architectural x86 registers get mapped into one of the many physical registers. The integer physical register file (PRF) has been enlarged by 8 addition registers for a total 168. Likewise the FP PRF was extended by 24 registers bringing it too to 168 registers. The larger increase in the FP PRF is likely to accommodate the new {{x86|AVX2}} extension. The [[reorder buffer|ROB]] in Haswell has been increased to 192 entries (from 168 in Ivy) where each entry corresponds to a single µOp. The ROD is fixed split between the two threads. Additional scheduler resources get allocated as well - this includes stores, loads, and branch buffer entries. Note that due to how dependencies are handled, there may be more or less µOps than what was fed in. For the most part, the renamer is unified and deals with both integers and vectors. Resources, however, are partitioned between the two threads. Finally, as a last step, the µOps are matched with a port depending on their intended execution purpose. Up to 4 fused µOps may be renamed and handled per thread per cycle. Both the load and store in-flight units were increased to 72 and 42 entries respectively. |
Haswell continues to use a unified scheduler for all µOps which holds 60 entries. µOps at this stage sit idle until they are cleared to be executed via their assigned dispatch port. µOps may be held due to resource unavailability. | Haswell continues to use a unified scheduler for all µOps which holds 60 entries. µOps at this stage sit idle until they are cleared to be executed via their assigned dispatch port. µOps may be held due to resource unavailability. | ||
Line 240: | Line 244: | ||
===== Execution Units ===== | ===== Execution Units ===== | ||
− | Some of the biggest architectural changes were done in the area of the execution units. Haswell widened the scheduler by two ports - one new integer dispatch port and a new memory port bringing the total to 8 µOps/cycle. The various ports have also been rebalanced. The new port 6 adds another Integer ALU designs to improve integer workloads freeing up Port 0 and 1 for vector works. It also adds a second branch unit to | + | Some of the biggest architectural changes were done in the area of the execution units. Haswell widened the scheduler by two ports - one new integer dispatch port and a new memory port bringing the total to 8 µOps/cycle. The various ports have also been rebalanced. The new port 6 adds another Integer ALU designs to improve integer workloads freeing up Port 0 and 1 for vector works. It also adds a second branch unit to low the congestion Port 0. The second port that was added, Port 7 adds a new [[address generation unit|AGU]]. This is largely due to the improvements for {{x86|AVX2}} that roughly doubled its throughput. Port 0 had its ALU/Mul/shifter extended to 256-bits; same is true for the vector ALU on port 1 and the ALU/shuffle on port 5. Additionally a 256-bit FMA unit were added to both port 0 and port 1. The change makes it possible for FMAs and FMULs to issue on both ports. In theory, Haswell can peak at over double the performance of {{\|Sandy Bridge}}, with 16 double / 32 single precision [[FLOP]]/cycle + Integer ALU option + Vector operation. |
The scheduler dispatches up to 8 ready µOps/cycle in [[FIFO]] order through the dispatch ports. µOps involving computational operations are sent to ports 0, 1, 5, and 6 to the appropriate unit. Likewise ports 2, 3, 4 and 7 are used for load/store and address calculations. | The scheduler dispatches up to 8 ready µOps/cycle in [[FIFO]] order through the dispatch ports. µOps involving computational operations are sent to ports 0, 1, 5, and 6 to the appropriate unit. Likewise ports 2, 3, 4 and 7 are used for load/store and address calculations. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Die == | == Die == | ||
− | === | + | ===Octa-core Haswell die=== |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
* {{intel|Core i7-5960X}} | * {{intel|Core i7-5960X}} | ||
* [[Octa-core]] processor | * [[Octa-core]] processor | ||
* [[22 nm process]] | * [[22 nm process]] | ||
* 2,600,000,000 transistors | * 2,600,000,000 transistors | ||
− | * 355.52 | + | * 355.52 mm<sup>2</sup> |
* 17.6 mm x 20.2 mm | * 17.6 mm x 20.2 mm | ||
Line 320: | Line 262: | ||
:[[File:haswell (octa-core) die shot (annotated).png|650px]] | :[[File:haswell (octa-core) die shot (annotated).png|650px]] | ||
− | === | + | ===Quad-core Haswell die=== |
+ | : [[File:haswell die (quad-core).png|850px]] | ||
− | + | : [[File:haswell die (quad-core) (annotated).png|850px]] | |
− | * | + | |
+ | * 1,400,000,000 transistors | ||
+ | * 177 mm<sup>2</sup> | ||
+ | * 4 CPU cores | ||
+ | * 1 GPU core | ||
+ | ** 2x10xEU (80 ALUs) | ||
* [[22 nm process]] | * [[22 nm process]] | ||
− | |||
− | |||
− | :[[File: | + | |
+ | ===Dual-core Haswell die=== | ||
+ | |||
+ | : [[File:haswell die (dual-core).jpg|850px]] | ||
== Added instructions == | == Added instructions == | ||
Line 659: | Line 608: | ||
created and tagged accordingly. | created and tagged accordingly. | ||
− | Missing a chip? please dump its name here: | + | Missing a chip? please dump its name here: http://en.wikichip.org/wiki/WikiChip:wanted_chips |
--> | --> | ||
− | + | <table class="wikitable sortable"> | |
− | <table class=" | + | <tr><th colspan="12" style="background:#D6D6FF;">Haswell Chips</th></tr> |
− | <tr | + | <tr><th colspan="9">Main processor</th><th colspan="3">IGP</th></tr> |
− | <tr | + | <tr><th>Model</th><th>µarch</th><th>Platform</th><th>Core</th><th>Launched</th><th>SDP</th><th>TDP</th><th>Freq</th><th>Max Mem</th><th>Name</th><th>Freq</th><th>Max Freq</th></tr> |
− | + | {{#ask: [[Category:microprocessor models by intel]] [[instance of::microprocessor]] [[microarchitecture::Haswell]] | |
− | < | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | < | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | < | ||
− | {{#ask: [[Category:microprocessor models by intel]] [[instance of::microprocessor]] [[microarchitecture::Haswell | ||
|?full page name | |?full page name | ||
|?model number | |?model number | ||
− | |? | + | |?microarchitecture |
− | |? | + | |?platform |
− | |||
|?core name | |?core name | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|?first launched | |?first launched | ||
− | |? | + | |?sdp |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|?tdp | |?tdp | ||
− | |?base frequency | + | |?base frequency |
− | + | |?max memory | |
− | |||
− | |||
− | |||
− | |?max memory | ||
|?integrated gpu | |?integrated gpu | ||
|?integrated gpu base frequency | |?integrated gpu base frequency | ||
|?integrated gpu max frequency | |?integrated gpu max frequency | ||
|format=template | |format=template | ||
− | |template=proc table | + | |template=proc table 2 |
− | + | |userparam=13 | |
− | |||
− | |||
− | |userparam= | ||
|mainlabel=- | |mainlabel=- | ||
− | |||
}} | }} | ||
− | {{ | + | <tr><th colspan="12">Count: {{#ask:[[Category:microprocessor models by intel]][[instance of::microprocessor]][[microarchitecture::Haswell]]|format=count}}</th></tr> |
</table> | </table> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Facts about "Haswell - Microarchitectures - Intel"
codename | Haswell + |
core count | 2 +, 4 +, 6 +, 8 +, 16 +, 10 +, 12 +, 14 + and 18 + |
designer | Intel + |
first launched | June 4, 2013 + |
full page name | intel/microarchitectures/haswell (client) + |
instance of | microarchitecture + |
instruction set architecture | x86-64 + |
manufacturer | Intel + |
microarchitecture type | CPU + |
name | Haswell + |
phase-out | 2015 + |
pipeline stages (max) | 19 + |
pipeline stages (min) | 14 + |
process | 22 nm (0.022 μm, 2.2e-5 mm) + |