  Shared virtual memory (SVM) is key in heterogeneous systems on chip (SoCs),
which combine a general-purpose host processor with a many-core accelerator,
both for programmability and to avoid data duplication. However, SVM can bring
a significant run time overhead when translation lookaside buffer (TLB) entries
are missing. Moreover, allowing DMA burst transfers to write SVM traditionally
requires buffers to absorb transfers that miss in the TLB. These buffers have
to be overprovisioned for the maximum burst size, wasting precious on-chip
memory, and stall all SVM accesses once they are full, hampering the
scalability of parallel accelerators.
  In this work, we present our SVM solution that avoids the majority of TLB
misses with prefetching, supports parallel burst DMA transfers without
additional buffers, and can be scaled with the workload and number of parallel
processors. Our solution is based on three novel concepts: To minimize the rate
of TLB misses, the TLB is proactively filled by compiler-generated Prefetching
Helper Threads, which use run-time information to issue timely prefetches. To
reduce the latency of TLB misses, misses are handled by a variable number of
parallel Miss Handling Helper Threads. To support parallel burst DMA transfers
to SVM without additional buffers, we add lightweight hardware to a standard
DMA engine to detect and react to TLB misses. Compared to the state of the art,
our work improves accelerator performance for memory-intensive kernels by up to
4x and by up to 60% for irregular and regular memory access patterns,
respectively.
