Beispiel #1
0
def add_master_node(p_parent, p_last_task):
    """
    Adding the master node that will distribute the work to the second level

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    task_id = p_last_task + 1
    repeat_min = repeat_max = int(init.winner_master_rate[1] / init.R_i)
    master_node = writer.add_task_node(p_parent, task_id, p_repeat=(repeat_min,repeat_max))

    # Adding the shadow1 layer as a requirement
    requires = writer.add_requires_node(master_node)
    r_start = task_id - init.num_tiles
    r_end = r_start + init.num_tiles
    require_list = list(range(r_start, r_end))
    for i in range(len(require_list)):
        writer.add_requirement(requires, i, init.data_types.index('s1_m1'), require_list[i], init.proc_proc_rate[0])

    # Generate data to the second layer
    generates = writer.add_generates_node(master_node)
    g_start = task_id + 1
    g_end = g_start + init.num_found_faces
    dist_list = list(range(g_start, g_end))
    writer.add_possibility(generates, 0, 1, (0,9), init.winner_master_rate[1], init.winner_master_rate[0], init.data_types.index('m1_l2'), dist_list)

    return task_id
Beispiel #2
0
def add_layer1_nodes(p_parent, p_last_task):
    """
    Adding Layer1 Processors Nodes

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    start = p_last_task + 1
    end = start + init.num_tiles
    repeat_min = repeat_max = int(init.proc_proc_rate[1] / init.R_i)
    for i in range(start, end):
        task = writer.add_task_node(p_parent, i, p_repeat=(repeat_min,repeat_max))

        # Adding the camera as a requirement
        requires = writer.add_requires_node(task)
        writer.add_requirement(requires, 0, init.data_types.index('c_l1'), p_last_task, init.camera_proc_rate[0])

        # Send the data to shadow1 layer
        generates = writer.add_generates_node(task)
        g_start = end
        g_end = g_start + init.num_tiles
        shadow_list = list(range(g_start, g_end))
        shadow_list.remove(init.num_tiles + i)
        writer.add_possibility(generates, 0, 1, (1,10), init.proc_proc_rate[1], init.proc_proc_rate[0], init.data_types.index('l1_s1'), shadow_list)

    return end - 1
Beispiel #3
0
def add_shadow1_nodes(p_parent, p_last_task):
    """
    Adding a shadow layer in layer 1 to prevent deadlock situation

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    start = p_last_task + 1
    end = start + init.num_tiles
    repeat_min = repeat_max = int(init.winner_master_rate[1] / init.R_i)
    for i in range(start, end):
        task = writer.add_task_node(p_parent, i, p_repeat=(repeat_min,repeat_max))

        # Adding layer1 processors as a requirment
        requires = writer.add_requires_node(task)
        r_start = start - p_last_task
        r_end = r_start + init.num_tiles
        require_list = list(range(r_start, r_end))
        require_list.remove(i - init.num_tiles)
        for j in range(0, len(require_list)):
            writer.add_requirement(requires, j, init.data_types.index('l1_s1'), require_list[j], init.proc_proc_rate[0])

        # Send the data to the master node
        generates = writer.add_generates_node(task)
        dist_list = [end]
        writer.add_possibility(generates, 0, 1/init.num_tiles, (0,9), init.winner_master_rate[1], init.winner_master_rate[0], init.data_types.index('s1_m1'), dist_list)

    return end - 1
Beispiel #4
0
def add_master2_node(p_parent, p_last_task):
    """
    Adding the master node in layer2

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    task_id = p_last_task + 1
    repeat_min = repeat_max = int(init.shadow2_master2_rate[1] / init.R_i)
    task = writer.add_task_node(p_parent, task_id, p_repeat=(repeat_min,repeat_max))

    # Add shadow2 as requirements
    requires = writer.add_requires_node(task)
    r_start = task_id - init.num_found_faces
    r_end = r_start + init.num_found_faces
    require_list = list(range(r_start, r_end))
    for i in range(len(require_list)):
        writer.add_requirement(requires, i, init.data_types.index('s2_m2'), require_list[i], init.shadow2_master2_rate[0])

    # Send the data to layer3
    generates = writer.add_generates_node(task)
    g_start = task_id + init.num_found_faces
    g_end = g_start + init.num_found_faces
    dist_list = list(range(g_start, g_end))
    writer.add_possibility(generates, 0, 1, (0,9), init.shadow2_master2_rate[1], init.shadow2_master2_rate[0], init.data_types.index('m2_l3'), dist_list)

    return task_id
Beispiel #5
0
def add_camera_node(p_parent):
    """
    Adding the camera task

    Parameters:
        - p_parent: the id of the parent node
    """
    task_id = 0
    repeat_min = repeat_max = int(init.camera_proc_rate[1] / init.R_i)
    camera_task = writer.add_task_node(p_parent, task_id, p_repeat=(repeat_min,repeat_max))

    # Send the data to the processors of layer1
    generates = writer.add_generates_node(camera_task)
    g_start = task_id + 1
    g_end = g_start + init.num_tiles
    dist_list = list(range(g_start, g_end))
    writer.add_possibility(generates, 0, 1, (1,init.num_tiles), init.camera_proc_rate[1], init.camera_proc_rate[0], init.data_types.index('c_l1'), dist_list)

    return task_id
Beispiel #6
0
def add_layer3_activator(p_parent, p_last_task):
    """
    Adding the layer3 activator task, which is a taske mapped to the camera node

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    task_id = p_last_task + 1
    repeat_min = repeat_max = int(init.shadow2_master2_rate[1] / init.R_min)
    task = writer.add_task_node(p_parent, task_id, p_repeat=(repeat_min,repeat_max))

    # Send the data to layer3
    generates = writer.add_generates_node(task)
    g_start = task_id + 1
    g_end = g_start + init.num_found_faces
    dist_list = list(range(g_start, g_end))
    # Amount of data is not important, it's only for activation purposes, so we send the least amount possible which is 1 boolean and we leave the interval as it is for now
    writer.add_possibility(generates, 0, 1, (0,9), init.shadow2_master2_rate[1], init.getsizeof_bool(), init.data_types.index('actv_l3'), dist_list)

    return task_id
Beispiel #7
0
def add_shadow3_nodes(p_parent, p_last_task):
    """
    Adding a shadow layer in layer3

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    start = p_last_task + 1
    end = start + init.num_found_faces
    repeat_min = repeat_max = int(init.lay3_lay3_rate[1] / init.R_min)
    for i in range(start, end):
        task = writer.add_task_node(p_parent, i, p_repeat=(repeat_min,repeat_max))

        # Add matching shadow camera as a requirement
        requires = writer.add_requires_node(task)
        writer.add_requirement(requires, 0, init.data_types.index('sc2_s3'), i - init.num_found_faces, init.cam_lay3_rate[0])

        # Send the data to matching shadow33 task
        generates = writer.add_generates_node(task)
        dist_list = [i + init.num_found_faces]
        writer.add_possibility(generates, 0, 1, (0,9), init.lay3_lay3_rate[1], init.lay3_lay3_rate[0], init.data_types.index('s3_s33'), dist_list)

    return end - 1
Beispiel #8
0
def add_layer3_nodes(p_parent, p_last_task):
    """
    Adding the third layer of processors

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    start = p_last_task + 1
    end = start + init.num_found_faces
    repeat_min = repeat_max = int(init.lay3_cam_rate[1] / init.R_min)
    for i in range(start, end):
        task = writer.add_task_node(p_parent, i, p_repeat=(repeat_min,repeat_max))

        # Layer3 is not activated by the layer2, rather by the camera
        requires = writer.add_requires_node(task)
        writer.add_requirement(requires, 0, init.data_types.index('actv_l3'), p_last_task, init.getsizeof_bool())

        # Send the data to shadow cameras 2, because the camera can't have a requirement
        generates = writer.add_generates_node(task)
        dist_list = [i + init.num_found_faces]
        writer.add_possibility(generates, 0, 1, (0,9),  init.lay3_cam_rate[1], init.lay3_cam_rate[0], init.data_types.index('l3_sc2'), dist_list)

    return end - 1
Beispiel #9
0
def add_shadow_cameras(p_parent, p_last_task):
    """
    Adding shadow cameras because the real camera can't have a requirement

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    start = p_last_task + 1
    end = start + init.num_found_faces
    repeat_min = repeat_max = int(init.cam_lay2_rate[1] / init.R_i)
    for i in range(start, end):
        task = writer.add_task_node(p_parent, i, p_repeat=(repeat_min,repeat_max))

        # Add matching layer2 task as a requirment
        requires = writer.add_requires_node(task)
        writer.add_requirement(requires, 0, init.data_types.index('l2_sc'), i - init.num_found_faces, init.lay2_cam_rate[0])

        # Send the data to matching shadow2 task
        generates = writer.add_generates_node(task)
        dist_list = [i + init.num_found_faces]
        writer.add_possibility(generates, 0, 1, (0,9), init.cam_lay2_rate[1], init.cam_lay2_rate[0], init.data_types.index('sc_s2'), dist_list)

    return end - 1
Beispiel #10
0
def add_layer2_nodes(p_parent, p_last_task):
    """
    Adding the second layer of processors

    Parameters:
        - p_parent: the id of the parent node
        - p_last_task: the id of the last added task
    """
    start = p_last_task + 1
    end = start + init.num_found_faces
    repeat_min = repeat_max = int(init.lay2_cam_rate[1] / init.R_i)
    for i in range(start, end):
        task = writer.add_task_node(p_parent, i, p_repeat=(repeat_min,repeat_max))

        # Add the master node as a requirement
        requires = writer.add_requires_node(task)
        writer.add_requirement(requires, 0, init.data_types.index('m1_l2'), p_last_task, init.winner_master_rate[0])

        # Send the data to shadow cameras, because the camera can't have a requirement
        generates = writer.add_generates_node(task)
        dist_list = [i + init.num_found_faces]
        writer.add_possibility(generates, 0, 1, (0,9),  init.lay2_cam_rate[1], init.lay2_cam_rate[0], init.data_types.index('l2_sc'), dist_list)

    return end - 1