Meta-programming: Optimising Designs for Multiple Computing Platforms