| 126 | |
| 127 | template <typename T> |
| 128 | static void |
| 129 | randomSpmvMatrices( |
| 130 | clblasOrder order, |
| 131 | clblasUplo uplo, |
| 132 | size_t N, |
| 133 | bool useAlpha, |
| 134 | T *alpha, |
| 135 | T *A, |
| 136 | T *X, |
| 137 | int incx, |
| 138 | bool useBeta, |
| 139 | T *beta, |
| 140 | T *Y, |
| 141 | int incy |
| 142 | ) |
| 143 | { |
| 144 | size_t i, j; |
| 145 | size_t lengthX; |
| 146 | size_t lengthY; |
| 147 | cl_double bound; |
| 148 | cl_double fAlpha, fBeta; |
| 149 | |
| 150 | if (!useAlpha) { |
| 151 | *alpha = random<T>(100); |
| 152 | if (module(*alpha) == 0.0) { |
| 153 | *alpha = 1.0; |
| 154 | } |
| 155 | } |
| 156 | |
| 157 | if (!useBeta) { |
| 158 | *beta = random<T>(100); |
| 159 | if (module(*beta) == 0.0) { |
| 160 | *beta = 1.0; |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | bound = UPPER_BOUND<T>(); |
| 165 | |
| 166 | if(module(*alpha) > bound) |
| 167 | *alpha = random<T>((sqrt(bound) / ((2.0) * N))); |
| 168 | if (module(*alpha) == 0.0) { |
| 169 | *alpha = 1.0; |
| 170 | } |
| 171 | |
| 172 | if(module(*beta) > bound) |
| 173 | *beta = random<T>((sqrt(bound))); |
| 174 | if (module(*beta) == 0.0) { |
| 175 | *beta = 1.0; |
| 176 | } |
| 177 | |
| 178 | fAlpha = module(*alpha); |
| 179 | fBeta = module(*beta); |
| 180 | |
| 181 | bound = bound / (fAlpha * N); |
| 182 | |
| 183 | bound = sqrt( ((((((fBeta * fBeta)) / fAlpha) / (4.0)) / fAlpha) / (N * N)) + bound) - ((fBeta) / ((2.0) * (fAlpha) * N)); |
| 184 | |
| 185 |
no test coverage detected