Mapping Tasks onto Distributed Heterogeneous Computing Systems Using a Genetic Algorithm Approach