We develop a computational framework for solving the problem of finding the cheapest configuration (in terms of the number of processors and their respective speeds) of a multiprocessor architecture on which a task graph can be scheduled within a given deadline. We then extend the problem in two orthogonal directions: taking communication volume into account and considering the case where a stream of instances of the task graph arrives periodically.