We'll describe our experience with using OpenACC to port a C++ library to run GPUs, focusing in particular on the issue of deep copy. The C++ library, Grid, is developed for numerical lattice quantum chromodynamics (LQCD) simulations, and is highly optimized for Intel x86 and many-core architectures. Our goal is to port it to run on NVIDIA GPUs using OpenACC so that its main code structure can be preserved and minimal code changes are required. We'll describe the challenges encountered and share the lessons learned during the porting process. In particular, due to the heavy use of templated abstractions, it is challenging to use OpenACC to deal with the data movement between the CPU and the GPU due to the deep-copy issue. We'll demonstrate that NVIDIA's virtual unified memory provides essential support for our porting effort. We'll also present initial performance results on Kepler and Pascal GPUs.