Programming for Performance: Optimization Techniques