Intel GPU Hardware Specifications
Definitive reference for Intel GPU hardware across Xe2 and Xe3 architectures. All values sourced from kernel optimization work, profiling results, and verified benchmarks.
Version: 1.0.0
Last Updated: 2026-03-12
Architecture Overview
- Xe2 is a GPU architecture used in multiple products:
- Battlemage (BMG): Discrete GPU (dGPU), Intel Arc B-series
- Lunar Lake (LNL): Integrated GPU (iGPU), Intel Core Ultra 200V series
- Xe3 is a GPU architecture used in:
- Panther Lake (PTL): Integrated GPU (iGPU)
- Panther Lake-H (PTLH): High-performance integrated GPU
All Xe2 and Xe3 products share the same ISA and programming model. Code is portable across dGPU and iGPU variants, though performance tuning differs significantly.
Xe2 Architecture -- Battlemage (BMG) Discrete GPU
| Parameter |
Value |
| GPU Type |
Discrete (dGPU), Intel Arc B580/B570 |
| XE Cores |
20 (B570) / 20 (B580) -- up to 32 in development samples |
| EUs per XE Core |
8 |
| Threads per EU |
8 |
| Total HW Threads |
up to 2048 (32-core config) |
| GRF Mode |
doubleGRF: 256 regs x 64 bytes = 16 KB/thread |
| Max WG Threads |
32 (with doubleGRF) |
| SLM per XE Core |
64 KB |
| Memory Type |
GDDR6 |
| Memory Bandwidth |
~520 GB/s (32-core config) |
| FP16 XMX (DPAS) Peak |
~135 TFLOPS (32-core config) |
| FP16 ALU (non-XMX) |
~17 TFLOPS |
| DPAS Systolic Depth |
8 |
| DPAS Repeat Count |
8 |
| L3/LLC Cache |
~8-16 MB |
| TDP |
~150-225W |
BMG Notes
- 32 XE cores x 8 EU x 8 threads = 2048 hardware threads total
- doubleGRF is mandatory for large tile GEMM/attention kernels (256 GRF entries per thread)
- Without doubleGRF, max WG threads is 64 but register pressure becomes the bottleneck
- Practical peak BW is ~520 GB/s; theoretical is ~550 GB/s
- L2 capacity is approximately 16 MB shared across all cores
Xe2 Architecture -- Lunar Lake (LNL) Integrated GPU
| Parameter |
Value |
| GPU Type |
Integrated (iGPU), Intel Core Ultra 200V |
| XE Cores |
8 |
| EUs per XE Core |
8 |
| Threads per EU |
8 |
| Total HW Threads |
512 |
| Memory Type |
LPDDR5x (shared with CPU) |
| Memory Bandwidth |
~90 GB/s |
| Same ISA as BMG |
Yes -- same Xe2 architecture |
LNL Notes
- Shared system memory means CPU activity impacts GPU bandwidth
- Fewer cores require careful workgroup sizing to avoid underutilization
- Same doubleGRF, SLM, and DPAS capabilities as BMG at the per-core level
Xe3 Architecture -- Panther Lake (PTL) Integrated GPU
| Parameter |
Value |
| GPU Type |
Integrated (iGPU) |
| XE Cores |
12 |
| EUs per XE Core |
8 |
| Threads per EU |
8 |
| Total HW Threads |
768 |
| GRF Mode |
doubleGRF: 256 regs x 64 bytes = 16 KB/thread |
| Max WG Threads |
32 (with doubleGRF) |
| SLM per XE Core |
64 KB |
| Memory Type |
LPDDR5x (shared with CPU) |
| Memory Bandwidth |
~112 GB/s |
| FP16 XMX (DPAS) Peak |
~55 TFLOPS |
| FP16 ALU (non-XMX) |
~14 TFLOPS |
| Concurrent WGs/Core |
1 (32t WG), 2 (16t WG), 4 (8t WG) |
| Wave count critical |
Yes -- only 12 cores, thread config matters |
PTL Notes
- Only 12 XE cores means wave count is the dominant performance factor
- Concurrent WG capacity per core depends on threads per WG:
- 32 threads/WG: 1 WG per core, 12 concurrent WGs total
- 16 threads/WG: 2 WGs per core, 24 concurrent WGs total
- 8 threads/WG: 4 WGs per core, 48 concurrent WGs total
- For recurrent (latency-bound) kernels, 8 threads/WG is optimal (fewer waves)
- For decode (throughput-bound) kernels at batch >= 4, 32 threads/WG is better
- Shared system RAM: budget approximately 1 GB for device buffers to avoid OOM
- Same ISA as BMG (Xe2), but different microarchitecture generation (Xe3)
Xe3 Architecture -- Panther Lake-H (PTLH) Integrated GPU
| Parameter |
Value |
| GPU Type |
Integrated (iGPU), high-performance variant |
| XE Cores |
TBD (expected more than PTL) |
| Memory Type |
LPDDR5x or DDR5 (shared with CPU) |
| Memory Bandwidth |
TBD (expected higher than PTL 112 GB/s) |
Architecture Comparison
| Parameter |
Xe2 BMG (dGPU) |
Xe2 LNL (iGPU) |
Xe3 PTL (iGPU) |
| XE Cores |
20-32 |
8 |
12 |
| Memory BW |
520 GB/s |
~90 GB/s |
~112 GB/s |
| FP16 XMX |
135 TFLOPS |
TBD |
55 TFLOPS |
| Memory Type |
GDDR6 dedicated |
LPDDR5x shared |
LPDDR5x shared |
| TDP |
150-225W |
15-30W |
15-30W |
| SLM/Core |
64 KB |
64 KB |
64 KB |
| GRF |
16 KB/thread |
16 KB/thread |
16 KB/thread |
| HW Threads |
2048 |
512 |
768 |
| EUs/Core |
8 |
8 |
8 |
| Threads/EU |
8 |
8 |
8 |
Roofline Parameters
BMG (32-core dGPU)
Peak FP16 XMX: 135 TFLOPS
Peak BW: 520 GB/s = 0.52 TB/s
Ridge Point: 135 / 0.52 = ~260 FLOPs/byte
- Kernels with arithmetic intensity (AI) < 260 are memory-bound
- Kernels with AI > 260 are compute-bound
- Most attention/GEMM kernels with HEAD_DIM >= 128 are compute-bound on BMG
- Practical peak BW is 520 GB/s; theoretical is 550 GB/s
- XVE FP32 (non-XMX): approximately 4 TFLOPS
- Kernel launch overhead: approximately 5-10 microseconds
PTL (12-core iGPU)
Peak FP16 XMX: 55 TFLOPS
Peak BW: 112 GB/s = 0.112 TB/s
Ridge Point: 55 / 0.112 = ~491 FLOPs/byte
- Higher ridge point means a wider memory-bound regime
- PTL's lower bandwidth makes more workloads memory-bound compared to BMG
- Shared memory with CPU means effective bandwidth varies with system load
Roofline Calculation Examples
GEMM: C[M,N] = A[M,K] x B[K,N]
FLOPs = 2 * M * N * K
Bytes = (M*K + K*N + M*N) * sizeof(half)
AI = FLOPs / Bytes
Flash Attention:
FLOPs = 4 * q_len * kv_len * head_dim * num_heads
+ 2 * q_len * kv_len * num_heads (softmax)
Roofline Classification Thresholds
actual_ms > bw_limit_ms * 3.0 --> LATENCY BOUND (serial dependency or launch overhead)
actual_ms > bw_limit_ms * 1.5 --> PARTIALLY BW BOUND (stalls or contention)
actual_ms <= bw_limit_ms * 1.1 --> AT BW ROOFLINE
DPAS/XMX Instruction Details (Xe2 and Xe3)
Instruction Format
xmx::dpas<SD, RC, T_dst, T_src0, T_src1, T_src2>(acc, src1, src2)
- SD = 8: Systolic depth (fixed for Xe2/Xe3)
- RC = 8: Repeat count
- T_dst, T_src0: Accumulator type (typically float)
- T_src1, T_src2: Input types (typically half or bfloat16)
Compute Per DPAS Call
- FP16: K = SD x 2 = 16 elements per systolic step
- BF16: K = SD x 2 = 16 elements per systolic step
- Output tile: M = RC rows x N = 16 cols per DPAS call
VNNI Layout Requirement
- B operand requires VNNI layout (interleaved 2-element packing)
- Use Transposed 2D load with uint32_t to get hardware VNNI transform
- VNNI packing: two FP16 values stored in one uint32_t, alternating across the K dimension
DPAS Pipeline Optimization
- Consecutive DPAS instructions without intervening sends/movs maximize XMX utilization
- Minimize XVE ALU operations inside DPAS loops (XVE + XMX parallelism lowers frequency)
- Use payload CSE: construct
config_2d_mem_access once outside K-loop, only call set_x()/set_y() inside
Memory Subsystem
Global Memory
- block_load: Contiguous 1D loads, up to 256 bytes per load for D32 (FP32)
block_load<float, 64> = 256 bytes (maximum for D32)
block_load<float, 128> = 512 bytes -- EXCEEDS LSC limit, must split to 2 x 64
block_load<half, 128> = 256 bytes (within limit)
- gather: Non-contiguous loads via scatter/gather
- lsc_load_2d: 2D block loads with hardware coalescing (preferred for tiled access)
- lsc_prefetch_2d: 2D prefetch (uses inline 6-argument form, not payload object)
SLM (Shared Local Memory)
- 64 KB per XE core, shared across all WGs on the same core
- 32 banks, 4 bytes per bank
- Bank conflict avoidance: pad SLM rows, ensure consecutive threads access consecutive banks
slm_init(SLM_SIZE) must be the very first statement in the kernel
L3/LLC Cache
- BMG: approximately 8-16 MB, acts as implicit cache for global reads
- L2 capacity: approximately 16 MB shared across all cores
- Without cache busting, L2 can inflate bandwidth measurements by 2-3x
GRF (General Register File)
- 16 KB/thread in doubleGRF mode (256 registers x 64 bytes)
- Without doubleGRF: 128 registers x 64 bytes = 8 KB/thread
- doubleGRF is mandatory for large tile GEMM/attention kernels
- Not required for memory-bound kernels like GEMV (low GRF pressure)
- Register spill to stack memory kills performance -- always check compiler output
Cache Hints for Stores
- For
lsc_block_store: L2 must be uncached or write_back -- NOT cached
- Valid store hints:
(streaming, uncached), (write_through, uncached), (write_back, write_back)
- For loads:
(streaming, cached) and (cached, cached) are both valid
Key Differences: dGPU vs iGPU
| Aspect |
dGPU (BMG) |
iGPU (LNL, PTL) |
| Memory |
Dedicated GDDR6 |
Shared system RAM |
| Bandwidth |
High (520 GB/s) |
Limited (90-112 GB/s) |
| Core Count |
High (20-32) |
Low (8-12) |
| Power Budget |
150-225W |
15-30W (shared package) |
| Memory Budget |
Full VRAM |
~1 GB safe allocation |
| Wave Count |
Less critical |
Dominant perf factor |
| WG Sizing |
Larger WGs fine |
Smaller WGs often better |
| CPU Contention |
None |
CPU impacts GPU BW |
Portability
- Same ISA and programming model -- code compiles and runs on both
- Same ESIMD intrinsics, DPAS instructions, SLM operations
- Performance tuning differs: iGPU needs smaller WG sizes, wave count optimization matters more
- Compile target differs:
-device bmg vs -device ptl
Thread Configuration Quick Reference
BMG (32 XE Cores)
32 cores x 8 EU/core x 8 threads/EU = 2048 HW threads
With doubleGRF: max 32 threads per WG
Design WG sizes so num_groups x local_size fills 2048 threads
PTL (12 XE Cores)
12 cores x 8 EU/core x 8 threads/EU = 768 HW threads
With doubleGRF: max 32 threads per WG
Threads/WG | EUs/WG | WGs/Core | Concurrent WGs (12 cores) | Waves for H=36
32 | 8 | 1 | 12 | 3
16 | 4 | 2 | 24 | 2
8 | 2 | 4 | 48 | 1
LNL (8 XE Cores)
8 cores x 8 EU/core x 8 threads/EU = 512 HW threads
Compilation Targets
# BMG (Xe2 dGPU)
icpx kernel.cpp -o kernel.exe -fsycl -fsycl-targets=spir64_gen \
-Xs "-device bmg -options -doubleGRF"
# PTL (Xe3 iGPU)
icpx kernel.cpp -o kernel.exe -fsycl -fsycl-targets=spir64_gen \
-Xs "-device ptl -options -doubleGRF"
- Do NOT use
-fsycl-targets=intel_gpu_bmg_g21 (wrong target string)
- Do NOT use
-O3 or -doubleGRF as top-level flags (they are ignored or warn)
- Check for spill warnings in compiler output: any spill > 0 indicates GRF pressure
Related Skills
| Skill |
What it covers |
intel-gpu-kernel-opt |
General optimization methodology using these HW specs |
xe2-esimd-gemm |
GEMM tuning specific to Xe2 |
xe2-esimd-gemv |
GEMV tuning specific to Xe2/BMG |
xe3-esimd-kernels |
Kernel patterns specific to Xe3/PTL |
xe2-dpas-patterns |
DPAS tile patterns for Xe2 |
intel-esimd-base |
Foundational ESIMD programming |
1---2name: intel-gpu-hw-info3description: Definitive reference for Intel GPU hardware specifications across architectures. Covers Xe2 (Lunar Lake/LNL, Battlemage/BMG) and Xe3 (Panther Lake/PTL, Panther Lake-H/PTLH) GPU hardware: XE core counts, memory bandwidth, XMX/DPAS compute, GRF sizes, SLM limits, thread counts, EU layout, L3 cache, TDP. Use whenever the user asks about Intel GPU specs, hardware comparison, architecture differences, roofline parameters, or thread/memory limits. Trigger for questions like "how many XE cores", "what is BMG bandwidth", "PTL vs BMG", "Xe2 specs", "LNL GPU", etc.4---56# Intel GPU Hardware Specifications78Definitive reference for Intel GPU hardware across Xe2 and Xe3 architectures. All values sourced from kernel optimization work, profiling results, and verified benchmarks.910**Version**: 1.0.011**Last Updated**: 2026-03-121213---1415## Architecture Overview1617- **Xe2** is a GPU architecture used in multiple products:18 - **Battlemage (BMG)**: Discrete GPU (dGPU), Intel Arc B-series19 - **Lunar Lake (LNL)**: Integrated GPU (iGPU), Intel Core Ultra 200V series20- **Xe3** is a GPU architecture used in:21 - **Panther Lake (PTL)**: Integrated GPU (iGPU)22 - **Panther Lake-H (PTLH)**: High-performance integrated GPU2324All Xe2 and Xe3 products share the same ISA and programming model. Code is portable across dGPU and iGPU variants, though performance tuning differs significantly.2526---2728## Xe2 Architecture -- Battlemage (BMG) Discrete GPU2930| Parameter | Value |31|---|---|32| GPU Type | Discrete (dGPU), Intel Arc B580/B570 |33| XE Cores | 20 (B570) / 20 (B580) -- up to 32 in development samples |34| EUs per XE Core | 8 |35| Threads per EU | 8 |36| Total HW Threads | up to 2048 (32-core config) |37| GRF Mode | doubleGRF: 256 regs x 64 bytes = 16 KB/thread |38| Max WG Threads | 32 (with doubleGRF) |39| SLM per XE Core | 64 KB |40| Memory Type | GDDR6 |41| Memory Bandwidth | ~520 GB/s (32-core config) |42| FP16 XMX (DPAS) Peak | ~135 TFLOPS (32-core config) |43| FP16 ALU (non-XMX) | ~17 TFLOPS |44| DPAS Systolic Depth | 8 |45| DPAS Repeat Count | 8 |46| L3/LLC Cache | ~8-16 MB |47| TDP | ~150-225W |4849### BMG Notes50- 32 XE cores x 8 EU x 8 threads = 2048 hardware threads total51- doubleGRF is mandatory for large tile GEMM/attention kernels (256 GRF entries per thread)52- Without doubleGRF, max WG threads is 64 but register pressure becomes the bottleneck53- Practical peak BW is ~520 GB/s; theoretical is ~550 GB/s54- L2 capacity is approximately 16 MB shared across all cores5556---5758## Xe2 Architecture -- Lunar Lake (LNL) Integrated GPU5960| Parameter | Value |61|---|---|62| GPU Type | Integrated (iGPU), Intel Core Ultra 200V |63| XE Cores | 8 |64| EUs per XE Core | 8 |65| Threads per EU | 8 |66| Total HW Threads | 512 |67| Memory Type | LPDDR5x (shared with CPU) |68| Memory Bandwidth | ~90 GB/s |69| Same ISA as BMG | Yes -- same Xe2 architecture |7071### LNL Notes72- Shared system memory means CPU activity impacts GPU bandwidth73- Fewer cores require careful workgroup sizing to avoid underutilization74- Same doubleGRF, SLM, and DPAS capabilities as BMG at the per-core level7576---7778## Xe3 Architecture -- Panther Lake (PTL) Integrated GPU7980| Parameter | Value |81|---|---|82| GPU Type | Integrated (iGPU) |83| XE Cores | 12 |84| EUs per XE Core | 8 |85| Threads per EU | 8 |86| Total HW Threads | 768 |87| GRF Mode | doubleGRF: 256 regs x 64 bytes = 16 KB/thread |88| Max WG Threads | 32 (with doubleGRF) |89| SLM per XE Core | 64 KB |90| Memory Type | LPDDR5x (shared with CPU) |91| Memory Bandwidth | ~112 GB/s |92| FP16 XMX (DPAS) Peak | ~55 TFLOPS |93| FP16 ALU (non-XMX) | ~14 TFLOPS |94| Concurrent WGs/Core | 1 (32t WG), 2 (16t WG), 4 (8t WG) |95| Wave count critical | Yes -- only 12 cores, thread config matters |9697### PTL Notes98- Only 12 XE cores means wave count is the dominant performance factor99- Concurrent WG capacity per core depends on threads per WG:100 - 32 threads/WG: 1 WG per core, 12 concurrent WGs total101 - 16 threads/WG: 2 WGs per core, 24 concurrent WGs total102 - 8 threads/WG: 4 WGs per core, 48 concurrent WGs total103- For recurrent (latency-bound) kernels, 8 threads/WG is optimal (fewer waves)104- For decode (throughput-bound) kernels at batch >= 4, 32 threads/WG is better105- Shared system RAM: budget approximately 1 GB for device buffers to avoid OOM106- Same ISA as BMG (Xe2), but different microarchitecture generation (Xe3)107108---109110## Xe3 Architecture -- Panther Lake-H (PTLH) Integrated GPU111112| Parameter | Value |113|---|---|114| GPU Type | Integrated (iGPU), high-performance variant |115| XE Cores | TBD (expected more than PTL) |116| Memory Type | LPDDR5x or DDR5 (shared with CPU) |117| Memory Bandwidth | TBD (expected higher than PTL 112 GB/s) |118119---120121## Architecture Comparison122123| Parameter | Xe2 BMG (dGPU) | Xe2 LNL (iGPU) | Xe3 PTL (iGPU) |124|---|---|---|---|125| XE Cores | 20-32 | 8 | 12 |126| Memory BW | 520 GB/s | ~90 GB/s | ~112 GB/s |127| FP16 XMX | 135 TFLOPS | TBD | 55 TFLOPS |128| Memory Type | GDDR6 dedicated | LPDDR5x shared | LPDDR5x shared |129| TDP | 150-225W | 15-30W | 15-30W |130| SLM/Core | 64 KB | 64 KB | 64 KB |131| GRF | 16 KB/thread | 16 KB/thread | 16 KB/thread |132| HW Threads | 2048 | 512 | 768 |133| EUs/Core | 8 | 8 | 8 |134| Threads/EU | 8 | 8 | 8 |135136---137138## Roofline Parameters139140### BMG (32-core dGPU)141```142Peak FP16 XMX: 135 TFLOPS143Peak BW: 520 GB/s = 0.52 TB/s144Ridge Point: 135 / 0.52 = ~260 FLOPs/byte145```146- Kernels with arithmetic intensity (AI) < 260 are memory-bound147- Kernels with AI > 260 are compute-bound148- Most attention/GEMM kernels with HEAD_DIM >= 128 are compute-bound on BMG149- Practical peak BW is 520 GB/s; theoretical is 550 GB/s150- XVE FP32 (non-XMX): approximately 4 TFLOPS151- Kernel launch overhead: approximately 5-10 microseconds152153### PTL (12-core iGPU)154```155Peak FP16 XMX: 55 TFLOPS156Peak BW: 112 GB/s = 0.112 TB/s157Ridge Point: 55 / 0.112 = ~491 FLOPs/byte158```159- Higher ridge point means a wider memory-bound regime160- PTL's lower bandwidth makes more workloads memory-bound compared to BMG161- Shared memory with CPU means effective bandwidth varies with system load162163### Roofline Calculation Examples164165**GEMM: C[M,N] = A[M,K] x B[K,N]**166```167FLOPs = 2 * M * N * K168Bytes = (M*K + K*N + M*N) * sizeof(half)169AI = FLOPs / Bytes170```171172**Flash Attention:**173```174FLOPs = 4 * q_len * kv_len * head_dim * num_heads175 + 2 * q_len * kv_len * num_heads (softmax)176```177178### Roofline Classification Thresholds179```180actual_ms > bw_limit_ms * 3.0 --> LATENCY BOUND (serial dependency or launch overhead)181actual_ms > bw_limit_ms * 1.5 --> PARTIALLY BW BOUND (stalls or contention)182actual_ms <= bw_limit_ms * 1.1 --> AT BW ROOFLINE183```184185---186187## DPAS/XMX Instruction Details (Xe2 and Xe3)188189### Instruction Format190```cpp191xmx::dpas<SD, RC, T_dst, T_src0, T_src1, T_src2>(acc, src1, src2)192```193- **SD = 8**: Systolic depth (fixed for Xe2/Xe3)194- **RC = 8**: Repeat count195- **T_dst, T_src0**: Accumulator type (typically float)196- **T_src1, T_src2**: Input types (typically half or bfloat16)197198### Compute Per DPAS Call199- FP16: K = SD x 2 = 16 elements per systolic step200- BF16: K = SD x 2 = 16 elements per systolic step201- Output tile: M = RC rows x N = 16 cols per DPAS call202203### VNNI Layout Requirement204- B operand requires VNNI layout (interleaved 2-element packing)205- Use Transposed 2D load with uint32_t to get hardware VNNI transform206- VNNI packing: two FP16 values stored in one uint32_t, alternating across the K dimension207208### DPAS Pipeline Optimization209- Consecutive DPAS instructions without intervening sends/movs maximize XMX utilization210- Minimize XVE ALU operations inside DPAS loops (XVE + XMX parallelism lowers frequency)211- Use payload CSE: construct `config_2d_mem_access` once outside K-loop, only call `set_x()`/`set_y()` inside212213---214215## Memory Subsystem216217### Global Memory218- **block_load**: Contiguous 1D loads, up to 256 bytes per load for D32 (FP32)219 - `block_load<float, 64>` = 256 bytes (maximum for D32)220 - `block_load<float, 128>` = 512 bytes -- EXCEEDS LSC limit, must split to 2 x 64221 - `block_load<half, 128>` = 256 bytes (within limit)222- **gather**: Non-contiguous loads via scatter/gather223- **lsc_load_2d**: 2D block loads with hardware coalescing (preferred for tiled access)224- **lsc_prefetch_2d**: 2D prefetch (uses inline 6-argument form, not payload object)225226### SLM (Shared Local Memory)227- 64 KB per XE core, shared across all WGs on the same core228- 32 banks, 4 bytes per bank229- Bank conflict avoidance: pad SLM rows, ensure consecutive threads access consecutive banks230- `slm_init(SLM_SIZE)` must be the very first statement in the kernel231232### L3/LLC Cache233- BMG: approximately 8-16 MB, acts as implicit cache for global reads234- L2 capacity: approximately 16 MB shared across all cores235- Without cache busting, L2 can inflate bandwidth measurements by 2-3x236237### GRF (General Register File)238- 16 KB/thread in doubleGRF mode (256 registers x 64 bytes)239- Without doubleGRF: 128 registers x 64 bytes = 8 KB/thread240- doubleGRF is mandatory for large tile GEMM/attention kernels241- Not required for memory-bound kernels like GEMV (low GRF pressure)242- Register spill to stack memory kills performance -- always check compiler output243244### Cache Hints for Stores245- For `lsc_block_store`: L2 must be `uncached` or `write_back` -- NOT `cached`246- Valid store hints: `(streaming, uncached)`, `(write_through, uncached)`, `(write_back, write_back)`247- For loads: `(streaming, cached)` and `(cached, cached)` are both valid248249---250251## Key Differences: dGPU vs iGPU252253| Aspect | dGPU (BMG) | iGPU (LNL, PTL) |254|---|---|---|255| Memory | Dedicated GDDR6 | Shared system RAM |256| Bandwidth | High (520 GB/s) | Limited (90-112 GB/s) |257| Core Count | High (20-32) | Low (8-12) |258| Power Budget | 150-225W | 15-30W (shared package) |259| Memory Budget | Full VRAM | ~1 GB safe allocation |260| Wave Count | Less critical | Dominant perf factor |261| WG Sizing | Larger WGs fine | Smaller WGs often better |262| CPU Contention | None | CPU impacts GPU BW |263264### Portability265- Same ISA and programming model -- code compiles and runs on both266- Same ESIMD intrinsics, DPAS instructions, SLM operations267- Performance tuning differs: iGPU needs smaller WG sizes, wave count optimization matters more268- Compile target differs: `-device bmg` vs `-device ptl`269270---271272## Thread Configuration Quick Reference273274### BMG (32 XE Cores)275```27632 cores x 8 EU/core x 8 threads/EU = 2048 HW threads277With doubleGRF: max 32 threads per WG278Design WG sizes so num_groups x local_size fills 2048 threads279```280281### PTL (12 XE Cores)282```28312 cores x 8 EU/core x 8 threads/EU = 768 HW threads284With doubleGRF: max 32 threads per WG285286Threads/WG | EUs/WG | WGs/Core | Concurrent WGs (12 cores) | Waves for H=3628732 | 8 | 1 | 12 | 328816 | 4 | 2 | 24 | 22898 | 2 | 4 | 48 | 1290```291292### LNL (8 XE Cores)293```2948 cores x 8 EU/core x 8 threads/EU = 512 HW threads295```296297---298299## Compilation Targets300301```bash302# BMG (Xe2 dGPU)303icpx kernel.cpp -o kernel.exe -fsycl -fsycl-targets=spir64_gen \304 -Xs "-device bmg -options -doubleGRF"305306# PTL (Xe3 iGPU)307icpx kernel.cpp -o kernel.exe -fsycl -fsycl-targets=spir64_gen \308 -Xs "-device ptl -options -doubleGRF"309```310311- Do NOT use `-fsycl-targets=intel_gpu_bmg_g21` (wrong target string)312- Do NOT use `-O3` or `-doubleGRF` as top-level flags (they are ignored or warn)313- Check for spill warnings in compiler output: any spill > 0 indicates GRF pressure314315---316317## Related Skills318319| Skill | What it covers |320|---|---|321| `intel-gpu-kernel-opt` | General optimization methodology using these HW specs |322| `xe2-esimd-gemm` | GEMM tuning specific to Xe2 |323| `xe2-esimd-gemv` | GEMV tuning specific to Xe2/BMG |324| `xe3-esimd-kernels` | Kernel patterns specific to Xe3/PTL |325| `xe2-dpas-patterns` | DPAS tile patterns for Xe2 |326| `intel-esimd-base` | Foundational ESIMD programming |