I think I can give a bit of an idea on this (albeit as a dev and usernot as an architecture expert)
At least in the realm of games, sometimes resources are duplicated if the cpu wants access to them, because querying results or the asset back from the gpu stalls the whole system. They run basically staggered and mostly one way: from application side logic the results are sent to be rendered for viewing (player position, camera position, render that).
For static data, say a texture that won’t change, if the the application what’s to read a specific pixel of a texture (a terrain height map where the player could be) or better yet, to have collision detection at the mesh level, that texture and those vertices will live twice, in system ram: for the cpu to read and compute things; and in gpu memory: for the graphics card to read and draw said meshes with its textures.
With UMA, it would be my guess that it would be possible to just have those potentially duplicated resources only once. I’m not too sure about the actual benefits on collision meshes (since sometimes a lower simpler representation is calculated and the original duplicate discarded)
On a similar note, a gpu ray tracer could just create its acceleration structure, mesh splitting etc on the cpu and... done, it’s there ready to be rendered by the gpu, no need to send data back and forth.