Software
Skipping loop iterations
for (int i = 0; i < b; i++)
loop_body();for (int i = 0; i < b; i += 2)
loop_body();Half of the iterations run.
Our work belongs to approximate computing (AxC): designing circuits, systems and programs that insert errors on purpose, in a disciplined and tunable way, to save energy, area or time in applications that tolerate them. For every technique we study, we ask two questions: how much does it save, and how much error does it introduce?
With the end of Dennard scaling and the slowdown of Moore's law, each new transistor no longer comes with a free drop in power. Energy has become a first order constraint, from battery powered sensors to data centers.
Machine learning, signal processing and image processing need massive amounts of arithmetic, often under tight latency and power budgets at the edge and in the cloud.
Approximation is possible because many applications do not need exact answers:
The set of all possible approximation configurations forms the design space. Searching it efficiently is one of the central problems of the field, and the focus of the group's work on metaheuristics.
Approximate computing is not a single technique but a range of approaches spread across the design stack, from the circuit to the algorithm.
Adapted from Leon et al. (2025).
Skipping loop iterations
for (int i = 0; i < b; i++)
loop_body();for (int i = 0; i < b; i += 2)
loop_body();Half of the iterations run.
Simplifying a full adder
S = A ⊕ B ⊕ Cin
Cout = A·B + Cin·(A ⊕ B)S = A ⊕ B
Cout = CinThe AND and OR gates are removed.
Fewer processing cores
16 cores reduced to 9.
An approximate instruction
for (int i = 0; i < b; i = ADDX(i, n))
loop_body();int ADDX(int i, int n) {
int r;
asm volatile("addx %[z], %[x], %[y]"
: [z] "=r" (r)
: [x] "r" (i), [y] "r" (n));
if (r <= i) r = i + n; /* correction */
return r;
}An approximate add implemented in the processor, with a correction that keeps the loop moving forward.
Adapted from Catelan (2025).
The group works mostly at the hardware and compilation levels, with connections to software and to the tools that support the whole flow.
Approximate adders (LOA, HEAA, HOERAA, HERLOA) and multipliers (4:2 compressors, radix 4 Booth, partial product perforation, DSP based designs) in Verilog for FPGA, characterized by area, power and error. Together they form the group's operator library, in the spirit of EvoApprox8b and SMApproxLib. A squaring circuit and a multiply and accumulate systolic array apply these operators in larger datapaths.
Metaheuristics (VNS and GRASP) search for the best combination of approximate operators in a Sobel edge detection filter under PSNR or SSIM constraints. Each candidate is evaluated with real synthesis in Vivado instead of an analytical model, so area and power come from implemented designs.
Convolution and matrix multiplication in C with iteration skipping and precision scaling from double to float, which reached speedups of 1.66× in convolution and 1.94× in DGEMM, with errors around 10−7 for the precision change. Loop perforation on microcontrollers measures what those savings mean in real energy on a battery powered device.
Clang abstract syntax trees are turned into dataflow graphs to model error propagation before synthesis, which cuts the cost of exploring the design space. A second line maps LLVM IR to RISC-V, toward custom ISA extensions with approximate instructions.
perf: cycles, instructions, IPC, cache and branch misses.Every approximate design is evaluated against its exact counterpart on the same inputs. No single number describes error well: an average can hide rare large mistakes, and an absolute value means little without the size of the result. We therefore report several metrics together.
For \(n\) inputs, \(O^{ac}_i\) is the exact (accurate) output and \(O^{ax}_i\) the approximate output for input \(i\). The error distance of one output is \(ED_i = \lvert O^{ac}_i - O^{ax}_i \rvert\).
The error of a single output, the building block of the metrics below.
Fraction of inputs with a wrong result, however small.
Average error distance, also called mean error distance (MED).
MAE divided by the largest exact output, so designs of different widths can be compared.
The largest error over all inputs; it exposes rare catastrophic cases that averages hide.
Average error relative to the size of the exact result.
Like MRED but keeps the sign: a positive bias means the design underestimates on average. Errors that cancel out matter when results are accumulated.
The largest number of wrong bits in one output, where \(b\) is the output width and \(O_{i,j}\) is bit \(j\) of output \(i\).
Penalizes large errors more than small ones; its square root is the RMSE.
For images, in decibels; \(L\) is the largest possible pixel value, 255 for 8 bit images. Higher is better.
For images: the product of the similarity of local luminance \(l\), contrast \(c\) and structure \(s\) between exact and approximate images. 1 means identical.
A cheaper design with more error is not better or worse by itself. We plot each design by cost (area, power, energy or cycles) against error and keep the Pareto frontier: the designs that no other design beats on both axes at once. A new technique is worth adopting only when it moves that frontier.