From WikiChip
Editing intel/microarchitectures/skylake (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|Skylake (client)|arch}}
+
{{intel title|Skylake|arch}}
 
{{microarchitecture
 
{{microarchitecture
 
|atype=CPU
 
|atype=CPU
|name=Skylake (client)
+
|name=Skylake
 
|designer=Intel
 
|designer=Intel
 
|manufacturer=Intel
 
|manufacturer=Intel
Line 9: Line 9:
 
|cores=2
 
|cores=2
 
|cores 2=4
 
|cores 2=4
 +
|cores 3=6
 +
|cores 4=8
 +
|cores 5=10
 +
|cores 6=12
 +
|cores 7=14
 +
|cores 8=16
 +
|cores 9=18
 +
|cores 10=20
 +
|cores 11=22
 +
|cores 12=24
 +
|cores 13=26
 +
|cores 14=28
 
|type=Superscalar
 
|type=Superscalar
|type 2=Superpipeline
 
 
|oooe=Yes
 
|oooe=Yes
 
|speculative=Yes
 
|speculative=Yes
Line 16: Line 27:
 
|stages min=14
 
|stages min=14
 
|stages max=19
 
|stages max=19
|isa=x86-64
+
|isa=x86-16
 +
|isa 2=x86-32
 +
|isa 3=x86-64
 +
|extension=MOVBE
 
|extension 2=MMX
 
|extension 2=MMX
 
|extension 3=SSE
 
|extension 3=SSE
Line 39: Line 53:
 
|extension 22=TXT
 
|extension 22=TXT
 
|extension 23=TSX
 
|extension 23=TSX
 +
|extension 24=RDSEED
 
|extension 25=ADCX
 
|extension 25=ADCX
 +
|extension 26=PREFETCHW
 
|extension 27=CLFLUSHOPT
 
|extension 27=CLFLUSHOPT
 
|extension 28=XSAVE
 
|extension 28=XSAVE
 +
|extension 29=SGX
 +
|extension 30=MPX
 +
|extension 31=AVX-512
 
|l1i=32 KiB
 
|l1i=32 KiB
 
|l1i per=core
 
|l1i per=core
Line 62: Line 81:
 
|core name 4=Skylake S
 
|core name 4=Skylake S
 
|core name 5=Skylake DT
 
|core name 5=Skylake DT
 +
|core name 6=Skylake X
 +
|core name 7=Skylake SP
 
|predecessor=Broadwell
 
|predecessor=Broadwell
 
|predecessor link=intel/microarchitectures/broadwell
 
|predecessor link=intel/microarchitectures/broadwell
 
|successor=Kaby Lake
 
|successor=Kaby Lake
 
|successor link=intel/microarchitectures/kaby lake
 
|successor link=intel/microarchitectures/kaby lake
|contemporary=Skylake (server)
 
|contemporary link=intel/microarchitectures/skylake (server)
 
 
|pipeline=Yes
 
|pipeline=Yes
 
|OoOE=Yes
 
|OoOE=Yes
Line 73: Line 92:
 
|core names=Yes
 
|core names=Yes
 
}}
 
}}
'''Skylake''' ('''SKL''') '''Client Configuration''' is [[Intel]]'s successor to {{\\|Broadwell}}, a [[14 nm process]] [[microarchitecture]] for mainstream workstations, desktops, and mobile devices. Skylake succeeded the short-lived {{\\|Broadwell}} which experienced severe delays. Skylake is the "Architecture" phase as part of Intel's {{intel|PAO}} model. The microarchitecture was developed by Intel's R&D center in [[wikipedia:Haifa, Israel|Haifa, Israel]].
+
'''Skylake''' ('''SKL''') is [[Intel]]'s successor to {{\\|Broadwell}}, a [[14 nm process]] [[microarchitecture]] for mainstream desktops, servers, and mobile devices. Skylake succeeded the short-lived {{\\|Broadwell}} which experienced severe delays. Skylake is the "Architecture" phase as part of Intel's {{intel|PAO}} model. The microarchitecture was developed by Intel's R&D center in [[wikipedia:Haifa, Israel|Haifa, Israel]].
  
For desktop and mobile, Skylake is branded as 6th Generation Intel {{intel|Core i3}}, {{intel|Core i5}}, {{intel|Core i7}} processors. For workstations it's branded as {{intel|Xeon E3|Xeon E3 v5}}.
+
For desktop and mobile, Skylake is branded as 6th Generation Intel {{intel|Core i3}}, {{intel|Core i5}}, {{intel|Core i7}}, and {{intel|Core i9}} processors. For workstations it's branded as {{intel|Xeon E3|Xeon E3 v5}} For scalable server class processors, Intel branded it as {{intel|Xeon Bronze}}, {{intel|Xeon Silver}}, {{intel|Xeon Gold}}, and {{intel|Xeon Platinum}}.
  
 
== Codenames ==
 
== Codenames ==
{{see also|intel/microarchitectures/skylake_(server)#Codenames|l1=Server Skylake's Codenames}}
 
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Core !! Abbrev !! Platform !! Target
+
! Core !! Abbrev !! Target
 
|-
 
|-
| {{intel|Skylake Y|l=core}} || SKL-Y || || 2-in-1s detachable, tablets, and computer sticks
+
| {{intel|Skylake Y|l=core}} || SKL-Y || 2-in-1s detachable, tablets, and computer sticks
 
|-
 
|-
| {{intel|Skylake U|l=core}} || SKL-U || || Light notebooks, portable All-in-Ones (AiOs), Minis, and conference room
+
| {{intel|Skylake U|l=core}} || SKL-U || Light notebooks, portable All-in-Ones (AiOs), Minis, and conference room
 
|-
 
|-
| {{intel|Skylake H|l=core}} || SKL-H || || Ultimate mobile performance, mobile workstations
+
| {{intel|Skylake H|l=core}} || SKL-H || Ultimate mobile performance, mobile workstations
 
|-
 
|-
| {{intel|Skylake S|l=core}} || SKL-S || || Desktop performance to value, AiOs, and minis
+
| {{intel|Skylake S|l=core}} || SKL-S || Desktop performance to value, AiOs, and minis
 
|-
 
|-
| {{intel|Skylake DT|l=core}} || SKL-DT || {{intel|Greenlow|l=platform}} || Workstations & entry-level servers
+
| {{intel|Skylake X|l=core}} || SKL-X || High-end desktops & enthusiasts market
 +
|-
 +
| {{intel|Skylake DT|l=core}} || SKL-DT || Workstations & entry-level servers
 +
|-
 +
| colspan="3" |
 +
|-
 +
| {{intel|Skylake SP|l=core}} || SKL-SP || Server Scalable Processors
 
|}
 
|}
  
 
== Brands ==
 
== Brands ==
{{see also|intel/microarchitectures/skylake_(server)#Brands|l1=Server Skylake's Brands}}
+
[[File:xeon scalable family decode.png|thumb|right|250px|New Xeon branding]]
Intel released Skylake under 6 main brand families for mainstream workstations, desktops, and mobile.
+
Intel released Skylake under 7 main brand families.
 +
 
 +
Additionally, Intel introduced a number of new server chip families with the introduction of {{intel|Skylake SP|l=core}}.
  
 
{| class="wikitable tc4 tc5 tc6 tc7 tc8" style="text-align: center;"
 
{| class="wikitable tc4 tc5 tc6 tc7 tc8" style="text-align: center;"
Line 102: Line 128:
 
! rowspan="2" | Logo !! rowspan="2" | Family !! rowspan="2" | General Description !! colspan="7" | Differentiating Features
 
! rowspan="2" | Logo !! rowspan="2" | Family !! rowspan="2" | General Description !! colspan="7" | Differentiating Features
 
|-
 
|-
! Cores !! {{intel|Hyper-Threading|HT}} !! {{x86|AVX}} !! {{x86|AVX2}} !! {{intel|Turbo Boost|TBT}} !! [[ECC]]
+
! Cores !! {{intel|Hyper-Threading|HT}} !! {{x86|AVX}} !! {{x86|AVX2}} !! {{x86|AVX-512}} !! {{intel|Turbo Boost|TBT}} !! [[ECC]]
 
|-
 
|-
| rowspan="2" | [[File:intel celeron (2015).png|50px|link=intel/celeron]] || rowspan="2" |  {{intel|Celeron}} || style="text-align: left;" | Entry-level Budget || rowspan="2" | [[dual-core|dual]] || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}}
+
| rowspan="2" | [[File:intel celeron (2015).png|50px|link=intel/celeron]] || rowspan="2" |  {{intel|Celeron}} || style="text-align: left;" | Entry-level Budget || rowspan="2" | [[dual-core|dual]] || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}}
 
|-
 
|-
| style="text-align: left;" | Entry-level Budget (Embedded) || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|yes}}
+
| style="text-align: left;" | Entry-level Budget (Embedded) || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|yes}}
 
|-
 
|-
| rowspan="2" | [[File:intel pentium (2015).png|50px|link=intel/pentium_(2009)]] || rowspan="2" | {{intel|Pentium (2009)|Pentium}} || style="text-align: left;" | Budget (Mobile) || rowspan="2" | dual || {{tchk|yes}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}}
+
| rowspan="2" | [[File:intel pentium (2015).png|50px|link=intel/pentium_(2009)]] || rowspan="2" | {{intel|Pentium (2009)|Pentium}} || style="text-align: left;" | Budget (Mobile) || rowspan="2" | dual || {{tchk|yes}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}}
 
|-
 
|-
| style="text-align: left;" | Budget (Desktop) || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|yes}}
+
| style="text-align: left;" | Budget (Desktop) || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}} || {{tchk|yes}}
 
|-
 
|-
| rowspan="2" | [[File:core i3 logo (2015).png|50px|link=intel/core_i3]] || rowspan="2" |  {{intel|Core i3}} || style="text-align: left;" | Low-end Performance || rowspan="2" |  dual || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|no}}
+
| rowspan="2" | [[File:core i3 logo (2015).png|50px|link=intel/core_i3]] || rowspan="2" |  {{intel|Core i3}} || style="text-align: left;" | Low-end Performance || rowspan="2" |  dual || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|no}} || {{tchk|no}}
 
|-
 
|-
| style="text-align: left;" | Low-end Performance<br>(Desktop/Embedded) || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|yes}}
+
| style="text-align: left;" | Low-end Performance<br>(Desktop/Embedded) || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|no}} || {{tchk|yes}}
 
|-
 
|-
| rowspan="2" | [[File:core i5 logo (2015).png|50px|link=intel/core_i5]] || rowspan="2" | {{intel|Core i5}} || rowspan="2" style="text-align: left;" | Mid-range Performance || dual || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}}
+
| rowspan="2" | [[File:core i5 logo (2015).png|50px|link=intel/core_i5]] || rowspan="2" | {{intel|Core i5}} || rowspan="2" style="text-align: left;" | Mid-range Performance || dual || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|yes}} || {{tchk|no}}
 
|-
 
|-
|[[quad-core|quad]] || {{tchk|no}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}}
+
|[[quad-core|quad]] || {{tchk|no}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|yes}} || {{tchk|no}}
 
|-
 
|-
| rowspan="2" | [[File:core i7 logo (2015).png|50px|link=intel/core_i7]] || rowspan="2" | {{intel|Core i7}} || rowspan="2" style="text-align: left;" | High-end Performance || dual || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}}
+
| rowspan="3" | [[File:core i7 logo (2015).png|50px|link=intel/core_i7]] || rowspan="3" | {{intel|Core i7}} || rowspan="2" style="text-align: left;" | High-end Performance || dual || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|yes}} || {{tchk|no}}
 
|-
 
|-
|quad || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}}
+
|quad || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|yes}} || {{tchk|no}}
 
|-
 
|-
| [[File:xeon logo (2015).png|50px|link=intel/xeon e3]] ||  {{intel|Xeon E3}} || style="text-align: left;" | Workstation/dense servers || quad || {{tchk|some}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}}
+
|style="text-align: left;" | Enthusiasts/High Performance ({{intel|Skylake X|X|l=core}}) || [[6 cores|6]] - [[8 cores|8]] || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}}
 +
|-
 +
| [[File:xeon logo (2015).png|50px|link=intel/xeon e3]] ||  {{intel|Xeon E3}} || style="text-align: left;" | Workstation/dense servers || quad || {{tchk|some}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}} || {{tchk|yes}} || {{tchk|yes}}
 +
|-
 +
| [[File:core i9x logo.png|50px|link=intel/core_i9]] || {{intel|Core i9}} || style="text-align: left;" | Enthusiasts/High Performance || [[10 cores|10]] - [[18 cores|18]] || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || {{tchk|no}}
 +
|-
 +
! rowspan="2" | Logo !! rowspan="2" | Family !! rowspan="2" | General Description !! colspan="7" | Differentiating Features
 +
|-
 +
! Cores !! {{intel|Hyper-Threading|HT}} !! {{intel|Turbo Boost|TBT}} !! {{x86|AVX-512}} !! AVX-512 Units !! {{intel|Ultra Path Interconnect|UPI}} links !! Scalability
 +
|-
 +
| [[File:xeon bronze (2017).png|50px]] || {{intel|Xeon Bronze}} || style="text-align: left;" | Entry-level performance / <br>Cost-sensitive || [[6 cores|6]] - [[8 cores|8]] || {{tchk|no}} || {{tchk|no}} || {{tchk|yes}} || 1 || 2 || Up to 2
 +
|-
 +
| [[File:xeon silver (2017).png|50px]] || {{intel|Xeon Silver}} || style="text-align: left;" | Mid-range performance / <br>Efficient lower power || [[4 cores|4]] - [[12 cores|12]] || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || 1 || 2 || Up to 2
 +
|-
 +
| rowspan="2" | [[File:xeon gold (2017).png|50px]] || {{intel|Xeon Gold}} 5000 || style="text-align: left;" | High performance || [[4 cores|4]] - [[14 cores|14]] || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || 1 || 2 || Up to 4
 +
|-
 +
| {{intel|Xeon Gold}} 6000 || style="text-align: left;" | Higher performance || [[6 cores|6]] - [[22 cores|22]] || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || 2  || 3 || Up to 4
 +
|-
 +
| [[File:xeon platinum (2017).png|50px]] || {{intel|Xeon Platinum}} || style="text-align: left;" | Highest performance / flexibility || [[4 cores|4]] - [[28 cores|28]] || {{tchk|yes}} || {{tchk|yes}} || {{tchk|yes}} || 2 || 3 || Up to 8
 
|}
 
|}
  
 
== Release Dates ==
 
== Release Dates ==
Skylake was first demonstrated at the 2014 Intel Developer Forum in San Francisco on September 9 with the goals of launching in the second half of 2015.
+
Skylake was first demonstrated at the 2014 Intel Developer Forum in San Francisco on September 9 with the goals of launching in the second half of 2015. Skylake-based {{intel|Core X}} was introduced in May 2017 while {{intel|Skylake SP|l=core}} was introduced in July 2017.
  
 
== Process Technology ==
 
== Process Technology ==
 
{{main|intel/microarchitectures/broadwell#Process_Technology|l1=Broadwell § Process Technology}}
 
{{main|intel/microarchitectures/broadwell#Process_Technology|l1=Broadwell § Process Technology}}
Skylake uses the same [[14 nm process]] used for the Broadwell microarchitecture for all mainstream consumer parts (Core, Celeron, et al).
+
Skylake uses the same [[14 nm process]] used for the Broadwell microarchitecture for all mainstream consumer parts (Core, Celeron, et al). Unlike mainstream Skylake models, the enthusiasts ({{intel|Skylake X|l=core}}) models are fabricated on Intel's enhanced 14+ nm process which is used by {{\\|Kaby Lake}} (see {{intel|kaby lake#Process_Technology|Kaby Lake § Process Technology}} for more info).
  
 
== Compatibility ==
 
== Compatibility ==
Line 138: Line 182:
 
! Vendor !! OS  !! Version !! Notes
 
! Vendor !! OS  !! Version !! Notes
 
|-
 
|-
| rowspan="4" | [[Microsoft]] || rowspan="4" | Windows || style="background-color: #ffdad6;" | Windows Vista || No Support
+
| rowspan="4" | Microsoft || rowspan="4" | Windows || style="background-color: #ffdad6;" | Windows Vista || No Support
 
|-
 
|-
| style="background-color: #d6ffd8;" | Windows 7 || rowspan="2" | Support ends July 2018
+
| style="background-color: #d6ffd8;" | Windows 7 || rowspan="2" | Support ends July 2017
 
|-
 
|-
 
| style="background-color: #d6ffd8;" | Windows 8.1  
 
| style="background-color: #d6ffd8;" | Windows 8.1  
Line 175: Line 219:
 
| colspan="4" | Family 6 Model 78
 
| colspan="4" | Family 6 Model 78
 
|-
 
|-
| rowspan="2" | {{intel|Skylake DT|DT|l=core}}/{{intel|Skylake H|H|l=core}}/{{intel|Skylake S|S|l=core}} || 0 || 0x6 || 0x5 || 0xE
+
| rowspan="2" | {{intel|Skylake DT|DT|l=core}}/{{intel|Skylake H|H|l=core}}/{{intel|Skylake S|S|l=core}}/{{intel|Skylake X|X|l=core}} || 0 || 0x6 || 0x5 || 0xE
 
|-
 
|-
 
| colspan="4" | Family 6 Model 94
 
| colspan="4" | Family 6 Model 94
 +
|-
 +
| rowspan="2" | {{intel|Skylake SP|SP|l=core}} || 0 || 0x6 || 0x5 || 0x5
 +
|-
 +
| colspan="4" | Family 6 Model 85
 
|}
 
|}
  
Line 193: Line 241:
 
**** {{intel|Skylake Y|l=core}} and Skylake U cores have chipset in the same package (simplified {{intel|on Package I/O|OPIO}})
 
**** {{intel|Skylake Y|l=core}} and Skylake U cores have chipset in the same package (simplified {{intel|on Package I/O|OPIO}})
 
**** Increase in transfer rate from 5.0 GT/s to  8.0 GT/s (~3.93GB/s up from 2GB/s) per lane
 
**** Increase in transfer rate from 5.0 GT/s to  8.0 GT/s (~3.93GB/s up from 2GB/s) per lane
**** Limits motherboard trace design to 7 inches max from the CPU to chipset (down from 8)
+
**** Limits motherboard trace design to 7 inches max from (down from 8) from the CPU to chipset
 
** PCIe & DMI upgraded to Gen3
 
** PCIe & DMI upgraded to Gen3
 
** More I/O (configurable as PCIe/SATA/USB3)
 
** More I/O (configurable as PCIe/SATA/USB3)
Line 199: Line 247:
 
** CSI-2 for the integrated IPU (mobile SKUs)
 
** CSI-2 for the integrated IPU (mobile SKUs)
 
** Intel Sensor Solution Hub integration
 
** Intel Sensor Solution Hub integration
** Larger Line Fill Buffer?
 
 
 
* [[System Agent]]
 
* [[System Agent]]
 
** New Image Processing Unit (IPU)
 
** New Image Processing Unit (IPU)
Line 208: Line 254:
 
* Core
 
* Core
 
** Front End
 
** Front End
 +
*** Larger legacy pipeline delivery (5 µOPs, up from 4)
 +
**** Another simple decoder has been added.
 
*** Allocation Queue (IDQ)
 
*** Allocation Queue (IDQ)
**** Wider Allocation path (5-way, up from 4-way in broadwell)
 
 
**** Larger delivery (6 µOPs, up from 4)
 
**** Larger delivery (6 µOPs, up from 4)
 
**** 2.28x larger buffer (64/thread, up from 56)
 
**** 2.28x larger buffer (64/thread, up from 56)
Line 229: Line 276:
 
*** Page split load penalty reduced 20-fold
 
*** Page split load penalty reduced 20-fold
 
*** Larger Write-back buffer
 
*** Larger Write-back buffer
 +
*** Larger Line Fill Buffer?
  
 
* Memory
 
* Memory
Line 255: Line 303:
 
** Direct X 12, OpenCL 2.0, OpenGL 4.4
 
** Direct X 12, OpenCL 2.0, OpenGL 4.4
 
** Up to 24 EUs GT2 (same as {{\\|Haswell}}); 48 EUs for GT3, and up to 72 EUs on {{intel|Iris Pro Graphics}}
 
** Up to 24 EUs GT2 (same as {{\\|Haswell}}); 48 EUs for GT3, and up to 72 EUs on {{intel|Iris Pro Graphics}}
*** 384 GFLOPS @ 1 GHz (GT2)
+
*** 1,152 GFLOPS @ 1 GHz
 +
 
 +
==== Server ====
 +
[[File:skylake sp buffer windows.png|right|350px]]
 +
Unlike client models, Skylake servers and HEDT models will still incorporate the fully integrated voltage regulator (FIVR) on-die. Those chips also have an entirely new multi-core architecture along with a new [[mesh topology]] interconnect network (from [[ring topology]]).
 +
 
 +
* Improved "14 nm+" process (see {{\\|kaby_lake#Process_Technology|Kaby Lake § Process Technology}})
 +
* {{intel|Omni-Path Architecture}} (OPA)
 +
* Mesh architecture
 +
** {{intel|Sub-NUMA Clustering}} (SNC) support (replaces the {{intel|Cluster-on-Die}} (COD) implementation)
 +
* Core
 +
** Front-end
 +
*** LSD is disabled
 +
** Back-end
 +
*** Port 4 now performs 512b stores (from 256b)
 +
*** Port 0 & Port 1 can now be fused to perform AVX-512
 +
*** Port 5 now can do full 512b operations (not on all models)
 +
** Memory Subsystem
 +
*** Store is now 64B/cycle (from 32B/cycle)
 +
*** Load is now 2x64B/cycle (from 2x32B/cycle)
 +
* Memory
 +
** L2$
 +
*** Increased to 1 MiB/core (from 250 KiB/core)
 +
** L3$
 +
*** Was made non-inclusive (from inclusive)
 +
*** Reduced to 1.375 MiB/core (from 2.5 MiB/core)
 +
** DRAM
 +
*** hex-channel DDR4-2666 (from quad-channel)
  
 
==== CPU changes ====
 
==== CPU changes ====
* Like Haswell, most general purpose ALU operations execute at up to 4 ops/cycle for 8, 32 and 64-bit registers. (16-bit throughput varies per op, can be 4, 3.5 or 2 op/cycle).
+
* Most ALU operations have 4 op/cycle 1 for 8 and 32-bit registers. 64-bit ops are still limited to 3 op/cycle. (16-bit throughput varies per op, can be 4, 3.5 or 2 op/cycle).
* ADC and SBB are single uop (like Broadwell), down from 2 in Haswell. Throughput of 1 op/cycle, or 2/c if not bottlenecked by one long dependency, same as Haswell.
+
* MOVSX and MOVZX have 4 op/cycle throughput for 16->32 and 32->64 forms, in addition to Haswell's 8->32, 8->64 and 16->64 bit forms.
* Vector moves have throughput of 4 op/cycle (improved move elimination for nothing-but-move microbenchmarks)
+
* ADC and SBB have throughput of 1 op/cycle, same as Haswell.
* vPCMPGTx on the same register is recognized as a zeroing idiom (4 ops/cycle, no execution unit) like vpXORxx and vPSUBx zeroing.
+
* Vector moves have throughput of 4 op/cycle (move elimination).
* Vector ALU ops are often "standardized" to latency of 4. for example, vADDPS and vMULPS used to have L of 3 and 5 in HSW, or both 3 in BDW, now both are 4.
+
* Not only zeroing vector vpXORxx and vpSUBxx ops, but also vPCMPxxx on the same register, have throughput of 4 op/cycle.
* Fused multiply-add ops have latency of 4 and throughput of 0.5 op/cycle, improved from 5 cycle latency.
+
* Vector ALU ops are often "standardized" to latency of 4. for example, vADDPS and vMULPS used to have L of 3 and 5, now both are 4.
* Throughput of vADDps, vSUBps, vCMPps, vMAXps, their scalar and double analogs is increased to 2 op/cycle.  Lower latency SIMD FP-add unit on port 1 removed in favour of running all FP math on the FMA units.
+
* Fused multiply-add ops have latency of 4 and throughput of 0.5 op/cycle.
* Throughput of vPSLxx and vPSRxx with immediate (i.e. fixed vector shifts) is increased to 2 op/cycle, along with VPSxxVx variable shifts.
+
* Throughput of vADDps, vSUBps, vCMPps, vMAXps, their scalar and double analogs is increased to 2 op/cycle.
 +
* Throughput of vPSLxx and vPSRxx with immediate (i.e. fixed vector shifts) is increased to 2 op/cycle.
 
* Throughput of vANDps, vANDNps, vORps, vXORps, their scalar and double analogs, vPADDx, vPSUBx is increased to 3 op/cycle.
 
* Throughput of vANDps, vANDNps, vORps, vXORps, their scalar and double analogs, vPADDx, vPSUBx is increased to 3 op/cycle.
 
* vDIVPD, vSQRTPD have approximately twice as good throughput: from 8 to 4 and from 28 to 12 cycles/op.
 
* vDIVPD, vSQRTPD have approximately twice as good throughput: from 8 to 4 and from 28 to 12 cycles/op.
Line 271: Line 347:
  
 
====New instructions ====
 
====New instructions ====
{{see also|intel/microarchitectures/skylake_(server)#New instructions|l1=Server Skylake's New instructions}}
 
 
Skylake introduced a number of {{x86|extensions|new instructions}}:
 
Skylake introduced a number of {{x86|extensions|new instructions}}:
  
* {{x86|SGX1|<code>SGX1</code>}} - Software Guard Extensions, Version 1
+
* Client:
* {{x86|MPX|<code>MPX</code>}} -Memory Protection Extensions
+
** {{x86|SGX1|<code>SGX1</code>}} - Software Guard Extensions, Version 1
* {{x86|XSAVEC|<code>XSAVEC</code>}} - Save processor extended states with compaction to memory
+
** {{x86|MPX|<code>MPX</code>}} -Memory Protection Extensions
* {{x86|XSAVES|<code>XSAVES</code>}} - Save processor supervisor-mode extended states to memory.
+
** {{x86|XSAVEC|<code>XSAVEC</code>}} - Save processor extended states with compaction to memory
* {{x86|CLFLUSHOPT|<code>CLFLUSHOPT</code>}} - Flush & Invalidates memory operand and its associated cache line (All L1/L2/L3 etc..)
+
** {{x86|XSAVES|<code>XSAVES</code>}} - Save processor supervisor-mode extended states to memory.
 +
** {{x86|CLFLUSHOPT|<code>CLFLUSHOPT</code>}} - Flush & Invalidates memory operand and its associated cache line (All L1/L2/L3 etc..)
 +
* Server
 +
** ''(everything from Client)''
 +
** {{x86|AVX-512|<code>AVX-512</code>}}, specifically:
 +
*** {{x86|AVX512F|<code>AVX512F</code>}} - AVX-512 Foundation
 +
*** {{x86|AVX512CD|<code>AVX512CD</code>}} - AVX-512 Conflict Detection
 +
*** {{x86|AVX512BW|<code>AVX512BW</code>}} - AVX-512 Byte and Word
 +
*** {{x86|AVX512BW|<code>AVX512DQ</code>}} - AVX-512 Doubleword and Quadword
 +
*** {{x86|AVX512BW|<code>AVX512VL</code>}} - AVX-512 Vector Length
 +
** {{x86|PKU|<code>PKU</code>}} - Memory Protection Keys for Userspace
 +
** {{x86|PCOMMIT|<code>PCOMMIT</code>}} - PCOMMIT instruction
 +
** {{x86|CLWB|<code>CLWB</code>}} - CLWB instruction
  
 
=== Block Diagram ===
 
=== Block Diagram ===
 +
==== Client SoC ====
  
==== Entire SoC Overview (dual) ====
+
====== Entire SoC Overview (dual) ======
 
[[File:skylake soc block diagram (dual).svg|800px]]
 
[[File:skylake soc block diagram (dual).svg|800px]]
  
==== Entire SoC Overview (quad) ====
+
====== Entire SoC Overview (quad) ======
 
[[File:skylake soc block diagram.svg|900px]]
 
[[File:skylake soc block diagram.svg|900px]]
  
==== Individual Core ====
+
====== Individual Core ======
[[File:skylake block diagram.svg|900px]]
+
[[File:skylake block diagram.svg]]
  
==== Gen9 ====
+
====== Gen9 ======
 
See {{intel|Gen9#Gen9|l=arch}}.
 
See {{intel|Gen9#Gen9|l=arch}}.
 +
 +
==== Server MPUs ====
 +
===== Server Chip =====
 +
Note that the LCC die is identical without the two bottom rows. The XCC (28-core) die has one additional row and two additional columns of cores. Otherwise the die is identical.
 +
[[File:skylake sp hcc block diagram.svg|650px]]
 +
 +
* '''CHA''' - Caching and Home Agent
 +
* '''SF''' - Snooping Filter
 +
 +
===== Individual Core =====
 +
[[File:skylake server block diagram.svg|1100px]]
  
 
=== Memory Hierarchy ===
 
=== Memory Hierarchy ===
 +
==== Client ====
 
Other than a few organizational changes (e.g. L2$ went from 8-way to 4-way set associative), the overall memory structure is identical to {{\\|Broadwell}}/{{\\|Haswell}}.
 
Other than a few organizational changes (e.g. L2$ went from 8-way to 4-way set associative), the overall memory structure is identical to {{\\|Broadwell}}/{{\\|Haswell}}.
  
Line 361: Line 461:
 
**** fixed partition
 
**** fixed partition
 
*** 1G page translations:
 
*** 1G page translations:
**** 4 entries; 4-way set associative
+
**** 4 entries; fully associative
 
**** fixed partition
 
**** fixed partition
 
** STLB
 
** STLB
Line 372: Line 472:
 
<!-- ===================== END IF YOU CHANGE HERE, CHANGE ON KABY LAKE!! ============================= -->
 
<!-- ===================== END IF YOU CHANGE HERE, CHANGE ON KABY LAKE!! ============================= -->
  
 +
==== Server ====
 +
[[File:skylake x memory changes.png|right|400px]]
 +
The memory hierarchy for Skylake's server and HEDT processors has been rebalanced. Note that the L3 is now non-inclusive and some of the SRAM from the L3 cache was moved into the private L2 cache.
  
* '''Note:''' STLB is incorrectly reported as "6-way" by CPUID leaf 2 (EAX=02H). Skylake erratum SKL148 recommends software to simply ignore that value.
+
* Cache
 +
** L2 Cache:
 +
*** Unified, 1 MiB, 16-way set associative
 +
*** 64 B line size
 +
*** Non-inclusive
 +
*** 64 B/cycle bandwidth to L1$
 +
*** Write-back policy
 +
*** 14 cycles latency
 +
** L3 Cache:
 +
*** 1.375 MiB/s, shared across all cores
 +
**** Note that some models have non-default cache sizes which are larger due to some disabled cores
 +
*** 64 B line size
 +
*** 11-way set associative
 +
*** Non-Inclusive
 +
*** Write-back policy
 +
*** 50-70 cycles latency
  
== Overview ==
+
== Overview (Client) ==
 
Skylake inherits much of the {{\\|Core}} design philosophy which was enhanced significantly over the past number of architectures. Skylake, like its predecessor {{\\|Broadwell}}, is also a dual-threaded and complex [[out-of-order]] [[pipeline]]. Skylake which builds on Broadwell incorporates large number of enhancements that has improved performance and efficiency in order to cover a large spectrum of devices from ultra-low power to high-performance computing. Additionally, a large number of improvements were done to the [[integrated graphics]] and multimedia capabilities as well as a new set of security technologies were introduced.
 
Skylake inherits much of the {{\\|Core}} design philosophy which was enhanced significantly over the past number of architectures. Skylake, like its predecessor {{\\|Broadwell}}, is also a dual-threaded and complex [[out-of-order]] [[pipeline]]. Skylake which builds on Broadwell incorporates large number of enhancements that has improved performance and efficiency in order to cover a large spectrum of devices from ultra-low power to high-performance computing. Additionally, a large number of improvements were done to the [[integrated graphics]] and multimedia capabilities as well as a new set of security technologies were introduced.
  
Line 397: Line 515:
 
The Skylake [[system on a chip]] consists of a five major components: CPU core, [[last level cache|LLC]], Ring interconnect, System agent, and the [[integrated graphics]]. The image shown on the right, presented by Intel at the Intel Developer Forum in 2015, represents a hypothetical model incorporating all available features Skylake has to offer (i.e. [[superset]] of features). Skylake features an improved core (see [[#Pipeline|§ Pipeline]]) with higher performance per watt and higher performance per clock. The number of cores depends on the model, but mainstream mobile models are typically [[dual-core]] while mainstream desktop models are typically [[quad-core]] with dual-core desktop models still offered for value models (e.g. {{intel|Celeron}}). Accompanying the cores is the LCC ([[last level cache]] or [[L3$]] as seen from the CPU perspective). On mainstream parts the LLC consists of 2 MiB for each core with lower amounts for value models. Connecting the cores together is the ring interconnect. The ring extends to the GPU and the system agent as well. Intel further optimized the ring in Skylake for low-power and higher bandwidth.
 
The Skylake [[system on a chip]] consists of a five major components: CPU core, [[last level cache|LLC]], Ring interconnect, System agent, and the [[integrated graphics]]. The image shown on the right, presented by Intel at the Intel Developer Forum in 2015, represents a hypothetical model incorporating all available features Skylake has to offer (i.e. [[superset]] of features). Skylake features an improved core (see [[#Pipeline|§ Pipeline]]) with higher performance per watt and higher performance per clock. The number of cores depends on the model, but mainstream mobile models are typically [[dual-core]] while mainstream desktop models are typically [[quad-core]] with dual-core desktop models still offered for value models (e.g. {{intel|Celeron}}). Accompanying the cores is the LCC ([[last level cache]] or [[L3$]] as seen from the CPU perspective). On mainstream parts the LLC consists of 2 MiB for each core with lower amounts for value models. Connecting the cores together is the ring interconnect. The ring extends to the GPU and the system agent as well. Intel further optimized the ring in Skylake for low-power and higher bandwidth.
  
Accompanying the cores is the {{\\|Gen9}} [[integrated graphics]] unit which comes in a number of different tiers ranging from just 12 execution units (used in the ultra-low power models) all the way the GT4 ({{\\|gen9#Scalability|Gen9 § Pipeline}}) with 72 execution units boasting a peak performance of up to 2,534.4 GFLOPS (HF) / 1,267.2 GFLOPS (SP) on the highest-end workstation model. The two highest-tier models are also accompanied by dedicated [[eDRAM]] ranging from 64 to 128&nbsp;MiB in capacity. The eDRAM is packaged along with the SoC in the same package.
+
Accompanying the cores is the {{\\|Gen9}} [[integrated graphics]] unit which comes in a number of different tiers ranging from just 12 execution units (used in the ultra-low power models) all the way the GT4 ({{\\|gen9#Scalability|Gen9 § Pipeline}}) with 72 execution units boasting a peak performance of up to 2,534.4 GFLOPS (HF) / 1,267.2 GFLOPS (SP) on the highest-end workstation model. The two highest-tier models are also accompanied by dedicated [[eDRAM]] ranging from 64 GiB to 120 GiB in capacity. The eDRAM is packaged along with the SoC in the same package.
  
 
On the other side is the {{intel|System Agent}} (SA) which houses the various functionality that's not directly related to the cores or graphics. Skylake features an upgraded [[integrated memory controller]] (IMC) with most mainstream models supporting faster memory and dual-channel [[DDR4]]. The SA in Skylake also includes the [[Display Controller]] which now supports higher resolution displays with up to three displays for all mainstream models.
 
On the other side is the {{intel|System Agent}} (SA) which houses the various functionality that's not directly related to the cores or graphics. Skylake features an upgraded [[integrated memory controller]] (IMC) with most mainstream models supporting faster memory and dual-channel [[DDR4]]. The SA in Skylake also includes the [[Display Controller]] which now supports higher resolution displays with up to three displays for all mainstream models.
Line 405: Line 523:
 
The last component of the System Agent and an entirely new addition in Skylake is the Image Processing Unit (IPU) which incorporates an [[image signal processor]] (ISP) on-die. The IPU is only available on mobile models and was added in order to improve and streamline (i.e. form factor and consistent set of features and quality) the implementation and performance of tablets and 2-in-1s. Previously this would require the assistance of an external component and the implementations varied by designer.
 
The last component of the System Agent and an entirely new addition in Skylake is the Image Processing Unit (IPU) which incorporates an [[image signal processor]] (ISP) on-die. The IPU is only available on mobile models and was added in order to improve and streamline (i.e. form factor and consistent set of features and quality) the implementation and performance of tablets and 2-in-1s. Previously this would require the assistance of an external component and the implementations varied by designer.
  
== Core ==
+
== Core (Client) ==
 
=== Overview ===
 
=== Overview ===
 
Skylake shares most of the development vectors with its predecessor while introducing a one of new constraint. The overall goals were:
 
Skylake shares most of the development vectors with its predecessor while introducing a one of new constraint. The overall goals were:
Line 416: Line 534:
 
Intel has been experiencing a growing divergence in functionality over the last number of iterations of [[intel/microarchitectures|their microarchitecture]] between their mainstream consumer products and their high-end HPC/server models. Traditionally, Intel has been using the same exact core design for everything from their lowest end value models (e.g. {{intel|Celeron}}) all the way up to the highest-performance enterprise models (e.g. {{intel|Xeon E7}}). While the two have fundamentally different chip architectures, they use the same exact CPU core architecture as the building block.  
 
Intel has been experiencing a growing divergence in functionality over the last number of iterations of [[intel/microarchitectures|their microarchitecture]] between their mainstream consumer products and their high-end HPC/server models. Traditionally, Intel has been using the same exact core design for everything from their lowest end value models (e.g. {{intel|Celeron}}) all the way up to the highest-performance enterprise models (e.g. {{intel|Xeon E7}}). While the two have fundamentally different chip architectures, they use the same exact CPU core architecture as the building block.  
  
This design philosophy has changed with Skylake. In order to better accommodate the different functionalities of each segment without sacrificing features or making unnecessary compromises Intel went with a configurable core. The Skylake core is a single development project, making up a master superset core. The project result in two derivatives: {{\\|skylake (server)|one for servers}} and one for clients (the topic of this article). All mainstream models (from {{intel|Celeron}}/{{intel|Pentium (2009)|Pentium}} all the way up to {{intel|Core i7}}/{{intel|Xeon E3}}) use the client core configuration. Server models (e.g. {{intel|Xeon Gold}}/{{intel|Xeon Platinum}}) will be using {{\\|Skylake (server)|the new server configuration}}.
+
This design philosophy has changed with Skylake. In order to better accommodate the different functionalities of each segment without sacrificing features or making unnecessary compromises Intel went with a configurable core. The Skylake core is a single development project, making up a master superset core. The project result in two derivatives: one for servers and one for clients. All mainstream models (from {{intel|Celeron}}/{{intel|Pentium (2009)|Pentium}} all the way up to {{intel|Core i7}}/{{intel|Xeon E3}}) use the client core configuration. Server models (e.g. {{intel|Xeon E5}}/{{intel|Xeon E7}}) will be using the new server configuration.
  
 
The server core is considerably larger than the client one, featuring [[Advanced Vector Extensions 512]] (AVX-512). Skylake servers support what was formerly called AVX3.2 (AVX512F + AVX512CD + AVX512BW + AVX512DQ + AVX512VL). Additionally, those processors Memory Protection Keys for Userspace (PKU), {{x86|PCOMMIT}}, and {{x86|CLWB}}.
 
The server core is considerably larger than the client one, featuring [[Advanced Vector Extensions 512]] (AVX-512). Skylake servers support what was formerly called AVX3.2 (AVX512F + AVX512CD + AVX512BW + AVX512DQ + AVX512VL). Additionally, those processors Memory Protection Keys for Userspace (PKU), {{x86|PCOMMIT}}, and {{x86|CLWB}}.
Line 434: Line 552:
 
Some µOPs deal with memory access (e.g. [[instruction load|load]] & [[instruction store|store]]). Those will be sent on dedicated scheduler ports that can perform those memory operations. Store operations go to the store buffer which is also capable of performing forwarding when needed. Likewise, Load operations come from the load buffer. Skylake features a dedicated 32 KiB level 1 data cache and a dedicated 32 KiB level 1 instruction cache. It also features a core-private 256 KiB L2 cache that is shared by both of the L1 caches.
 
Some µOPs deal with memory access (e.g. [[instruction load|load]] & [[instruction store|store]]). Those will be sent on dedicated scheduler ports that can perform those memory operations. Store operations go to the store buffer which is also capable of performing forwarding when needed. Likewise, Load operations come from the load buffer. Skylake features a dedicated 32 KiB level 1 data cache and a dedicated 32 KiB level 1 instruction cache. It also features a core-private 256 KiB L2 cache that is shared by both of the L1 caches.
  
Each core enjoys a slice of a third level of cache that is shared by all the core. For Skylake, there are either [[two cores]] or [[four cores]] connected together on a single chip.
+
Each core enjoys a slice of a third level of cache that is shared by all the core. In the client configuration for Skylake, there are either [[two cores]] or [[four cores]] connected while in the server configuration, up to [[28 cores]] may be hooked together on a single chip.
 
{{clear}}
 
{{clear}}
  
 
==== Front-end ====
 
==== Front-end ====
The front-end is tasked with the challenge of fetching the complex [[x86]] instructions from memory, decoding them, and delivering them to the execution units. In other words, the front end needs to be able to consistently deliver enough [[µOPs]] from the instruction code stream to keep the back-end busy. When the back-end is not being fully utilized, the core is not reaching its full performance. A poorly or under-performing front-end will translate directly to a poorly performing core. This challenge is further complicated by various redirection such as branches and the complex nature of the [[x86]] instructions themselves.
+
The front-end is is tasked with the challenge of fetching the complex [[x86]] instructions from memory, decoding them, and delivering them to the execution units. In other words, the front end needs to be able to consistently deliver enough [[µOPs]] from the instruction code stream to keep the back-end busy. When the back-end is not being fully utilized, the core is not reaching its full performance. A poorly or under-performing front-end will translate directly to a poorly performing core. This challenge is further complicated by various redirection such as branches and the complex nature of the [[x86]] instructions themselves.
  
 
===== Fetch & pre-decoding =====  
 
===== Fetch & pre-decoding =====  
On their first pass, instructions should have already been prefetched from the [[L2 cache]] and into the [[L1 cache]]. The L1 is a 32 [[KiB]], 8-way set associative cache, identical in size and organization to {{intel|microarchitectures|previous generations}}. Skylake fetching is done on a 16-byte fetch window. A window size that has not changed in a number of generations. Up to 16 bytes of code can be fetched each cycle. Note that fetcher is shared evenly between the two threads so that each thread gets every other cycle. At this point they are still [[macro-ops]] (i.e. variable-length [[x86]] architectural instruction). Instructions are brought into the pre-decode buffer for initial preparation.
+
On their first pass, instructions should have already been prefetched from the [[L2 cache]] and into the [[L1 cache]]. The L1 is a 32 [[KiB]], 8-way set associative cache, identical in size and organization to {{intel|microarchitectures|previous generations}}. Skylake fetching is done on a 16-byte fetch window. A window size that has not changed in a number of generations. Up to 16 bytes of code can be fetched each cycle. Note that fetcher is shared evenly between two thread, so that each thread gets every other cycle. At this point they are still [[macro-ops]] (i.e. variable-length [[x86]] architectural instruction). Instructions are brought into the pre-decode buffer for initial preparation.
  
 
[[File:skylake fetch.svg|left|300px]]
 
[[File:skylake fetch.svg|left|300px]]
  
[[x86]] instructions are complex, variable length, have inconsistent encoding, and may contain multiple operations. At the pre-decode buffer, the instructions boundaries get detected and marked. This is a fairly difficult task because each instruction can vary from a single byte all the way up to fifteen. Moreover, determining the length requires inspecting a couple of bytes of the instruction. In addition to boundary marking, prefixes are also decoded and checked for various properties such as branches. As with previous microarchitectures, the pre-decoder has a [[throughput]] of 6 [[macro-ops]] per cycle or until all 16 bytes are consumed, whichever happens first. Note that the predecoder will not load a new 16-byte block until the previous block has been fully exhausted. For example, suppose a new chunk was loaded, resulting in 7 instructions. In the first cycle, 6 instructions will be processed and a whole second cycle will be wasted for that last instruction. This will produce the much lower throughput of 3.5 instructions per cycle which is considerably less than optimal. Likewise, if the 16-byte block resulted in just 4 instructions with 1 byte of the 5th instruction received, the first 4 instructions will be processed in the first cycle and a second cycle will be required for the last instruction. This will produce an average throughput of 2.5 instructions per cycle. Note that there is a special case for {{x86|length-changing prefix}} (LCPs) which will incur additional pre-decoding costs. Real code is often less than 4 bytes which usually results in a good rate.  
+
[[x86]] instructions are complex, variable length, have inconsistent encoding, and may contain multiple operations. At the pre-decode buffer the instructions boundaries get detected and marked. This is a fairly difficult task because each instruction can vary from a single byte all the way up to fifteen. Moreover, determining the length requires inspecting a couple of bytes of the instruction. In addition boundary marking, prefixes are also decoded and checked for various properties such as branches. As with previous microarchitectures, the pre-decoder has a [[throughput]] of 6 [[macro-ops]] per cycle or until all 16 bytes are consumed, whichever happens first. Note that the predecoder will not load a new 16-byte block until the previous block has been fully exhausted. For example, suppose a new chunk was loaded, resulting in 7 instructions. In the first cycle, 6 instructions will be processed and a whole second cycle will be wasted for that last instruction. This will produce the much lower throughput of 3.5 instructions per cycle which is considerably less than optimal. Likewise, if the 16-byte block resulted in just 4 instructions with 1 byte of the 5th instruction received, the first 4 instructions will be processed in the first cycle and a second cycle will be required for the last instruction. This will produce an average throughput of 2.5 instructions per cycle. Note that there is a special case for {{x86|length-changing prefix}} (LCPs) which will incur additional pre-decoding costs. Real code is often less than 4 bytes which usually results in a good rate.  
  
 
All of this works along with the branch prediction unit which attempts to guess the flow of instructions. In Skylake, the [[branch predictor]] has also been improved. The branch predictor now has reduced penalty (i.e. lower latency) for wrong direct jump target prediction. Additionally, the predictor in Skylake can inspect further in the byte stream than in previous architectures. The intimate improvements done in the branch predictor were not further disclosed by Intel.
 
All of this works along with the branch prediction unit which attempts to guess the flow of instructions. In Skylake, the [[branch predictor]] has also been improved. The branch predictor now has reduced penalty (i.e. lower latency) for wrong direct jump target prediction. Additionally, the predictor in Skylake can inspect further in the byte stream than in previous architectures. The intimate improvements done in the branch predictor were not further disclosed by Intel.
Line 458: Line 576:
 
| <pre>cmpjne eax, [mem], loop</pre>
 
| <pre>cmpjne eax, [mem], loop</pre>
 
|}
 
|}
{{see also|macro-operation fusion|l1=Macro-Operation Fusion}}
+
{{see also|Macro-Operation Fusion}}
The pre-decoded instructions are delivered to the Instruction Queue (IQ). In {{\\|Broadwell}}, the Instruction Queue has been increased to 25 entries duplicated over for each thread (i.e. 50 total entries). It's unclear if that has changed with Skylake. One key optimization the instruction queue does is [[macro-op fusion]]. Skylake can fuse two [[macro-ops]] into a single complex one in a number of cases. In cases where a {{x86|test}} or {{x86|compare}} instruction with a subsequent conditional jump is detected, it will be converted into a single compare-and-branch instruction. Those fused instructions remain fused throughout the entire pipeline and get executed as a single operation by the branch unit thereby saving bandwidth everywhere. Only one such fusion can be performed during each cycle.
+
The pre-decoded instructions are delivered to the Instruction Queue (IQ). In {{\\|Broadwell}}, the Instruction Queue has been increased to 25 entries duplicated over for each thread (i.e. 50 total entries). It's unclear if that has changed with Skylake. One key optimization the instruction queue does is [[macro-op fusion]]. Skylake can fuse two [[macro-ops]] into a single complex one in a number of cases. In cases where a {{x86|test}} or {{x86|compare}} instruction with a subsequent conditional jump is detected, it will be converted into a single compare-and-branch instruction. Those fused instructions remain fused throughout the entire pipeline and get executed as a single operation by the branch unit thereby saving bandwidth everywhere. Only one such fusion can be performed each cycle.
  
 
===== Decoding =====
 
===== Decoding =====
 
[[File:skylake decode.svg|right|425px]]
 
[[File:skylake decode.svg|right|425px]]
Up to four pre-decoded instructions are sent to the decoders each cycle. Like the fetchers, the Decoders alternate between the two thread each cycle. Decoders read in [[macro-operations]] and emit regular, fixed length [[µOPs]]. Skylake represents a big genealogical change from the last couple of microarchitectures. Skylake's pipeline is wider than it predecessors; Skylake adds another [[simple decoder]]. The five decoders are asymmetric; the first one, Decoder 0,  is a [[complex decoder]] while the other four are [[simple decoders]]. A simple decoder is capable of translating instructions that emit a single fused-[[µOP]]. By contrast, a [[complex decoder]] can decode anywhere from one to four fused-µOPs. Skylake is now capable of decoding 4 macro-ops per cycle, same as {{\\|Broadwell}}. Overall up to 4 simple instructions can be decoded each cycle with lesser amounts if the complex decoder needs to emit addition µOPs; i.e., for each additional µOP the complex decoder needs to emit, 1 less simple decoder can operate. In other words, for each additional µOP the complex decoder emits, one less decoder is active.
+
Up to five pre-decoded instructions are sent to the decoders each cycle. Like the fetchers, the Decoders alternate between the two thread each cycle. Decoders read in [[macro-operations]] and emit regular, fixed length [[µOPs]]. Skylake represents a big genealogical change from the last couple of microarchitectures. Skylake's pipeline is wider than it predecessors; Skylake adds another [[simple decoder]]. The five decoders are asymmetric; the first one, Decoder 0,  is a [[complex decoder]] while the other four are [[simple decoders]]. A simple decoder is capable of translating instructions that emit a single fused-[[µOP]]. By contrast, a [[complex decoder]] can decode anywhere from one to four fused-µOPs. Skylake is now capable of decoding 5 macro-ops per cycle or 25% more than {{\\|Broadwell}}, however this does not translates directly to direct IPC uplift to due to various other more restricting points in the pipeline. Intel chose not increase the number of complex decoders because it's much harder to extract additional parallelism from the µOPs emitted by a complex instruction. Overall up to 5 simple instructions can be decoded each cycle with lesser amounts if the complex decoder needs to emit addition µOPs; i.e., for each additional µOP the complex decoder needs to emit, 1 less simple decoder can operate. In other words, for each additional µOP the complex decoder emits, one less decoder is active.
  
 
====== MSROM & Stack Engine ======
 
====== MSROM & Stack Engine ======
 
There are more complex instructions that are not trivial to be decoded even by complex decoder. For instructions that transform into more than four µOPs, the instruction detours through the [[microcode sequencer]] (MS) ROM. When that happens, up to 4 µOPs/cycle are emitted until the microcode sequencer is done. During that time, the decoders are disabled.
 
There are more complex instructions that are not trivial to be decoded even by complex decoder. For instructions that transform into more than four µOPs, the instruction detours through the [[microcode sequencer]] (MS) ROM. When that happens, up to 4 µOPs/cycle are emitted until the microcode sequencer is done. During that time, the decoders are disabled.
  
[[x86]] has dedicated [[stack machine]] operations. Instructions such as <code>{{x86|PUSH}}</code>, <code>{{x86|POP}}</code>, as well as <code>{{x86|CALL}}</code>, and <code>{{x86|RET}}</code> all operate on the [[stack pointer]] (<code>{{x86|ESP}}</code>). Without any specialized hardware, such operations would need to be sent to the back-end for execution using the general purpose ALUs, using up some of the bandwidth and utilizing scheduler and execution units resources. Since {{\\|Pentium M}}, Intel has been making use of a [[Stack Engine]]. The Stack Engine has a set of three dedicated adders it uses to perform and eliminate the stack-updating µOPs (i.e. capable of handling three additions per cycle). Instruction such as <code>{{x86|PUSH}}</code> are translated into a store and a subtraction of 4 from <code>{{x86|ESP}}</code>. The subtraction in this case will be done by the Stack Engine. The Stack Engine sits after the [[instruction decode|decoders]] and monitors the µOPs stream as it passes by. Incoming stack-modifying operations are caught by the Stack Engine. This operation alleviate the burden of the pipeline from stack pointer-modifying µOPs. In other words, it's cheaper and faster to calculate stack pointer targets at the Stack Engine than it is to send those operations down the pipeline to be done by the execution units (i.e., general purpose ALUs).
+
[[x86]] has dedicated [[stack machine]] operations. Instructions such as <code>{{x86|PUSH}}</code>, <code>{{x86|POP}}</code>, as well as <code>{{x86|CALL}}</code>, and <code>{{x86|RET}}</code> all operate on the [[stack pointer]] (<code>{{x86|ESP}}</code>). Without any specialized hardware, such operations would would need to be sent to the back-end for execution using the general purpose ALUs, using up some of the bandwidth and utilizing scheduler and execution units resources. Since {{\\|Pentium M}}, Intel has been making use of a [[Stack Engine]]. The Stack Engine has a set of three dedicated adders it uses to perform and eliminate the stack-updating µOPs (i.e. capable of handling three additions per cycle). Instruction such as <code>{{x86|PUSH}}</code> are translated into a store and a subtraction of 4 from <code>{{x86|ESP}}</code>. The subtraction in this case will be done by the Stack Engine. The Stack Engine sits after the [[instruction decode|decoders]] and monitors the µOPs stream as it passes by. Incoming stack-modifying operations are caught by the Stack Engine. This operation alleviate the burden of the pipeline from stack pointer-modifying µOPs. In other words, it's cheaper and faster to calculate stack pointer targets at the Stack Engine than it is to send those operations down the pipeline to be done by the execution units (i.e., general purpose ALUs).
  
 
===== µOP cache & x86 tax =====
 
===== µOP cache & x86 tax =====
{{see also|intel/microarchitectures/sandy_bridge_(client)#New_.C2.B5OP_cache_.26_x86_tax|l1=Sandy Bridge § New µOP cache}}
 
 
[[File:skylake ucache.svg|right|400px]]
 
[[File:skylake ucache.svg|right|400px]]
Decoding the variable-length, inconsistent, and complex [[x86]] instructions is a nontrivial task. It's also expensive in terms of performance and power. Therefore, the best way for the pipeline to avoid those things is to simply not decode the instructions. This is the job of the [[µOP cache]] or the Decoded Stream Buffer (DSB). Skylake's µOP cache is organized similarly to all previous generations since its introduction in {{\\|Sandy Bridge}}, however both the bandwidth and the tracking window was increased. The cache is organized into 32 sets of 8 cache lines with each line holding up to 6 µOP for a total of 1,536 µOPs. Since Sandy Bridge, the µOP cache operated on 32-byte fetch windows. In Skylake, the window size has been doubled to 64 bytes. The micro-operation cache is competitively shared between the two threads and can also hold pointers to the microcode. The µOP cache has an average hit rate of 80% or greater.
+
Decoding the variable-length, inconsistent, and complex [[x86]] instructions is a nontrivial task. It's also expensive in terms of performance and power. Therefore, the best way for the pipeline to avoid those things is to simply not decode the instructions. This is the job of the [[µOP cache]] or the Decoded Stream Buffer (DSB). Skylake's µOP cache is organized similarly to previous generations like {{\\|Sandy Bridge}}, however both the bandwidth and the tracking window was increased. The cache is organized into 32 sets of 8 cache lines with each line holding up to 6 µOP for a total of 1,536 µOPs. Whereas previously (e.g. {{\\|Haswell}}) the µOP cache operated on 32-byte windows, in Skylake the window size has been doubled to 64-bytes. The micro-operation cache is competitively shared between the two threads and can also hold pointers to the microcode. The µOP cache has an average hit rate of 80%.
  
A hit in the µOP allows for up to 6 µOPs (i.e., entire line) per cycle to be sent directly to the Instruction Decode Queue (IDQ), bypassing all the pre-decoding and decoding that would otherwise have to be done. Whereas the legacy decode path works in 16-byte instruction fetch windows, the µOP cache has no such restriction and can deliver 6 µOPs/cycle corresponding to the much bigger 64-byte window. Previously (e.g., {{\\|Broadwell}}), the bandwidth was lower at 4 µOP per cycle. The 1.5x bandwidth increase greatly improves the numbers of µOP that the back-end can take advantage of in the [[out-of-order]] part of the machine. This change attempts to improve instruction rate by alleviating [[bubbles]], however everything is still hard-limited by the [[#Renaming & Allocation|rename and retire]] which puts an absolute ceiling rate of four fused µOPs per cycle.
+
A hit in the µOP allows for up to 6 µOP (i.e., entire line) per cycle to be sent directly to the Instruction Decode Queue (IDQ), bypassing all the pre-decoding and decoding that would otherwise have to be done. Whereas the legacy decode path works in 16-byte instruction fetch windows, the µOP cache has no such restriction and can deliver 6 µOP/cycle corresponding to the much bigger 64-byte window. Previously (e.g., {{\\|Broadwell}}), the bandwidth was lower at 4 µOP per cycle. The 1.5x bandwidth increase greatly improves the numbers of µOP that the back-end can take advantage of in the [[out-of-order]] part of the machine.
  
 
===== Allocation Queue =====
 
===== Allocation Queue =====
Line 485: Line 602:
 
The LSD in Skylake can take advantage of the considerably larger IDQ; capable of detecting loops up to 64 µOPs per thread. The LSD is particularly excellent in for many common algorithms that are found in many programs (e.g., tight loops, intensive calc loops, searches, etc..).
 
The LSD in Skylake can take advantage of the considerably larger IDQ; capable of detecting loops up to 64 µOPs per thread. The LSD is particularly excellent in for many common algorithms that are found in many programs (e.g., tight loops, intensive calc loops, searches, etc..).
  
* '''NOTE:''' A microcode update appear to have disabled the LSD on client processors. See {{\\|skylake_(server)#Front-end|Skylake (server) § Front-end}}. Also see erratum SKL150.
+
* '''NOTE:''' A microcode update appear to have disabled the LSD on client processors. See [[#Front-end_2Server Front-end]].
  
 
==== Execution engine ====
 
==== Execution engine ====
Line 492: Line 609:
  
 
===== Renaming & Allocation =====
 
===== Renaming & Allocation =====
Like the front-end, the [[Reorder Buffer]] has been increased to 224 entries, 32 entries more than {{\\|Broadwell}}. Since each ROB entry holds complete µOPs, in practice 224 entries might be equivalent to as much as 350 µOPs depending on the code being executed (e.g. fused load/stores). It is at this stage that [[architectural registers]] are mapped onto the underlying [[physical registers]]. Other additional bookkeeping tasks are also done at this point such as allocating resources for stores, loads, and determining all possible scheduler ports. Register renaming is also controlled by the [[Register Alias Table]] (RAT) which is used to mark where the data we depend on is coming from (after that value, too, came from an instruction that has previously been renamed). In {{intel|microarchitectures|previous microarchitectures}}, the RAT could handle 4 µOPs each cycle. Intel has not disclosed if that has changed in Skylake but it's possible. If unchanged, Skylake can rename any four registers per cycle. This includes the same register renamed four times in a single cycle. If the rename has not increased in Skylake, some aspects of improvements that were done in the prefetch/decode stages are effectively lost. Note that the ROB still operates on fused µOPs, therefore 4 µOPs can effectively be as high as 8 µOPs.
+
Like the front-end, the [[Reorder Buffer]] has been increased to 224 entries, 32 entries more than {{\\|Broadwell}}. It is at this stage that [[architectural registers]] are mapped onto the underlying [[physical registers]]. Other additional bookkeeping tasks are also done at this point such as allocating resources for stores, loads, and determining all possible scheduler ports. Register renaming is also controlled by the [[Register Alias Table]] (RAT) which is used to mark where the data we depend on is coming from (after that value, too, came from an instruction that has previously been renamed). In {{intel|microarchitectures|previous microarchitectures}}, the RAT could handle 4 µOPs each cycle. Intel has not disclosed if that has changed in Skylake but it's possible. If this has not change, Skylake can rename any four registers per cycle. This includes the same register renamed four times in a single cycle. If the rename has not increased in Skylake, some aspects of improvements that were done in the prefetch/decode stages are effectively lost. Note that the ROB still operates on fused µOPs, therefore 4 µOPs can effectively be as high as 8 µOPs.
  
 
It should be noted that there is no special costs involved in splitting up fused µOPs before execution or [[retirement]] and the two fused µOPs only occupy a single entry in the ROB.
 
It should be noted that there is no special costs involved in splitting up fused µOPs before execution or [[retirement]] and the two fused µOPs only occupy a single entry in the ROB.
Line 499: Line 616:
  
 
===== Optimizations =====
 
===== Optimizations =====
Skylake has a number of optimizations it performs prior to entering the out-of-order and renaming part. Three of those optimizations include [[Move Elimination]] and [[Zeroing Idioms]], and [[Ones Idioms]]. A Move Elimination is capable of eliminating register-to-register moves (including chained moves) prior to bookkeeping at the ROB, allowing those µOPs to save resources and eliminating them entirely. Eliminated moves are zero latency and are entirely removed from the pipeline. This optimization does not always succeed; when it fails, the operands were simply not ready. On average this optimization is almost always successful (upward of 85% in most cases). Move elimination works on all 32- and 64-bit GP integer registers as well as all 128- and 256-bit vector registers.
+
Skylake as a number of optimizations it performs prior to entering the out-of-order and renaming part. Three of those optimizations include [[Move Elimination]] and [[Zeroing Idioms]], and [[Ones Idioms]]. A Move Elimination is capable of eliminating register-to-register moves (including chained moves) prior to bookkeeping at the ROB, allowing those µOPs to save resources and eliminating them entirely. Eliminated moves are zero latency and are entirely removed from the pipeline. This optimization does not always succeed; when it fails, the operands were simply not ready. On average this optimization is almost always successful (upward of 85% in most cases). Move elimination works on all 32- and 64-bit GP integer registers as well as all 128- and 256-bit vector registers.
 
{| style="border: 1px solid gray; float: right; margin: 10px; padding: 5px; width: 350px;"
 
{| style="border: 1px solid gray; float: right; margin: 10px; padding: 5px; width: 350px;"
 
| [[Zeroing Idiom]] Example:
 
| [[Zeroing Idiom]] Example:
Line 505: Line 622:
 
| <pre>xor eax, eax</pre>
 
| <pre>xor eax, eax</pre>
 
|-
 
|-
| Not only does this instruction get eliminated at the ROB, but it's actually encoded as just 2 bytes <code>31 C0</code> vs the 5 bytes for <code>{{x86|mov}} {{x86|eax}}, 0x0</code> which is encoded as <code>b8 00 00 00 00</code>.
+
| Not only does this instruction get eliminated at the ROB, but it's actually encoded as just 2 bytes <code>31 C0</code> vs the 4 bytes for <code>{{x86|mov}} {{x86|eax}}, 0x0</code> which is encoded as <code>b8 00 00 00 00</code>.
 
|}
 
|}
 
There are some exceptions that Skylake will not optimize, most dealing with [[signedness]]. [[sign extension|sign-extended]] moves cannot be eliminated and neither can zero-extended from 16-bit to 32/64 big registers (note that 8-bit to 32/64 works). Likewise, in the other direction, no moves to 8/16-bit registers can be eliminated. A move of a register to itself is never eliminated.
 
There are some exceptions that Skylake will not optimize, most dealing with [[signedness]]. [[sign extension|sign-extended]] moves cannot be eliminated and neither can zero-extended from 16-bit to 32/64 big registers (note that 8-bit to 32/64 works). Likewise, in the other direction, no moves to 8/16-bit registers can be eliminated. A move of a register to itself is never eliminated.
Line 511: Line 628:
 
When instructions use registers that are independent of their prior values, another optimization opportunity can be exploited. A second common optimization performed in Skylake around the same time is [[Zeroing Idioms]] elimination. A number common zeroing idioms are recognized and consequently eliminated in much the same way as the move eliminations are performed. Skylake recognizes instructions such as <code>{{x86|XOR}}</code>, <code>{{x86|PXOR}}</code>, and <code>{{x86|XORPS}}</code> as zeroing idioms when the [[source operand|source]] and [[destination operand|destination]] operands are the same. Those optimizations are done at the same rate as renaming during renaming (at 4 µOPs per cycle) and the register is simply set to zero.
 
When instructions use registers that are independent of their prior values, another optimization opportunity can be exploited. A second common optimization performed in Skylake around the same time is [[Zeroing Idioms]] elimination. A number common zeroing idioms are recognized and consequently eliminated in much the same way as the move eliminations are performed. Skylake recognizes instructions such as <code>{{x86|XOR}}</code>, <code>{{x86|PXOR}}</code>, and <code>{{x86|XORPS}}</code> as zeroing idioms when the [[source operand|source]] and [[destination operand|destination]] operands are the same. Those optimizations are done at the same rate as renaming during renaming (at 4 µOPs per cycle) and the register is simply set to zero.
  
The [[ones idioms]] is another dependency breaking idiom that can be optimized. In all the various {{x86|PCMPEQ|PCMPEQx}} instructions that perform packed comparison the same register with itself always set all bits to one. On those cases, while the µOP still has to be executed, the instructions may be scheduled as soon as possible because the current state of the register need not be known.
+
The [[ones idioms]] is another dependency breaking idiom that can be optimized. In all the various {{x86|PCMPEQ|PCMPEQx}} instructions that perform packed comparison the same register with itself always set all bits to one. On those cases, while the µOP still has to be executed, the instructions may be scheduled as soon as possible because all the decencies are resolved.
  
 
===== Scheduler =====
 
===== Scheduler =====
 
[[File:skylake scheduler.svg|right|500px]]
 
[[File:skylake scheduler.svg|right|500px]]
The scheduler itself was increased by 50%; with up to 97 entries (from 64 in {{\\|Broadwell}}) being competitively shared between the two threads. Skylake continues with a unified design; this is in contrast to designs such as [[AMD]]'s {{amd|Zen|l=arch}} which uses a split design each one holding different types of µOPs. Scheduler includes the two register files for integers and vectors. It's in those [[register files]] that output operand data is stored. In Skylake, the [[integer]] [[register file]] was also slightly increased from 160 entries to 180.
+
The scheduler itself was increased by 50%; with up to 97 entries (from 64 in {{\\|Broadwell}}) being competitively shared between the two threads. Skylake continues with a unified design; this is in contrast to designs such as [[AMD]]'s {{amd|Zen|l=arch}} which uses a split design each one holding different types of µOPs. Scheduler includes the two register files for integers and vectors. It's in those [[register files]] that output operand data is store. In Skylake, the [[integer]] [[register file]] was also slightly increased from 160 entries to 180.
  
At this point µOPs are not longer fused and will be dispatched to the execution units independently. The scheduler holds the µOPs while they wait to be executed. A µOP could be waiting on an operand that has not arrived (e.g., fetched from memory or currently being calculated from another µOPs) or because the execution unit it needs is busy. Once the µOP is ready, it is dispatched through its designated port. The scheduler will send the oldest ready µOP to be executed on each of the eight ports each cycle.
+
At this point µOPs are not longer fused and will be dispatched to the execution units independently. The scheduler holds the µOPs while they wait to be executed. A µOP could be waiting on an operand that has not arrived (e.g., fetched from memory or currently being calculated from another µOPs) or because the execution unit it needs is busy. Once the µOP is ready, they are dispatched through their designated port. The scheduler will send the oldest ready µOP to be executed on each of the eight ports each cycle.
  
The scheduler had its ports rearranged to better balance various instructions. For example, divide and [[sqrt]] instructions latency and throughput were improved. The latency and throughput of [[floating point]] ADD, MUL, and FMA were made uniform at 4 cycles with a throughput of 2 µOPs/clock. Likewise the latency of {{x86|AES|AES instructions}} were significantly reduced from 7 cycles down to 4.
+
The scheduler had its ports rearranged to better balance various instructions. For example, divide and [[sqrt]] instructions latency and throughput were improved. The latency and throughput of [[floating point]] ADD, MUL, and FMA were made uniformed at 4 cycles with a throughput of 2 µOPs/clock. Likewise the latency of {{x86|AES|AES instructions}} were significantly reduced from 7 cycles down to 4.
  
 
====== Scheduler Ports & Execution Units ======
 
====== Scheduler Ports & Execution Units ======
Line 580: Line 697:
 
==== Memory subsystem ====
 
==== Memory subsystem ====
 
[[File:skylake mem subsystem.svg|right|300px]]
 
[[File:skylake mem subsystem.svg|right|300px]]
Skylake's memory subsystem is in charge of the loads and store requests and ordering. Since {{\\|Haswell}}, it's possible to sustain two memory reads (on ports 2 and 3) and one memory write (on port 4) each cycle. Each memory operation can be of any register size up to 256 bits. Skylake memory subsystem has been improved. The store buffer has been increased by 42 entries from {{\\|Broadwell}} to 56 for a total of 128 simultaneous memory operations in-flight or roughly 60% of all µOPs. Special care was taken to reduce the penalty for page-split loads; previously scenarios involving page-split loads were thought to be rarer than they actually are. This was addressed in Skylake with page-split loads are now made equal to other splits loads. Expect page split load penalty down to 5 cycles from 100 cycles in {{\\|Broadwell}}. The average latency to forward a load to store has also been improved and stores that miss in the L1$ generate L2$ requests to the next level cache much earlier in Skylake than before.
+
Skylake's memory subsystem is in charge of the loads and store requests and ordering. Since {{\\|Haswell}}, it's possible to sustain two memory reads (on ports 2 and 3) and one memory write (on port 4) each cycle. Each memory operation can be of any register size up to 256 bits. Skylake memory subsystem has been improved. The store buffer has been increased by 14 entries from {{\\|Broadwell}} to 56 for a total of 128 simultaneous memory operations in-flight or roughly 60% of all µOPs. Special care was taken to reduce the penalty for page-split loads; previously scenarios involving page-split loads were thought to be rarer than they actually are. This was addressed in Skylake with page-split loads are now made equal to other splits loads. Expect page split load penalty down to 5 cycles from 100 cycles in {{\\|Broadwell}}. The average latency to forward a load to store has also been improved and stores that miss in the L1$ generate L2$ requests to the next level cache much earlier in Skylake than before.
  
The L2 to L1 bandwidth in Skylake is the same as {{\\|Haswell}} at 64 bytes per cycle in either direction. Note that one operation can be done each cycle; i.e., the L1 can either receive data from the L2 or send data to the Load/Store buffers each cycle, but not both. Latency from L2$ to L3$ has also been decreased from 4 cycles/line to 2 cycles/line. The bandwidth from the level 2 cache to the shared level 3 is 32 bytes per cycle.
+
The L2 to L1 bandwidth in Skylake is the same as {{\\|Haswell}} at 64 bytes per cycle in either direction. Note that one operation can be done each cycle; i.e., the L1 can either receive data from the L1 or send data to the Load/Store buffers each cycle, but not both. Latency from L2$ to L3$ has also been increased from 4 cycles/line to 2 cycles/line. The bandwidth from the level 2 cache to the shared level 3 is 32 bytes per cycle.
  
 
=== eDRAM architectural changes ===
 
=== eDRAM architectural changes ===
Line 599: Line 716:
 
The new eDRAM changes mean it's no longer architectural - capable of caching any data (including "unreachable memory", display engines, and effectively any memory transfer not bound by software restrictions) and is entirely invisible to software (one exception noted later) in terms of coherency (note that no flushing is thus necessary to maintain coherency), ordering, or other organizational details. For optimal graphics performance, the graphics driver may decide to limit certain memory accesses to only the eDRAM, only the LLC, or in both of them.
 
The new eDRAM changes mean it's no longer architectural - capable of caching any data (including "unreachable memory", display engines, and effectively any memory transfer not bound by software restrictions) and is entirely invisible to software (one exception noted later) in terms of coherency (note that no flushing is thus necessary to maintain coherency), ordering, or other organizational details. For optimal graphics performance, the graphics driver may decide to limit certain memory accesses to only the eDRAM, only the LLC, or in both of them.
  
== Configurability ==
+
== Overview (Server) ==
 +
[[File:skylake sp (superset features).png|right|300px]]
 +
Skylake-based servers have been entirely re-architected to meet the need for increased scalabiltiy and performance all while meeting power requirements. A superset model is shown on the right. Skylake-based servers are the first mainstream servers to make use of Intel's new mesh interconnect architecture, an architecture that was previously explored, experimented with, and enhanced with Intel's {{intel|Phi}} [[many-core processors]]. Those processors are offered from [[4 cores]] up to [[28 cores]] with 8 to 56 threads. With Skylake, Intel now has a separate core architecture for those chips which incorporate a plethora of new technologies and features including support for the new {{x86|AVX-512}} instruction set extension.
 +
 
 +
All models incorporate 6 channels of DDR4 supporting up to 12 DIMMS for a total of 768 GiB (with extended models support 1.5 TiB). For I/O all models incorporate 48x (3x16) lanes of PCIe 3.0. There is an additional x4 lanes PCIe 3.0 reserved exclusively for DMI for the the {{intel|Lewisburg|l=chipset}} chipset. For a selected number of models (specifically those with ''F'' suffix) have an {{intel|Omni-Path}} Host Fabric Interface (HFI) on-package (see [[#Integrated_Omni-Path|Integrated Omni-Path]]).
 +
 
 +
Skylake processors are designed for scalability, supporting 2-way, 4-way, and 8-way multiprocessing through Intel's new {{intel|Ultra Path Interconnect}} (UPI) interconnect links, with two to three links being offered (see [[#Scalability|§ Scalability]]). High-end models have node controller support allowing higher way (e.g., 32-way multiprocessing).
 +
 
 +
== Server Architecture ==
 +
There are a number of major differences in the Skylake server configuration vs the client configuration.
 +
=== Pipeline ===
 +
All the changes and improvements done to the client pipeline is also found in the server configuration.
 +
==== Front-end ====
 +
Other than the large amount of changes described in [[#Front-end|client front-end]], there are no server-specific changes that were done to the front-end with the exception of the LSD. The Loop Stream Detector (LSD) has been disabled. While the exact reason is not known, it might be related to a severe issue that [https://lists.debian.org/debian-devel/2017/06/msg00308.html was experienced by] the OCaml Development Team. The issue [https://lists.debian.org/debian-devel/2017/06/msg00308.html was patched via microcode] on the client platform, however this change might indicate it was possibly disabled on there as well. The exact implications of this are unknown.
 +
 
 +
==== Execution engine ====
 +
[[File:skylake scheduler server.svg|right|500px]]
 +
This is the first implementation to incorporate {{x86|AVX-512}}, a 512-bit [[SIMD]] [[x86]] instruction set extension. Intel introduced AVX-512 in two different ways:
 +
 
 +
In the simple implementation, the variants used in the {{intel|Xeon Bronze|entry-level}} and {{intel|Xeon Silver|mid-range}} Xeon servers, AVX-512 fuses Port 0 and Port 1 to form a 512-bit unit. Since those two ports are 256-wide, an AVX-512 option that is dispatched by the scheduler to port 0 will execute on both ports. Note that unrelated operations can still execute in parallel. For example, an AVX-512 operation and an Int ALU operation may execute in parallel - the AVX-512 is dispatched on port 0 and use the AVX unit on port 1 as well and the Int ALU operation will execute independently in parallel on port 1.
 +
 
 +
In the {{intel|Xeon Gold|high-end}} and {{intel|Xeon Platinum|highest}} performance Xeons, Intel added a second dedicated AVX-512 unit in addition to the fused Port0-1 operations described above. The dedicated unit is situated on Port 5.
 +
 
 +
==== Implementation ====
 +
Physically, Intel added 768 KiB L2 cache and the second AVX-512 VPU externally to the core.
 +
 
 +
[[File:skylake sp added cach and vpu.png|left|300px]]
 +
 
 +
==== Memory subsystem ====
 +
[[File:skylake-sp memory.svg|right|300px]]
 +
The [[medium level cache]] (MLC) and [[last level cache]] (LLC) was rebalanced. Traditionally, Intel had a 256 KiB [[L2 cache]] which was duplicated along with the L1s over in the LLC which was 2.5 MiB. That is, prior to Skylake, the 256 KiB L2 cache actually took up 512 KiB of space for a total of 2.25 mebibytes effective cache per core. In Skylake Intel doubled the L2 and quadrupled the effective capacity to 1 MiB while decreasing the LLC to 1.375 MiB. The LLC is also now made [[non-inclusive cache|non-inclusive]], i.e., the L2 may or may not be in the L3 (no guarantee is made); what stored where will depend on the particular access pattern of the executing application, the size of code and data accessed, and the inter-core sharing behavior.
 +
<!--
 +
[[File:skylake server cache bandwidth.svg|left|200px]]-->
 +
Having an inclusive L3 makes cache coherence considerably easier to implement. [[Snooping]] only requires checking the L3 cache tags to know if the data is on board and in which core. It also makes passing data around a bit more efficient. It's currently unknown what mechanism is being used to reduce snooping. In the past, Intel has discussed a couple of additional options they were researching such as NCID (non-inclusive cache, inclusive directory architecture). It's possible that a NCID is being used in Skylake or a related derivative. These changes also mean that software optimized for data placing in the various caches needs to be revised for the new changes, particularly in situations where data is not shared, the overall capacity can be treated as L2+L3 for a total of 2.375 MiB.
 +
 
 +
<!-- THIS NEEDS DOUBLE CHECKING, INTEL's INFO IS VERY UNCLEAR
 +
With an increase to the L2 which is now 1 MiB, there is a latency penalty of 2 additional cycles (to 14 cycles from 12) but the max bandwidth from the L3 has also doubled accordingly to 64 bytes/cycle (from 32 B/cycle) with a sustainable bandwidth of 52 B/cycle. The L2 cache line size is 64 B and is 16-way set associative.
 +
-->
 +
{{clear}}
 +
 
 +
=== Mesh Architecture ===
 +
[[File:skylake sp xcc die config.png|right|400px]]
 +
On the {{intel|microarchitectures|previous number of generations}}, Intel has been adding cores onto the die and connecting them via a {{intel|ring architecture}}. This was sufficient until recently. With each generation, the added cores increased the access latency while lowering the available bandwidth per core. Intel mitigated this problem by splitting up the die into two halves each on its own ring. This reduced hopping distance and added additional bandwidth but it did not solve the growing fundamental inefficiencies of the ring architecture.
 +
 
 +
This was completely addressed with the new mesh architecture that is implemented in the Skylake server processors. The mesh is arranged as a matrix of vertical and horizontal communication paths which allow communication to take the shortest path to the correct node. The new mesh architecture implements a modular design for the routing resources in order to remove the various bottlenecks. That is, the mesh architecture now integrates the caching agent, the home agent, and the IO subsystem on the mesh interconnect distributed across all the cores. Each core now has its own associated LLC slice as well as the snooping filter and the Caching and Home Agent (CHA). Additional nodes such as the two memory controllers, the {{intel|Ultra Path Interconnect}} (UPI) nodes and PCIe are not independent node on the mesh as well and they now behave identically to any other node/core in the network. This means that in addition to the performance increase expected from core-to-core and core-to-memory latency, there should be substantial increase in I/O performance. The CHA which is found on each of the LLC slices now maps addresses being accessed to the specific LLC bank, memory controller, or I/O subsystem. This provides the necessary information required for the routing to take place.
 +
 
 +
==== Cache Coherency ====
 +
Given the new mesh architecture, new tradeoffs were involved.  The new {{intel|UPI}} inter-socket links are a valuable resource that could bottlenecked when flooded with unnecessary cross-socket snoop requests. There's also considerably higher memory bandwidth with Skylake which can impact performance. As a compromise, the previous four snoop modes (no-snoop, early snoop, home snoop, and directory) have been reduced to just directory-base coherency. This also alleviates the implementation complex (which is already complex enough in itself).
  
Skylake features a highly-configurable design, using the same [[macro cells]], Intel can meet the different market segment requirements.
+
[[File:snc clusters.png|right|350px]]
The Skylake family consists out of 5 different actual dies, which can be further segmented by disabling different features, e.g. GT1 graphics are based on GT2 graphics with half the execution units disabled.
+
It should be pointed out that the directory-base coherency optimizations that were done in previous generations have been furthered improved with Skylake - particularly OSB, {{intel|HitME}} cache, IO directory cache. Skylake maintained support for {{intel|Opportunistic Snoop Broadcast}} (OSB) which allows the network to opportunistically make use of the UPI links when idle or lightly loaded thereby avoiding an expensive memory directory lookup. With the mesh network and distributed CHAs, HitME is now distributed and scales with the CHAs, enhancing the speeding up of cache-to-cache transfers (Those are your migratory cache lines that frequently get transferred between nodes). Specifically for I/O operations, the I/O directory cache (IODC), which was introduced with {{intel|Haswell|l=arch}}, improves stream throughput by eliminating directory reads for InvItoE from snoopy caching agent. Previously this was implemented as a 64-entry directory cache to complement the directory in memory. In Skylake, with a distributed CHA at each node, the IODC is implemented as an eight-entry directory cache per CHA.
+
 
<gallery widths=300px heights=150px caption="Physical Layout Breakdown" style="float:right">
+
==== Sub-NUMA Clustering ====
File:2 core lp gt2 skylake.svg|Dual-core die, GT2 GPU, Low Power
+
In previous generations Intel had a feature called {{intel|cluster-on-die}} (COD) which was introduced with {{intel|Haswell|l=arch}}. With Skylake, there's a similar feature called {{intel|sub-NUMA cluster}} (SNC). With a memory controller physically located on each side of the die, SNC allows for the creation of two localized domains with each memory controller belonging to each domain. The processor can then map the addresses from the controller to the distributed home ages and LLC in its domain. This allows executing code to experience lower LLC and memory latency within its domain compared to accesses outside of the domain.
File:2 core lp gt3 skylake.svg|Dual-core die, GT3 GPU, Low Power
+
 
File:dual core hp gt2 skylake.svg|Dual-core die, GT2 GPU, High Power
+
It should be pointed out that in contrast to COD, SNC has a unique location for every adddress in the LCC and is evenr duplicated across LLC banks (previously, COD cache lines could have copies). Additionally, on multiprocessor system, address mapped to memory on remote sockets are still uniformally distributed across all LLC banks irrespective of the localized SNC domain.
File:4 core hp gt2 skylake.svg|Quad-core die, GT2 GPU, High Power
+
 
File:4 core hp gt4 skylake.svg|Quad-core die, GT4 GPU, High Power
+
=== Scalability ===
</gallery>
+
{{see also|intel/quickpath interconnect|intel/ultra path interconnect|l1=QuickPath Interconnect|l2=Ultra Path Interconnect}}
 +
In the last couple of generations, Intel has been utilizing {{intel|QuickPath Interconnect}} (QPI) which served as a high-speed point-to-point interconnect. QPI has been replaced the {{intel|Ultra Path Interconnect}} (UPI) which is higher-efficiency coherent interconnect for scalable systems, allowing multiple processors to share a single shared address space. Depending on the exact model, each processor can have either either two or three UPI links connecting to the other processors.
 +
 
 +
UPI links eliminate some of the scalability limited that surfaced in QPI. They use directory-based home snoop coherency protocol and operate at up either 10.4 GT/s or 9.6 GT/s. This is quite a bit different form previous generations. In addition to the various improvements done to the protocol layer, {{intel|Skylake SP|l=arch}} now implements a distributed CHA that is situated along with the LLC bank on each core. It's in charge of tracking the various requests form the core as well as responding to snoop requests from both local and remote agents. The ease of distributing the home agent is a result of Intel getting rid of the requirement on preallocation of resources at the home agent. This also means that future architectures should be able to scale up well.
 +
 
 +
Depending on the exact model, Skylake processors can scale from 2-way all the way up to 8-way multiprocessing. Note that the high-end models that support 8-way multiprocessing also only come with three UPI links for this purpose while the lower end processors can have either two or three UPI links. Below are the typical configurations for those processors.
 +
 
 +
 
 +
<div style="display: inline-block;">
 +
<div style="float: left; margin: 15px; text-align: center;">'''2-way SMP; 2 UPI links'''<br><br>[[File:skylake sp 2-way 2 upi.svg|400px]]</div>
 +
<div style="float: left; margin: 15px; text-align: center;">'''2-way SMP; 3 UPI links'''<br><br>[[File:skylake sp 2-way 3 upi.svg|400px]]</div>
 +
</div>
 +
 
 +
 
 +
<div style="display: inline-block;">
 +
<div style="float: left; margin: 15px; text-align: center;">'''4-way SMP; 2 UPI links'''<br><br>[[File:skylake sp 4-way 2 upi.svg|400px]]</div>
 +
<div style="float: left; margin: 15px; text-align: center;">'''4-way SMP; 3 UPI links'''<br><br>[[File:skylake sp 4-way 3 upi.svg|400px]]</div>
 +
</div>
 +
 
 +
 
 +
<div style="display: inline-block;">
 +
<div style="text-align: center;">'''8-way SMP; 3 UPI links'''<br><br>[[File:skylake sp 8-way 3 upi.svg|400px]]</div>
 +
</div>
 +
 
 +
=== Integrated Omni-Path ===
 +
{{see also|intel/omni-path|l1=Intel's Omni-Path}}
 +
[[File:omni-path ift carrier.png|thumb|right|300px|IFT (Internal Faceplate Transition) Carrier]]
 +
A number of {{intel|Skylake SP|l=core}} models (specifically those with the "''F''" suffix) incorporate the {{intel|Omni-Path}} Host Fabric Interface (HFI) on-package. This was previously done with the {{intel|Knights Landing|l=arch}} ("''F''" suffixed) models. This, in addition to improving cost and power efficiencies, also eliminates the dependency on the x16 PCIe lanes on the motherboard. With the HFI on package, the chip can be plugged in directly to the IFT (Internal Faceplate Transition) carrier via a separate IFP (Internal Faceplate-to-Processor) 1-port cable (effectively a [[Twinax cable]]).
 +
 
 +
 
 +
:: [[File:skylake sp with hfi to carrier.png|600px]]
  
 
{{clear}}
 
{{clear}}
  
 
== New Technologies ==
 
== New Technologies ==
=== Software Guard Extension (SGX) ===
+
=== Client ===
 +
==== Software Guard Extension (SGX) ====
 
{{main|x86/sgx|l1=Intel's Software Guard Extension}}
 
{{main|x86/sgx|l1=Intel's Software Guard Extension}}
 
'''Software Guard Extension''' ('''SGX''') is a new inter-software guard [[x86]] {{x86|extension}} that allows software in user-level mode to create isolated secure environments called "enclaves" for storing data or code. Data and code stored in enclaves are protected from external processes including code executing with higher privileges including the [[operating system]] or a [[hypervisor]] (including all forms of debugging).
 
'''Software Guard Extension''' ('''SGX''') is a new inter-software guard [[x86]] {{x86|extension}} that allows software in user-level mode to create isolated secure environments called "enclaves" for storing data or code. Data and code stored in enclaves are protected from external processes including code executing with higher privileges including the [[operating system]] or a [[hypervisor]] (including all forms of debugging).
  
=== Memory Protection Extension (MPX) ===
+
==== Memory Protection Extension (MPX) ====
 
{{main|x86/mpx|l1=Intel's Memory Protection Extension}}
 
{{main|x86/mpx|l1=Intel's Memory Protection Extension}}
 
'''Memory Protection Extension''' ('''MPX''') is a new [[x86]] {{x86|extension}} that offers a hardware-level [[bound checking]] implementation. This extension  allows an application to define memory boundaries for allocated memory areas. The processors can then check all proceeding memory accesses against those boundaries to ensure accesses are not [[out of bound]]. A program accessing a boundary-marked buffer out of buffer will generate an exception.
 
'''Memory Protection Extension''' ('''MPX''') is a new [[x86]] {{x86|extension}} that offers a hardware-level [[bound checking]] implementation. This extension  allows an application to define memory boundaries for allocated memory areas. The processors can then check all proceeding memory accesses against those boundaries to ensure accesses are not [[out of bound]]. A program accessing a boundary-marked buffer out of buffer will generate an exception.
 +
 +
=== Server ===
 +
In addition to the client technologies, servers have a number of new technologies as well:
 +
 +
==== Key Protection Technology (KPT) ====
 +
'''Key Protection Technology''' ('''KPT''') is designed to help secure sensitive private keys in hardware at runtime. KPT augments QuickAssist Technology (QAT) hardware crypto accelerators with run-time storage of private keys using Intel's existing Platform Trust Technology (PTT), thereby allowing high throughput hardware security acceleration. The QAT accelerators are all integrated onto Intel's new {{intel|Lewisburg|l=chipsset}} chipset along with the Converged Security Manageability Engine (CSME) which implements Intel's PTT. The CSME is linked through a private hardware link that is invisible to x86 software and simple hardware probes.
 +
 +
==== Memory Protection Keys for Userspace (PKU) ====
 +
'''Memory Protection Keys for Userspace''' ('''PKU''' also '''PKEY'''s) is an extension that provides a mechanism for enforcing page-based protections - all without requiring modification of the page tables when an application changes protection domains. PKU introduces 16 keys by re-purposing the 4 ignored bits from the page table entry.
 +
 +
==== Mode-Based Execute (MBE) Control ====
 +
'''Mode-Based Execute''' ('''MBE''') is an enhancement to the Extended Page Tables (EPT) that provides finer level of control of execute permissions. With MBE the previous Execute Enable (''X'') bit is turned into Excuse Userspace page (XU) and Execute Supervisor page (XS). The processor selects the mode based on the guest page permission. With proper software support, hypervisors can take advantage of this as well to ensure integrity of kernel-level code.
  
 
== Power ==
 
== Power ==
Line 635: Line 842:
 
Prior to Skylake, SpeedStep had three major domains: [[Cores]], [[Integrated Graphics]], and Coherent Fabric. With Skylake, SpeedStep has been extended to a number of new domains, including the [[System Agent]], Memory, and the [[eDRAM]] I/O. Depending on the bandwidth consumption, SpeedStep can now save energy by reducing frequency on the new domains.
 
Prior to Skylake, SpeedStep had three major domains: [[Cores]], [[Integrated Graphics]], and Coherent Fabric. With Skylake, SpeedStep has been extended to a number of new domains, including the [[System Agent]], Memory, and the [[eDRAM]] I/O. Depending on the bandwidth consumption, SpeedStep can now save energy by reducing frequency on the new domains.
  
Information from the new domains, including additional thermal skín temperature control information is now supplied to OEMs.
+
Information from the new domains, including additional thermal skin temperature control information is now supplied to OEMs.
  
 
==== Power of System (Psys) ====
 
==== Power of System (Psys) ====
Line 686: Line 893:
 
</table>
 
</table>
  
Note that core ratio has been increased to a [theoretical] x83 multiplier and the coarse-grain ratio was dropped from Skylake allowing a BCLK ratio to have granularity of 1 MHz increments with BCLK frequency of over 200 readily achievable. The FIVR was removed and the voltage control was given back to the motherboard manufacturers; i.e., voltage supplies can be entirely motherboard-controlled. Skylake also bumped the DDR ratio up to 4133 MT/s.
+
Note that core ratio has been increased to a [theoretical] x83 multiplier and the coarse-grain ratio was dropped from Skylake allowing a BCLK ratio to have granularity of 1 MHz increments with BCLK frequency of over 200 readily achievable. The FIVER was removed and the voltage control was given back to the motherboard manufacturers; i.e., voltage supplies can be entirely motherboard-controlled. Skylake also bumped the DDR ratio up to 4133 MT/s.
  
 
[[File:skylake bclk.png|left|300px]]
 
[[File:skylake bclk.png|left|300px]]
Line 721: Line 928:
 
The IPU hardware supports:
 
The IPU hardware supports:
  
* Support for up to 4 cameras
+
* 13 [[megapixel|MP]] zero [[shutter lag]] 1080p60/2160p30 video capture and imaging and a large array of standardized image processing capabilities.  
** 13 [[megapixel|MP]] zero [[shutter lag]] 1080p60/2160p30 video capture and imaging and a large array of standardized image processing capabilities.  
 
 
* Face detection and recognition (smile/blink/group setting)
 
* Face detection and recognition (smile/blink/group setting)
 
* Full resolution still capture during video captures
 
* Full resolution still capture during video captures
Line 742: Line 948:
 
| Windows || Linux || Windows || Linux || [[High Level Shading Language|HLSL]] || Windows || Linux || Windows || Linux
 
| Windows || Linux || Windows || Linux || [[High Level Shading Language|HLSL]] || Windows || Linux || Windows || Linux
 
|-
 
|-
| {{intel|HD Graphics 510}} || 12 || GT1 || {{intel|Skylake U|U|l=core}}, {{intel|Skylake S|S|l=core}} ||  - || rowspan="10" colspan="2" style="text-align: center;" | '''1.0''' || rowspan="10" style="text-align: center;" | '''12''' || rowspan="10" style="text-align: center;" | '''N/A''' || rowspan="10" style="text-align: center;" | '''5.1''' || rowspan="10" style="text-align: center;" | '''4.5''' || rowspan="10" style="text-align: center;" | '''4.5''' || rowspan="10" style="text-align: center;" colspan="2" | '''2.0'''
+
| {{intel|HD Graphics 510}} || 12 || GT1 || {{intel|Skylake U|U|l=core}}, {{intel|Skylake S|S|l=core}} ||  - || rowspan="11" colspan="2" style="text-align: center;" | '''1.0''' || rowspan="11" style="text-align: center;" | '''12''' || rowspan="11" style="text-align: center;" | '''N/A''' || rowspan="11" style="text-align: center;" | '''5.1''' || rowspan="11" style="text-align: center;" | '''4.5''' || rowspan="11" style="text-align: center;" | '''4.5''' || rowspan="11" style="text-align: center;" colspan="2" | '''2.0'''
 
|-
 
|-
 
| {{intel|HD Graphics 515}} || 24 || GT2 || {{intel|Skylake Y|Y|l=core}} || -
 
| {{intel|HD Graphics 515}} || 24 || GT2 || {{intel|Skylake Y|Y|l=core}} || -
Line 777: Line 983:
 
| [[File:skylake u (back; standard).png|100px|link=intel/cores/skylake_u]] || {{intel|Skylake U|l=core}} || {{intel|BGA-1356}} || Yes || 1-chip
 
| [[File:skylake u (back; standard).png|100px|link=intel/cores/skylake_u]] || {{intel|Skylake U|l=core}} || {{intel|BGA-1356}} || Yes || 1-chip
 
|-
 
|-
| [[File:skylake h (back).png|100px|link=intel/cores/skylake_h]] || {{intel|Skylake H|l=core}} || {{intel|BGA-1440}} || Yes || 2-chip || rowspan="2" | {{intel|Sunrise Point}} || rowspan="3" | [[DMI 3.0]]
+
| [[File:skylake h (back).png|100px|link=intel/cores/skylake_h]] || {{intel|Skylake H|l=core}} || {{intel|BGA-1440}} || Yes || 2-chip || rowspan="2" | {{intel|Sunrise Point}} || rowspan="4" | [[DMI 3.0]]
 
|-
 
|-
 
| rowspan="2" | [[File:skylake s (back).png|100px|link=intel/cores/skylake_s]] || {{intel|Skylake S|l=core}} || {{intel|LGA-1151}} || No || 2-chip  
 
| rowspan="2" | [[File:skylake s (back).png|100px|link=intel/cores/skylake_s]] || {{intel|Skylake S|l=core}} || {{intel|LGA-1151}} || No || 2-chip  
 
|-
 
|-
 
| {{intel|Skylake DT|l=core}} || {{intel|LGA-1151}} || No || 2-chip || Xeon {{intel|Sunrise Point}}
 
| {{intel|Skylake DT|l=core}} || {{intel|LGA-1151}} || No || 2-chip || Xeon {{intel|Sunrise Point}}
 +
|-
 +
| [[File:skylake x (back).png|100px|link=intel/cores/skylake_x]] || {{intel|Skylake X|l=core}} || {{intel|LGA-2066}} || No || 2-chip || {{intel|Lewisburg}}
 
|}
 
|}
  
Line 799: Line 1,007:
  
 
== Die ==
 
== Die ==
{{see also|intel/microarchitectures/skylake_(server)#Die|l1=Server Skylake's Die}}
+
=== Client Die ===
 
Skylake desktop and mobile come and [[2 cores|2]] and [[4 cores|4]] cores. Each variant has its own die. One of the most noticeable changes on die is the amount of die space allocated to the [[GPU]]. The major components of the die is:
 
Skylake desktop and mobile come and [[2 cores|2]] and [[4 cores|4]] cores. Each variant has its own die. One of the most noticeable changes on die is the amount of die space allocated to the [[GPU]]. The major components of the die is:
  
Line 807: Line 1,015:
 
* Memory Controller
 
* Memory Controller
  
=== System Agent ===
+
==== System Agent ====
 
The System Agent (SA) contains the Image Processing Unit (IPU), the Display Engine (DE), the I/O bus and various other shared functionality. Note that the mainstream desktop (i.e., [[quad-core]] die) does not have an IPU (The memory controller actually occupies a portion of where it would otherwise be).
 
The System Agent (SA) contains the Image Processing Unit (IPU), the Display Engine (DE), the I/O bus and various other shared functionality. Note that the mainstream desktop (i.e., [[quad-core]] die) does not have an IPU (The memory controller actually occupies a portion of where it would otherwise be).
  
Line 824: Line 1,032:
 
{{clear}}
 
{{clear}}
  
=== Core ===
+
==== Core ====
 
Skylake Client models come in either 2x core or 4x core setup.
 
Skylake Client models come in either 2x core or 4x core setup.
  
Line 834: Line 1,042:
 
: [[File:skylake core die (annotated).png|450px]]
 
: [[File:skylake core die (annotated).png|450px]]
  
=== Core Group ===
+
==== Core Group ====
Client models come in groups of 2 or 4 cores. (die sizes includes the [[dark silicon]] space where the L3 ends).
+
Client models come in groups of 2 or 4 cores. (die sizes includes the dark silicon space where the L3 ends).
  
 
* 2-cores group:
 
* 2-cores group:
* ~25.347 mm² die area
+
* ~8.91 mm x ~2.845 mm
** ~8.91 mm x ~2.845 mm
+
* ~25.347 mm²
  
 
: [[File:skylake 2x core complex die.png|500px]]
 
: [[File:skylake 2x core complex die.png|500px]]
Line 845: Line 1,053:
  
 
* 4-core group
 
* 4-core group
* ~50.354 mm² die area
+
* ~8.844 mm x 5.694 mm
** ~8.844 mm x 5.694 mm
+
* ~50.354 mm²
  
 
: [[File:skylake 4x core complex die.png|500px]]
 
: [[File:skylake 4x core complex die.png|500px]]
  
=== Integrated Graphics ===
+
 
 +
==== Integrated Graphics ====
 
The [[integrated graphics]] takes up the largest portion of the die. The normal [[dual-core]] and [[quad-core]] dies come with 24 EU {{\\|Gen9.5}} GPU (with 12 units disabled on the low end models).
 
The [[integrated graphics]] takes up the largest portion of the die. The normal [[dual-core]] and [[quad-core]] dies come with 24 EU {{\\|Gen9.5}} GPU (with 12 units disabled on the low end models).
  
Line 859: Line 1,068:
 
{{clear}}
 
{{clear}}
  
=== Dual-core ===
+
==== Dual-core ====
 
Die shot of the [[dual-core]] {{\\|Gen9|GT2}} Skylake processors. Those are found in mobile models, and entry-level/budget processors:
 
Die shot of the [[dual-core]] {{\\|Gen9|GT2}} Skylake processors. Those are found in mobile models, and entry-level/budget processors:
  
Line 865: Line 1,074:
 
* 11 metal layers
 
* 11 metal layers
 
* ~1,750,000,000 transistors
 
* ~1,750,000,000 transistors
* ~9.19 mm x ~11.08 mm
+
* ~9.57 mm x ~10.3 mm
* ~101.83 mm² die size
+
* ~98.57 mm² die size
 
* 2 CPU cores + 24 GPU EUs
 
* 2 CPU cores + 24 GPU EUs
  
Line 874: Line 1,083:
 
: [[File:skylake (dual core) (annotated).png|650px]]
 
: [[File:skylake (dual core) (annotated).png|650px]]
  
=== Quad-core ===
+
==== Quad-core ====
Die shot of the [[quad-core]] {{\\|Gen9|GT2}} Skylake processors. Those are found in almost all mainstream desktop processors.
+
Die shot of the [[quad-core]] {{\\|Gen9|GT2}} Skyllake processors. Those are found in almost all mainstream desktop processors.
  
 
* [[14 nm process]]
 
* [[14 nm process]]
 
* 11 metal layers
 
* 11 metal layers
* ~9.19 mm x ~13.31 mm
+
* ~122 mm² die size
* ~122.3 mm² die size
 
 
* 4 CPU cores + 24 GPU EUs
 
* 4 CPU cores + 24 GPU EUs
  
: [[File:skylake (quad-core).png|class=wikichip_ogimage|650px]]
+
: [[File:skylake (quad-core).png|650px]]
  
  
 
: [[File:skylake (quad-core) (annotated).png|650px]]
 
: [[File:skylake (quad-core) (annotated).png|650px]]
 +
 +
=== Server Die ===
 +
[[File:intel xeon skylake sp.jpg|right|300px|thumb|Skylake SP chips and wafer.]]
 +
Skylake Server class models and high-end desktop (HEDT) consist of 3 different dies: Low Core Count (LCC), High Core Count (HCC), and Extreme Core Count (XCC).
 +
 +
==== Low Core Count (LCC) ====
 +
* [[14 nm process]]
 +
* ? metal layers
 +
* ~22.26 mm x ~14.62 mm
 +
* ~325.44 mm² die size
 +
* [[10 cores]]
 +
 +
==== High Core Count (HCC) ====
 +
Die shot of the [[octadeca core]] HEDT {{intel|Skylake X|l=core}} processors.
 +
 +
* [[14 nm process]]
 +
* ? metal layers
 +
* ? mm² die size
 +
* [[18 cores]]
 +
 +
 +
: [[File:skylake (octadeca core).png|650px]]
 +
 +
{{future information}}
 +
 +
 +
: [[File:skylake (octadeca core) (annotated).png|650px]]
 +
 +
==== Extreme Core Count (XCC) ====
 +
* [[14 nm process]]
 +
* ? metal layers
 +
* ? mm² die size
 +
* [[28 cores]]
 +
 +
: [[File:skylake-sp hcc die shot.png|650px]]
 +
 +
 +
{{future information}}
 +
 +
 +
: [[File:skylake-sp hcc die shot (annotated).png|650px]]
  
 
== All Skylake Chips ==
 
== All Skylake Chips ==
Line 938: Line 1,187:
 
  |limit=200
 
  |limit=200
 
}}
 
}}
{{comp table count|ask=[[Category:microprocessor models by intel]] [[instance of::microprocessor]] [[microarchitecture::Skylake]] [[max cpu count::1]]}}
+
<tr class="comptable-header comptable-header-sep"><th>&nbsp;</th><th colspan="25">[[Multiprocessors]] (2-way)</th></tr>
 +
{{#ask:
 +
[[Category:microprocessor models by intel]] [[instance of::microprocessor]] [[microarchitecture::Skylake]] [[max cpu count::2]]
 +
|?full page name
 +
|?model number
 +
|?first launched
 +
|?release price
 +
|?microprocessor family
 +
|?core name
 +
|?core count
 +
|?thread count
 +
|?l2$ size
 +
|?l3$ size
 +
|?tdp
 +
|?base frequency#GHz
 +
|?turbo frequency (1 core)#GHz
 +
|?turbo frequency (2 cores)#GHz
 +
|?turbo frequency (3 cores)#GHz
 +
|?turbo frequency (4 cores)#GHz
 +
|?max memory#GiB
 +
|?integrated gpu
 +
|?integrated gpu base frequency
 +
|?integrated gpu max frequency
 +
|?has intel turbo boost technology 2_0
 +
|?has simultaneous multithreading
 +
|?has advanced vector extensions 2
 +
|?has intel trusted execution technology
 +
|?has transactional synchronization extensions
 +
|?has intel vpro technology
 +
|format=template
 +
|template=proc table 3
 +
|searchlabel=
 +
|sort=microprocessor family, model number
 +
|order=asc,asc
 +
|userparam=26:21
 +
|mainlabel=-
 +
|limit=60
 +
}}
 +
<tr class="comptable-header comptable-header-sep"><th>&nbsp;</th><th colspan="25">[[Multiprocessors]] (4-way)</th></tr>
 +
{{#ask:
 +
[[Category:microprocessor models by intel]] [[instance of::microprocessor]] [[microarchitecture::Skylake]] [[max cpu count::4]]
 +
|?full page name
 +
|?model number
 +
|?first launched
 +
|?release price
 +
|?microprocessor family
 +
|?core name
 +
|?core count
 +
|?thread count
 +
|?l2$ size
 +
|?l3$ size
 +
|?tdp
 +
|?base frequency#GHz
 +
|?turbo frequency (1 core)#GHz
 +
|?turbo frequency (2 cores)#GHz
 +
|?turbo frequency (3 cores)#GHz
 +
|?turbo frequency (4 cores)#GHz
 +
|?max memory#GiB
 +
|?integrated gpu
 +
|?integrated gpu base frequency
 +
|?integrated gpu max frequency
 +
|?has intel turbo boost technology 2_0
 +
|?has simultaneous multithreading
 +
|?has advanced vector extensions 2
 +
|?has intel trusted execution technology
 +
|?has transactional synchronization extensions
 +
|?has intel vpro technology
 +
|format=template
 +
|template=proc table 3
 +
|searchlabel=
 +
|sort=microprocessor family, model number
 +
|order=asc,asc
 +
|userparam=26:21
 +
|mainlabel=-
 +
|limit=60
 +
}}
 +
<tr class="comptable-header comptable-header-sep"><th>&nbsp;</th><th colspan="25">[[Multiprocessors]] (8-way)</th></tr>
 +
{{#ask:
 +
[[Category:microprocessor models by intel]] [[instance of::microprocessor]] [[microarchitecture::Skylake]] [[max cpu count::8]]
 +
|?full page name
 +
|?model number
 +
|?first launched
 +
|?release price
 +
|?microprocessor family
 +
|?core name
 +
|?core count
 +
|?thread count
 +
|?l2$ size
 +
|?l3$ size
 +
|?tdp
 +
|?base frequency#GHz
 +
|?turbo frequency (1 core)#GHz
 +
|?turbo frequency (2 cores)#GHz
 +
|?turbo frequency (3 cores)#GHz
 +
|?turbo frequency (4 cores)#GHz
 +
|?max memory#GiB
 +
|?integrated gpu
 +
|?integrated gpu base frequency
 +
|?integrated gpu max frequency
 +
|?has intel turbo boost technology 2_0
 +
|?has simultaneous multithreading
 +
|?has advanced vector extensions 2
 +
|?has intel trusted execution technology
 +
|?has transactional synchronization extensions
 +
|?has intel vpro technology
 +
|format=template
 +
|template=proc table 3
 +
|searchlabel=
 +
|sort=microprocessor family, model number
 +
|order=asc,asc
 +
|userparam=26:21
 +
|mainlabel=-
 +
|limit=60
 +
}}
 +
{{comp table count|ask=[[Category:microprocessor models by intel]] [[instance of::microprocessor]] [[microarchitecture::Skylake]]}}
 
</table>
 
</table>
 
{{comp table end}}
 
{{comp table end}}
Line 957: Line 1,320:
 
* [[:File:6th Gen Intel® Core™ vPro™ Processor Family Product Brief.pdf|6th Gen Intel® Core™ vPro™ Processor Family Product Brief]]
 
* [[:File:6th Gen Intel® Core™ vPro™ Processor Family Product Brief.pdf|6th Gen Intel® Core™ vPro™ Processor Family Product Brief]]
 
* [[:File:6th Generation Intel® Core™ Desktop Processors i7-6700K and i5-6600K Product Brief.pdf|6th Generation Intel® Core™ Desktop Processors i7-6700K and i5-6600K Product Brief]]
 
* [[:File:6th Generation Intel® Core™ Desktop Processors i7-6700K and i5-6600K Product Brief.pdf|6th Generation Intel® Core™ Desktop Processors i7-6700K and i5-6600K Product Brief]]
 +
* [[:File:Intel-Core-X-Series-Processor-Family Product-Information.pdf|New Intel Core X-Series Processor Family]]
 +
* [[:File:intel-xeon-scalable-processors-product-brief.pdf|Intel Xeon (Skylake SP) Processors Product Brief]]
 +
* [[:File:intel-xeon-scalable-processors-overview.pdf|Intel Xeon (Skylake SP) Processors Product Overview]]
  
  

Please note that all contributions to WikiChip may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see WikiChip:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)
codenameSkylake (client) +
core count2 + and 4 +
designerIntel +
first launchedAugust 5, 2015 +
full page nameintel/microarchitectures/skylake (client) +
instance ofmicroarchitecture +
instruction set architecturex86-64 +
manufacturerIntel +
microarchitecture typeCPU +
nameSkylake (client) +
pipeline stages (max)19 +
pipeline stages (min)14 +
process14 nm (0.014 μm, 1.4e-5 mm) +