Smarter Prefetching

Many common algorithms are data oblivious, meaning that their memory access patterns are independent of their input data (e.g., common matrix operations). Our goal in this project is to exploit the predictability of memory access patterns in data oblivious algorithms in order to reduce their memory footprint, while limiting their performance degradation. We do this by utilizing a smart memory prefetcher, which is able to use information garnered from one execution to accurately prefetch on subsequent executions of an application. For data-oblivious applications, our approach will allow us to achieve much better prefetching accuracy when compared to existing approaches.