Browse Source

Merge pull request #2822 from martin-frbg/issue2821

Fix potential domain error in sqrt
tags/v0.3.11^2
Martin Kroeker GitHub 5 years ago
parent
commit
70a254d507
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 5 deletions
  1. +15
    -5
      driver/level3/level3_syrk_threaded.c

+ 15
- 5
driver/level3/level3_syrk_threaded.c View File

@@ -526,7 +526,7 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO
BLASLONG width, i, j, k; BLASLONG width, i, j, k;
BLASLONG n, n_from, n_to; BLASLONG n, n_from, n_to;
int mode, mask; int mode, mask;
double dnum;
double dnum, di, dinum;


if ((nthreads == 1) || (args -> n < nthreads * SWITCH_RATIO)) { if ((nthreads == 1) || (args -> n < nthreads * SWITCH_RATIO)) {
SYRK_LOCAL(args, range_m, range_n, sa, sb, 0); SYRK_LOCAL(args, range_m, range_n, sa, sb, 0);
@@ -601,9 +601,14 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO


if (nthreads - num_cpu > 1) { if (nthreads - num_cpu > 1) {


double di = (double)i;
di = (double)i;


width = (((BLASLONG)((sqrt(di * di + dnum) - di) + mask)/(mask+1)) * (mask+1) );
dinum = di * di + dnum;

if (dinum > 0)
width = (((BLASLONG)((sqrt(dinum) - di) + mask)/(mask+1)) * (mask+1) );
else
width = (((BLASLONG)(- di + mask)/(mask+1)) * (mask+1) );


if (num_cpu == 0) width = n - (((n - width)/(mask+1)) * (mask+1) ); if (num_cpu == 0) width = n - (((n - width)/(mask+1)) * (mask+1) );


@@ -643,10 +648,15 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n, FLOAT *sa, FLO


if (nthreads - num_cpu > 1) { if (nthreads - num_cpu > 1) {


double di = (double)i;
di = (double)i;


width = (((BLASLONG)((sqrt(di * di + dnum) - di) + mask)/(mask+1)) * (mask+1));
dinum = di * di +dnum;


if (dinum > 0)
width = (((BLASLONG)((sqrt(di * di + dnum) - di) + mask)/(mask+1)) * (mask+1));
else
width = (((BLASLONG)(- di + mask)/(mask+1)) * (mask+1));
if ((width > n - i) || (width < mask)) width = n - i; if ((width > n - i) || (width < mask)) width = n - i;


} else { } else {


Loading…
Cancel
Save