Example #1
0
    def loadMatrix(self, mParams):
        src, dst = mParams['m'], mParams['nuM']
        sL, sR = mParams['mL'], mParams['mR']
        dL, dR = mParams['nuML'], mParams['nuMR']
        M, N = mParams['M'], mParams['N']
        nuMM, nuMN = mParams['nuMM'], mParams['nuMN']
        mStruct, mAccess = mParams['struct'], mParams['access']
        instructions = []

        if IdentityMatrix.test(mStruct, mAccess, M, N):
            comm = Comment('%dx%d - %s' % (M, N, 'Identity'))
            instrs = [
                Mov(V(1), ScaLoad(dst[dL.of(i), dR.of(i)])) for i in range(M)
            ]
            instructions.extend([comm] + instrs)

        if AllEntriesConstantMatrix.test(mStruct, mAccess, M, N):
            mat_type = mStruct.keys()[0]
            comm = Comment('%dx%d - %s' % (M, N, str(mat_type)))
            instrs = []
            for i in range(M):
                for j in range(N):
                    instrs.append(
                        Mov(V(mat_type._const_value),
                            ScaLoad(dst[dL.of(i), dR.of(j)])))
            instructions.extend([comm] + instrs)

        return instructions
Example #2
0
    def Kro(self, s0Params, s1Params, dParams, opts):
        src0, src1, dst = s0Params['nuM'], s1Params['nuM'], dParams['nuM']
        s0L, s0R = s0Params['nuML'], s0Params['nuMR']
        s1L, s1R = s1Params['nuML'], s1Params['nuMR']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, K, N, P = s0Params['nuMM'], s0Params['nuMN'], s1Params[
            'nuMM'], s1Params['nuMN']
        instructions = []

        instructions += [
            Comment("1-BLAC: " + str(M) + "x" + str(K) + " Kro " + str(N) +
                    "x" + str(P))
        ]
        for i in range(M):
            for k in range(K):
                for j in range(N):
                    for p in range(P):
                        instr = Mov(
                            ScaMul(ScaLoad(src0[s0L.of(i),
                                                s0R.of(k)]),
                                   ScaLoad(src1[s1L.of(j),
                                                s1R.of(p)])),
                            ScaLoad(dst[dL.of(i + j),
                                        dR.of(k + p)]))
                        instructions += [instr]

        return instructions
Example #3
0
    def Neg(self, sParams, dParams, opts):
        src, dst = sParams['nuM'], dParams['nuM']
        sL, sR = sParams['nuML'], sParams['nuMR']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, N = dParams['nuMM'], dParams['nuMN']
        instructions = []

        instructions += [Comment("1-BLAC: -(" + str(N) + "x" + str(M) + ")")]
        instr = Mov(ScaMul(V(-1), ScaLoad(src[sL.of(0), sR.of(0)])),
                    ScaLoad(dst[dL.of(0), dR.of(0)]))
        instructions += [instr]

        return instructions
Example #4
0
    def T(self, sParams, dParams, opts):
        src, dst = sParams['nuM'], dParams['nuM']
        sL, sR = sParams['nuML'], sParams['nuMR']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, N = dParams['nuMM'], dParams['nuMN']
        instructions = []

        instructions += [Comment("1-BLAC: (" + str(N) + "x" + str(M) + ")^T")]
        for i in range(M):
            for j in range(N):
                instr = Mov(ScaLoad(src[sL.of(j), sR.of(i)]),
                            ScaLoad(dst[dL.of(i), dR.of(j)]))
                instructions += [instr]

        return instructions
Example #5
0
    def Copy(self, sParams, dParams, opts):
        sub, dst = sParams['nuM'], dParams['nuM']
        subL, subR = sParams['nuML'], sParams['nuMR']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, N = sParams['nuMM'], sParams['nuMN']
        instructions = []

        instructions += [Comment("1-BLAC: Copy " + str(M) + "x" + str(N))]
        for i in range(M):
            for j in range(N):
                instr = Mov(ScaLoad(sub[subL.of(i), subR.of(j)]),
                            ScaLoad(dst[dL.of(i), dR.of(j)]))
                instructions += [instr]

        return instructions
Example #6
0
    def Sub(self, s0Params, s1Params, dParams, opts):

        src0, src1, dst = s0Params['nuM'], s1Params['nuM'], dParams['nuM']
        s0L, s0R = s0Params['nuML'], s0Params['nuMR']
        s1L, s1R = s1Params['nuML'], s1Params['nuMR']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, N = dParams['nuMM'], dParams['nuMN']
        instructions = []

        instructions += [
            Comment("1-BLAC: " + str(M) + "x" + str(N) + " - " + str(M) + "x" +
                    str(N))
        ]
        for i in range(M):
            for j in range(N):
                instr = Mov(
                    ScaSub(ScaLoad(src0[s0L.of(i), s0R.of(j)]),
                           ScaLoad(src1[s1L.of(i), s1R.of(j)])),
                    ScaLoad(dst[dL.of(i), dR.of(j)]))
                instructions += [instr]

        return instructions

        #     def LDiv(self, s0Params, s1Params, dParams, opts):
        #         src0, src1, dst = s0Params['nuM'], s1Params['nuM'], dParams['nuM']
        #         s0L, s0R = s0Params['nuML'], s0Params['nuMR']
        #         s1L, s1R = s1Params['nuML'], s1Params['nuMR']
        #         dL, dR   = dParams['nuML'], dParams['nuMR']
        #         M, N = s0Params['nuMM'], s1Params['nuMN']
        #         instructions = []
        #
        #         instructions += [ Comment("1-BLAC: " + str(M) + "x" + str(M) + " \ " + str(M) + "x" + str(N)) ]
        #
        #         for j in range(N):
        #             instr = Mov(ScaDiv(ScaLoad(src1[s1L.of(0),s1R.of(j)]), ScaLoad(src0[s0L.of(0),s0R.of(0)])), ScaLoad(dst[dL.of(0),dR.of(j)]))
        #             instructions += [ instr ]
        # #             for i in range(1, M):
        # #                 t0 = ScaMul(ScaLoad(src0[s0L.of(i),s0R.of(0)]), ScaLoad(dst[dL.of(0),dR.of(j)]))
        # #                 for k in range(1, i):
        # #                     t1 = ScaMul(ScaLoad(src0[s0L.of(i),s0R.of(k)]), ScaLoad(dst[dL.of(k),dR.of(j)]))
        # #                     t0 = ScaAdd(t0, t1)
        # #                 s = ScaSub(ScaLoad(src1[s1L.of(i),s1R.of(j)]), t0)
        # #                 instr = Mov(ScaDiv(s, ScaLoad(src0[s0L.of(i),s0R.of(i)])), ScaLoad(dst[dL.of(i),dR.of(j)]))
        # #                 instructions += [ instr ]

        return instructions
Example #7
0
    def Mul(self, s0Params, s1Params, dParams, opts):

        src0, src1, dst = s0Params['nuM'], s1Params['nuM'], dParams['nuM']
        s0L, s0R = s0Params['nuML'], s0Params['nuMR']
        s1L, s1R = s1Params['nuML'], s1Params['nuMR']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, K, N = s0Params['nuMM'], s0Params['nuMN'], s1Params['nuMN']
        instructions = []

        instructions += [
            Comment("1-BLAC: " + str(M) + "x" + str(K) + " * " + str(K) + "x" +
                    str(N))
        ]
        for i in range(M):
            for j in range(N):
                instr = Mov(
                    ScaMul(ScaLoad(src0[s0L.of(i), s0R.of(0)]),
                           ScaLoad(src1[s1L.of(0), s1R.of(j)])),
                    ScaLoad(dst[dL.of(i), dR.of(j)]))
                instructions += [instr]

        for k in range(1, K):
            for i in range(M):
                for j in range(N):
                    t = ScaMul(ScaLoad(src0[s0L.of(i), s0R.of(k)]),
                               ScaLoad(src1[s1L.of(k), s1R.of(j)]))
                    instr = Mov(ScaAdd(ScaLoad(dst[dL.of(i),
                                                   dR.of(j)]), t),
                                ScaLoad(dst[dL.of(i), dR.of(j)]))
                    instructions += [instr]

        return instructions
Example #8
0
    def Div(self, s0Params, s1Params, dParams, opts):
        src0, src1, dst = s0Params['nuM'], s1Params['nuM'], dParams['nuM']
        s0L, s0R = s0Params['nuML'], s0Params['nuMR']
        s1L, s1R = s1Params['nuML'], s1Params['nuMR']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, N = s0Params['nuMM'], s1Params['nuMN']
        instructions = []

        instructions += [
            Comment("1-BLAC: " + str(M) + "x" + str(N) + " / " + str(N) + "x" +
                    str(N))
        ]

        for i in range(M):
            instr = Mov(
                ScaDiv(ScaLoad(src0[s0L.of(i), s0R.of(0)]),
                       ScaLoad(src1[s1L.of(0), s1R.of(0)])),
                ScaLoad(dst[dL.of(i), dR.of(0)]))
            instructions += [instr]

        return instructions
Example #9
0
    def Zero(self, dParams, opts):

        dst = dParams['nuM']
        dL, dR = dParams['nuML'], dParams['nuMR']
        M, N = dParams['nuMM'], dParams['nuMN']
        instructions = []

        instructions += [Comment("1-BLAC: Zero " + str(M) + "x" + str(N))]
        for i in range(M):
            for j in range(N):
                instr = Mov(V(0), ScaLoad(dst[dL.of(i), dR.of(j)]))
                instructions.append(instr)

        return instructions