lmi-commits
[Top][All Lists]
Advanced

[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_



reply via email to

[Prev in Thread] Current Thread [Next in Thread]