Пример #1
0
 def test_fill_machine(self):
     graph = MachineGraph("machine")
     cores = sum(chip.n_user_processors for chip in self.machine.chips)
     for i in range(cores):  # 50 atoms per each processor on 20 chips
         graph.add_vertex(
             get_resourced_machine_vertex(0, 50, "vertex " + str(i)))
     placements = radial_placer(graph, self.machine, 100)
     self.assertEqual(len(placements), cores)
     # One more vertex should be too many
     graph.add_vertex(get_resourced_machine_vertex(0, 50, "toomany"))
     with self.assertRaises(PacmanValueError):
         radial_placer(graph, self.machine, 100)
Пример #2
0
    def test_place_vertex_too_big_with_vertex(self):
        cpu_cycles = 1000
        dtcm_requirement = 1000
        sdram_requirement = self.machine.get_chip_at(0, 0).sdram.size * 20
        rc = ResourceContainer(cpu_cycles=CPUCyclesPerTickResource(cpu_cycles),
                               dtcm=DTCMResource(dtcm_requirement),
                               sdram=ConstantSDRAM(sdram_requirement))

        large_machine_vertex = SimpleMachineVertex(rc,
                                                   vertex_slice=Slice(0, 499),
                                                   label="Second vertex")
        self.mach_graph.add_vertex(large_machine_vertex)
        with self.assertRaises(PacmanValueError):
            radial_placer(self.mach_graph, self.machine, 100)
Пример #3
0
 def test_deal_with_constraint_placement_vertices_dont_have_vertex(self):
     self.vertex2.add_constraint(ChipAndCoreConstraint(3, 5, 7))
     self.vertex3.add_constraint(RadialPlacementFromChipConstraint(2, 4))
     placements = radial_placer(self.mach_graph, self.machine, 100)
     for placement in placements.placements:
         if placement.vertex == self.vertex2:
             self.assertEqual(placement.x, 3)
             self.assertEqual(placement.y, 5)
             self.assertEqual(placement.p, 7)
         if placement.vertex == self.vertex3:
             self.assertEqual(placement.x, 2)
             self.assertEqual(placement.y, 4)
     self.assertEqual(len(self.vertices), len(placements))
Пример #4
0
    def _do_test(self, placer):
        machine = virtual_machine(width=8, height=8)
        graph = MachineGraph("Test")

        vertices = [
            SimpleMachineVertex(ResourceContainer(), label="v{}".format(i))
            for i in range(100)
        ]
        for vertex in vertices:
            graph.add_vertex(vertex)

        same_vertices = [
            SimpleMachineVertex(ResourceContainer(), label="same{}".format(i))
            for i in range(10)
        ]
        random.seed(12345)
        for vertex in same_vertices:
            graph.add_vertex(vertex)
            for _i in range(0, random.randint(1, 5)):
                vertex.add_constraint(
                    SameChipAsConstraint(vertices[random.randint(0, 99)]))

        n_keys_map = DictBasedMachinePartitionNKeysMap()

        if placer == "ConnectiveBasedPlacer":
            placements = connective_based_placer(graph, machine, None)
        elif placer == "OneToOnePlacer":
            placements = one_to_one_placer(graph, machine, None)
        elif placer == "RadialPlacer":
            placements = radial_placer(graph, machine, None)
        elif placer == "SpreaderPlacer":
            placements = spreader_placer(graph, machine, n_keys_map, None)
        else:
            raise NotImplementedError(placer)

        for same in same_vertices:
            print("{0.vertex.label}, {0.x}, {0.y}, {0.p}: {1}".format(
                placements.get_placement_of_vertex(same), [
                    "{0.vertex.label}, {0.x}, {0.y}, {0.p}".format(
                        placements.get_placement_of_vertex(constraint.vertex))
                    for constraint in same.constraints
                ]))
            placement = placements.get_placement_of_vertex(same)
            for constraint in same.constraints:
                if isinstance(constraint, SameChipAsConstraint):
                    other_placement = placements.get_placement_of_vertex(
                        constraint.vertex)
                    self.assertTrue(
                        other_placement.x == placement.x
                        and other_placement.y == placement.y,
                        "Vertex was not placed on the same chip as requested")
Пример #5
0
    def _do_test(self, placer):
        machine = virtual_machine(width=8, height=8)
        graph = MachineGraph("Test")

        vertices = [
            MockMachineVertex(ResourceContainer(),
                              label="v{}".format(i),
                              sdram_requirement=20) for i in range(100)
        ]
        for vertex in vertices:
            graph.add_vertex(vertex)

        same_vertices = [
            MockMachineVertex(ResourceContainer(),
                              label="same{}".format(i),
                              sdram_requirement=20) for i in range(10)
        ]
        random.seed(12345)
        sdram_edges = list()
        for vertex in same_vertices:
            graph.add_vertex(vertex)
            graph.add_outgoing_edge_partition(
                ConstantSDRAMMachinePartition(identifier="Test",
                                              pre_vertex=vertex,
                                              label="bacon"))
            for _i in range(0, random.randint(1, 5)):
                sdram_edge = SDRAMMachineEdge(vertex,
                                              vertices[random.randint(0, 99)],
                                              label="bacon",
                                              app_edge=None)
                sdram_edges.append(sdram_edge)
                graph.add_edge(sdram_edge, "Test")
        n_keys_map = DictBasedMachinePartitionNKeysMap()

        if placer == "ConnectiveBasedPlacer":
            placements = connective_based_placer(graph, machine, None)
        elif placer == "OneToOnePlacer":
            placements = one_to_one_placer(graph, machine, None)
        elif placer == "RadialPlacer":
            placements = radial_placer(graph, machine, None)
        elif placer == "SpreaderPlacer":
            placements = spreader_placer(graph, machine, n_keys_map, None)
        else:
            raise NotImplementedError(placer)
        for edge in sdram_edges:
            pre_place = placements.get_placement_of_vertex(edge.pre_vertex)
            post_place = placements.get_placement_of_vertex(edge.post_vertex)
            assert pre_place.x == post_place.x
            assert pre_place.y == post_place.y
def test_virtual_placement(placer):
    unittest_setup()
    machine = virtual_machine(width=8, height=8)
    graph = MachineGraph("Test")
    virtual_vertex = MachineSpiNNakerLinkVertex(spinnaker_link_id=0)
    graph.add_vertex(virtual_vertex)
    extended_machine = malloc_based_chip_id_allocator(machine, graph)
    n_keys_map = DictBasedMachinePartitionNKeysMap()

    if placer == "ConnectiveBasedPlacer":
        placements = connective_based_placer(graph, machine, None)
    elif placer == "OneToOnePlacer":
        placements = one_to_one_placer(graph, machine, None)
    elif placer == "RadialPlacer":
        placements = radial_placer(graph, machine, None)
    elif placer == "SpreaderPlacer":
        placements = spreader_placer(graph, machine, n_keys_map, None)
    else:
        raise NotImplementedError(placer)

    placement = placements.get_placement_of_vertex(virtual_vertex)
    chip = extended_machine.get_chip_at(placement.x, placement.y)
    assert chip.virtual
Пример #7
0
 def test_simple(self):
     placements = radial_placer(self.mach_graph, self.machine, 100)
     self.assertEqual(len(self.vertices), len(placements))