DICE: Enabling Efficient General-Purpose SIMT
Execution with Statically Scheduled CGRAs
Jiayi Wang, Ang Da Lu, Zhichen Zeng, Prof. Ang Li
University of Washington, Department of Electrical and Computer Engineering
Email: {jwang710,angl7,zczeng,angliz}@uw.edu
2026 International Symposium on Computer Architecture (ISCA 2026), Raleigh, NC, USA, June 27– July 1, 2026
Motivation – SIMD-based GPU overhead
2
Figure from: S. Hong and H. Kim, “An integrated GPU power and performance model,” ISCA 2010
(2) Control pipeline
can be more amortized across more threads.
Register file access + Front-end Control pipeline energy occupies more than 40% of the total GPU dynamic power [1][2].
[1] V. Kandiah et al., “AccelWattch” MICRO-54
[2] O. Antepara et al., “Benchmark-driven Models for Energy Analysis and Attribution of GPU-Accelerated Supercomputing,” SC ’25.
Domain-specific accelerators: efficiency by specialization
GPUs:
Accelerators:
3
price of flexibility
Can we apply the same principle to cut overhead, while keeping general-purpose SIMT support?
Yes, DICE realizes SIMT by replacing SIMD-based backend with a CGRA-based thread pipeline execution backend.
Coarse-Grained Reconfigurable Array (CGRA) at a glance
4
PE
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
S
CGRA
CGRA configuration Memory
…
…
…
…
…
…
…
…
SB
PE
INT/FP/SF ALU
Input from SB (Switch Box)
output to SB
Crossbar Switch
…
…
CM
CM
Coarse-Grained Reconfigurable Array (CGRA) at a glance
5
Input from SB (Switch Box)
High-level code:
dx = x1 - x2;
dy = y2 - y2;
dz = z2 - z2;
dist = sqrtf(dx*dx + dy*dy + dz*dz);
Assembly code:
…
SUB %r6, %r0, %r1;
SUB %r7, %r2, %r3;
SUB %r8, %r4, %r5;
MUL %r12, %r6, %r6;
MUL %r13, %r7, %r7;
MUL %r14, %r8, %r8;
ADD %r15, %r12, %r13;
ADD %r16, %r15, %r14;
Sqrt %r16, %r16;
…
PE
S
S
S
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
PE
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
S
S
S
S
S
CGRA
CGRA configuration Memory
…
…
…
…
…
…
…
…
PE
–
+
–
MUL
–
MUL
+
Sqrt
MUL
x1
x2
y1
y2
z1
z2
dist
–
–
–
MUL
MUL
MUL
+
+
sqrt
Dataflow Graph (DFG)
How CGRA works with SIMT – Thread Pipeline Execution
6
High-level CUDA code:
int g_tid=threadIdx.x+blockIdx.x*blockDim.x;
float dx = x[g_tid] - x2;
float dy = y[g_tid] - y2;
float dz = z[g_tid] - z2;
float dist = sqrtf(dx*dx + dy*dy + dz*dz);
d[g_tid]=dist;
CGRA Advantages:
Challenges of real SIMT programs beyond toy kernels…
Previous works: Softbrain, HyCUBE, Open-CGRA, CGRA-ME, AHA,...:
Only fixed-latency on chip scratchpad buffer
Other works: Riptide Plasticine, SNAFU, SGMF, VGIW... ��Handshaking protocol, tagged token out-of-order execution.
Large hardware overhead and not hiding long latency.
7
Memory
Dynamism
Control Dynamism
large memory space (DRAM)
data-depend address
unpredictable, variable, long latency
thread divergence, data-depend loops
Figure From : J. Weng, S. Liu, Z. Wang, V. Dadu, and T. Nowatzki, “A Hybrid Systolic-Dataflow Architecture for Inductive Matrix Algorithms,” HPCA 2020
DICE preserves the simplest “systolic” CGRA while resolving dynamism with p-graph partition.
8
Memory
Dynamism
Control Dynamism
statically scheduled CGRA
p-graph partition + control logic outside CGRA
p-graph partition
A set of constraints to fragment a program into smaller dataflow graphs(DFG). Each partitioned dataflow graph (called p-graph) can be mapped onto the static CGRA. ��Dynamic edges, such as data dependent control flow edges and memory load edges are only present at p-graph edges.
4 types of p-graph constraints to ensure static mapping onto the CGRA
9
PE
S
S
S
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
PE
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
+
LD
<<
<<
SUB
MUL
+
MUL
+
LD
MUL
+
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
+
<<
<<
MUL
+
MUL
+
+
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
PE
PE
PE
PE
PE
PE
SUB
MUL
LD
compile-time fixed-latency
DICE control model around CGRA
Von Neumann-like pipeline for inter-p-graphs execution orchestration
CGRA subsystem for single p-graph thread pipeline execution
10
PE
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
PE
S
S
S
S
S
Register File
LDST
Unit
Main Memory
Cache
CGRA
CGRA configuration Memory
…
…
…
…
…
…
…
…
Software Flow
CUDA
programs
NVCC + DICE p-graph compiler
p-block
IR
p-block
IR
p-graph
IR
p-block
metadata
p-block
metadata
p-graph
metadata
binary
CGRA mapper
CGRA bitstream
CGRA bitstream
CGRA bitstream
binary
Hardware Execution Stages
next p-graph
Logic
Fetch p-graph Metadata
Decode
Fetch Bitstream & Reconfigure CGRA
Wait Mem
& Retire
Execute p-graph
Execute p-graph
Execute p-graph
Execute p-graph
Execute p-graph
Execute p-graph
(× number of threads)
Metadata needed for CGRA IO control (register IO indexes, latency,...) and Branch information
DICE Hardware Microarchitecture
Design Goal:
Four stage outer pipeline:
11
CGRA core
Retire(RE)
Dispatch/Execution (DE)
Fetch/Decode/Reconfig (FDR)
CTA Schedule (CS)
Active CTA table
PDOM
STACK
PDOM
STACK
PDOM
STACK
CTA
scheduler
Metadata Fetch Unit
p-graph Cache
Decoder
Bitstream Fetch + Load
Dispatcher
CGRA
LDST Unit
Block Retire Table (BRT)
Scoreboard
Register File
Control
Stack update
Interconnect
CM0
CM1
CGRA Processor (CP) microarchitecture
Branch Handler
DICE
…
Interconnect
L2 Cache
Off-chip Memory
Off-chip Memory
CGRA Cluster
…
CGRA
core
CGRA
core
CGRA
Processor
(CP)
L2 Cache
…
…
CGRA Cluster
…
CGRA
core
CGRA
core
CGRA
Processor�(CP)
CGRA Cluster
…
CGRA
core
CGRA
core
CGRA
Processor�(CP)
DICE top microarchitecture
CTA Schedule (CS)
Decide which p-graph from which CTA to run
Scheduler logic:
Storing multiple CTAs’ info and status
Storing CTA thread divergence info
12
CGRA core
Retire(RE)
Dispatch/Execution (DE)
Fetch/Decode/Reconfig (FDR)
CTA Schedule (CS)
Active CTA table
PDOM
STACK
PDOM
STACK
PDOM
STACK
CTA
scheduler
Metadata Fetch Unit
p-graph Cache
Decoder
Bitstream Fetch + Load
Dispatcher
CGRA
LDST Unit
Block Retire Table (BRT)
Scoreboard
Register File
Control
Stack update
Interconnect
CM0
CM1
CGRA Processor (CP) microarchitecture
Branch Handler
Active CTA table
hw_cta_id | cta_id.xyz | kernel_id | … |
0 | (0,0,10) | 0 | … |
1 | (0,0,26) | 0 | … |
… | … | … | … |
PDOM STACK
next_pc | recov_pc | active_mask |
0x100 | 0x200 | 0x1FF11… |
0x200 | 0x400 | 0xFFFFF… |
Fetch-Decode-Reconfigure (FDR)
Prepare CGRA with metadata and bitstream
Double buffered CGRA configuration memory to overlap next bitstream load with CGRA execution
13
CGRA core
Retire(RE)
Dispatch/Execution (DE)
Fetch/Decode/Reconfig (FDR)
CTA Schedule (CS)
Active CTA table
PDOM
STACK
PDOM
STACK
PDOM
STACK
CTA
scheduler
Metadata Fetch Unit
p-graph Cache
Decoder
Bitstream Fetch + Load
Dispatcher
CGRA
LDST Unit
Block Retire Table (BRT)
Scoreboard
Register File
Control
Stack update
Interconnect
CGRA Processor (CP) microarchitecture
Branch Handler
CM0
CM1
Dispatch-Execution (DE)
Dispatching threads to CGRA to execute operations
Stall reason:
14
CGRA core
Retire(RE)
Dispatch/Execution (DE)
Fetch/Decode/Reconfig (FDR)
CTA Schedule (CS)
Active CTA table
PDOM
STACK
PDOM
STACK
PDOM
STACK
CTA
scheduler
Metadata Fetch Unit
p-graph Cache
Decoder
Bitstream Fetch + Load
Dispatcher
CGRA
LDST Unit
Block Retire Table (BRT)
Scoreboard
Register File
Control
Stack update
Interconnect
CGRA Processor (CP) microarchitecture
Branch Handler
CM0
CM1
Dispatcher
Scoreboard
Register File
General-Purpose Register File
RF)
General-Purpose Register File
General-Purpose Register Banks
Active Thread Selection Logic
e-block active mask
tids
data to CGRA
data from CGRA or LDST Unit
Operand Collector
collision check & reserve
update BRT
release
Shared Constant Buffer
Only dispatch active threads.
Retire (RE)
Hold p-graphs’ states that finishes the CGRA execution but still pending memory responses
15
CGRA core
Retire(RE)
Dispatch/Execution (DE)
Fetch/Decode/Reconfig (FDR)
CTA Schedule (CS)
Active CTA table
PDOM
STACK
PDOM
STACK
PDOM
STACK
CTA
scheduler
Metadata Fetch Unit
p-graph Cache
Decoder
Bitstream Fetch + Load
Dispatcher
CGRA
LDST Unit
Block Retire Table (BRT)
Scoreboard
Register File
Control
Stack update
Interconnect
CGRA Processor (CP) microarchitecture
Branch Handler
CM0
CM1
So DE stage and CGRA can switch to next p-graph runs.
Two more optimizations
#1 Thread unrolling to increase CGRA spatial utilization
#2 Temporal Memory Coalescing
16
Tid/ Bank | B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 |
t0 | R0 | R1 | R2 | R3 | R4 | R5 | R6 | R7 |
t1 | R1 | R2 | R3 | R4 | R5 | R6 | R7 | R0 |
t2 | R2 | R3 | R4 | R5 | R6 | R7 | R0 | R1 |
t3 | R3 | R4 | R5 | R6 | R7 | R0 | R1 | R2 |
t4 | R4 | R5 | R6 | R7 | R0 | R1 | R2 | R3 |
t5 | R5 | R6 | R7 | R0 | R1 | R2 | R3 | R4 |
t6 | R6 | R7 | R0 | R1 | R2 | R3 | R4 | R5 |
t7 | R7 | R0 | R1 | R2 | R3 | R4 | R5 | R6 |
t0
t1
t255
…
t0
t1
…
t8
t9
…
t16
t10
…
t24
t11
…
LDST Unit
L1 Data Cache /Shared Memory
Tex/Const
Cache
crossbar
FIFO
TMCU
Port 0
FIFO
FIFO
FIFO
Port N-1
Port 1
Port 2
TMCU
TMCU
TMCU
TMCU
coalesce buffer
can
coalesce?
timer
coalesce control
is_valid
timeout
initial/
pop/
coalesce
coalesced command
max_interval
is_valid
in_req
tid 0 req
tid 1 req
Evaluation and Results
Simulation Method: Extended Accel-sim and AccelWattch to model DICE performance and energy. Key modules with RTL implementation.
Benchmark: 10 diverse realworld kernels from gpu-rodinia benchmark. Workload size is large enough to ensure full GPU SM occupancy.
17
DICE vs RTX2060S Configurations
Workload and problem sizes
Baseline: Modelled NVIDIA Turing GPUs (RTX 2060S/RTX 5000/RTX 6000).
Matched compute unit counts and SRAM sizes.
With reduced RF pressure, DICE is able to hold more threads than GPUs per cluster.
Performance
Naive DICE (without two optimizations) can only achieve 0.77x performance, but with both optimizations on:
DICE is able to achieve comparable performance (1.16x) with RTX2060S.
Three advantages in DICE:
18
Energy and Power
Compared with RTX2060S, DICE reduce 68% average register access count.
DICE’s CGRA processor is able to achieve 1.90x energy efficiency (42% dynamic power reduction) compared to RTX2060S SM in that:
19
Area
(45nm) 16.21 mm^2
(12nm) ~2.92 mm^2
NVIDIA Turing GPU SM areas infer from public die shot: https://www.flickr.com/photos/130561288@N04/46357922535
DICE can scale-out in the same way as GPUs by adding CGRA clusters.
20
DICE
CGRA Cluster
NVIDIA Turing SM (GTX1660Ti)
(12nm) 4.46 mm^2
(Without Tensor Core/RT core)
Scalability
Summary and Takeaways of DICE
21
Insight — SIMT and CGRA are a match made in silicon:
CGRA’s programmability with spatial and thread pipeline execution enables efficient and flexible computing.
SIMT, in turn, gives CGRAs exactly what they need: abundant parallel work with no dependencies to amortize configuration/control overheads and fill pipelines.
Thank you and Q&A:
DICE: Enabling Efficient General-Purpose SIMT Execution with Statically Scheduled CGRAs
Jiayi Wang, Ang Da Lu, Zhichen Zeng, Prof. Ang Li
University of Washington, Department of Electrical and Computer Engineering
Email: {jwang710,angl7,zczeng,angliz}@uw.edu
2026 International Symposium on Computer Architecture (ISCA 2026), Raleigh, NC, USA, June 27– July 1, 2026