|
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, NaNs or Infs in A or B do not affect the result. |
| 44 | +*> 2. If both alpha and beta are zero, then a zero matrix is returned in C, |
| 45 | +*> irrespective of any NaNs or Infs in A, B or C. |
| 46 | +*> 3. If only beta is zero, alpha*op( A )*op( B ) is returned, irrespective |
| 47 | +*> of any NaNs or Infs in C. |
38 | 48 | *> \endverbatim |
39 | 49 | * |
40 | 50 | * Arguments: |
|
51 | 61 | *> TRANSA = 'T' or 't', op( A ) = A**T. |
52 | 62 | *> |
53 | 63 | *> TRANSA = 'C' or 'c', op( A ) = A**T. |
| 64 | +*> |
| 65 | +*> Note: TRANSA = 'C' is supported for the sake of API consistency |
| 66 | +*> between all ?GEMM variants. |
54 | 67 | *> \endverbatim |
55 | 68 | *> |
56 | 69 | *> \param[in] TRANSB |
|
64 | 77 | *> TRANSB = 'T' or 't', op( B ) = B**T. |
65 | 78 | *> |
66 | 79 | *> TRANSB = 'C' or 'c', op( B ) = B**T. |
| 80 | +*> |
| 81 | +*> Note: TRANSB = 'C' is supported for the sake of API consistency |
| 82 | +*> between all ?GEMM variants. |
67 | 83 | *> \endverbatim |
68 | 84 | *> |
69 | 85 | *> \param[in] M |
|
92 | 108 | *> \param[in] ALPHA |
93 | 109 | *> \verbatim |
94 | 110 | *> ALPHA is DOUBLE PRECISION. |
95 | | -*> On entry, ALPHA specifies the scalar alpha. |
| 111 | +*> On entry, ALPHA specifies the scalar alpha. If ALPHA is zero the |
| 112 | +*> values in A and B do not affect the result. This also means that |
| 113 | +*> NaN/Inf propagation from A and B is inhibited if ALPHA is zero. |
96 | 114 | *> \endverbatim |
97 | 115 | *> |
98 | 116 | *> \param[in] A |
|
102 | 120 | *> Before entry with TRANSA = 'N' or 'n', the leading m by k |
103 | 121 | *> part of the array A must contain the matrix A, otherwise |
104 | 122 | *> the leading k by m part of the array A must contain the |
105 | | -*> matrix A. |
| 123 | +*> matrix A, except if ALPHA is zero. |
| 124 | +*> If ALPHA is zero, none of the values in A affect the result, even |
| 125 | +*> if they are NaN/Inf. This also implies that if ALPHA is zero, |
| 126 | +*> the matrix elements of A need not be initialized by the caller. |
106 | 127 | *> \endverbatim |
107 | 128 | *> |
108 | 129 | *> \param[in] LDA |
|
121 | 142 | *> Before entry with TRANSB = 'N' or 'n', the leading k by n |
122 | 143 | *> part of the array B must contain the matrix B, otherwise |
123 | 144 | *> the leading n by k part of the array B must contain the |
124 | | -*> matrix B. |
| 145 | +*> matrix B, except if ALPHA is zero. |
| 146 | +*> If ALPHA is zero, none of the values in B affect the result, even |
| 147 | +*> if they are NaN/Inf. This also implies that if ALPHA is zero, |
| 148 | +*> the matrix elements of B need not be initialized by the caller. |
125 | 149 | *> \endverbatim |
126 | 150 | *> |
127 | 151 | *> \param[in] LDB |
|
136 | 160 | *> \param[in] BETA |
137 | 161 | *> \verbatim |
138 | 162 | *> 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. |
| 163 | +*> On entry, BETA specifies the scalar beta. If BETA is zero the |
| 164 | +*> values in C do not affect the result. This also means that |
| 165 | +*> NaN/Inf propagation from C is inhibited if BETA is zero. |
141 | 166 | *> \endverbatim |
142 | 167 | *> |
143 | 168 | *> \param[in,out] C |
144 | 169 | *> \verbatim |
145 | 170 | *> C is DOUBLE PRECISION array, dimension ( LDC, N ) |
146 | 171 | *> 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. |
| 172 | +*> contain the matrix C, except if beta is zero. |
| 173 | +*> If beta is zero, none of the values in C affect the result, even |
| 174 | +*> if they are NaN/Inf. This also implies that if beta is zero, |
| 175 | +*> the matrix elements of C need not be initialized by the caller. |
149 | 176 | *> On exit, the array C is overwritten by the m by n matrix |
150 | 177 | *> ( alpha*op( A )*op( B ) + beta*C ). |
151 | 178 | *> \endverbatim |
|
0 commit comments