コード例 #1
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
コード例 #2
0
def test_insert_sendrecvs():
    prec = {3: (1, 2), 2: (1, )}
    succ = reverse_dict(prec)
    jobson = {1: 'a', 2: 'b', 3: 'a'}
    orders = {'a': [Event(1, 0, 1), Event(3, 4, 8)], 'b': [Event(2, 2, 3)]}

    neworders, newjobson = insert_sendrecvs(orders, jobson, succ, send, recv)
    print neworders
    print newjobson
    assert Event(send('a', 'b', 1, 2), 1, 1) in neworders['a']
    assert Event(recv('a', 'b', 1, 2), 2, 2) in neworders['b']
    assert all(e in neworders[agent] for agent in orders
               for e in orders[agent])
コード例 #3
0
ファイル: test_core.py プロジェクト: Neeratyoy/heft
def test_insert_sendrecvs():
    prec = {3: (1, 2),
            2: (1,)}
    succ = reverse_dict(prec)
    jobson = {1: 'a', 2: 'b', 3: 'a'}
    orders = {'a': [Event(1, 0, 1), Event(3, 4, 8)],
              'b': [Event(2, 2, 3)]}

    neworders, newjobson = insert_sendrecvs(orders, jobson, succ)
    print neworders
    print newjobson
    assert Event(send('a', 'b', 1, 2), 1, 1) in neworders['a']
    assert Event(recv('a', 'b', 1, 2), 2, 2) in neworders['b']
    assert all(e in neworders[agent] for agent in orders
                                     for e in orders[agent])
コード例 #4
0
    def __init__(self, dag):
        self.succ = dag['succ']
        self.cost = dag['cost']
        self.deadline = dag['deadline']
        self.comm_delay = dag['comm_delay']

        self.agents = dag['cost'].keys()
        self.tasks = dag['succ'].keys()
        self.sort = None

        self.wbar = np.mean(list(dag['cost'].values()), axis=0)
        self.rank = OrderedDict()
        self.prec = reverse_dict(self.succ)

        # Allocate constants
        self.schedule_order = {agent: [] for agent in self.agents}
        self.task_on = dict()
コード例 #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
コード例 #6
0
ファイル: IHWithCommcost.py プロジェクト: Piccky/HEFT
    sL.update({eachP: sl})
    eL.update({eachP: el})
    jL.update({eachP: jl})
    sl = []
    el = []
    jl = []
result = {}
for i in range(0, len(G), 1):
    for j in range(0, len(jL[vm[i]]), 1):
        result.update({jL[vm[i]][j]: {'vm': vm[i], 'pos': j, 'starttime': sL[vm[i]][j], 'endtime': eL[vm[i]][j]}})
print(result)

"""Add waitcost into the schedule result"""

dag = getdict()
reverse_dag = reverse_dict(dag)
for i in range(0, len(G), 1):
    for j in range(1, len(jL[vm[i]]), 1):
        if jL[vm[i]][j] in dag:
            temp = 999999
            for k in range(0, len(dag[jL[vm[i]][j]]), 1):
                if result[dag[jL[vm[i]][j]][k]]['endtime'] < temp:
                    temp = result[dag[jL[vm[i]][j]][k]]['endtime']
            sL[vm[i]][j] = temp

"""Add communication cost to the schedule"""
for i in range(0, len(G), 1):
    for j in range(0, len(jL[vm[i]]) - 1, 1):
        if jL[vm[i]][j] in reverse_dag:
            temp = 0
            for k in range(0, len(reverse_dag[jL[vm[i]][j]]), 1):
コード例 #7
0
def getdag():
    return reverse_dict(dag)
コード例 #8
0
ファイル: test_util.py プロジェクト: Neeratyoy/heft
def test_reverse_dict():
    d = {'a': (1, 2), 'b': (2, 3), 'c': ()}
    assert reverse_dict(d) == {1: ('a',), 2: ('a', 'b'), 3: ('b',)}
コード例 #9
0
ファイル: CriticalPath.py プロジェクト: Piccky/HEFT
            #     #            + self.commcost(self.pro_id, self.previous[x], 'A', 'B'))
            # else:
            for i in pro_list:
                if i.pro_id == self.previous[x]:
                    n = i
                    m = pro_list.index(n)
                    tmp.append(
                        pro_list[m].run() + self.compcost +
                        self.commcost(self.previous[x], self.pro_id, 'A', 'B'))
        # print(tmp)
        total = max(tmp)
        # print(total)
        return total


dag = reverse_dict(getdag())
jobs_tup = getjobs_tup()
pro_list = []
pro_0 = Pro(0, compcost, [0], commcost, pro_list)

# pro_0.status = True
list1 = [pro_0]

for index in range(len(jobs_tup)):
    a = jobs_tup[index]['id']
    if a not in dag:
        # pro_1 = Pro(jobs_tup[index]['id'], jobs_tup[index]['runtime'], [0], commcost, pro_list)
        list1.append(
            Pro(jobs_tup[index]['id'], compcost, [0], commcost, pro_list))
    else:
        # pro_1 = Pro(jobs_tup[index]['id'], jobs_tup[index]['runtime'], list(dag[a]), commcost, pro_list)
コード例 #10
0
        jobs_tup += temp_tup
    else:
        # 第二层节点的标签名称和属性
        # print("\t",child.tag,":", child.attrib)
        # print('\t'+child.get('ref'))
        tup = ()
        # 遍历xml文档的第三层
        for children in child:
            # 第三层节点的标签名称和属性
            # print('\t\t'+children.get('ref'));
            temp = (children.get('ref'), )
            tup = tup + temp
        # print(tup)
        dict.update({child.get('ref'): tup, })
# print(dict)
dag = reverse_dict(dict)
# print(jobs)
# print(jobs_tup)
# print(dict.keys()[0])

def getdag():
    return dag


def getjobs_tup():
    return jobs_tup


def getdict():
    return dict
def compcost(job, agent):
コード例 #11
0
def test_reverse_dict():
    d = {'a': (1, 2), 'b': (2, 3), 'c': ()}
    assert reverse_dict(d) == {1: ('a', ), 2: ('a', 'b'), 3: ('b', )}