Photonics for Computing: from Optical Interconnects to Neuromorphic Architectures