fixed version for performance

This commit is contained in:
Shane
2013-07-21 21:11:01 -07:00
parent 845d53e594
commit fdf23030c2

View File

@@ -221,10 +221,15 @@ random_value(std::mt19937 & gen)
{ return std::uniform_real_distribution<T>(-10000.0, 10000.0)(gen); } { return std::uniform_real_distribution<T>(-10000.0, 10000.0)(gen); }
template<class T> template<class T>
typename std::enable_if<std::is_integral<T>::value, T>::type typename std::enable_if<std::is_integral<T>::value && sizeof(T) != sizeof(char), T>::type
random_value(std::mt19937 & gen) random_value(std::mt19937 & gen)
{ return std::uniform_int_distribution<T>(std::numeric_limits<T>::lowest(), std::numeric_limits<T>::max())(gen); } { return std::uniform_int_distribution<T>(std::numeric_limits<T>::lowest(), std::numeric_limits<T>::max())(gen); }
template<class T>
typename std::enable_if<std::is_integral<T>::value && sizeof(T) == sizeof(char), T>::type
random_value(std::mt19937 & gen)
{ return static_cast<T>( std::uniform_int_distribution<int64_t>(std::numeric_limits<T>::lowest(), std::numeric_limits<T>::max())(gen) ); }
template<class T> template<class T>
typename std::enable_if<std::is_same<T, std::string>::value, std::string>::type typename std::enable_if<std::is_same<T, std::string>::value, std::string>::type
random_value(std::mt19937 & gen) random_value(std::mt19937 & gen)
@@ -236,12 +241,13 @@ random_value(std::mt19937 & gen)
} }
template<class C> template<class C>
std::basic_string<C> random_basic_string(std::mt19937 & gen) std::basic_string<C> random_basic_string(std::mt19937 & gen, size_t maxSize = 30)
{ {
std::basic_string<C> s(std::uniform_int_distribution<int>(3, 30)(gen), ' '); std::basic_string<C> s(std::uniform_int_distribution<int>(3, maxSize)(gen), ' ');
for(C & c : s) for(C & c : s)
c = static_cast<C>( std::uniform_int_distribution<int>( '~', '~' )(gen) ); c = static_cast<C>( std::uniform_int_distribution<int>( '~', '~' )(gen) );
return s; return s;
return s;
} }
template <size_t N> template <size_t N>
@@ -298,73 +304,90 @@ int main()
{ {
std::random_device rd; std::random_device rd;
std::mt19937 gen(rd()); std::mt19937 gen(rd());
//auto rngC = [&](){ return random_value<uint8_t>(gen); }; auto rngC = [&](){ return random_value<uint8_t>(gen); };
//auto rngD = [&](){ return random_value<double>(gen); }; auto rngD = [&](){ return random_value<double>(gen); };
//const bool randomize = false; const bool randomize = false;
////######################################## //########################################
//auto vectorDoubleTest = [&](size_t s, bool randomize) auto vectorDoubleTest = [&](size_t s, bool randomize)
//{ {
// std::ostringstream name; std::ostringstream name;
// name << "Vector(double) size " << s; name << "Vector(double) size " << s;
// std::vector<double> data(s); std::vector<double> data(s);
// if(randomize) if(randomize)
// for( auto & d : data ) for( auto & d : data )
// d = rngD(); d = rngD();
// test<binary>( name.str(), data ); test<binary>( name.str(), data );
//}; };
//vectorDoubleTest(1, randomize); // 8B vectorDoubleTest(1, randomize); // 8B
//vectorDoubleTest(16, randomize); // 128B vectorDoubleTest(16, randomize); // 128B
//vectorDoubleTest(1024, randomize); // 8KB vectorDoubleTest(1024, randomize); // 8KB
//vectorDoubleTest(1024*1024, randomize); // 8MB vectorDoubleTest(1024*1024, randomize); // 8MB
////######################################## //########################################
//auto vectorCharTest = [&](size_t s, bool randomize) auto vectorCharTest = [&](size_t s, bool randomize)
//{ {
// std::ostringstream name; std::ostringstream name;
// name << "Vector(uint8_t) size " << s; name << "Vector(uint8_t) size " << s;
// std::vector<uint8_t> data(s); std::vector<uint8_t> data(s);
// if(randomize) if(randomize)
// for( auto & d : data ) for( auto & d : data )
// d = rngC(); d = rngC();
// test<binary>( name.str(), data ); test<binary>( name.str(), data );
//}; };
//vectorCharTest(1024*1024*64, randomize); // 1 GB vectorCharTest(1024*1024*64, randomize);
////######################################## //########################################
//auto vectorPoDStructTest = [&](size_t s) auto vectorPoDStructTest = [&](size_t s)
//{ {
// std::ostringstream name; std::ostringstream name;
// name << "Vector(PoDStruct) size " << s; name << "Vector(PoDStruct) size " << s;
// std::vector<PoDStruct> data(s); std::vector<PoDStruct> data(s);
// test<binary>( name.str(), data ); test<binary>( name.str(), data );
//}; };
//vectorPoDStructTest(1); vectorPoDStructTest(1);
//vectorPoDStructTest(64); vectorPoDStructTest(64);
//vectorPoDStructTest(1024); vectorPoDStructTest(1024);
//vectorPoDStructTest(1024*1024); vectorPoDStructTest(1024*1024);
//vectorPoDStructTest(1024*1024*4); vectorPoDStructTest(1024*1024*2);
////######################################## //########################################
//auto vectorPoDChildTest = [&](size_t s) auto vectorPoDChildTest = [&](size_t s)
//{ {
// std::ostringstream name; std::ostringstream name;
// name << "Vector(PoDChild) size " << s; name << "Vector(PoDChild) size " << s;
// std::vector<PoDChild> data(s); std::vector<PoDChild> data(s);
// test<binary>( name.str(), data ); test<binary>( name.str(), data );
//}; };
//
//vectorPoDChildTest(1024*64);
vectorPoDChildTest(1024);
vectorPoDChildTest(1024*32);
//########################################
auto stringTest = [&](size_t s)
{
std::ostringstream name;
name << "String size " << s;
std::string data = random_basic_string<char>(gen, s);
std::cout << "data.size " << data.size() << std::endl;
test<binary>( name.str(), data );
};
stringTest(200000);
stringTest(2000000);
stringTest(20000000);
//########################################
auto vectorStringTest = [&](size_t s) auto vectorStringTest = [&](size_t s)
{ {
std::ostringstream name; std::ostringstream name;
@@ -382,6 +405,7 @@ int main()
vectorStringTest(1024*64); vectorStringTest(1024*64);
vectorStringTest(1024*128); vectorStringTest(1024*128);
//########################################
auto mapPoDStructTest = [&](size_t s) auto mapPoDStructTest = [&](size_t s)
{ {
std::ostringstream name; std::ostringstream name;
@@ -389,13 +413,10 @@ int main()
std::map<std::string, PoDStruct> m; std::map<std::string, PoDStruct> m;
for(size_t i=0; i<s; ++i) for(size_t i=0; i<s; ++i)
m[std::to_string(i)] = PoDStruct(); m[std::to_string( i )] = PoDStruct();
test<binary>(name.str(), m); test<binary>(name.str(), m);
}; };
mapPoDStructTest(1024); mapPoDStructTest(1024);
mapPoDStructTest(1024*64); mapPoDStructTest(1024*64);