|
35 | 35 | *> |
36 | 36 | *> alpha and beta are scalars, and A, B and C are matrices, with op( A ) |
37 | 37 | *> an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. |
| 38 | +*> |
| 39 | +*> Note: if alpha and/or beta is zero, some parts of the matrix-matrix |
| 40 | +*> operations are not performed. This results in the following NaN/Inf |
| 41 | +*> propagation quirks: |
| 42 | +*> |
| 43 | +*> 1. If alpha is zero and beta is one, NaNs or Infs in A or B do not affect |
| 44 | +*> the result. |
| 45 | +*> 2. If both alpha and beta are zero, then a zero matrix is returned in C, |
| 46 | +*> irrespective of any NaNs or Infs in A, B or C. |
| 47 | +*> 3. If alpha is zero and beta is neither zero or one, then beta*C is |
| 48 | +*> returned in C, irrespective of any NaNs or Infs in A or B. |
| 49 | +*> 4. If only beta is zero, alpha*op( A )*op( B ) is returned, irrespective |
| 50 | +*> of any NaNs or Infs in C. |
38 | 51 | *> \endverbatim |
39 | 52 | * |
40 | 53 | * Arguments: |
|
51 | 64 | *> TRANSA = 'T' or 't', op( A ) = A**T. |
52 | 65 | *> |
53 | 66 | *> TRANSA = 'C' or 'c', op( A ) = A**T. |
| 67 | +*> |
| 68 | +*> Note: TRANSA = 'C' is supported for the sake of API consistency |
| 69 | +*> between all ?GEMM variants. |
54 | 70 | *> \endverbatim |
55 | 71 | *> |
56 | 72 | *> \param[in] TRANSB |
|
64 | 80 | *> TRANSB = 'T' or 't', op( B ) = B**T. |
65 | 81 | *> |
66 | 82 | *> TRANSB = 'C' or 'c', op( B ) = B**T. |
| 83 | +*> |
| 84 | +*> Note: TRANSB = 'C' is supported for the sake of API consistency |
| 85 | +*> between all ?GEMM variants. |
67 | 86 | *> \endverbatim |
68 | 87 | *> |
69 | 88 | *> \param[in] M |
|
92 | 111 | *> \param[in] ALPHA |
93 | 112 | *> \verbatim |
94 | 113 | *> ALPHA is DOUBLE PRECISION. |
95 | | -*> On entry, ALPHA specifies the scalar alpha. |
| 114 | +*> On entry, ALPHA specifies the scalar alpha. If ALPHA is zero the |
| 115 | +*> values in A and B do not affect the result. This also means that |
| 116 | +*> NaN/Inf propagation from A and B is inhibited if ALPHA is zero. |
96 | 117 | *> \endverbatim |
97 | 118 | *> |
98 | 119 | *> \param[in] A |
|
102 | 123 | *> Before entry with TRANSA = 'N' or 'n', the leading m by k |
103 | 124 | *> part of the array A must contain the matrix A, otherwise |
104 | 125 | *> the leading k by m part of the array A must contain the |
105 | | -*> matrix A. |
| 126 | +*> matrix A, except if ALPHA is zero. |
| 127 | +*> If ALPHA is zero, none of the values in A affect the result, even |
| 128 | +*> if they are NaN/Inf. This also implies that if ALPHA is zero, |
| 129 | +*> the matrix elements of A need not be initialized by the caller. |
106 | 130 | *> \endverbatim |
107 | 131 | *> |
108 | 132 | *> \param[in] LDA |
|
121 | 145 | *> Before entry with TRANSB = 'N' or 'n', the leading k by n |
122 | 146 | *> part of the array B must contain the matrix B, otherwise |
123 | 147 | *> the leading n by k part of the array B must contain the |
124 | | -*> matrix B. |
| 148 | +*> matrix B, except if ALPHA is zero. |
| 149 | +*> If ALPHA is zero, none of the values in B affect the result, even |
| 150 | +*> if they are NaN/Inf. This also implies that if ALPHA is zero, |
| 151 | +*> the matrix elements of B need not be initialized by the caller. |
125 | 152 | *> \endverbatim |
126 | 153 | *> |
127 | 154 | *> \param[in] LDB |
|
136 | 163 | *> \param[in] BETA |
137 | 164 | *> \verbatim |
138 | 165 | *> BETA is DOUBLE PRECISION. |
139 | | -*> On entry, BETA specifies the scalar beta. When BETA is |
140 | | -*> supplied as zero then C need not be set on input. |
| 166 | +*> On entry, BETA specifies the scalar beta. If BETA is zero the |
| 167 | +*> values in C do not affect the result. This also means that |
| 168 | +*> NaN/Inf propagation from C is inhibited if BETA is zero. |
141 | 169 | *> \endverbatim |
142 | 170 | *> |
143 | 171 | *> \param[in,out] C |
144 | 172 | *> \verbatim |
145 | 173 | *> C is DOUBLE PRECISION array, dimension ( LDC, N ) |
146 | 174 | *> Before entry, the leading m by n part of the array C must |
147 | | -*> contain the matrix C, except when beta is zero, in which |
148 | | -*> case C need not be set on entry. |
| 175 | +*> contain the matrix C, except if beta is zero. |
| 176 | +*> If beta is zero, none of the values in C affect the result, even |
| 177 | +*> if they are NaN/Inf. This also implies that if beta is zero, |
| 178 | +*> the matrix elements of C need not be initialized by the caller. |
149 | 179 | *> On exit, the array C is overwritten by the m by n matrix |
150 | 180 | *> ( alpha*op( A )*op( B ) + beta*C ). |
151 | 181 | *> \endverbatim |
|
0 commit comments