Memory-Centric Architectures: Bridging The Gap Between Compute And Memory