[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lmi-commits] [lmi] master 6620be4: Cache most use of product files
From: |
Greg Chicares |
Subject: |
[lmi-commits] [lmi] master 6620be4: Cache most use of product files |
Date: |
Thu, 28 Jan 2021 15:26:04 -0500 (EST) |
branch: master
commit 6620be4ea558920be6f47fbac21f6705e19480e4
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>
Cache most use of product files
Compared to master dfdbf3c5a, performance is faster (positive
percentages) or slower (negative percentages) by about:
no some many
solve solves solves
gcc_i686-w64-mingw32 31% 2% -6%
gcc_x86_64-pc-linux-gnu 26% -2% -12%
gcc_x86_64-w64-mingw32 36% 5% -10%
so this can be released without risk of embarrassment: even for the
slowest (i686) architecture that's still used in production, end users
aren't going to notice a six percent slowdown, though some might notice
a thirty-one-percent speedup.
No caching yet for GPT server or MEC server.
---
Speed_gcc_i686-w64-mingw32 | 12 ++++++------
Speed_gcc_x86_64-pc-linux-gnu | 12 ++++++------
Speed_gcc_x86_64-w64-mingw32 | 12 ++++++------
antediluvian_stubs.cpp | 8 ++++++++
basic_values.hpp | 4 ++--
database.cpp | 3 ++-
ihs_basicval.cpp | 20 ++++++++++----------
verify_products.cpp | 32 ++++++++++++++++----------------
8 files changed, 56 insertions(+), 47 deletions(-)
diff --git a/Speed_gcc_i686-w64-mingw32 b/Speed_gcc_i686-w64-mingw32
index 0cfb2f4..875d7e4 100644
--- a/Speed_gcc_i686-w64-mingw32
+++ b/Speed_gcc_i686-w64-mingw32
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 6.048e-02 s mean; 60178 us least of 17 runs
- naic, specamt solve : 1.072e-01 s mean; 106689 us least of 10 runs
- naic, ee prem solve : 9.806e-02 s mean; 97641 us least of 11 runs
- finra, no solve : 2.324e-02 s mean; 23054 us least of 44 runs
- finra, specamt solve: 6.564e-02 s mean; 65262 us least of 16 runs
- finra, ee prem solve: 6.320e-02 s mean; 60415 us least of 16 runs
+ naic, no solve : 5.268e-02 s mean; 52079 us least of 19 runs
+ naic, specamt solve : 9.937e-02 s mean; 98448 us least of 11 runs
+ naic, ee prem solve : 9.048e-02 s mean; 89842 us least of 12 runs
+ finra, no solve : 1.579e-02 s mean; 15570 us least of 64 runs
+ finra, specamt solve: 5.825e-02 s mean; 57766 us least of 18 runs
+ finra, ee prem solve: 5.366e-02 s mean; 53137 us least of 19 runs
diff --git a/Speed_gcc_x86_64-pc-linux-gnu b/Speed_gcc_x86_64-pc-linux-gnu
index fcc2242..b0da293 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 : 2.303e-02 s mean; 22433 us least of 44 runs
- naic, specamt solve : 3.961e-02 s mean; 39256 us least of 26 runs
- naic, ee prem solve : 3.622e-02 s mean; 35800 us least of 28 runs
- finra, no solve : 8.234e-03 s mean; 7796 us least of 100 runs
- finra, specamt solve: 2.348e-02 s mean; 22718 us least of 43 runs
- finra, ee prem solve: 2.268e-02 s mean; 21205 us least of 45 runs
+ naic, no solve : 2.035e-02 s mean; 19969 us least of 50 runs
+ naic, specamt solve : 3.683e-02 s mean; 36509 us least of 28 runs
+ naic, ee prem solve : 3.355e-02 s mean; 33213 us least of 30 runs
+ finra, no solve : 5.615e-03 s mean; 5503 us least of 100 runs
+ finra, specamt solve: 2.074e-02 s mean; 20421 us least of 49 runs
+ finra, ee prem solve: 1.911e-02 s mean; 18822 us least of 53 runs
diff --git a/Speed_gcc_x86_64-w64-mingw32 b/Speed_gcc_x86_64-w64-mingw32
index ea463e1..4ea8397 100644
--- a/Speed_gcc_x86_64-w64-mingw32
+++ b/Speed_gcc_x86_64-w64-mingw32
@@ -1,7 +1,7 @@
Test speed:
- naic, no solve : 3.308e-02 s mean; 32862 us least of 31 runs
- naic, specamt solve : 5.486e-02 s mean; 52738 us least of 19 runs
- naic, ee prem solve : 4.899e-02 s mean; 48709 us least of 21 runs
- finra, no solve : 1.565e-02 s mean; 15412 us least of 64 runs
- finra, specamt solve: 3.382e-02 s mean; 33490 us least of 30 runs
- finra, ee prem solve: 3.184e-02 s mean; 31464 us least of 32 runs
+ naic, no solve : 2.664e-02 s mean; 26481 us least of 38 runs
+ naic, specamt solve : 4.645e-02 s mean; 46202 us least of 22 runs
+ naic, ee prem solve : 4.240e-02 s mean; 42281 us least of 24 runs
+ finra, no solve : 9.363e-03 s mean; 9281 us least of 100 runs
+ finra, specamt solve: 2.718e-02 s mean; 26986 us least of 37 runs
+ finra, ee prem solve: 2.661e-02 s mean; 25034 us least of 38 runs
diff --git a/antediluvian_stubs.cpp b/antediluvian_stubs.cpp
index e6357f8..4ef3def 100644
--- a/antediluvian_stubs.cpp
+++ b/antediluvian_stubs.cpp
@@ -142,12 +142,20 @@ product_data::product_data()
product_data::product_data(std::string const&)
{}
+product_data::product_data(fs::path const&)
+{}
+
product_data::~product_data() = default;
product_data::product_data(product_data const&)
:MemberSymbolTable <product_data> {}
{}
+std::string filename_from_product_name(std::string const&)
+{
+ return empty_string;
+}
+
int product_data::class_version() const
{
return 0;
diff --git a/basic_values.hpp b/basic_values.hpp
index 6fae516..f3847a9 100644
--- a/basic_values.hpp
+++ b/basic_values.hpp
@@ -118,7 +118,7 @@ class LMI_SO BasicValues
double InvestmentManagementFee() const;
yare_input yare_input_;
- product_data const product_;
+ std::shared_ptr<product_data> product_;
product_database const database_;
std::shared_ptr<lingo> lingo_;
std::shared_ptr<FundData> FundData_;
@@ -133,7 +133,7 @@ class LMI_SO BasicValues
std::shared_ptr<Irc7702> Irc7702_;
std::shared_ptr<Irc7702A> Irc7702A_;
- product_data const& product () const {return product_;}
+ product_data const& product () const {return *product_;}
product_database const& database() const {return database_;}
currency GetAnnualTgtPrem(int a_year, currency a_specamt) const;
diff --git a/database.cpp b/database.cpp
index 8d617b5..6cecf32 100644
--- a/database.cpp
+++ b/database.cpp
@@ -192,7 +192,8 @@ void product_database::initialize(std::string const&
product_name)
}
else
{
- product_data const p(product_name);
+ std::string const f = filename_from_product_name(product_name);
+ product_data const& p(*product_data::read_via_cache(f));
std::string const filename(p.datum("DatabaseFilename"));
LMI_ASSERT(!filename.empty());
db_ = DBDictionary::read_via_cache(AddDataDir(filename));
diff --git a/ihs_basicval.cpp b/ihs_basicval.cpp
index 1570411..cba1bf0 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -65,7 +65,7 @@
//============================================================================
BasicValues::BasicValues(Input const& input)
:yare_input_ (input)
- ,product_ (yare_input_.ProductName)
+ ,product_
(product_data::read_via_cache(filename_from_product_name(yare_input_.ProductName)))
,database_ (yare_input_)
,DefnLifeIns_ {mce_cvat}
,DefnMaterialChange_ {mce_unnecessary_premium}
@@ -97,7 +97,7 @@ BasicValues::BasicValues
// TODO ?? Need loan rate type here?
)
:yare_input_ (Input{})
- ,product_ (a_ProductName)
+ ,product_
(product_data::read_via_cache(filename_from_product_name(a_ProductName)))
,database_
(a_ProductName
,a_Gender
@@ -165,15 +165,15 @@ BasicValues::BasicValues
//============================================================================
void BasicValues::Init()
{
- lingo_ =
lingo::read_via_cache(AddDataDir(product().datum("LingoFilename")));
- FundData_.reset(new FundData(AddDataDir(product().datum("FundFilename"))));
- RoundingRules_.reset
- (new rounding_rules(AddDataDir(product().datum("RoundingFilename")))
- );
+ lingo_ = lingo::read_via_cache
+ (AddDataDir(product().datum("LingoFilename")));
+ FundData_ = FundData::read_via_cache
+ (AddDataDir(product().datum("FundFilename")));
+ RoundingRules_ = rounding_rules::read_via_cache
+ (AddDataDir(product().datum("RoundingFilename")));
SetRoundingFunctors();
- StratifiedCharges_.reset
- (new stratified_charges(AddDataDir(product().datum("TierFilename")))
- );
+ StratifiedCharges_ = stratified_charges::read_via_cache
+ (AddDataDir(product().datum("TierFilename")));
SetPermanentInvariants();
diff --git a/verify_products.cpp b/verify_products.cpp
index 30b3de1..4751114 100644
--- a/verify_products.cpp
+++ b/verify_products.cpp
@@ -52,21 +52,21 @@ class product_verifier
private:
void verify_7702q();
- std::string const product_name_;
- std::string const gender_str_ ;
- std::string const smoking_str_ ;
- product_data const p_ ;
- mcenum_gender const gender_ ;
- mcenum_smoking const smoking_ ;
- product_database const db0_ ;
- int const min_age_ ;
- product_database const db_ ;
- mcenum_cso_era const era_ ;
- oenum_alb_or_anb const a_b_ ;
- int const t_ ;
- bool const axis_g_ ;
- bool const axis_s_ ;
- int const omega_ ;
+ std::string const product_name_;
+ std::string const gender_str_ ;
+ std::string const smoking_str_ ;
+ product_data const& p_ ;
+ mcenum_gender const gender_ ;
+ mcenum_smoking const smoking_ ;
+ product_database const db0_ ;
+ int const min_age_ ;
+ product_database const db_ ;
+ mcenum_cso_era const era_ ;
+ oenum_alb_or_anb const a_b_ ;
+ int const t_ ;
+ bool const axis_g_ ;
+ bool const axis_s_ ;
+ int const omega_ ;
};
product_verifier::product_verifier
@@ -77,7 +77,7 @@ product_verifier::product_verifier
:product_name_ {product_name}
,gender_str_ {gender_str}
,smoking_str_ {smoking_str}
- ,p_ (product_name)
+ ,p_
(*product_data::read_via_cache(filename_from_product_name(product_name)))
,gender_ {mce_gender (gender_str ).value()}
,smoking_ {mce_smoking(smoking_str).value()}
,db0_