def schedule(succ, agents, compcost, commcost): """ Schedule computation dag onto worker agents inputs: succ - DAG of tasks {a: (b, c)} where b, and c follow a agents - set of agents that can perform work compcost - function :: job, agent -> runtime commcost - function :: j1, j2, a1, a2 -> communication time """ rank = partial(ranku, agents=agents, succ=succ, compcost=compcost, commcost=commcost) prec = reverse_dict(succ) jobs = set(succ.keys()) | set(x for xx in succ.values() for x in xx) jobs = sorted(jobs, key=rank) orders = {agent: [] for agent in agents} jobson = dict() for job in reversed(jobs): allocate(job, orders, jobson, prec, compcost, commcost) return orders, jobson
def insert_sendrecvs(orders, jobson, succ, send, recv): """ Insert send an recv events into the orders at approprate places """ prec = reverse_dict(succ) jobson = jobson.copy() neworders = dict() for agent, order in orders.items(): order = insert_sends(order, jobson, succ, send) order = insert_recvs(order, jobson, prec, recv) neworders[agent] = order return neworders, jobson
def insert_sendrecvs(orders, jobson, succ, send=send, recv=recv): """ Insert send an recv events into the orders at approprate places """ prec = reverse_dict(succ) jobson = jobson.copy() neworders = dict() for agent, order in orders.items(): order = insert_sends(order, jobson, succ, send) order = insert_recvs(order, jobson, prec, recv) neworders[agent] = order return neworders, jobson
def schedule(succ, agents, compcost, commcost): rank = partial(ranku, agents=agents, succ=succ, compcost=compcost, commcost=commcost) prec = reverse_dict(succ) jobs = set(succ.keys()) | set(x for xx in succ.values() for x in xx) jobs = sorted(jobs, key=rank) agentstate = {agent: [] for agent in agents} jobstate = dict() for job in reversed(jobs): allocate(job, agentstate, jobstate, prec, compcost, commcost) return agentstate, jobstate
def load_dictionaries(config): source_to_num = [util.load_dict(d) for d in config.source_dicts] target_to_num = util.load_dict(config.target_dict) num_to_source = [util.reverse_dict(d) for d in source_to_num] num_to_target = util.reverse_dict(target_to_num) return source_to_num, target_to_num, num_to_source, num_to_target