Jointly optimizing algorithmic choices and hardware implementation to achieve better end-to-end performance.