MCPcopy Create free account
hub / github.com/clMathLibraries/clBLAS / randomTrsmMatrices

Function randomTrsmMatrices

src/tests/include/blas-random.h:176–342  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

174
175template <typename T>
176static void
177randomTrsmMatrices(
178 clblasOrder order,
179 clblasSide side,
180 clblasUplo uplo,
181 clblasDiag diag,
182 size_t M,
183 size_t N,
184 bool useAlpha,
185 T *alpha,
186 T *A,
187 size_t lda,
188 T *B,
189 size_t ldb)
190{
191 size_t limA, i, j;
192 T min, max, x, y;
193 cl_double modMin, modMax, sum;
194
195 min = ZERO<T>();
196 max = ZERO<T>();
197
198 if (side == clblasLeft) {
199 limA = M;
200 }
201 else {
202 limA = N;
203 }
204
205 /*
206 * Generate max(|a_{ii}|). Determine min(|a_{ii}|).
207 * Generate a_{ii} which are constrainted by min/max.
208 */
209 switch (diag) {
210 case clblasUnit:
211 for (i = 0; i < limA; i++) {
212 // must not be accessed
213 setElement<T>(order, clblasNoTrans, i, i, A, lda, ONE<T>());
214 }
215 break;
216 case clblasNonUnit:
217 /* Do not allow zeros on A's main diagonal */
218 do {
219 max = random<T>(TRSM_LIMIT_A<T>());
220 } while (module(max) < 1);
221 modMax = module(max);
222 min = max / 100;
223 modMin = module(min);
224 setElement<T>(order, clblasNoTrans, 0, 0, A, lda, max);
225 for (i = 1; i < limA; i++) {
226 x = random<T>(modMin, modMax);
227 if (module(x) == 0) {
228 x = max;
229 }
230 setElement<T>(order, clblasNoTrans, i, i, A, lda, x);
231 }
232 break;
233 }

Callers

nothing calls this directly

Calls 1

moduleFunction · 0.70

Tested by

no test coverage detected