I think the emphasis on unified memory is a bit of a red herring here.  In my experience, heterogeneous computing means optimizing data placement such that the parallel-friendly number crunching is done entirely on the GPU and I&#x2F;O, process control, and telemetry are orchestrated by the CPU.<p>Failure to consider data placement destroys much of the potential perf gain for getting the above right IMO. And  unified memory won&#x27;t make this any better if BW within a GPU is ~1 GB&#x2F;s and system bandwidth is ~10x less.  It will just sweep the problem under the rug.<p>Further, I have seen attempts to smear parallel computations system-wide, treating all the ALUs as equivalent, but this frequently breaks determinism when the compilers for the two different processor architectures create associatively different implementations of the same computation.  And I see no resolution to that problem right now.<p>That said, GPUs have advanced enormously in the past decade.  Branching is nowhere near the big deal it once was, the cache (L1 and register file) for a GPU core (an SMX not NVIDIA&#x27;s silly redefinition of a SIMD lane) is surprisingly large, and insanely fast atomic ops can resolve a lot of potential concurrency issues (even deterministically if one prudently employs fixed-point math).