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); }
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)
{ 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>
typename std::enable_if<std::is_same<T, std::string>::value, std::string>::type
random_value(std::mt19937 & gen)
@@ -236,12 +241,13 @@ random_value(std::mt19937 & gen)
}
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)
c = static_cast<C>( std::uniform_int_distribution<int>( '~', '~' )(gen) );
return s;
return s;
}
template <size_t N>
@@ -298,73 +304,90 @@ int main()
{
std::random_device rd;
std::mt19937 gen(rd());
//auto rngC = [&](){ return random_value<uint8_t>(gen); };
//auto rngD = [&](){ return random_value<double>(gen); };
//const bool randomize = false;
auto rngC = [&](){ return random_value<uint8_t>(gen); };
auto rngD = [&](){ return random_value<double>(gen); };
const bool randomize = false;
////########################################
//auto vectorDoubleTest = [&](size_t s, bool randomize)
//{
// std::ostringstream name;
// name << "Vector(double) size " << s;
//########################################
auto vectorDoubleTest = [&](size_t s, bool randomize)
{
std::ostringstream name;
name << "Vector(double) size " << s;
// std::vector<double> data(s);
// if(randomize)
// for( auto & d : data )
// d = rngD();
std::vector<double> data(s);
if(randomize)
for( auto & d : data )
d = rngD();
// test<binary>( name.str(), data );
//};
test<binary>( name.str(), data );
};
//vectorDoubleTest(1, randomize); // 8B
//vectorDoubleTest(16, randomize); // 128B
//vectorDoubleTest(1024, randomize); // 8KB
//vectorDoubleTest(1024*1024, randomize); // 8MB
vectorDoubleTest(1, randomize); // 8B
vectorDoubleTest(16, randomize); // 128B
vectorDoubleTest(1024, randomize); // 8KB
vectorDoubleTest(1024*1024, randomize); // 8MB
////########################################
//auto vectorCharTest = [&](size_t s, bool randomize)
//{
// std::ostringstream name;
// name << "Vector(uint8_t) size " << s;
//########################################
auto vectorCharTest = [&](size_t s, bool randomize)
{
std::ostringstream name;
name << "Vector(uint8_t) size " << s;
// std::vector<uint8_t> data(s);
// if(randomize)
// for( auto & d : data )
// d = rngC();
std::vector<uint8_t> data(s);
if(randomize)
for( auto & d : data )
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)
//{
// std::ostringstream name;
// name << "Vector(PoDStruct) size " << s;
//########################################
auto vectorPoDStructTest = [&](size_t s)
{
std::ostringstream name;
name << "Vector(PoDStruct) size " << s;
// std::vector<PoDStruct> data(s);
// test<binary>( name.str(), data );
//};
std::vector<PoDStruct> data(s);
test<binary>( name.str(), data );
};
//vectorPoDStructTest(1);
//vectorPoDStructTest(64);
//vectorPoDStructTest(1024);
//vectorPoDStructTest(1024*1024);
//vectorPoDStructTest(1024*1024*4);
vectorPoDStructTest(1);
vectorPoDStructTest(64);
vectorPoDStructTest(1024);
vectorPoDStructTest(1024*1024);
vectorPoDStructTest(1024*1024*2);
////########################################
//auto vectorPoDChildTest = [&](size_t s)
//{
// std::ostringstream name;
// name << "Vector(PoDChild) size " << s;
//########################################
auto vectorPoDChildTest = [&](size_t s)
{
std::ostringstream name;
name << "Vector(PoDChild) size " << s;
// std::vector<PoDChild> data(s);
// test<binary>( name.str(), data );
//};
//
//vectorPoDChildTest(1024*64);
std::vector<PoDChild> data(s);
test<binary>( name.str(), data );
};
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)
{
std::ostringstream name;
@@ -382,6 +405,7 @@ int main()
vectorStringTest(1024*64);
vectorStringTest(1024*128);
//########################################
auto mapPoDStructTest = [&](size_t s)
{
std::ostringstream name;
@@ -389,13 +413,10 @@ int main()
std::map<std::string, PoDStruct> m;
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);
};
mapPoDStructTest(1024);
mapPoDStructTest(1024*64);