From schlein@cs.umbc.edu  Mon Dec  4 12:09:00 1995
Return-Path: schlein@cs.umbc.edu
Received: from umbc4.umbc.edu (root@umbc4.umbc.edu [130.85.1.4]) by umbc7.umbc.edu (8.6.12/Umbc) with ESMTP id MAA22686 for <motteler@umbc7.umbc.edu>; Mon, 4 Dec 1995 12:09:00 -0500
Received: from algol.cs.umbc.edu (algol.cs.umbc.edu [130.85.100.2]) by umbc4.umbc.edu (8.6.12/8.6.9) with ESMTP id MAA29880 for <motteler@umbc.edu>; Mon, 4 Dec 1995 12:08:58 -0500
Received: from retriever.cs.umbc.edu (schlein@retriever.cs.umbc.edu [130.85.100.32]) by algol.cs.umbc.edu (8.6.12/8.6.9) with ESMTP id MAA02881 for <motteler@cs.umbc.edu>; Mon, 4 Dec 1995 12:08:57 -0500
From: Jonas Schlein <schlein@cs.umbc.edu>
Received: (schlein@localhost) by retriever.cs.umbc.edu (8.6.12/8.6.9) id MAA28445 for motteler@cs.umbc.edu; Mon, 4 Dec 1995 12:08:55 -0500
Message-Id: <199512041708.MAA28445@retriever.cs.umbc.edu>
Subject: 4x4 Matrix Multiply
To: motteler@cs.umbc.edu
Date: Mon, 4 Dec 1995 12:08:55 -0500 (EST)
X-Mailer: ELM [version 2.4 PL22]
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length:       1075
Status: RO

#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <task.h>
#include <ulocks.h>

void matmul (int x[4][4], int y[4][4], int r[4][4]);
void matprn (int r[4][4]);

int main (void)
{
  int x[4][4] = {{13,15,16, 3},
                 { 9, 1, 7, 4},
                 { 2,14,11, 8},
                 {10, 6,12, 5}};
  int y[4][4] = {{13, 8, 7,11},
                 { 6, 5, 1, 4},
                 {12, 2, 9,10},
                 {15,16,14, 3}};
  int r[4][4];

  /* Set us to 4*4 processes */
  assert (m_set_procs (16) == 0);

  /* Do the multiply */
  assert (m_fork (matmul, x, y, r) == 0);
  assert (m_kill_procs ()          == 0);

  /* Print out the result */
  matprn (r);

  return (0);
}


void matmul (int x[4][4], int y[4][4], int r[4][4])
{
  int i = m_get_myid() % 4,
      j = m_get_myid() / 4,
      k;

  r[i][j] = 0;
  for (k = 0; k < 4; k++)
     r[i][j] += x[i][k] * y[k][j];
}


void matprn (int r[4][4])
{
  int i, j;

  for (i = 0; i < 4; i++)
     {
     for (j = 0; j < 4; j++)
        printf ("%3d ", r[i][j]);
     printf ("\n");
     }
}

