[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 50d271d 5/5: Perform a transcendental calcula
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 50d271d 5/5: Perform a transcendental calculation OAOO: part deux |
Date: |
Sat, 13 Feb 2021 18:33:37 -0500 (EST) |
branch: master
commit 50d271de9a69e7a41c6d2825d7fc4b85f49a2652
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Perform a transcendental calculation OAOO: part deux
Removed old code that had been kept only to validate its replacement.
Speed is nearly unaffected, which is somewhat surprising: calling
i_upper_12_over_12_from_i<double>() for all durations in class
InterestRates, with the important optimization of reusing the previous
year's rate if it's the same instead of recalculating it, should be
faster than calling it for each year in the monthiversary loop with no
such optimization. OTOH, some of the new code such as (simplified):
for(int j = mce_gen_curr; j < mc_n_gen_bases; ++j)
for(int k = mce_sep_full; k < mc_n_sep_bases; ++k)
SepAcctGrossRate_[i] [k] = Zero_;
is certainly inefficient in that identical assignments are performed
mc_n_gen_bases times when once would suffice.
Nevertheless, this is a good change because it moves a compound-interest
calculation from class AccountValue to class InterestRates where such
calculations naturally belong, and it proceeds naturally from commit
365cbb477dfdc (whose more palpable speedup is recorded in 1017bcb08614).
---
Speed_gcc_i686-w64-mingw32 | 12 ++++++------
Speed_gcc_x86_64-pc-linux-gnu | 12 ++++++------
Speed_gcc_x86_64-w64-mingw32 | 12 ++++++------
ihs_acctval.cpp | 7 -------
interest_rates.cpp | 8 --------
5 files changed, 18 insertions(+), 33 deletions(-)
diff --git a/Speed_gcc_i686-w64-mingw32 b/Speed_gcc_i686-w64-mingw32
index a94453d..4029e16 100644
--- a/Speed_gcc_i686-w64-mingw32
+++ b/Speed_gcc_i686-w64-mingw32
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 4.978e-02 s mean; 49470 us least of 21 runs
- naic, specamt solve : 9.404e-02 s mean; 93598 us least of 11 runs
- naic, ee prem solve : 8.580e-02 s mean; 85128 us least of 12 runs
- finra, no solve : 1.510e-02 s mean; 14943 us least of 67 runs
- finra, specamt solve: 5.543e-02 s mean; 54929 us least of 19 runs
- finra, ee prem solve: 5.110e-02 s mean; 50641 us least of 20 runs
+ naic, no solve : 5.015e-02 s mean; 49840 us least of 20 runs
+ naic, specamt solve : 9.461e-02 s mean; 94300 us least of 11 runs
+ naic, ee prem solve : 8.596e-02 s mean; 85719 us least of 12 runs
+ finra, no solve : 1.574e-02 s mean; 14970 us least of 64 runs
+ finra, specamt solve: 5.573e-02 s mean; 55361 us least of 18 runs
+ finra, ee prem solve: 5.118e-02 s mean; 50862 us least of 20 runs
diff --git a/Speed_gcc_x86_64-pc-linux-gnu b/Speed_gcc_x86_64-pc-linux-gnu
index 4090270..ba2400c 100644
--- a/Speed_gcc_x86_64-pc-linux-gnu
+++ b/Speed_gcc_x86_64-pc-linux-gnu
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 1.806e-02 s mean; 17727 us least of 56 runs
- naic, specamt solve : 3.325e-02 s mean; 32824 us least of 31 runs
- naic, ee prem solve : 3.031e-02 s mean; 29903 us least of 33 runs
- finra, no solve : 5.315e-03 s mean; 5073 us least of 100 runs
- finra, specamt solve: 1.914e-02 s mean; 18778 us least of 53 runs
- finra, ee prem solve: 1.765e-02 s mean; 17267 us least of 57 runs
+ naic, no solve : 1.817e-02 s mean; 17779 us least of 56 runs
+ naic, specamt solve : 3.291e-02 s mean; 32497 us least of 31 runs
+ naic, ee prem solve : 3.006e-02 s mean; 29620 us least of 34 runs
+ finra, no solve : 5.265e-03 s mean; 5078 us least of 100 runs
+ finra, specamt solve: 1.896e-02 s mean; 18773 us least of 53 runs
+ finra, ee prem solve: 1.748e-02 s mean; 17089 us least of 58 runs
diff --git a/Speed_gcc_x86_64-w64-mingw32 b/Speed_gcc_x86_64-w64-mingw32
index 65717d9..90e2a82 100644
--- a/Speed_gcc_x86_64-w64-mingw32
+++ b/Speed_gcc_x86_64-w64-mingw32
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 2.449e-02 s mean; 24186 us least of 41 runs
- naic, specamt solve : 4.232e-02 s mean; 41912 us least of 24 runs
- naic, ee prem solve : 3.878e-02 s mean; 38462 us least of 26 runs
- finra, no solve : 9.237e-03 s mean; 9074 us least of 100 runs
- finra, specamt solve: 2.553e-02 s mean; 25240 us least of 40 runs
- finra, ee prem solve: 2.374e-02 s mean; 23465 us least of 43 runs
+ naic, no solve : 2.452e-02 s mean; 24318 us least of 41 runs
+ naic, specamt solve : 4.470e-02 s mean; 42173 us least of 23 runs
+ naic, ee prem solve : 3.898e-02 s mean; 38684 us least of 26 runs
+ finra, no solve : 9.209e-03 s mean; 9072 us least of 100 runs
+ finra, specamt solve: 2.551e-02 s mean; 25326 us least of 40 runs
+ finra, ee prem solve: 2.379e-02 s mean; 23595 us least of 43 runs
diff --git a/ihs_acctval.cpp b/ihs_acctval.cpp
index 3001876..64f0f2e 100644
--- a/ihs_acctval.cpp
+++ b/ihs_acctval.cpp
@@ -39,7 +39,6 @@
#include "ledger_variant.hpp"
#include "loads.hpp"
#include "materially_equal.hpp"
-#include "math_functions.hpp" // EXPUNGE
#include "miscellany.hpp"
#include "mortality_rates.hpp"
#include "outlay.hpp"
@@ -1320,12 +1319,6 @@ void AccountValue::SetAnnualInvariants()
)
[Year]
;
- // EXPUNGE
- double YearsSepAcctGrossRate2 = i_upper_12_over_12_from_i<double>()
- (InterestRates_->SepAcctGrossRate(SepBasis_, mce_annual_rate)[Year]
- );
- YearsSepAcctGrossRate2 = round_interest_rate()(YearsSepAcctGrossRate2);
- LMI_ASSERT(materially_equal(YearsSepAcctGrossRate,
YearsSepAcctGrossRate2));
}
YearsDcvIntRate = GetMly7702iGlp()[Year];
diff --git a/interest_rates.cpp b/interest_rates.cpp
index bc7c62c..0cc1ebf 100644
--- a/interest_rates.cpp
+++ b/interest_rates.cpp
@@ -891,14 +891,6 @@ void InterestRates::DynamicMlySepAcctRate
// bases?
// TODO ?? What if it's not 'full'--what if we want 'half' or 'zero'?
- MonthlySepAcctGrossRate = i_upper_12_over_12_from_i<double>()
- (SepAcctGrossRate_[mce_annual_rate][mce_sep_full][year]
- );
- LMI_ASSERT // EXPUNGE
- ( MonthlySepAcctGrossRate
- == SepAcctGrossRate_[mce_monthly_rate][mce_sep_full][year]
- );
- // Instead of the previous two statements, just do this:
MonthlySepAcctGrossRate =
SepAcctGrossRate_[mce_monthly_rate][mce_sep_full][year];
convert_interest_rates