Efficient Execution Of Scientific Applications On Heterogeneous Architectures