  To ease the programmability of PIM architectures, we propose
DaPPA(data-parallel processing-in-memory architecture), a framework that can,
for a given application, automatically distribute input and gather output data,
handle memory management, and parallelize work across the DPUs. The key idea
behind DaPPA is to remove the responsibility of managing hardware resources
from the programmer by providing an intuitive data-parallel pattern-based
programming interface that abstracts the hardware components of the UPMEM
system. Using this key idea, DaPPA transforms a data-parallel pattern-based
application code into the appropriate UPMEM-target code, including the required
APIs for data management and code partition, which can then be compiled into a
UPMEM-based binary transparently from the programmer. While generating
UPMEM-target code, DaPPA implements several code optimizations to improve
end-to-end performance.
