From: Benjamin Brands Date: Tue, 6 Feb 2018 15:53:53 +0000 (+0100) Subject: avoid compiler warning -unused-variable X-Git-Tag: v9.0.0-rc1~416^2~2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ba17171e72674bc450cd001630e82e6f500d4cba;p=dealii.git avoid compiler warning -unused-variable --- diff --git a/doc/news/changes/minor/20180207BenjaminBrands b/doc/news/changes/minor/20180207BenjaminBrands new file mode 100644 index 0000000000..bda0349f63 --- /dev/null +++ b/doc/news/changes/minor/20180207BenjaminBrands @@ -0,0 +1,3 @@ +New: Added routines to perform addition, multiplication and scaling for ScaLAPACKMatrix +
+(Benjamin Brands, 2018/02/07) diff --git a/include/deal.II/lac/scalapack.h b/include/deal.II/lac/scalapack.h index 788355e4a1..0cc03e9b87 100644 --- a/include/deal.II/lac/scalapack.h +++ b/include/deal.II/lac/scalapack.h @@ -191,31 +191,23 @@ public: const std::pair &submatrix_size) const; /** - * Transposing assignment: A = BT + * Transposing assignment: $\mathbf{A} = \mathbf{B}^T$ * - * The matrices A and B must have the same process grid + * The matrices $\mathbf{A}$ and $\mathbf{B}$ must have the same process grid. * - * Following alignment conditions have to be fulfilled: MB_A = NB_B and NB_A = MB_B + * The following alignment conditions have to be fulfilled: $MB_A=NB_B$ and $NB_A=MB_B$. */ void copy_transposed(const ScaLAPACKMatrix &B); /** - * Matrix-addition: - * - * A = a A + b op(B) - * - * if(transpose_B) op(B) = BT + * The operations based on the input parameter @p transpose_B and the alignment conditions are summarized in the following table: * - * else op(B) = B + * | transpose_B | Block Sizes | Operation | + * | :---------: | :--------------------------: | :-------------------------------------------: | + * | false | $MB_A=MB_B$
$NB_A=NB_B$ | $\mathbf{A} = a \mathbf{A} + b \mathbf{B}$ | + * | true | $MB_A=NB_B$
$NB_A=MB_B$ | $\mathbf{A} = a \mathbf{A} + b \mathbf{B}^T$ | * - * The matrices A and B must have the same process grid - * - * Following alignment conditions have to be fulfilled: - * - * | transpose_B | Block Sizes | - * | :---------: | :--------------------------: | - * | false | MB_A = MB_B
NB_A = NB_B | - * | true | MB_A = NB_B
NB_A = MB_B | + * The matrices $\mathbf{A}$ and $\mathbf{B}$ must have the same process grid. */ void add(const ScaLAPACKMatrix &B, const NumberType a=0., @@ -224,24 +216,22 @@ public: /** * Matrix-addition: + * $\mathbf{A} = \mathbf{A} + b \mathbf{B}$ * - * A += b B - * - * The matrices A and B must have the same process grid + * The matrices $\mathbf{A}$ and $\mathbf{B}$ must have the same process grid. * - * Following alignment conditions have to be fulfilled: MB_A = MB_B and NB_A = NB_B + * The following alignment conditions have to be fulfilled: $MB_A=MB_B$ and $NB_A=NB_B$. */ void add(const NumberType b, const ScaLAPACKMatrix &B); /** * Matrix-addition: + * $\mathbf{A} = \mathbf{A} + b \mathbf{B}^T$ * - * A += b BT + * The matrices $\mathbf{A}$ and $\mathbf{B}$ must have the same process grid. * - * The matrices A and B must have the same process grid - * - * Following alignment conditions have to be fulfilled: MB_A = NB_B and NB_A = MB_B + * The following alignment conditions have to be fulfilled: $MB_A=NB_B$ and $NB_A=MB_B$. */ void Tadd(const NumberType b, const ScaLAPACKMatrix &B); @@ -251,97 +241,97 @@ public: * * The operations based on the input parameters and the alignment conditions are summarized in the following table: * - * | transpose_A | transpose_B | Block Sizes | Operation | - * | :---------: | :---------: | :-------------------------------------------: | :----------------------------------------------: | - * | false | false | MB_A = MB_C
NB_A = MB_B
NB_B = NB_C | C = a A * B + b C | - * | false | true | MB_A = MB_C
NB_A = NB_B
MB_B = NB_C | C = a A * BT + b C | - * | true | false | MB_A = MB_B
NB_A = MB_C
NB_B = NB_C | C = a AT * B + b C | - * | true | true | MB_A = NB_B
NB_A = MB_C
MB_B = NB_C | C = a AT * BT + b C | + * | transpose_A | transpose_B | Block Sizes | Operation | + * | :---------: | :---------: | :-------------------------------------------: | :-------------------------------------------------------------: | + * | false | false | $MB_A=MB_C$
$NB_A=MB_B$
$NB_B=NB_C$ | $\mathbf{C} = b \mathbf{A} \cdot \mathbf{B} + c \mathbf{C}$ | + * | false | true | $MB_A=MB_C$
$NB_A=NB_B$
$MB_B=NB_C$ | $\mathbf{C} = b \mathbf{A} \cdot \mathbf{B}^T + c \mathbf{C}$ | + * | true | false | $MB_A=MB_B$
$NB_A=MB_C$
$NB_B=NB_C$ | $\mathbf{C} = b \mathbf{A}^T \cdot \mathbf{B} + c \mathbf{C}$ | + * | true | true | $MB_A=NB_B$
$NB_A=MB_C$
$MB_B=NB_C$ | $\mathbf{C} = b \mathbf{A}^T \cdot \mathbf{B}^T + c \mathbf{C}$ | * - * It is assumed that A and B have compatible sizes and that - * C already has the right size. + * It is assumed that $\mathbf{A}$ and $\mathbf{B}$ have compatible sizes and that + * $\mathbf{C}$ already has the right size. * - * The matrices A, B and C must have the same process grid. + * The matrices $\mathbf{A}$, $\mathbf{B}$ and $\mathbf{C}$ must have the same process grid. */ - void mult(ScaLAPACKMatrix &C, + void mult(const NumberType b, const ScaLAPACKMatrix &B, - const NumberType a=1, - const NumberType b=0, + const NumberType c, + ScaLAPACKMatrix &C, const bool transpose_A=false, const bool transpose_B=false) const; /** * Matrix-matrix-multiplication. * - * The optional parameter adding determines, whether the result is - * stored in C or added to C. + * The optional parameter @p adding determines whether the result is + * stored in $\mathbf{C}$ or added to $\mathbf{C}$. * - * if (adding) C += A*B + * if (@p adding) $\mathbf{C} = \mathbf{C} + \mathbf{A} \cdot \mathbf{B}$ * - * else C = A*B + * else $\mathbf{C} = \mathbf{A} \cdot \mathbf{B}$ * - * Assumes that A and B have compatible sizes and that - * C already has the right size. + * It is assumed that $\mathbf{A}$ and $\mathbf{B}$ have compatible sizes and that + * $\mathbf{C}$ already has the right size. * - * Following alignment conditions have to be fulfilled: MB_A = MB_C, NB_A = MB_B and NB_B = NB_C + * The following alignment conditions have to be fulfilled: $MB_A=MB_C$, $NB_A=MB_B$ and $NB_B=NB_C$. */ void mmult(ScaLAPACKMatrix &C, const ScaLAPACKMatrix &B, const bool adding=false) const; /** - * Matrix-matrix-multiplication using transpose of this. + * Matrix-matrix-multiplication using transpose of $\mathbf{A}$. * - * The optional parameter adding determines, whether the result is - * stored in C or added to C. + * The optional parameter @p adding determines whether the result is + * stored in $\mathbf{C}$ or added to $\mathbf{C}$. * - * if (adding) C += AT*B + * if (@p adding) $\mathbf{C} = \mathbf{C} + \mathbf{A}^T \cdot \mathbf{B}$ * - * else C = AT*B + * else $\mathbf{C} = \mathbf{A}^T \cdot \mathbf{B}$ * - * Assumes that A and B have compatible sizes and that - * C already has the right size. + * It is assumed that $\mathbf{A}$ and $\mathbf{B}$ have compatible sizes and that + * $\mathbf{C}$ already has the right size. * - * Following alignment conditions have to be fulfilled: MB_A = MB_B, NB_A = MB_C and NB_B = NB_C + * The following alignment conditions have to be fulfilled: $MB_A=MB_B$, $NB_A=MB_C$ and $NB_B=NB_C$. */ void Tmmult (ScaLAPACKMatrix &C, const ScaLAPACKMatrix &B, const bool adding=false) const; /** - * Matrix-matrix-multiplication using transpose of B. + * Matrix-matrix-multiplication using the transpose of $\mathbf{B}$. * - * The optional parameter adding determines, whether the result is - * stored in C or added to C. + * The optional parameter @p adding determines whether the result is + * stored in $\mathbf{C}$ or added to $\mathbf{C}$. * - * if (adding) C += A*BT + * if (@p adding) $\mathbf{C} = \mathbf{C} + \mathbf{A} \cdot \mathbf{B}^T$ * - * else C = A*BT + * else $\mathbf{C} = \mathbf{A} \cdot \mathbf{B}^T$ * - * Assumes that A and B have compatible sizes and that - * C already has the right size. + * It is assumed that $\mathbf{A}$ and $\mathbf{B}$ have compatible sizes and that + * $\mathbf{C}$ already has the right size. * - * Following alignment conditions have to be fulfilled: MB_A = MB_C, NB_A = NB_B and MB_B = NB_C + * The following alignment conditions have to be fulfilled: $MB_A=MB_C$, $NB_A=NB_B$ and $MB_B=NB_C$. */ void mTmult (ScaLAPACKMatrix &C, const ScaLAPACKMatrix &B, const bool adding=false) const; /** - * Matrix-matrix-multiplication using transpose of this and - * B. + * Matrix-matrix-multiplication using transpose of $\mathbf{A}$ and + * $\mathbf{B}$. * - * The optional parameter adding determines, whether the result is - * stored in C or added to C. + * The optional parameter @p adding determines whether the result is + * stored in $\mathbf{C}$ or added to $\mathbf{C}$. * - * if (adding) C += AT*BT + * if (@p adding) $\mathbf{C} = \mathbf{C} + \mathbf{A}^T \cdot \mathbf{B}^T$ * - * else C = AT*BT + * else $\mathbf{C} = \mathbf{A}^T \cdot \mathbf{B}^T$ * - * Assumes that A and B have compatible sizes and that - * C already has the right size. + * It is assumed that $\mathbf{A}$ and $\mathbf{B}$ have compatible sizes and that + * $\mathbf{C}$ already has the right size. * - * Following alignment conditions have to be fulfilled: MB_A = NB_B, NB_A = MB_C and MB_B = NB_C + * The following alignment conditions have to be fulfilled: $MB_A=NB_B$, $NB_A=MB_C$ and $MB_B=NB_C$. */ void TmTmult (ScaLAPACKMatrix &C, const ScaLAPACKMatrix &B, @@ -548,12 +538,20 @@ public: NumberType &local_el(const unsigned int loc_row, const unsigned int loc_column); /** - * scaling the columns of the distributed matrix by scalars in array @p factors + * Scale the columns of the distributed matrix by the scalars provided in the array @p factors. + * + * The array @p factors must have as many entries as the matrix columns. + * + * Copies of @p factors have to be available on all processes of the underlying MPI communicator. */ void scale_columns(const ArrayView &factors); /** - * scaling the rows of the distributed matrix by scalars in array @p factors + * Scale the rows of the distributed matrix by the scalars provided in the array @p factors. + * + * The array @p factors must have as many entries as the matrix rows. + * + * Copies of @p factors have to be available on all processes of the underlying MPI communicator. */ void scale_rows(const ArrayView &factors); diff --git a/include/deal.II/lac/scalapack.templates.h b/include/deal.II/lac/scalapack.templates.h index bd02083a49..0f06675cc0 100644 --- a/include/deal.II/lac/scalapack.templates.h +++ b/include/deal.II/lac/scalapack.templates.h @@ -1551,19 +1551,19 @@ inline void pgels(const char *trans, template -inline void pgeadd(const char *transa, - const int *m, - const int *n, - const number *alpha, - const number *A, - const int *IA, - const int *JA, - const int *DESCA, - const number *beta, - number *C, - const int *IC, - const int *JC, - const int *DESCC) +inline void pgeadd(const char * /*transa*/, + const int * /*m*/, + const int * /*n*/, + const number * /*alpha*/, + const number * /*A*/, + const int * /*IA*/, + const int * /*JA*/, + const int * /*DESCA*/, + const number * /*beta*/, + number * /*C*/, + const int * /*IC*/, + const int * /*JC*/, + const int * /*DESCC*/) { Assert (false, dealii::ExcNotImplemented()); } @@ -1604,18 +1604,18 @@ inline void pgeadd(const char *transa, template -inline void ptran(const int *m, - const int *n, - const number *alpha, - const number *A, - const int *IA, - const int *JA, - const int *DESCA, - const number *beta, - number *C, - const int *IC, - const int *JC, - const int *DESCC) +inline void ptran(const int * /*m*/, + const int * /*n*/, + const number * /*alpha*/, + const number * /*A*/, + const int * /*IA*/, + const int * /*JA*/, + const int * /*DESCA*/, + const number * /*beta*/, + number * /*C*/, + const int * /*IC*/, + const int * /*JC*/, + const int * /*DESCC*/) { Assert (false, dealii::ExcNotImplemented()); } diff --git a/source/lac/scalapack.cc b/source/lac/scalapack.cc index 1898d38c92..864962d2df 100644 --- a/source/lac/scalapack.cc +++ b/source/lac/scalapack.cc @@ -503,10 +503,10 @@ void ScaLAPACKMatrix::Tadd(const NumberType a, template -void ScaLAPACKMatrix::mult(ScaLAPACKMatrix &C, +void ScaLAPACKMatrix::mult(const NumberType b, const ScaLAPACKMatrix &B, - const NumberType alpha, - const NumberType beta, + const NumberType c, + ScaLAPACKMatrix &C, const bool transpose_A, const bool transpose_B) const { @@ -547,12 +547,10 @@ void ScaLAPACKMatrix::mult(ScaLAPACKMatrix &C, Assert(this->n_rows==B.n_columns,ExcDimensionMismatch(this->n_rows,B.n_columns)); Assert(this->n_columns==C.n_rows,ExcDimensionMismatch(this->n_columns,C.n_rows)); Assert(B.n_rows==C.n_columns,ExcDimensionMismatch(B.n_rows,C.n_columns)); - Assert(this->column_block_size==C.row_block_size,ExcDimensionMismatch(this->row_block_size,C.row_block_size)); Assert(this->row_block_size==B.column_block_size,ExcDimensionMismatch(this->column_block_size,B.row_block_size)); Assert(B.row_block_size==C.column_block_size,ExcDimensionMismatch(B.column_block_size,C.column_block_size)); } - Threads::Mutex::ScopedLock lock (mutex); if (this->grid->mpi_process_is_active) { @@ -567,9 +565,9 @@ void ScaLAPACKMatrix::mult(ScaLAPACKMatrix &C, int k = transpose_A ? this->n_rows : this->n_columns; pgemm(&trans_a,&trans_b,&m,&n,&k, - &alpha,A_loc,&(this->submatrix_row),&(this->submatrix_column),this->descriptor, + &b,A_loc,&(this->submatrix_row),&(this->submatrix_column),this->descriptor, B_loc,&B.submatrix_row,&B.submatrix_column,B.descriptor, - &beta,C_loc,&C.submatrix_row,&C.submatrix_column,C.descriptor); + &c,C_loc,&C.submatrix_row,&C.submatrix_column,C.descriptor); } } @@ -581,9 +579,9 @@ void ScaLAPACKMatrix::mmult(ScaLAPACKMatrix &C, const bool adding) const { if (adding) - mult(C,B,1.,1.,false,false); + mult(1.,B,1.,C,false,false); else - mult(C,B,1.,0.,false,false); + mult(1.,B,0,C,false,false); } @@ -594,9 +592,9 @@ void ScaLAPACKMatrix::Tmmult(ScaLAPACKMatrix &C, const bool adding) const { if (adding) - mult(C,B,1.,1.,true,false); + mult(1.,B,1.,C,true,false); else - mult(C,B,1.,0.,true,false); + mult(1.,B,0,C,true,false); } @@ -607,9 +605,9 @@ void ScaLAPACKMatrix::mTmult(ScaLAPACKMatrix &C, const bool adding) const { if (adding) - mult(C,B,1.,1.,false,true); + mult(1.,B,1.,C,false,true); else - mult(C,B,1.,0.,false,true); + mult(1.,B,0,C,false,true); } @@ -620,9 +618,9 @@ void ScaLAPACKMatrix::TmTmult(ScaLAPACKMatrix &C, const bool adding) const { if (adding) - mult(C,B,1.,1.,true,true); + mult(1.,B,1.,C,true,true); else - mult(C,B,1.,0.,true,true); + mult(1.,B,0,C,true,true); } @@ -1514,16 +1512,13 @@ void ScaLAPACKMatrix::scale_columns(const ArrayViewgrid->mpi_process_is_active) - { - for (int i=0; i::scale_rows(const ArrayView & Assert(n_rows==(int)factors.size(),ExcDimensionMismatch(n_rows,factors.size())); if (this->grid->mpi_process_is_active) - { - for (int i=0; i sizes = {{300,400,500}}; - // test C = alpha A*B + beta C + // test C = b A*B + c C { FullMatrix full_A(sizes[0],sizes[2]); FullMatrix full_B(sizes[2],sizes[1]); @@ -70,17 +70,17 @@ void test() scalapack_B = full_B; scalapack_C = full_C; - const NumberType alpha = 1.4, beta = 0.1; + const NumberType b=1.4, c=0.1; - full_A *= alpha; - full_C *= beta; + full_A *= b; + full_C *= c; full_A.mmult(full_C,full_B,true); - scalapack_A.mult(scalapack_C,scalapack_B,alpha,beta,false,false); + scalapack_A.mult(b,scalapack_B,c,scalapack_C,false,false); FullMatrix tmp_full_C(full_C.m(),full_C.n()); scalapack_C.copy_to(tmp_full_C); - pcout << " computing C = alpha A * B + beta C with" + pcout << " computing C = b A * B + c C with" << " A in R^(" << scalapack_A.m() << "x" << scalapack_A.n() << ")," << " B in R^(" << scalapack_B.m() << "x" << scalapack_B.n() << ") and" << " C in R^(" << scalapack_C.m() << "x" << scalapack_C.n() << ")" << std::endl; @@ -109,17 +109,17 @@ void test() scalapack_B = full_B; scalapack_C = full_C; - const NumberType alpha = 1.4, beta = 0.1; + const NumberType b=1.4, c=0.1; - full_A *= alpha; - full_C *= beta; + full_A *= b; + full_C *= c; full_A.Tmmult(full_C,full_B,true); - scalapack_A.mult(scalapack_C,scalapack_B,alpha,beta,true,false); + scalapack_A.mult(b,scalapack_B,c,scalapack_C,true,false); FullMatrix tmp_full_C(full_C.m(),full_C.n()); scalapack_C.copy_to(tmp_full_C); - pcout << " computing C = alpha A^T * B + beta C with" + pcout << " computing C = b A^T * B + c C with" << " A in R^(" << scalapack_A.m() << "x" << scalapack_A.n() << ")," << " B in R^(" << scalapack_B.m() << "x" << scalapack_B.n() << ") and" << " C in R^(" << scalapack_C.m() << "x" << scalapack_C.n() << ")" << std::endl; @@ -148,17 +148,17 @@ void test() scalapack_B = full_B; scalapack_C = full_C; - const NumberType alpha = 1.4, beta = 0.1; + const NumberType b=1.4, c=0.1; - full_A *= alpha; - full_C *= beta; + full_A *= b; + full_C *= c; full_A.mTmult(full_C,full_B,true); - scalapack_A.mult(scalapack_C,scalapack_B,alpha,beta,false,true); + scalapack_A.mult(b,scalapack_B,c,scalapack_C,false,true); FullMatrix tmp_full_C(full_C.m(),full_C.n()); scalapack_C.copy_to(tmp_full_C); - pcout << " computing C = alpha A * B^T + beta C with" + pcout << " computing C = b A * B^T + c C with" << " A in R^(" << scalapack_A.m() << "x" << scalapack_A.n() << ")," << " B in R^(" << scalapack_B.m() << "x" << scalapack_B.n() << ") and" << " C in R^(" << scalapack_C.m() << "x" << scalapack_C.n() << ")" << std::endl; @@ -187,17 +187,17 @@ void test() scalapack_B = full_B; scalapack_C = full_C; - const NumberType alpha = 1.4, beta = 0.1; + const NumberType b=1.4, c=0.1; - full_A *= alpha; - full_C *= beta; + full_A *= b; + full_C *= c; full_A.TmTmult(full_C,full_B,true); - scalapack_A.mult(scalapack_C,scalapack_B,alpha,beta,true,true); + scalapack_A.mult(b,scalapack_B,c,scalapack_C,true,true); FullMatrix tmp_full_C(full_C.m(),full_C.n()); scalapack_C.copy_to(tmp_full_C); - pcout << " computing C = alpha A^T * B^T + beta C with" + pcout << " computing C = b A^T * B^T + c C with" << " A in R^(" << scalapack_A.m() << "x" << scalapack_A.n() << ")," << " B in R^(" << scalapack_B.m() << "x" << scalapack_B.n() << ") and" << " C in R^(" << scalapack_C.m() << "x" << scalapack_C.n() << ")" << std::endl; diff --git a/tests/scalapack/scalapack_12.mpirun=1.output b/tests/scalapack/scalapack_12.mpirun=1.output index a65b495305..a90c724898 100644 --- a/tests/scalapack/scalapack_12.mpirun=1.output +++ b/tests/scalapack/scalapack_12.mpirun=1.output @@ -1,15 +1,15 @@ 2D process grid: 1x1 - computing C = alpha A * B + beta C with A in R^(300x500), B in R^(500x400) and C in R^(300x400) + computing C = b A * B + c C with A in R^(300x500), B in R^(500x400) and C in R^(300x400) norms: 60787.8449 & 60787.8449 for d - computing C = alpha A^T * B + beta C with A in R^(500x300), B in R^(500x400) and C in R^(300x400) + computing C = b A^T * B + c C with A in R^(500x300), B in R^(500x400) and C in R^(300x400) norms: 60655.07764 & 60655.07764 for d - computing C = alpha A * B^T + beta C with A in R^(300x500), B in R^(400x500) and C in R^(300x400) + computing C = b A * B^T + c C with A in R^(300x500), B in R^(400x500) and C in R^(300x400) norms: 60707.53954 & 60707.53954 for d - computing C = alpha A^T * B^T + beta C with A in R^(500x300), B in R^(400x500) and C in R^(300x400) + computing C = b A^T * B^T + c C with A in R^(500x300), B in R^(400x500) and C in R^(300x400) norms: 60757.09659 & 60757.09659 for d diff --git a/tests/scalapack/scalapack_12.mpirun=11.output b/tests/scalapack/scalapack_12.mpirun=11.output index 9646ef5461..d71715a175 100644 --- a/tests/scalapack/scalapack_12.mpirun=11.output +++ b/tests/scalapack/scalapack_12.mpirun=11.output @@ -1,15 +1,15 @@ 2D process grid: 3x3 - computing C = alpha A * B + beta C with A in R^(300x500), B in R^(500x400) and C in R^(300x400) + computing C = b A * B + c C with A in R^(300x500), B in R^(500x400) and C in R^(300x400) norms: 60787.8449 & 60787.8449 for d - computing C = alpha A^T * B + beta C with A in R^(500x300), B in R^(500x400) and C in R^(300x400) + computing C = b A^T * B + c C with A in R^(500x300), B in R^(500x400) and C in R^(300x400) norms: 60655.07764 & 60655.07764 for d - computing C = alpha A * B^T + beta C with A in R^(300x500), B in R^(400x500) and C in R^(300x400) + computing C = b A * B^T + c C with A in R^(300x500), B in R^(400x500) and C in R^(300x400) norms: 60707.53954 & 60707.53954 for d - computing C = alpha A^T * B^T + beta C with A in R^(500x300), B in R^(400x500) and C in R^(300x400) + computing C = b A^T * B^T + c C with A in R^(500x300), B in R^(400x500) and C in R^(300x400) norms: 60757.09659 & 60757.09659 for d diff --git a/tests/scalapack/scalapack_12.mpirun=9.output b/tests/scalapack/scalapack_12.mpirun=9.output index 9646ef5461..d71715a175 100644 --- a/tests/scalapack/scalapack_12.mpirun=9.output +++ b/tests/scalapack/scalapack_12.mpirun=9.output @@ -1,15 +1,15 @@ 2D process grid: 3x3 - computing C = alpha A * B + beta C with A in R^(300x500), B in R^(500x400) and C in R^(300x400) + computing C = b A * B + c C with A in R^(300x500), B in R^(500x400) and C in R^(300x400) norms: 60787.8449 & 60787.8449 for d - computing C = alpha A^T * B + beta C with A in R^(500x300), B in R^(500x400) and C in R^(300x400) + computing C = b A^T * B + c C with A in R^(500x300), B in R^(500x400) and C in R^(300x400) norms: 60655.07764 & 60655.07764 for d - computing C = alpha A * B^T + beta C with A in R^(300x500), B in R^(400x500) and C in R^(300x400) + computing C = b A * B^T + c C with A in R^(300x500), B in R^(400x500) and C in R^(300x400) norms: 60707.53954 & 60707.53954 for d - computing C = alpha A^T * B^T + beta C with A in R^(500x300), B in R^(400x500) and C in R^(300x400) + computing C = b A^T * B^T + c C with A in R^(500x300), B in R^(400x500) and C in R^(300x400) norms: 60757.09659 & 60757.09659 for d