import numpy as np m = 4 n = 3 k = 5 C = np.matrix( np.random.random( (m, n) ) ) print( 'C = ' ) print( C ) Cold = np.matrix( np.zeros( (m,n ) ) ) Cold = np.matrix( np.copy( C ) ) # an alternative way of doing a "hard" copy, in this case of a matrix A = np.matrix( np.random.random( (m, k) ) ) print( 'A = ' ) print( A ) B = np.matrix( np.random.random( (k, n) ) ) print( 'B = ' ) print( B ) import flame import laff as laff def Gemm_nn_unb_var1(A, B, C): BL, BR = flame.part_1x2(B, \ 0, 'LEFT') CL, CR = flame.part_1x2(C, \ 0, 'LEFT') while BL.shape[1] < B.shape[1]: B0, b1, B2 = flame.repart_1x2_to_1x3(BL, BR, \ 1, 'RIGHT') C0, c1, C2 = flame.repart_1x2_to_1x3(CL, CR, \ 1, 'RIGHT') #------------------------------------------------------------# laff.gemv( 'No transpose', 1.0, A, b1, 1.0, c1 ) #------------------------------------------------------------# BL, BR = flame.cont_with_1x3_to_1x2(B0, b1, B2, \ 'LEFT') CL, CR = flame.cont_with_1x3_to_1x2(C0, c1, C2, \ 'LEFT') flame.merge_1x2(CL, CR, C) C = np.matrix( np.copy( Cold ) ) # restore C Gemm_nn_unb_var1( A, B, C ) print( 'C - ( Cold + A * B )' ) print( C - ( Cold + A * B ) )