Beispiel #1
0
void evaluateASTNodeTerm(ASTNode *node){
    switch (node->subType) {
        case TermFactor:
            /*just clone the result*/
            node->mat = cloneMatrix(node->l->mat);
            break;
		case TermTimes:
			node->mat = multiplyMatrix(node->l->mat, node->r->mat);
			break;
		case TermDivide:
			node->mat = divideMatrix(node->l->mat, node->r->mat);
			break;
		case TermMod:
			node->mat = modMatrix(node->l->mat, node->r->mat);
			break;
		case TermTurn:  
			node->mat = turnMatrix(node->l->mat);
			break;
        default:
            break;
    }
    return;
}
Beispiel #2
0
int main(int argc, char *argv[]) {
  int size, rank;
  int tag = 1234;
  MPI_Status status;

  const int rows = 4;
  const int columns = 2;
  int matrix[rows][columns];

  const int tRows = columns;
  const int tColumns = rows;

  // Init
  MPI_Init(&argc, &argv);
  MPI_Comm_size(MPI_COMM_WORLD, &size);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

  if(size != 3) {
    printf("Su potrebne prave 3 procesy\n");
    return 0;
  }

  if(rows % 2 != 0) {
    printf("Matica musi mat parny pocet riadkov\n");
    return 0;
  }

  if(rank == 0) {
    // Generate matrix
    populateMatrix(rows, columns, matrix);

    // Print matrix
    printMatrix(rows, columns, matrix);

    int firstHalf[rows / 2][columns];
    int secondHalf[rows / 2][columns];
    divideMatrix(rows, columns, matrix, firstHalf, secondHalf);

    MPI_Send(firstHalf, (rows / 2) * columns, MPI_INT, 1, tag, MPI_COMM_WORLD);
    MPI_Send(secondHalf, (rows / 2) * columns, MPI_INT, 2, tag, MPI_COMM_WORLD);

    int tFirstHalf[tRows][tColumns / 2];
    int tSecondHalf[tRows][tColumns / 2];
    MPI_Recv(tFirstHalf, tRows * tColumns / 2, MPI_INT, 1, tag, MPI_COMM_WORLD, &status);
    MPI_Recv(tSecondHalf, tRows * tColumns / 2, MPI_INT, 2, tag, MPI_COMM_WORLD, &status);

    int tMatrix[tRows][tColumns];
    joinMatrices(tRows, tColumns / 2, tMatrix, tFirstHalf, tSecondHalf);
    printMatrix(tRows, tColumns, tMatrix);

  } else {
    int sRows = rows / 2;
    int sColumns = 2;
    int subMatrix[sRows][sColumns];
    MPI_Recv(subMatrix, sRows * sColumns, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);

    // Transpose matrix
    int subTMatrix[sColumns][sRows];
    transposeMatrix(sRows, sColumns, subMatrix, subTMatrix);

    MPI_Send(subTMatrix, sRows * sColumns, MPI_INT, 0, tag, MPI_COMM_WORLD);
  }

  // Teardown
  MPI_Finalize();

  // Exit
  return 0;
}