Exemple #1
0
    def test_mapSynapses_3(self):
        """Check generation of synGrpMap."""

        verbose = False

        layer = Layer(layerId=0,
                      layerType='',
                      compartmentKwargs={},
                      connectionKwargs={"weightExponent": 2},
                      coreIdMap=np.array([]),
                      multiplicityMap=np.array([]),
                      postLayer=None)

        sf = SynFmt(synFmtId=0,
                    cIdxOffset=0,
                    cIdxMult=2,
                    numIdxBits=6,
                    numSkipBits=0,
                    numWgtBits=8,
                    compression=0,
                    signMode=1)

        se0 = SynEntry(prefixOffset=0,
                       idxs=np.array([0, 1, 2]),
                       weights=np.array([6, 7, 8]),
                       synFmt=sf)

        se1 = SynEntry(prefixOffset=10,
                       idxs=np.array([0, 1]),
                       weights=np.array([16, 17]),
                       synFmt=sf)

        se2 = SynEntry(prefixOffset=20,
                       idxs=np.array([0, 1, 2]),
                       weights=np.array([26, 27, 28]),
                       synFmt=sf)

        se3 = SynEntry(prefixOffset=30,
                       idxs=np.array([0, 1]),
                       weights=np.array([36, 37]),
                       synFmt=sf)

        sg0 = SynapseGroup(groupId=0, synEntries=[[se0, se1, se2], [se3]])

        sg1 = SynapseGroup(groupId=1, synEntries=[[se0], [se1], [se2, se3]])

        p = Partition(partitionId=0,
                      chipCounter=0,
                      sizeInterleaved=-1,
                      parentLayer=layer)

        p.addSynFmt(sf)

        p.addSynapseGroup(sg0)
        p.addSynapseGroup(sg1)

        layer.addPartition(p)

        numSyn = 10 * 2
        board = N2Board(0)
        c = DnnMapper(board)
        core = board.allocateCores(1, numSyn)[0]

        c._mapSynapses(p, core)  # pylint: disable=protected-access

        if verbose:
            print(c._synGrpMap)

        self.assertEqual(len(c._synGrpMap), 5)
        self.assertEqual(c._synGrpMap[(sg0, 0)], (0, 8))
        self.assertEqual(c._synGrpMap[(sg0, 1)], (8, 2))
        self.assertEqual(c._synGrpMap[(sg1, 0)], (10, 3))
        self.assertEqual(c._synGrpMap[(sg1, 1)], (13, 2))
        self.assertEqual(c._synGrpMap[(sg1, 2)], (15, 5))
Exemple #2
0
    def test_mapInputAxons_1(self):
        """Check mapping of InputAxonGroup with all input nodes having
        multiplicity 1."""

        verbose = False

        layer = Layer(layerId=0,
                      layerType='',
                      compartmentKwargs={},
                      connectionKwargs={"weightExponent": 2},
                      coreIdMap=np.array([]),
                      multiplicityMap=np.array([]),
                      postLayer=None)

        sf = SynFmt(synFmtId=0,
                    cIdxOffset=0,
                    cIdxMult=2,
                    numIdxBits=6,
                    numSkipBits=0,
                    numWgtBits=8,
                    compression=0,
                    signMode=1)

        se0 = SynEntry(prefixOffset=0,
                       idxs=np.array([0, 1, 2]),
                       weights=np.array([6, 7, 8]),
                       synFmt=sf)

        se1 = SynEntry(prefixOffset=10,
                       idxs=np.array([0, 1]),
                       weights=np.array([16, 17]),
                       synFmt=sf)

        se2 = SynEntry(prefixOffset=20,
                       idxs=np.array([0, 1, 2]),
                       weights=np.array([26, 27, 28]),
                       synFmt=sf)

        se3 = SynEntry(prefixOffset=30,
                       idxs=np.array([0, 1]),
                       weights=np.array([36, 37]),
                       synFmt=sf)

        sg = SynapseGroup(groupId=0,
                          synEntries=[[se0, se1], [se1, se2, se3], [se3]])

        p = Partition(partitionId=0,
                      chipCounter=0,
                      sizeInterleaved=-1,
                      parentLayer=layer)

        p.addSynFmt(sf)

        p.addSynapseGroup(sg)

        iag = InputAxonGroup(srcNodeIds=np.array([10, 11, 12]),
                             multiplicity=np.array([1, 1, 1]),
                             synGroup=sg,
                             cxBase=2,
                             parentPartition=p)

        p.addInputAxonGroup(iag)
        layer.addPartition(p)

        numSyn = 14
        board = N2Board(0)
        c = DnnMapper(board)
        core = board.allocateCores(1, numSyn)[0]

        c._mapSynapses(p, core)  # pylint: disable=protected-access
        c._mapInputAxons(p, core)  # pylint: disable=protected-access

        # Validate input axon
        sMap = core.synapseMap[0]
        self.assertEqual(sMap.synapsePtr, 0)
        self.assertEqual(sMap.synapseLen, [5, 7, 2])
        self.assertEqual(sMap.popSize, 3)
        self.assertEqual(sMap.population32MapEntry.ptr, 0)
        self.assertEqual(sMap.population32MapEntry.length, 3)
        self.assertEqual(sMap.population32MapEntry.cxBase, 2)

        # Validate inAxMap
        self.assertTrue(
            np.array_equal(c._inAxMap[iag.id],
                           np.array([[0, 0, 4], [0, 0, 4], [0, 0, 4]], int)))

        if verbose:
            c.printCore(core, inputAxons=True)
Exemple #3
0
    def test_mapSynapses_2(self):
        """Check switching between synFmt for successive synEntries if
        synFmtId does not change."""

        verbose = False

        layer = Layer(layerId=0,
                      layerType='',
                      compartmentKwargs={},
                      connectionKwargs={"weightExponent": 2},
                      coreIdMap=np.array([]),
                      multiplicityMap=np.array([]),
                      postLayer=None)

        sf0 = SynFmt(synFmtId=0,
                     cIdxOffset=0,
                     cIdxMult=2,
                     numIdxBits=6,
                     numSkipBits=0,
                     numWgtBits=8,
                     compression=0,
                     signMode=1)

        sf1 = SynFmt(synFmtId=1,
                     cIdxOffset=0,
                     cIdxMult=2,
                     numIdxBits=7,
                     numSkipBits=0,
                     numWgtBits=8,
                     compression=1,
                     signMode=1)

        se00 = SynEntry(prefixOffset=0,
                        idxs=np.array([0, 1, 2]),
                        weights=np.array([6, 7, 8]),
                        synFmt=sf0)

        se01 = SynEntry(prefixOffset=10,
                        idxs=np.array([0, 1]),
                        weights=np.array([16, 17]),
                        synFmt=sf0)

        se02 = SynEntry(prefixOffset=20,
                        idxs=np.array([0, 1, 2]),
                        weights=np.array([26, 27, 28]),
                        synFmt=sf0)

        se10 = SynEntry(prefixOffset=30,
                        idxs=np.array([0, 1]),
                        weights=np.array([36, 37]),
                        synFmt=sf1)

        sg = SynapseGroup(groupId=0, synEntries=[[se00, se01, se02], [se10]])

        p = Partition(partitionId=0,
                      chipCounter=0,
                      sizeInterleaved=-1,
                      parentLayer=layer)

        p.addSynFmt(sf0)
        p.addSynFmt(sf1)

        p.addSynapseGroup(sg)

        layer.addPartition(p)

        numSyn = 10
        board = N2Board(0)
        c = DnnMapper(board)
        core = board.allocateCores(1, numSyn)[0]

        c._mapSynapses(p, core)  # pylint: disable=protected-access

        if verbose:
            c.printCore(core, synapses=True)

        cIdx = [0, 1, 2, 10, 11, 20, 21, 22, 30, 31]
        wgts = [6, 7, 8, 16, 17, 26, 27, 28, 36, 37]
        synFmtIds = [1, 1, 1, 2, 2, 1, 1, 1, 3, 3]

        for i in range(numSyn):
            self.assertEqual(core.synapses[i].CIdx, cIdx[i])
            self.assertEqual(core.synapses[i].Wgt, wgts[i])
            self.assertEqual(core.synapses[i].synFmtId, synFmtIds[i])
Exemple #4
0
    def test_mapInputAxons_4(self):
        """Check mapping of multiple InputAxonGroups."""

        verbose = False

        layer = Layer(layerId=0,
                      layerType='',
                      compartmentKwargs={},
                      connectionKwargs={"weightExponent": 2},
                      coreIdMap=np.array([]),
                      multiplicityMap=np.array([]),
                      postLayer=None)

        sf = SynFmt(synFmtId=0,
                    cIdxOffset=0,
                    cIdxMult=2,
                    numIdxBits=6,
                    numSkipBits=0,
                    numWgtBits=8,
                    compression=0,
                    signMode=1)

        se0 = SynEntry(prefixOffset=0,
                       idxs=np.array([0, 1, 2]),
                       weights=np.array([6, 7, 8]),
                       synFmt=sf)

        se1 = SynEntry(prefixOffset=10,
                       idxs=np.array([0, 1]),
                       weights=np.array([16, 17]),
                       synFmt=sf)

        se2 = SynEntry(prefixOffset=20,
                       idxs=np.array([0, 1, 2]),
                       weights=np.array([26, 27, 28]),
                       synFmt=sf)

        se3 = SynEntry(prefixOffset=30,
                       idxs=np.array([0, 1]),
                       weights=np.array([36, 37]),
                       synFmt=sf)

        sg0 = SynapseGroup(groupId=0,
                           synEntries=[[se0, se1], [se1, se2, se3], [se3]])

        sg1 = SynapseGroup(groupId=1,
                           synEntries=[[se0, se1], [se2], [se1, se2, se3]])

        p = Partition(partitionId=0,
                      chipCounter=0,
                      sizeInterleaved=-1,
                      parentLayer=layer)

        p.addSynFmt(sf)

        p.addSynapseGroup(sg0)
        p.addSynapseGroup(sg1)

        iag0 = InputAxonGroup(srcNodeIds=np.array([10, 11, 12]),
                              multiplicity=np.array([1, 1, 1]),
                              synGroup=sg0,
                              cxBase=1,
                              parentPartition=p)

        iag1 = InputAxonGroup(srcNodeIds=np.array([10, 11, 12]),
                              multiplicity=np.array([1, 2, 1]),
                              synGroup=sg0,
                              cxBase=2,
                              parentPartition=p)

        iag2 = InputAxonGroup(srcNodeIds=np.array([10, 11, 12]),
                              multiplicity=np.array([1, 2, 3]),
                              synGroup=sg1,
                              cxBase=3,
                              parentPartition=p)

        p.addInputAxonGroup(iag0)
        p.addInputAxonGroup(iag1)
        p.addInputAxonGroup(iag2)
        layer.addPartition(p)

        board = N2Board(0)
        c = DnnMapper(board)
        core = board.allocateCores(1, p.numSyn)[0]

        c._mapSynapses(p, core)  # pylint: disable=protected-access
        c._mapInputAxons(p, core)  # pylint: disable=protected-access

        # Validate axons of iag0
        sMapShared = core.synapseMap[0]
        self.assertEqual(sMapShared.synapsePtr, 0)
        self.assertEqual(sMapShared.synapseLen, [5, 7, 2])
        self.assertEqual(sMapShared.popSize, 3)
        self.assertEqual(sMapShared.population32MapEntry.ptr, 0)
        self.assertEqual(sMapShared.population32MapEntry.length, 3)
        self.assertEqual(sMapShared.population32MapEntry.cxBase, 1)

        # Validate axons of iag1
        sMapShared = core.synapseMap[1]
        self.assertEqual(sMapShared.synapsePtr, 0)
        self.assertEqual(sMapShared.synapseLen, [5, 7, 2])
        self.assertEqual(sMapShared.popSize, 3)
        self.assertEqual(sMapShared.population32MapEntry.ptr, 0)
        self.assertEqual(sMapShared.population32MapEntry.length, 3)
        self.assertEqual(sMapShared.population32MapEntry.cxBase, 2)

        sMapDiscrete = core.synapseMap[2]
        self.assertEqual(sMapDiscrete.synapsePtr, 5)
        self.assertEqual(sMapDiscrete.synapseLen, 7)
        self.assertEqual(sMapDiscrete.discreteMapEntry.ptr, 3)
        self.assertEqual(sMapDiscrete.discreteMapEntry.length, 3)
        self.assertEqual(sMapDiscrete.discreteMapEntry.cxBase, 2)

        # Validate axons of iag2
        sMapShared = core.synapseMap[3]
        self.assertEqual(sMapShared.synapsePtr, 14)
        self.assertEqual(sMapShared.synapseLen, [5, 3, 7])
        self.assertEqual(sMapShared.popSize, 3)
        self.assertEqual(sMapShared.population32MapEntry.ptr, 9)
        self.assertEqual(sMapShared.population32MapEntry.length, 3)
        self.assertEqual(sMapShared.population32MapEntry.cxBase, 3)

        sMapDiscrete = core.synapseMap[4]
        self.assertEqual(sMapDiscrete.synapsePtr, 19)
        self.assertEqual(sMapDiscrete.synapseLen, 3)
        self.assertEqual(sMapDiscrete.discreteMapEntry.ptr, 12)
        self.assertEqual(sMapDiscrete.discreteMapEntry.length, 1)
        self.assertEqual(sMapDiscrete.discreteMapEntry.cxBase, 3)

        sMapDiscrete = core.synapseMap[5]
        self.assertEqual(sMapDiscrete.synapsePtr, 22)
        self.assertEqual(sMapDiscrete.synapseLen, 7)
        self.assertEqual(sMapDiscrete.discreteMapEntry.ptr, 15)
        self.assertEqual(sMapDiscrete.discreteMapEntry.length, 3)
        self.assertEqual(sMapDiscrete.discreteMapEntry.cxBase, 3)

        # Validate inAxMap
        self.assertTrue(
            np.array_equal(c._inAxMap[iag0.id],
                           np.array([[0, 0, 4], [0, 0, 4], [0, 0, 4]], int)))
        self.assertTrue(
            np.array_equal(c._inAxMap[iag1.id],
                           np.array([[1, 0, 4], [2, 0, 4], [1, 0, 4]], int)))
        self.assertTrue(
            np.array_equal(c._inAxMap[iag2.id],
                           np.array([[3, 0, 4], [4, 0, 4], [5, 0, 4]], int)))

        if verbose:
            c.printCore(core, inputAxons=True)