assignment3 multiplying

master
Peter Babič 9 years ago
parent e379185843
commit 01fdfcf386
  1. 68
      assignment3.c
  2. 10
      assignment3.in2
  3. 2
      common.c

@ -1,7 +1,9 @@
#include "common.h" #include "common.h"
#define INPUTFILE1 "assignment3.in1" //#define INPUTFILE1 "assignment3.in1"
#define INPUTFILE2 "assignment3.in2" //#define INPUTFILE2 "assignment3.in2"
#define INPUTFILE1 "a.in"
#define INPUTFILE2 "b.in"
#define DIM_COUNT1 0 #define DIM_COUNT1 0
#define DIM_COUNT2 1 #define DIM_COUNT2 1
@ -30,7 +32,7 @@ int main(int argc, char *argv[]) {
arrDimensions[DIM_ROWS1] = arrDimensions[DIM_COUNT1] / arrDimensions[DIM_COLS1]; arrDimensions[DIM_ROWS1] = arrDimensions[DIM_COUNT1] / arrDimensions[DIM_COLS1];
arrDimensions[DIM_ROWS2] = arrDimensions[DIM_COUNT2] / arrDimensions[DIM_COLS2]; arrDimensions[DIM_ROWS2] = arrDimensions[DIM_COUNT2] / arrDimensions[DIM_COLS2];
if (arrDimensions[DIM_ROWS1] != arrDimensions[DIM_ROWS2]) { if (arrDimensions[DIM_COLS1] != arrDimensions[DIM_COLS2]) {
printf("Matrices cannot be multiplied! Check dimensions.\n"); printf("Matrices cannot be multiplied! Check dimensions.\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -45,24 +47,60 @@ int main(int argc, char *argv[]) {
} }
//MPI_Bcast(arrDimensions, NUM_DIMS, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(arrDimensions, NUM_DIMS, MPI_INT, 0, MPI_COMM_WORLD);
//int *arrSlice1 = my_malloc(arrDimensions[DIM_COUNT1] * sizeof(int)); int *arrSlice1 = my_malloc(arrDimensions[DIM_COUNT1] * sizeof(int));
//MPI_Scatterv(arrMatrix1, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice1, arrDimensions[DIM_COUNT1], MPI_INT, 0, MPI_COMM_WORLD); MPI_Scatterv(arrMatrix1, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice1, arrDimensions[DIM_COUNT1], MPI_INT, 0, MPI_COMM_WORLD);
//int *arrSlice2 = my_malloc(arrDimensions[DIM_COUNT2] * sizeof(int)); int *arrSlice2 = my_malloc(arrDimensions[DIM_COUNT2] * sizeof(int));
//MPI_Scatterv(arrMatrix2, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice2, arrDimensions[DIM_COUNT2], MPI_INT, 0, MPI_COMM_WORLD); MPI_Scatterv(arrMatrix2, arrBlockSizes, arrBlockIndices, MPI_INT, arrSlice2, arrDimensions[DIM_COUNT2], MPI_INT, 0, MPI_COMM_WORLD);
////MPI_Bcast(&arrDimensions[DIM_COUNT2], 1, MPI_INT, 0, MPI_COMM_WORLD); //MPI_Bcast(&arrDimensions[DIM_COUNT2], 1, MPI_INT, 0, MPI_COMM_WORLD);
////MPI_Bcast(&numCols2, 1, MPI_INT, 0, MPI_COMM_WORLD); //MPI_Bcast(&numCols2, 1, MPI_INT, 0, MPI_COMM_WORLD);
//int arrBlockData[NUM_CODES]; int arrBlockData[NUM_CODES];
//MPI_Recv(arrBlockData, NUM_CODES, MPI_INT, 0, 1, MPI_COMM_WORLD, &status); MPI_Recv(arrBlockData, NUM_CODES, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
////printf("rank %d, size %d, indices %d\n", numRank, arrBlockData[CODE_SIZE], arrBlockData[CODE_INDEX]); //printf("rank %d, size %d, indices %d\n", numRank, arrBlockData[CODE_SIZE], arrBlockData[CODE_INDEX]);
////printf("nc1 %d, nc2 %d\n", arrDimensions[DIM_COUNT1], arrDimensions[DIM_COUNT2]); //printf("nc1 %d, nc2 %d\n", arrDimensions[DIM_COUNT1], arrDimensions[DIM_COUNT2]);
//for (int i = 0; i < arrBlockData[CODE_SIZE]; i++) { //for (int i = 0; i < arrBlockData[CODE_SIZE]; i++) {
//printf("rank %d, slice1[%d] = %d\n", numRank, i, arrSlice1[i]); //printf("s: 1, r: %2d, [%d] = %d\n", numRank, i, arrSlice1[i]);
//} //}
//for (int i = 0; i < arrBlockData[CODE_SIZE]; i++) {
//printf("s: 2, r: %2d, [%d] = %d\n", numRank, i, arrSlice2[i]);
//}
//for (int i = 0; i < NUM_DIMS; i++)
//printf("%6d (%d)\n", arrDimensions[i], i);
int sum = 0;
int col = 0;
for (int row = 0; row < arrDimensions[DIM_ROWS2]; row++) {
col = row * arrDimensions[DIM_COLS2];
for (int i = 0; i < arrBlockData[CODE_SIZE]; i++) {
sum += arrSlice1[i] * arrSlice2[col];
//printf("%2d[%d%d]\n", sum, i, col);
col++;
if (col == (row + 1) * arrDimensions[DIM_COLS2]) {
printf("%3d ", sum);
col = row * arrDimensions[DIM_COLS2];
sum = 0;
}
}
printf("\n");
}
/*
for (int j = 0; j < 2; j++) {
//sum += (arrSlice1[i] * arrSlice2[j]);
//if (j % arrDimensions[DIM_COLS1] == 0) {
////printf("%4d (%d);", sum, numRank);
//printf("%4d; ", sum);
//sum = 0;
//}
//printf("%4d; ", sum);
printf("%2d[%d%d]\t", i, j, arrSlice1[i] * arrSlice2[i]);
}
*/
////We can calculate arrDimensions[DIM_ROWS2] * numCols2 = numCount2 ////We can calculate arrDimensions[DIM_ROWS2] * numCols2 = numCount2
//int arrDimensions[DIM_ROWS2] = numCount2 / numCols2; //int arrDimensions[DIM_ROWS2] = numCount2 / numCols2;

@ -1,5 +1,5 @@
1 2 3 16 17 18
4 5 6 19 29 21
7 8 9 22 23 24
10 11 12 25 26 27
13 14 15 28 29 30

@ -77,7 +77,7 @@ void spread_evenly(int numProcesses, int numCount, int multiplier, int **arrBloc
arrBlockData[CODE_SIZE] = numBlockSize; arrBlockData[CODE_SIZE] = numBlockSize;
arrBlockData[CODE_INDEX] = numBlockIndex; arrBlockData[CODE_INDEX] = numBlockIndex;
printf("size[%d] = %d\tindex[%d] = %d\n", i, numBlockSize, i, numBlockIndex); //printf("size[%d] = %d\tindex[%d] = %d\n", i, numBlockSize, i, numBlockIndex);
(*arrBlockIndices)[i] = numBlockIndex; (*arrBlockIndices)[i] = numBlockIndex;
numBlockIndex += numBlockSize; numBlockIndex += numBlockSize;

Loading…
Cancel
Save