De gpu van Skylake is inmiddels al weer de negende generatie grafische processors. Vergeleken met Intels HD Graphics zouden de prestaties ruwweg twintigmaal zo hoog zijn. De Iron Lake-gpu haalde met 10 execution units ongeveer 43Gflops, terwijl de grootste gpu, de GT4 met 72 eu's, uit Skylake tot zo'n 1152Gflops zou komen. Overigens beschikt de gpu in de Core i7-6700K beschikt over 24 execution units, maar het maximumaantal betreft 72 eu's, gecombineerd met edram.
De gpu van Skylake is opgebouwd volgens een stramien dat we al langer kennen van Haswell: een gemeenschappelijk deel, dat de unslice wordt genoemd, levert threads aan de execution units. Die eu's zijn weer ondergebracht in sublices, waarvan er drie in een slice zitten. Een gpu bestaat dus uit een unslice en een of meer slices. Elke slice is opgebouwd uit een slice common, die op zijn beurt communiceert met drie subslices. Een subslice bevat in principe acht execution units, waarmee het aantal eu's per slice op 24 komt. De GT2 heeft een enkele slice, de GT3 heeft twee slices en de GT4 heeft drie slices, voor respectievelijk dus 24, 48 en 72 execution units. Overigens zijn de subslices aan te passen; kleine processors zouden met subslices met zes eu's kunnen worden gebouwd.
De meest opvallende aanpassingen zijn ondersteuning voor de nieuwste api's als DirectX 12, OpenCL 2.0 en OpenGL 4.4. Daarnaast heeft Skylake voor het eerst 72 eu's gekregen met de GT4-gpu. Onderdelen van de unslice zijn in grotere gpu's extra vertegenwoordigd. Zo heeft de GT3-gpu een extra fixed function-blok. Er is echter ook een flink aantal verbeteringen in de diverse onderdelen van de negende generatie gpu. We beginnen aan de unslice-kant.
De unslice heeft bovenal een gescheiden klok- en energiedomein gekregen. Dat betekent dat de kloksnelheid onafhankelijk van de slices geregeld kan worden en delen van de unslice uitgeschakeld kunnen worden om energie te besparen. Zo kan de activiteit van de unslice worden afgestemd op de behoefte van de slices. Als er twee of drie slices actief zijn, kan de unslice hoger geklokt worden om de slices van input te voorzien. De unslice heeft bovendien snellere vertex, geometry, domain en hull shaders gekregen. Verder worden complexe triangle lists waar mogelijk geconverteerd naar triangle strips en de tesselator engine doet hetzelfde.
De unslice voedt dus de slice en de eerste stop voor de data is de slice common, die onder meer voor rasterization en pixel blending zorgt. Daarin zitten een rasterizer, een pixel operations engine, een L3-cache voor de execution units en render- en depth-caches. De pixel fill rate van de slice common is, afhankelijk van de werklast, 1,33- tot tweemaal zo snel geworden en de msaa-engine is eveneens verbeterd en ondersteunt nu ook 16x msaa. Verder zijn de caches met een onbekende factor vergroot en zijn compressiesnelheden toegenomen. Het resultaat van alle verbeteringen in de slice common is het vergroten van de datadoorvoersnelheid, zodat de subslices gevoed kunnen worden.
In de subslices vinden we allereerst een thread dispatcher met een instructiecache. Die stuurt workloads naar de execution units, die weer in verbinding staan met een sampler met L1- en L2-caches en de data port-verbinding naar geheugen met 64 byte lees- en schrijfbandbreedte. De execution units, in de meeste gevallen acht per subslice, bestaan uit een instruction fetch-blok dat instructies doorstuurt. Een eu beschikt over 128 simd-registers van 32 byte voor een totaal van 28kB general purpose register. De simd-registers sturen maximaal vier instructies naar twee floating point units, die ieder vier operations tegelijk kunnen uitvoeren. Ten slotte stuurt een send of branch unit operaties of instructies weer door.
De execution units ondersteunen voortaan zowel 16- als 32bit floating point operations, zodat er geen vertaalslag van 16 naar 32bit nodig is. Bovendien zijn de eu's scalar aan te sturen, wat programmeren moet vergemakkelijken. De eu's zelf zijn natuurlijk wel voorzien van simd-alu's. Ook de sampler is sneller geworden en ondersteunt onder meer yuv-formats. Ten slotte heeft iedere eu, net als in Haswell, meer bandbreedte doordat er niet tien, maar acht eu's per subslice van data moeten worden voorzien.