Algorithmic and SW Techniques for designing and implementing energy efficient CNNs