I am new at parallel programming using MPI in C. So I am working on a matrix multiplication for example A*B. Here's my code in C but I have not yet any idea how I can implement the MPI in my code.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct sMatrix {
        int size;
        int *tab;
        double time;
} Matrix;
void init_mat(Matrix *m, int t){
        m->size=t;
        m->tab=malloc(t*t*sizeof(int));
        m->time=0;
}
void free_mat(Matrix *m){
        free(m->tab);
        m->size=0;
        m->time=0;
}
void generate_mat_random(Matrix *m){
        int i;
        for(i=0;i<(m->size*m->size); i++){
                m->tab[i]=rand()%10;                
        }
}
void generate_mat(Matrix *m){
        int i;
        int cmp=1;
        for(i=0;i<(m->size*m->size); i++){
                m->tab[i]=cmp;                
                cmp++;
        }
        cmp=1;
}
void display_mat(Matrix *m){
        int i,j;
        for(i=0;i<m->size;i++){
                for(j=0;j<m->size;j++){
                        printf("%3d   ",m->tab[i*m->size+j]);
                }
                printf("\n");
        }
}
void display_mat_file(Matrix *m, char outputFilename[]){
        FILE *ofp;
        ofp = fopen(outputFilename, "w");
        if (ofp == NULL) {
                    fprintf(stderr, "Can't open output file %s!\n", outputFilename);
                    exit(1);
          }
        int i,j;
        for(i=0;i<m->size;i++){
                for(j=0;j<m->size;j++){
                        fprintf(ofp, "%3d   ",m->tab[i*m->size+j]);
                }
                fprintf(ofp,"\n");
        }
        fprintf(ofp,"\n");
        fprintf(ofp,"Time :%f \n", m->time);
        fclose(ofp);
}
//m=m1*m2
 void multiply_MM(Matrix *m, Matrix m1, Matrix m2){
        clock_t begin, end;
        int i,j,k,s;
        int sum;
        begin=clock();
        for( i=0;i<m->size;i++){
                for( j=0;j<m->size;j++){
                        k=0;
                        sum=0;
                        for( s=0;s<m->size;s++){
                                sum = sum + m1.tab[i*m->size+s]*m2.tab[k*m->size+j];
                                k++;        
                        }        
                        m->tab[i*m->size+j]=sum;
                }
        }
        end=clock();
        m->time = (double)(end - begin) / CLOCKS_PER_SEC;
}
int main(int argc, char* argv[]){
        Matrix A;
        Matrix B;
        Matrix C;
        printf("Initialisation of matrix A and B\n");
        init_mat(&A, 2000);
        init_mat(&B, 2000);
        init_mat(&C, 2000);
        generate_mat_random(&A);
        generate_mat_random(&B);
        multiply_MM(&C, A, B);
        display_mat_file(&C,"2000x2000.txt");
        printf("End of multiplication\n");
        printf("Time for multiplication: %f\n",C.time);
        free_mat(&A);
        free_mat(&B);
        free_mat(&C);
        return 0;
}
Can anyone suggest what methods I should use from MPI and where to use them in the main()?