diff options
| author | Guillaume Horel <guillaume.horel@gmail.com> | 2017-12-12 15:06:43 -0500 |
|---|---|---|
| committer | Guillaume Horel <guillaume.horel@gmail.com> | 2017-12-12 15:06:43 -0500 |
| commit | 27c60346d0675d34ec5854156a1ba94697f6b024 (patch) | |
| tree | 4895f25050c71263898e9b5f5ec36b6112734d82 | |
| parent | 0e8dc14bb5816a6d26e355da020d5fbb457ee2a0 (diff) | |
| download | lossdistrib-27c60346d0675d34ec5854156a1ba94697f6b024.tar.gz | |
alloccate less
| -rw-r--r-- | src/lossdistrib.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/lossdistrib.c b/src/lossdistrib.c index e09c9bf..7028e7f 100644 --- a/src/lossdistrib.c +++ b/src/lossdistrib.c @@ -518,12 +518,19 @@ void BCloss_recov_dist(const double *defaultprob, const int *dim1, const int *di for(int t = 0; t < (*dim2); t++) { memset(Lw, 0, (*N) * (*n) * sizeof(double)); memset(Rw, 0, (*N) * (*n) * sizeof(double)); + static double* gshocked; + static double* Sshocked; + static double* Rshocked; + #pragma omp threadprivate(gshocked, Sshocked, Rshocked) + #pragma omp parallel + { + gshocked = malloc((*dim1) * sizeof(double)); + Sshocked = malloc((*dim1) * sizeof(double)); + Rshocked = malloc((*dim1) * sizeof(double)); + } #pragma omp parallel for for(int i = 0; i < *n; i++) { - double* gshocked = malloc((*dim1) * sizeof(double)); - double* Sshocked = malloc((*dim1) * sizeof(double)); - double* Rshocked = malloc((*dim1) * sizeof(double)); - for(int j=0; j < (*dim1); j++) { + for(int j = 0; j < (*dim1); j++) { double g = defaultprob[j + (*dim1) * t]; gshocked[j] = shockprob(g, rho[j], Z[i], 0); Sshocked[j] = shockseverity(1-recov[j], Z[i], rho[j], g); @@ -533,6 +540,9 @@ void BCloss_recov_dist(const double *defaultprob, const int *dim1, const int *di Lw + i * (*N)); lossdistrib(gshocked, dim1, issuerweights, Rshocked , N, N, defaultflag, Rw + i * (*N)); + } + #pragma omp parallel + { free(gshocked); free(Sshocked); free(Rshocked); |
