$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r81637 - sandbox/variadic_templates/sandbox/slim/test
From: cppljevans_at_[hidden]
Date: 2012-11-30 12:45:45
Author: cppljevans
Date: 2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
New Revision: 81637
URL: http://svn.boost.org/trac/boost/changeset/81637
Log:
 1) *_run.py more explicit on how to set domains
 2) New domain, TUPLE_TEMPLATED_CTOR, which is flag
    indicating whether bcon12* tuples have templated
    CTOR's taking args for tuple elements.
 3) *.run.txt using new domain, and still shows
    clang better at horizontal than vertical implementation.
 4) Missing: changes in tuple_impl.bcon12*.hpp.
    Don't (yet) know why.   
Text files modified: 
   sandbox/variadic_templates/sandbox/slim/test/RETURN_ENABLE_IF_DEFAULTS.hpp                     |     1                                         
   sandbox/variadic_templates/sandbox/slim/test/compiler_map.py                                   |    18 ++++-----                               
   sandbox/variadic_templates/sandbox/slim/test/make_tuple.hpp                                    |    20 +++++++---                              
   sandbox/variadic_templates/sandbox/slim/test/tree_builder.hpp                                  |    52 +++++++++++++++++++++++---              
   sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.cpp                  |     8 ++-                                     
   sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.guage_time._.run.txt |    66 +++++++++++++++++++++++++++++----       
   sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_domain.py                         |    16 ++++++++                                
   sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_filt.py                           |     3 +                                       
   sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_run.py                            |    78 ++++++++++++++++++++--------------------
   9 files changed, 187 insertions(+), 75 deletions(-)
Modified: sandbox/variadic_templates/sandbox/slim/test/RETURN_ENABLE_IF_DEFAULTS.hpp
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/RETURN_ENABLE_IF_DEFAULTS.hpp	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/RETURN_ENABLE_IF_DEFAULTS.hpp	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -9,6 +9,7 @@
 //      To enable reuse in other code using #include's.
 //
 //=====================================================
+#include <type_traits>
 
 // C++11 eliminates the need for macros! Oh, wait ...
 #define RETURN(...) -> decltype(__VA_ARGS__) { return __VA_ARGS__; }
Modified: sandbox/variadic_templates/sandbox/slim/test/compiler_map.py
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/compiler_map.py	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/compiler_map.py	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -7,13 +7,11 @@
 
 COMPILER_MAP={}
 
-if True:
-  COMPILER_MAP["gcc4_8"]=(
-         "/home/evansl/download/gcc/4.8-20121028/install/bin/g++"
-       , "-std=gnu++11"
-       )
-if True:
-  COMPILER_MAP["clangxx"]=(
-         "/home/evansl/download/llvm/svn/build/Release/bin/clang"
-       , "-std=c++11 -cxx-isystem /home/evansl/download/llvm/svn/llvm/projects/libcxx/include"
-       )
+COMPILER_MAP["gcc4_8"]=(
+       "/home/evansl/download/gcc/4.8-20121028/install/bin/g++"
+     , "-std=gnu++11"
+     )
+COMPILER_MAP["clangxx"]=(
+       "/home/evansl/download/llvm/svn/build/Release/bin/clang"
+     , "-std=c++11 -cxx-isystem /home/evansl/download/llvm/svn/llvm/projects/libcxx/include"
+     )
Modified: sandbox/variadic_templates/sandbox/slim/test/make_tuple.hpp
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/make_tuple.hpp	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/make_tuple.hpp	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -1,11 +1,13 @@
 #ifndef MAKE_TUPLE_INCLUDE_HPP
 #define MAKE_TUPLE_INCLUDE_HPP
-#include <boost/preprocessor/stringize.hpp>
+#ifndef TUPLE_TEMPLATED_CTOR
+  #define TUPLE_TEMPLATED_CTOR 1
+#endif
 #ifndef TUPLE_IMPL
-  #define TUPLE_IMPL bcon12_vertical
+  #define TUPLE_IMPL bcon12_horizontal
 #endif
+#include <boost/preprocessor/stringize.hpp>
 #include BOOST_PP_STRINGIZE(tuple_impl.TUPLE_IMPL.hpp)
-#if TUPLE_BENCH_TEMPLATED_CTOR == 1
 //Acknowlegements:
 //  The following code was adapted from part of the code in:
 //    https://github.com/ericniebler/home/blob/master/src/tuple/unrolled_tuple.hpp
@@ -39,10 +41,16 @@
 ///////////////////////////////////////////////////////////////////////////////
 // make_tuple
   template<typename ...T>
-  tuple_bench<detail::as_tuple_element<T>...> 
+    inline
+  tuple_bench<detail::as_tuple_element<T>...>
 make_tuple(T &&...t)
 {
-    return {t...};
+    typedef tuple_bench<detail::as_tuple_element<T>...> tuple_t;
+#if TUPLE_TEMPLATED_CTOR == 1
+    tuple_t a_tuple(static_cast<T &&>(t)...);
+#else
+    tuple_t a_tuple;
+#endif//TUPLE_TEMPLATED_CTOR == 1
+    return a_tuple;
 }
-#endif//TUPLE_BENCH_TEMPLATED_CTOR == 1
 #endif
Modified: sandbox/variadic_templates/sandbox/slim/test/tree_builder.hpp
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/tree_builder.hpp	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/tree_builder.hpp	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -20,20 +20,58 @@
 #endif
 
 #ifndef TREE_DEPTH
-#define TREE_DEPTH 5
+#define TREE_DEPTH 2
 #endif
 
-template<int I>
+  template
+  < int Depth//tree depth
+  , int Index//index of tuple element (used in get<Index>(tuple))
+  >
+struct node_tag
+  /**@brief
+   *  A 'tag' to put into tree node showing at what
+   *  depth it's located in the tree, and what child
+   *  the node is in it's parent's node.
+   */
+{
+};
+
+  template
+  < int Depth
+  , int Index
+  , typename Children
+  >
+  using 
+tree_node
+  =tuple_bench<node_tag<Depth,Index>,Children>
+  ;
+  template
+  < int Depth
+  , int Index
+  , typename Children
+  >
+  tree_node<Depth,Index,Children>
+make_node
+  ( Children&& t
+  )
+  {
+      return ::make_tuple
+        ( node_tag<Depth,Index>()
+        , static_cast<Children&&>(t)
+        );
+  }
+
+template<int Depth>
 struct tree_builder
 {
-    #define M0(Z, N, D) ::make_tuple( static_cast<T &&>(t), std::integral_constant<int, N>())
-    #define M1(Z, N, D) auto BOOST_PP_CAT(tmp, N) = ::get<N>(res);
+    #define M0(Z, Index, D) ::make_node<Depth,Index>(static_cast<T &&>(t))
+    #define M1(Z, Index, D) auto BOOST_PP_CAT(tmp, Index) = ::get<Index>(res);
 
     template<typename T>
     static auto make_tree(T &&t)
-      -> decltype(tree_builder<I+1>::make_tree(::make_tuple(BOOST_PP_ENUM(TUPLE_SIZE, M0, ~))))
+      -> decltype(tree_builder<Depth+1>::make_tree(::make_tuple(BOOST_PP_ENUM(TUPLE_SIZE, M0, ~))))
     {
-        auto res = tree_builder<I+1>::make_tree(::make_tuple(BOOST_PP_ENUM(TUPLE_SIZE, M0, ~)));
+        auto res = tree_builder<Depth+1>::make_tree(::make_tuple(BOOST_PP_ENUM(TUPLE_SIZE, M0, ~)));
         // Get each element of the tuple.
         BOOST_PP_REPEAT(TUPLE_SIZE, M1, ~)
         return res;
@@ -44,7 +82,7 @@
 };
 
 template<>
-struct tree_builder<TREE_DEPTH+1>
+struct tree_builder<TREE_DEPTH>
 {
     template<typename T>
     static T make_tree(T &&t)
Modified: sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.cpp
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.cpp	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.cpp	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -12,11 +12,13 @@
 // http://www.boost.org/LICENSE_1_0.txt)
 //
 #include "./tree_builder.hpp"
+template<unsigned I>
+struct leaf
+{};
+
 int main()
 {
-    char sz[] = "hello";
-    tuple_bench<int, char(&)[6]> x = ::make_tuple(1, std::ref(sz));
-    auto y = tree_builder<1>::make_tree(::make_tuple(1, "hello", 3.14, 'a', x));
+    auto y = tree_builder<1>::make_tree(::make_tuple(leaf<100>(),leaf<101>(),leaf<102>()));
     return 0;
 }
 
Modified: sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.guage_time._.run.txt
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.guage_time._.run.txt	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/tuple.benchmark.tree_builder.guage_time._.run.txt	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -17,21 +17,69 @@
 compiler_exe: /home/evansl/download/llvm/svn/build/Release/bin/clang
 ]version
 ]compilers
-domain_names['compiler', 'TUPLE_IMPL', 'TUPLE_SIZE', 'TUPLE_UNROLL_MAX', 'TREE_DEPTH']domain_names
+domain_names['compiler', 'TUPLE_IMPL', 'TUPLE_SIZE', 'TUPLE_UNROLL_MAX', 'TREE_DEPTH', 'TUPLE_TEMPLATED_CTOR']domain_names
 range_how['guage_time', 'UserTime', 'SystemTime', 'ElapsedTime', 'MajorPageFaults', 'MaxResidentSetSize', 'Swaps', 'ContextSwitches']range_how
-domain_values['gcc4_8', 'bcon12_horizontal', 10, -1, 2]domain_values
+domain_values['gcc4_8', 'bcon12_horizontal', 15, -1, 4, 0]domain_values
 range_out[
-UserTime[0.56]SystemTime[0.07]ElapsedTime[0.63]MajorPageFaults[64]MaxResidentSetSize[140704]Swaps[0]ContextSwitches[13]
+UserTime[0.81]SystemTime[0.09]ElapsedTime[0.89]MajorPageFaults[0]MaxResidentSetSize[221744]Swaps[0]ContextSwitches[5]
 ]range_out
-domain_values['gcc4_8', 'bcon12_horizontal', 10, -1, 3]domain_values
+domain_values['gcc4_8', 'bcon12_horizontal', 15, -1, 4, 1]domain_values
 range_out[
-UserTime[0.65]SystemTime[0.05]ElapsedTime[0.68]MajorPageFaults[0]MaxResidentSetSize[165408]Swaps[0]ContextSwitches[6]
+UserTime[1.01]SystemTime[0.12]ElapsedTime[1.10]MajorPageFaults[0]MaxResidentSetSize[222000]Swaps[0]ContextSwitches[5]
 ]range_out
-domain_values['clangxx', 'bcon12_horizontal', 10, -1, 2]domain_values
+domain_values['gcc4_8', 'bcon12_horizontal', 15, -1, 5, 0]domain_values
 range_out[
-UserTime[0.38]SystemTime[0.05]ElapsedTime[0.45]MajorPageFaults[24]MaxResidentSetSize[108016]Swaps[0]ContextSwitches[6]
+UserTime[3.76]SystemTime[0.41]ElapsedTime[4.15]MajorPageFaults[0]MaxResidentSetSize[1240656]Swaps[0]ContextSwitches[5]
 ]range_out
-domain_values['clangxx', 'bcon12_horizontal', 10, -1, 3]domain_values
+domain_values['gcc4_8', 'bcon12_horizontal', 15, -1, 5, 1]domain_values
 range_out[
-UserTime[0.46]SystemTime[0.04]ElapsedTime[0.49]MajorPageFaults[0]MaxResidentSetSize[117424]Swaps[0]ContextSwitches[3]
+UserTime[1.82]SystemTime[0.13]ElapsedTime[1.93]MajorPageFaults[0]MaxResidentSetSize[271136]Swaps[0]ContextSwitches[5]
+]range_out
+domain_values['gcc4_8', 'bcon12_vertical', 15, 10, 4, 0]domain_values
+range_out[
+UserTime[0.68]SystemTime[0.08]ElapsedTime[0.74]MajorPageFaults[0]MaxResidentSetSize[190688]Swaps[0]ContextSwitches[5]
+]range_out
+domain_values['gcc4_8', 'bcon12_vertical', 15, 10, 4, 1]domain_values
+range_out[
+UserTime[0.78]SystemTime[0.04]ElapsedTime[0.81]MajorPageFaults[0]MaxResidentSetSize[187776]Swaps[0]ContextSwitches[5]
+]range_out
+domain_values['gcc4_8', 'bcon12_vertical', 15, 10, 5, 0]domain_values
+range_out[
+UserTime[1.41]SystemTime[0.08]ElapsedTime[1.49]MajorPageFaults[0]MaxResidentSetSize[418768]Swaps[0]ContextSwitches[8]
+]range_out
+domain_values['gcc4_8', 'bcon12_vertical', 15, 10, 5, 1]domain_values
+range_out[
+UserTime[0.98]SystemTime[0.12]ElapsedTime[1.11]MajorPageFaults[8]MaxResidentSetSize[208464]Swaps[0]ContextSwitches[5]
+]range_out
+domain_values['clangxx', 'bcon12_horizontal', 15, -1, 4, 0]domain_values
+range_out[
+UserTime[0.44]SystemTime[0.05]ElapsedTime[0.48]MajorPageFaults[0]MaxResidentSetSize[119440]Swaps[0]ContextSwitches[3]
+]range_out
+domain_values['clangxx', 'bcon12_horizontal', 15, -1, 4, 1]domain_values
+range_out[
+UserTime[0.65]SystemTime[0.04]ElapsedTime[0.68]MajorPageFaults[0]MaxResidentSetSize[144160]Swaps[0]ContextSwitches[3]
+]range_out
+domain_values['clangxx', 'bcon12_horizontal', 15, -1, 5, 0]domain_values
+range_out[
+UserTime[0.61]SystemTime[0.07]ElapsedTime[0.67]MajorPageFaults[0]MaxResidentSetSize[131520]Swaps[0]ContextSwitches[3]
+]range_out
+domain_values['clangxx', 'bcon12_horizontal', 15, -1, 5, 1]domain_values
+range_out[
+UserTime[1.27]SystemTime[0.09]ElapsedTime[1.35]MajorPageFaults[0]MaxResidentSetSize[168912]Swaps[0]ContextSwitches[3]
+]range_out
+domain_values['clangxx', 'bcon12_vertical', 15, 10, 4, 0]domain_values
+range_out[
+UserTime[5.89]SystemTime[0.05]ElapsedTime[5.93]MajorPageFaults[0]MaxResidentSetSize[125728]Swaps[0]ContextSwitches[3]
+]range_out
+domain_values['clangxx', 'bcon12_vertical', 15, 10, 4, 1]domain_values
+range_out[
+UserTime[6.78]SystemTime[0.04]ElapsedTime[6.81]MajorPageFaults[0]MaxResidentSetSize[133920]Swaps[0]ContextSwitches[3]
+]range_out
+domain_values['clangxx', 'bcon12_vertical', 15, 10, 5, 0]domain_values
+range_out[
+UserTime[93.41]SystemTime[0.30]ElapsedTime[93.70]MajorPageFaults[0]MaxResidentSetSize[180112]Swaps[0]ContextSwitches[3]
+]range_out
+domain_values['clangxx', 'bcon12_vertical', 15, 10, 5, 1]domain_values
+range_out[
+UserTime[90.21]SystemTime[0.42]ElapsedTime[90.62]MajorPageFaults[0]MaxResidentSetSize[173712]Swaps[0]ContextSwitches[3]
 ]range_out
Modified: sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_domain.py
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_domain.py	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_domain.py	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -73,6 +73,21 @@
     else:
       return [2]
 
+class templated_ctor_flag(object):
+  "TUPLE_TEMPLATED_CTOR macro values(only used in tree_builder benchmark)"
+  def __init__(self, start=0, finish=1):
+    self.start=max(0,start)
+    self.finish=min(finish,1)
+  def __call__(self,xs):
+    if True:
+      return range(
+          self.start
+        , self.finish+1
+        , 1
+        )
+    else:
+      return [0,1]
+
 if __name__ == '__main__':
   tuple_max_size=8
   tuple_min_size=4
@@ -83,6 +98,7 @@
     , sizes(range(tuple_min_size,tuple_max_size+1,tuple_del_size))
     , last(tuple_min_size,tuple_del_size)
     , unroll_max()
+    , templated_ctor_flag()
     ])
   for element in domain():
       print(element)
Modified: sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_filt.py
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_filt.py	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_filt.py	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -28,7 +28,8 @@
       :   (  d_lst[d_ndx.compiler] == 'gcc4_8' 
           or d_lst[d_ndx.compiler] == 'clangxx' 
           )
-      and d_lst[d_ndx.TUPLE_SIZE] == 10
+      and d_lst[d_ndx.TUPLE_TEMPLATED_CTOR] == 0
+      and d_lst[d_ndx.TREE_DEPTH] == 5
     , domain_range_values
     )
   print(":filt_dr=")
Modified: sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_run.py
==============================================================================
--- sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_run.py	(original)
+++ sandbox/variadic_templates/sandbox/slim/test/tuple_benchmark_run.py	2012-11-30 12:45:44 EST (Fri, 30 Nov 2012)
@@ -3,17 +3,39 @@
 Run compilers on programs while recording resources usage.
 """
 from __future__ import print_function 
-from compiler_map import COMPILER_MAP
-from tuple_benchmark_tags import TAG_TUPLE
 import sys
-from datetime import datetime
 import subprocess
 
 from tuple_benchmark_domain import *
+from compiler_map import COMPILER_MAP
+from tuple_benchmark_tags import TAG_TUPLE
 import command_guage
 import tuple_benchmark_filenames
 import boost_root
 
+BOOST_ROOT_PATH=boost_root.path()
+
+IMPL_MAP_INC={}#implementation key -> -I include flags to compiler
+IMPL_MAP_INC["horizontal"]=\
+    ""\
+  #
+IMPL_MAP_INC["vertical"]=\
+    " -I"+BOOST_ROOT_PATH\
+  #
+IMPL_MAP_INC["bcon12_horizontal"]=\
+    " -I"+BOOST_ROOT_PATH\
+  #
+IMPL_MAP_INC["bcon12_vertical"]=\
+    " -I"+BOOST_ROOT_PATH\
+  #
+IMPL_MAP_INC["compstor"]=\
+    " -I"+BOOST_ROOT_PATH\
+  + " -I"+BOOST_ROOT_PATH+"/sandbox/rw/variadic_templates"\
+  #
+IMPL_MAP_INC["std"]=\
+    ""\
+  #
+
 def main(argv):
   """
   Inputs:
@@ -43,46 +65,24 @@
     guage_spec=argv[iarg:]
   src_filename=tuple_benchmark_filenames.src_filename(benchmark_suffix)
   #print("src_filename=",src_filename)
-  boost_root_path=boost_root.path()
-  impl_map_inc={}#implementation key -> -I include flags to compiler
-  if False:
-    impl_map_inc["horizontal"]=\
-        ""\
-      #
-  if False:
-    impl_map_inc["vertical"]=\
-        " -I"+boost_root_path\
-      #
-  if True:
-    impl_map_inc["bcon12_horizontal"]=\
-        ""\
-      #
-  if False:
-    impl_map_inc["bcon12_vertical"]=\
-        " -I"+boost_root_path\
-      #
-  if False:
-    impl_map_inc["compstor"]=\
-        " -I"+boost_root_path\
-      + " -I"+boost_root_path+"/sandbox/rw/variadic_templates"\
-      #
-  if False:
-    impl_map_inc["std"]=\
-        ""\
-      #
-  tuple_min_size=10
-  tuple_max_size=10
-  tuple_del_size=5
+  #[Define Domains.
+  compiler_domain=['gcc4_8','clangxx']
+  impl_domain=['bcon12_horizontal','bcon12_vertical']
+  tuple_size_domain_min=15
+  tuple_size_domain_max=15
+  tuple_size_domain_del=5
   name_domain=[
-      [ 'compiler', compilers(COMPILER_MAP.keys())]
-    , [ 'TUPLE_IMPL', impls(impl_map_inc.keys())]
-    , [ 'TUPLE_SIZE', sizes(range(tuple_min_size,tuple_max_size+1,tuple_del_size))]
+      [ 'compiler', compilers(compiler_domain)]
+    , [ 'TUPLE_IMPL', impls(impl_domain)]
+    , [ 'TUPLE_SIZE', sizes(range(tuple_size_domain_min,tuple_size_domain_max+1,tuple_size_domain_del))]
     , [ 'TUPLE_UNROLL_MAX', unroll_max()]
     ]
   if benchmark_suffix == "mini" :
-    name_domain.append( [ 'LAST_LESS', last(4,tuple_del_size)])
+    name_domain.append( [ 'LAST_LESS', last(4,tuple_size_domain_del)])
   else:
-    name_domain.append( [ 'TREE_DEPTH', tree_depth(2,3,1)])
+    name_domain.append( [ 'TREE_DEPTH', tree_depth(4,5,1)])
+    name_domain.append( [ 'TUPLE_TEMPLATED_CTOR', templated_ctor_flag(0,1)])
+  #]Define Domains.
   domains=product_dep(
     map(lambda t: t[1], name_domain)
     )
@@ -140,7 +140,7 @@
         " -c "\
         + compiler_flags+" "\
         + compiler_macros+" "\
-        + impl_map_inc[macro_vals[0]]+" "\
+        + IMPL_MAP_INC[macro_vals[0]]+" "\
         + src_filename\
         #
       print(TAG_TUPLE.range_out+"[",file=run_fileobj)