mirror of
https://github.com/USCiLab/cereal.git
synced 2025-10-18 01:45:52 +02:00
fixed version for performance
This commit is contained in:
141
performance.cpp
141
performance.cpp
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user