Wednesday, 18 September 2013


Aim: Program to calculate  Multiplication of 2x2 matrices using loop splitting

Source Code:
#include<stdio.h>
#include"shmlib.h"
int main()
{
int *A,*B,id,id1,*C,i,j,P1flag=0,P2flag=0,k;    int id2,id3;
    A=(int *) shared(sizeof(int),&id1);
    B=(int *) shared(sizeof(int),&id2);
    C=(int *) shared(sizeof(int),&id3);
    int x;    x=2;
    printf("Enter First matrix A:\n");
    for(j=0;j<4;j++)
    {
        scanf("%d",&A[j]);
    }
    printf("Enter Second matrix B:\n");
    for(i=0;i<4;i++)
    {
        scanf("%d",&B[i]);
    }
    printf("\nmatrix A\n");
    for(j=0;j<4;j++)
    {
        printf("\t%d",A[j]);
        if(j==1)
            printf("\n");
    }
    printf("\nmatrix B\n");
    for(j=0;j<4;j++)
    {
        printf("\t%d",B[j]);
            if(j==1)
            printf("\n");
       
    }
    printf("\n");
    id=create_process(2);
    if(id==0)
    {
        C[0]=A[0]*B[0]+A[1]*B[2];
        P1flag=1;
    }
    if(id==1)
    {
        C[1]=A[0]*B[1]+A[1]*B[3];
        P2flag=1;
    }
    if(P1flag==1)
    {
        id=0;
        C[2]=A[2]*B[0]+A[3]*B[2];
        P1flag=2;
    }else{
        id=1;
        C[2]=A[2]*B[0]+A[3]*B[2];
        P2flag=2;
    }
    if(P1flag==2)
    {
        id=0;
        C[3]=A[2]*B[1]+A[3]*B[3];
    }else{
        id=1;
        C[3]=A[2]*B[1]+A[3]*B[3];
    }
    join_process(2,id);
    printf("\n\nMatrix after Multiplication(self Scheduling):\n");
    for(k=0;k<2;k++)
    {
        printf("\t%d",C[k]);
    }
    printf("\n");
    for(k=2;k<4;k++)
    {
        printf("\t%d",C[k]);
    }
    printf("\n");
    return 0;    
}

Output:


Comment bellow for your Query and Feedback

Related Posts :



0 comments:

Confused? Feel free to ask

Post a Comment