Improving the programmability of heterogeneous systems by means of libraries