The cache coherency problem exists because we're duplicating data in the machine, and we want the system to behave as if the caches are not there. The system is responsible for maintaining cache coherency. However, relaxed memory consistency models exist because sometimes it's advantageous to reorder memory operations. The programmer is responsible for using synchronization primitives to ensure correctness and memory consistency in relaxed memory consistency models.
The cache coherency problem exists because we're duplicating data in the machine, and we want the system to behave as if the caches are not there. The system is responsible for maintaining cache coherency. However, relaxed memory consistency models exist because sometimes it's advantageous to reorder memory operations. The programmer is responsible for using synchronization primitives to ensure correctness and memory consistency in relaxed memory consistency models.