I&#x27;d suggest creating a templated buffer class that manages data uploads&#x2F;downloads and exposes the appropriate pointer on the appropriate device.  And from an algorithmic standpoint, don&#x27;t pingpong large buffers of data between the CPU and GPU.  I&#x27;ve been following this practice for 7 years now and it seems to work well.  Ergo I really don&#x27;t need unified memory and I&#x27;m pretty happy with the world of NUMA.  Sadly, I suspect I&#x27;m an outlier.<p>For I think the real pain point is that GPU programming requires the ability to parallelize seemingly serial algorithms in a strongly-typed language in an age where 90+% of the engineers I know do all their coding in single-threaded, weakly-typed Python&#x2F;R&#x2F;Ruby&#x2F;Javascript so they never get the opportunity to develop the relevant mindset to do so.  As an aside, to hit close to floating point SOL on a CPU in SSE&#x2F;AVX often requires a mindset similar to GPU programming (but sssshhhhh... don&#x27;t tell the &quot;recompile and run&quot; peeps about that because it doesn&#x27;t fit their comforting narrative).<p>And it&#x27;s not a problem for me personally as a former C and assembler videogame and embedded system developer but it is a huge problem to find such talent these days because Python&#x2F;R&#x2F;Ruby&#x2F;Javascript.<p>All IMO of course.