
"Calum Grant" <calum@visula.org> wrote
Here is the output on my 1.7GHz laptop:
1000000 ((0),(0)) ((1),(1)) ((2),(2)) ((3),(3)) ((4),(4)) ((5),(5)) ((6),(6)) ((7),(7)) ((8),(8)) ((9),(9)) Total 10 results 2000000 That took just 1687ms ^^^^^^^^^^^^^^^^^^^ Press any key to continue
These results are so unbelievably impressive, that I had to see them with my own eyes. So I downloaded your library from http://visula.org/relational. My PS has a 1.5 Ghz processor, and I used VC71 public edition (no optimization), release mode. Unfortunately my results were slightly different from yours: 1000000 ((0),(0)) ((1),(1)) ((2),(2)) ((3),(3)) ((4),(4)) ((5),(5)) ((6),(6)) ((7),(7)) ((8),(8)) ((9),(9)) Total 10 results 2000000 That took just 35453ms ^^^^^^^^^^^^^^^^^^ Press any key to continue This is a little less impressive :-( What am I missing? Regards, Arkadiy PS: The RTL (after modifications I mentioned before) was more than twice faster: 1000000 records added 2000000 records added That took just 14906ms ^^^^^^^^^^^^^^^^^^ Press any key to continue Here is the modified text (again, I am using current Boost CVS): #include <table_delta.hpp> #include <utils.hpp> #include <selection_delta.hpp> #include <key_index_delta.hpp> #include <crossproduct_delta.hpp> #include <rename_delta.hpp> #include <boost/lambda/lambda.hpp> #include <boost/typeof/typeof.hpp> #include <expression_registry.hpp> #include <transaction.hpp> #include <cstdlib> #include <merge_delta.hpp> #include <windows.h> #include <ctime> using namespace boost; using namespace boost::lambda; BOOST_RTL_DEFINE_COLUMN(int, c1); struct my_info : rel::table_info< mpl::vector<c1>
{};
typedef rel::table<my_info> my_table; typedef my_table::value_type my_tuple; struct a; typedef rel::alias<c1, a> c2; main() { using namespace std; clock_t t0 = clock(); my_table t; t.reserve(2000000); int i; for (i = 0; i < 1000000; ++i) t.insert(my_tuple(i + 1)); BOOST_AUTO(t2, rel::auto_rename<a>(t)); BOOST_AUTO(mr, rel::merge<1>(t, t2)); cout << count(mr) << " records added" << endl; for (; i < 2000000; ++i) t.insert(my_tuple(i + 1)); cout << count(mr) << " records added" << endl; clock_t t1 = clock(); std::cout << "That took just " << (1000*(t1-t0))/CLOCKS_PER_SEC << "ms\n"; return 0; }