Scheduling Tasks With Precedence Constraints On Heterogeneous Distributed Computing Systems