Gradient Descent Optimization On Heterogeneous Architectures