banner

Sunday, July 10, 2022

standard matrix multiplication with multiple MAC

 #include <stdio.h>


int main() {


//elements we took mat1: 2X3 and  mat2: 3X2

    int mac=4;

    int a[8][8]= {4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,};


    int b[8][8]= {4,1,2,3,1,2,5,6,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,

                  4,1,2,3,1,2,4,5,};


    int c[]= {0,0,0,0};


    int d[8][8]= {0,0,0,0};


    int ra=8,ca=8,rb=8,cb=8;

    

    int w1=0,x1,y1,z1,i,j,k,l=0,w2,x2,y2,z2,x3,y3,z3,x4,y4,z4;

    

    for (i=0; i<ra; i++){


        for (j=0; j<cb; j++){


            for (k=0; k<ca; k=k+mac){


                x1= a[i][l];

                y1= b[l][j];

               // z= c[i][j];

                printf("i=%d, k=%d, j=%d , l=%d\n",i,k,j,l);

                z1=w1;

                w1= (x1 * y1)+z1;

                printf("w1=%d, x1=%d, y1=%d, z1=%d \n",w1,x1,y1,z1);

                 l++;

                x2= a[i][l];

                y2= b[l][j];

                 printf("i=%d, k=%d, j=%d , l=%d\n",i,k,j,l);

                z2=w1;

                w1=x2 *y2+z2;

                printf("w1=%d, x2=%d, y2=%d, z2=%d \n",w1,x2,y2,z2);

                l++;

                x3= a[i][l];

                y3= b[l][j];

                 printf("i=%d, k=%d, j=%d , l=%d\n",i,k,j,l);

                z3=w1;

                w1=x3 *y3+z3;

                printf("w1=%d, x2=%d, y2=%d, z2=%d \n",w1,x3,y3,z3);

                l++;

                x4= a[i][l];

                y4= b[l][j];

                 printf("i=%d, k=%d, j=%d , l=%d\n",i,k,j,l);

                z4=w1;

                w1=x4 *y4+z4;

                printf("w1=%d, x2=%d, y2=%d, z2=%d \n",w1,x4,y4,z4);

                l++;

            }

            

            if (k==ca) {k=0;;d[i][j]=w1;l=0; w1=0;c[l]=0;}

            printf("d[%d][%d]:%d\n",i,j,d[i][j]);

        }


       if (j==cb) j=0; 


    }


    return 0;


}




No comments:

PULP RISC-V important links

1) Understanding and working with PULP - all the details of the architectures https://pulp-platform.org/docs/riscv_workshop_zurich/schiavone...