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); }
|
{ 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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user