Look at any code example on how to do data readback from the GPU. You record a copy to a READBACK buffer on a command list, execute that command list, signal a fence, wait for the fence to complete, and read the data on the CPU.
Also look at the documentation on Map():
https://msdn.microsoft.com/en-us/library/windows/desktop/dn788712(v=vs.85).aspx
Note that no GPU cache flushes are required by Map()/Unmap(), only synchronization (and sometimes CPU cache flush/invalidate). This is because the ExecuteCommandLists() work needs to ensure that any work done within can be made visible by a Signal() which follows immediately after, either to the CPU or other GPU engines.