Pass a Pointer: Exploring Shared Virtual Memory Abstractions in OpenCL Tools for FPGAs
Department of Electrical and Electronic Engineering, Imperial College London, South Kensington Campus, London, SW7 2AZ
IEEE International Conference on Field-Programmable Technology, 2017
@article{winterstein2017pass,
title={Pass a Pointer: Exploring Shared Virtual Memory Abstractions in OpenCL Tools for FPGAs},
author={Winterstein, Felix and Constantinides, George},
publisher={IEEE},
year={2017}
}
Heterogeneous CPU-FPGA systems are gaining momentum in the embedded systems sector and in the data center market. While the programming abstractions for implementing the data transfer between CPU and FPGA (and vice versa) that are available in today’s commercial programming tools are well-suited for certain types of applications, the CPU-FPGA communication for applications that share complex pointer-based data structures between the CPU and FPGA remains difficult to implement. This paper focuses on programming environments providing a virtual memory space that is shared between the host CPU and one (or potentially several) FPGA devices. One example of shared virtual memory (SVM) is defined by the recent OpenCL 2.0 standard. SVM allows the software and hardware portion of a hybrid application to share complex data structures seamlessly (and concurrently) by simply passing a pointer, which greatly eases programming heterogeneous systems. We present a framework that automatically adds the physical infrastructure for SVM into a commercial OpenCL tool for FPGAs. This paper explores the design space for these building blocks and studies the performance impact. We show that, due to the ability of SVMenabled implementations to avoid artificially sizing dynamic data structures and fetching data on-the-fly, up to 2x speed-up over an OpenCL design without SVM support can be achieved. Our framework is open-source and publicly available.
December 24, 2017 by hgpu