lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [lmi] odd/string_db5 d6d7cb3 3/3: Cache all use of class p


From: Greg Chicares
Subject: [lmi-commits] [lmi] odd/string_db5 d6d7cb3 3/3: Cache all use of class product_data
Date: Sun, 6 Dec 2020 20:09:23 -0500 (EST)

branch: odd/string_db5
commit d6d7cb39c4aaddc879a0cbe2237fbe5c0c00534f
Author: Gregory W. Chicares <gchicares@sbcglobal.net>
Commit: Gregory W. Chicares <gchicares@sbcglobal.net>

    Cache all use of class product_data
    
    The speed improvement is remarkable. Compared to measurements made
    before the recent "lingo" work (`git log --patch -G'finra, no solve '`):
      100% -  5408 /  7562 = 28.5% // pc-linux-gnu
      100% - 15350 / 20707 = 25.9% // i686 mingw
---
 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                  |  4 +++-
 ihs_basicval.cpp              |  8 ++++++--
 product_data.cpp              |  6 +++++-
 product_data.hpp              |  4 ++--
 verify_products.cpp           |  5 +++--
 10 files changed, 47 insertions(+), 28 deletions(-)

diff --git a/Speed_gcc_i686-w64-mingw32 b/Speed_gcc_i686-w64-mingw32
index 135f421..bbbfeb1 100644
--- a/Speed_gcc_i686-w64-mingw32
+++ b/Speed_gcc_i686-w64-mingw32
@@ -1,7 +1,7 @@
 Test speed:
-  naic, no solve      : 5.117e-02 s mean;      50735 us least of  20 runs
-  naic, specamt solve : 9.783e-02 s mean;      91068 us least of  11 runs
-  naic, ee prem solve : 8.398e-02 s mean;      83652 us least of  12 runs
-  finra, no solve     : 2.075e-02 s mean;      20536 us least of  49 runs
-  finra, specamt solve: 5.791e-02 s mean;      57723 us least of  18 runs
-  finra, ee prem solve: 5.379e-02 s mean;      53553 us least of  19 runs
+  naic, no solve      : 4.624e-02 s mean;      46017 us least of  22 runs
+  naic, specamt solve : 8.683e-02 s mean;      86637 us least of  12 runs
+  naic, ee prem solve : 8.203e-02 s mean;      78990 us least of  13 runs
+  finra, no solve     : 1.589e-02 s mean;      15732 us least of  63 runs
+  finra, specamt solve: 5.316e-02 s mean;      53014 us least of  19 runs
+  finra, ee prem solve: 4.911e-02 s mean;      48901 us least of  21 runs
diff --git a/Speed_gcc_x86_64-pc-linux-gnu b/Speed_gcc_x86_64-pc-linux-gnu
index d28751c..cc58fcc 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.934e-02 s mean;      18402 us least of  52 runs
-  naic, specamt solve : 3.280e-02 s mean;      32060 us least of  31 runs
-  naic, ee prem solve : 3.008e-02 s mean;      29302 us least of  34 runs
-  finra, no solve     : 7.334e-03 s mean;       7103 us least of 100 runs
-  finra, specamt solve: 2.073e-02 s mean;      19476 us least of  49 runs
-  finra, ee prem solve: 1.874e-02 s mean;      18282 us least of  54 runs
+  naic, no solve      : 1.763e-02 s mean;      16755 us least of  57 runs
+  naic, specamt solve : 3.076e-02 s mean;      30303 us least of  33 runs
+  naic, ee prem solve : 2.811e-02 s mean;      27865 us least of  36 runs
+  finra, no solve     : 5.563e-03 s mean;       5224 us least of 100 runs
+  finra, specamt solve: 1.834e-02 s mean;      17780 us least of  55 runs
+  finra, ee prem solve: 1.694e-02 s mean;      16476 us least of  60 runs
diff --git a/Speed_gcc_x86_64-w64-mingw32 b/Speed_gcc_x86_64-w64-mingw32
index 708e570..9d458ef 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.666e-02 s mean;      26496 us least of  38 runs
-  naic, specamt solve : 4.186e-02 s mean;      41651 us least of  24 runs
-  naic, ee prem solve : 3.903e-02 s mean;      38808 us least of  26 runs
-  finra, no solve     : 1.498e-02 s mean;      14804 us least of  67 runs
-  finra, specamt solve: 2.897e-02 s mean;      28771 us least of  35 runs
-  finra, ee prem solve: 2.745e-02 s mean;      27208 us least of  37 runs
+  naic, no solve      : 2.354e-02 s mean;      21568 us least of  43 runs
+  naic, specamt solve : 3.714e-02 s mean;      36679 us least of  27 runs
+  naic, ee prem solve : 3.442e-02 s mean;      33988 us least of  30 runs
+  finra, no solve     : 9.926e-03 s mean;       9717 us least of 100 runs
+  finra, specamt solve: 2.401e-02 s mean;      23653 us least of  42 runs
+  finra, ee prem solve: 2.241e-02 s mean;      22148 us least of  45 runs
diff --git a/antediluvian_stubs.cpp b/antediluvian_stubs.cpp
index 236d0c1..b15968c 100644
--- a/antediluvian_stubs.cpp
+++ b/antediluvian_stubs.cpp
@@ -134,10 +134,18 @@ product_data::product_data(std::string const&)
 
 product_data::~product_data() = default;
 
+product_data::product_data(fs::path const&)
+{}
+
 product_data::product_data(product_data const&)
     :MemberSymbolTable <product_data> {}
 {}
 
+std::string product_data::actual_filename(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 5480e29..a1c20b8 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_;}
 
     double GetAnnualTgtPrem(int a_year, double a_specamt) const;
diff --git a/database.cpp b/database.cpp
index 11d5896..52e519b 100644
--- a/database.cpp
+++ b/database.cpp
@@ -192,7 +192,9 @@ void product_database::initialize(std::string const& 
product_name)
         }
     else
         {
-        product_data const p(product_name);
+//      product_data const p(product_name);
+        std::string f = product_data::actual_filename(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 7664a42..8ebfe7e 100644
--- a/ihs_basicval.cpp
+++ b/ihs_basicval.cpp
@@ -67,7 +67,9 @@ BasicValues::BasicValues(Input const& input)
 //  ,product_            (yare_input_.ProductName)
 // Safe to dereference?
 //  ,product_            
(*product_data::read_via_cache(yare_input_.ProductName))
-    ,product_            
(*product_data::read_via_cache(product_data::actual_filename(yare_input_.ProductName)))
+//  ,product_            
(*product_data::read_via_cache(product_data::actual_filename(yare_input_.ProductName)))
+    // Throw if null?
+    ,product_            
(product_data::read_via_cache(product_data::actual_filename(yare_input_.ProductName)))
     ,database_           (yare_input_)
     ,DefnLifeIns_        {mce_cvat}
     ,DefnMaterialChange_ {mce_unnecessary_premium}
@@ -100,7 +102,9 @@ BasicValues::BasicValues
     :yare_input_         (Input{})
 //  ,product_            (a_ProductName)
 // Safe to dereference?
-    ,product_            
(*product_data::read_via_cache(product_data::actual_filename(a_ProductName)))
+//  ,product_            
(*product_data::read_via_cache(product_data::actual_filename(a_ProductName)))
+    // Throw if null?
+    ,product_            
(product_data::read_via_cache(product_data::actual_filename(a_ProductName)))
     ,database_
         (a_ProductName
         ,a_Gender
diff --git a/product_data.cpp b/product_data.cpp
index 2496786..3d396ce 100644
--- a/product_data.cpp
+++ b/product_data.cpp
@@ -26,7 +26,7 @@
 
 #include "alert.hpp"
 #include "assert_lmi.hpp"
-#include "ce_product_name.hpp"
+////#include "ce_product_name.hpp"
 #include "contains.hpp"
 #include "data_directory.hpp"           // AddDataDir()
 #include "map_lookup.hpp"
@@ -148,10 +148,14 @@ product_data::product_data(std::string const& 
product_name)
 {
 }
 
+#if 0
+// Either add 'ce_product_name.o' to unit-test targets in makefiles,
+// or abandon this idea.
 product_data::product_data(ce_product_name const& product_name)
     :product_data(fs::path(actual_filename(product_name.str())))
 {
 }
+#endif // 0
 
 product_data::product_data(product_data const& z)
 // Is this initializer-list necessary?
diff --git a/product_data.hpp b/product_data.hpp
index d64d1cd..a734c08 100644
--- a/product_data.hpp
+++ b/product_data.hpp
@@ -33,7 +33,7 @@
 
 #include <string>
 
-class LMI_SO_FWD_DECL ce_product_name;
+////class LMI_SO_FWD_DECL ce_product_name;
 
 /// A single product datum: a string with an optional gloss.
 ///
@@ -95,7 +95,7 @@ class LMI_SO product_data
   public:
     explicit product_data(fs::path const& filename);
     explicit product_data(std::string const& product_name);
-    explicit product_data(ce_product_name const& product_name);
+////    explicit product_data(ce_product_name const& product_name);
     ~product_data() override;
 
     std::string const& datum(std::string const& name) const;
diff --git a/verify_products.cpp b/verify_products.cpp
index 1e1f44b..ff97a74 100644
--- a/verify_products.cpp
+++ b/verify_products.cpp
@@ -55,7 +55,7 @@ class product_verifier
     std::string      const product_name_;
     std::string      const gender_str_  ;
     std::string      const smoking_str_ ;
-    product_data     const p_           ;
+    product_data     const& p_           ; // or just std::shared_ptr?
     mcenum_gender    const gender_      ;
     mcenum_smoking   const smoking_     ;
     product_database const db0_         ;
@@ -77,7 +77,8 @@ product_verifier::product_verifier
     :product_name_ {product_name}
     ,gender_str_   {gender_str}
     ,smoking_str_  {smoking_str}
-    ,p_            (product_name)
+//  ,p_            (product_name)
+    ,p_            
(*product_data::read_via_cache(product_data::actual_filename(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]