Membrane

Analytical database queries have a wasteful shape. A scan pulls gigabytes out of memory, a filter throws almost all of it away, and only a small fraction of what moved was ever going to matter. Membrane pushes that filter into DRAM itself, so rows are rejected in place and never cross the memory bus.

My contribution was the bit-serial comparison circuit in the data buffers. Comparison runs MSB to LSB, one bit position at a time, across the full width of the memory band. Two things fall out of doing it that way. It’s very cheap in area, since a bit-serial comparator is small and you need one per column rather than a full-width datapath. And it often finishes early: most comparisons are decided in the high-order bits, so once a row’s fate is determined there’s no reason to keep walking down to the LSB.

MSB-first comparison decides most rows earlySix rows are compared one bit position at a time from most significant to least significant. Most rows are resolved within the first few bit positions and stop, so the comparison rarely walks all the way down to the least significant bit. Bit position MSB LSB row 1row 2row 3 row 4row 5row 6 resolved — stop resolved — stop resolved — stop resolved — stop resolved — stop Only the rare ambiguous row walks the full width.
A bit-serial comparator is small enough to place per column, and starting at the MSB means most rows are decided long before the last bit.

The broader project pairs this in-memory filtering with schema denormalization, since normalized schemas scatter the columns a filter needs across tables — good database design, bad PIM workload.

Published in ACM Transactions on Architecture and Code Optimization (TACO), 2025, with A. Shekar, K. Gaffney, M. Prammer, K. Kiyawat, L. Wu, H. Caminal, Z. Fan, and colleagues. Related U.S. patent application 19/233,680, with K. Skadron, L. Wu, and A. Shekar.