Static scheduling algorithms for allocating directed task graphs to multiprocessors (ACM computing surveys, 1999)