Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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