1. A hardware data prefetcher comprised in a memory access agent, wherein the memory access agent is one of a plurality of memory access agents that share a memory, the hardware data prefetcher comprising: a prefetch trait that is initially either exclusive or shared; a prefetch module that performs hardware prefetches from a memory block of the shared memory using the prefetch trait; and an update module that performs analysis of accesses to the memory block by the plurality of memory access agents and, based on the analysis, dynamically updates the prefetch trait to either exclusive or shared while the prefetch module performs hardware prefetches from the memory block using the prefetch trait.