In today's increasingly heterogeneous compute landscape, there is high demand for design tools that offer seemingly contradictory features: portable programming abstractions hide underlying architectural detail, and the capability to optimise exploit features. Our meta-programming approach, Artisan, decouples application functionality from optimisation concerns address complexity of mapping hig...