There are 3 things to carefully know on resource/mapping management on msdn:
Basically,
UpdateSubresource is mainly used to update a resource that was declared with the
Usage.Default and is
not frequently updated.. Technically, as explained in the UpdateSubresource doc, when you call UpdateSubresource, the buffer is more likely (when there are resource contention, which is mostly the case) to be copied to a temporary buffer accessible from the GPU command buffer. Then, the GPU will copy the content of the temp buffer to the GPU memory. UpdateSubresource is also able to update a part of a buffer, which can be handy in some situations.
Map/UnMap has more combination allowed (you can update staging buffers, dynamic buffers), most of the time, we are using
MapMode.WriteDiscard. In this case, the resource must have been created with a
Usage.Dynamic and a
CpuAccessFlags.Write (There is also the special case of MapMode.WriteNoOverWrite where you could use it to write a part of a resource - except for constant buffers). It is mainly recommended for
dynamic scenarios, where a resource is
updated once per frame. It is also the only way to update a buffer and be performance friendly when you are using d3d11 multithreading features (this is measure
here). The pointer returned by Map can be a mapped GPU memory (meaning that you are writing directly to the GPU memory).