void Performance_cmp() { time_call("kapok all", [] { Serializer sr; DeSerializer dr; Person tp = { 18, "bb", "aa" }; Person p; for (size_t i = 0; i < 200000; i++) { sr.Serialize(tp, "tuple"); dr.Parse(sr.GetString()); dr.Deserialize(p, "tuple"); } }); time_call("kapok all2", [] { for (size_t i = 0; i < 200000; i++) { Person tp = { 18, "bb", "aa" }; Serializer sr; DeSerializer dr; sr.Serialize(tp, "tuple"); dr.Parse(sr.GetString()); Person p; dr.Deserialize(p, "tuple"); } }); time_call("msgpack all", [] { Person src = { 18, "bb", "aa" }; Person dst; msgpack::unpacked result; for (size_t i = 0; i < 200000; i++) { msgpack::sbuffer buffer; msgpack::pack(buffer, src); msgpack::unpack(result, buffer.data(), buffer.size()); result.get().convert(&dst); } }); time_call("msgpack all2", [] { for (size_t i = 0; i < 200000; i++) { Person src = { 18, "bb", "aa" }; std::stringstream buffer; msgpack::pack(buffer, src); buffer.seekg(0); std::string str(buffer.str()); msgpack::unpacked result; msgpack::unpack(result, str.data(), str.size()); msgpack::object deserialized = result.get(); Person dst; deserialized.convert(&dst); } }); }
void Performance_msgpack() { Person src = { 18, "bb", "aa" }; Person dst; time_call("msgpack all", [&] { for (size_t i = 0; i < 100000; i++) { std::stringstream buffer; msgpack::pack(buffer, src); buffer.seekg(0); std::string str(buffer.str()); msgpack::unpacked result; msgpack::unpack(result, str.data(), str.size()); msgpack::object deserialized = result.get(); deserialized.convert(&dst); } }); }
void Performance_kapok() { time_call("kapok all", [] { Serializer sr; DeSerializer dr; Person tp = { 18, "bb", "aa" }; for (size_t i = 0; i < 100000; i++) { sr.Serialize(tp, "tuple"); dr.Parse(sr.GetString()); Person p; dr.Deserialize(p, "tuple"); } }); time_call("kapok all2", [] { Person tp = { 18, "bb", "aa" }; for (size_t i = 0; i < 100000; i++) { Serializer sr; DeSerializer dr; sr.Serialize(tp, "tuple"); dr.Parse(sr.GetString()); Person p; dr.Deserialize(p, "tuple"); } }); time_call("kapok Serializer", [] { Serializer sr; Person tp = { 18, "bb", "aa" }; for (size_t i = 0; i < 100000; i++) { sr.Serialize(tp, "tuple"); } }); time_call("kapok Serializer2", [] { Person tp = { 18, "bb", "aa" }; for (size_t i = 0; i < 100000; i++) { Serializer sr; sr.Serialize(tp, "tuple"); } }); Serializer sr; Person tp = { 18, "bb", "aa" }; sr.Serialize(tp, "tuple"); time_call("kapok DeSerializer", [&] { DeSerializer dr; for (size_t i = 0; i < 100000; i++) { dr.Parse(sr.GetString()); Person p; dr.Deserialize(p, "tuple"); } }); time_call("kapok DeSerializer", [&] { for (size_t i = 0; i < 100000; i++) { DeSerializer dr; dr.Parse(sr.GetString()); Person p; dr.Deserialize(p, "tuple"); } }); }
int _tmain(int argc, _TCHAR* argv[]) { CoInitializeEx(nullptr, COINIT_MULTITHREADED); // Make a big bitmap. std::vector<BYTE> pixels(300000000); // Initialize it with the pattern 0,1,2,0,1,2... ColorGen colorGen; std::generate(pixels.begin(), pixels.end(), colorGen); // Total times for each implementation. long long elapsed_While = 0; long long elapsed_Serial = 0; long long elapsed_Task = 0; long long elapsed_ParallelInvoke = 0; long long elapsed_ParallelReduce = 0; long long elapsed_ParallelInvokeReduce = 0; long long elapsed_StdThread = 0; long long elapsed_StdThreadRecursive = 0; long long elapsed_StdAsync = 0; long long elapsed_ParallelAccumulate = 0; const size_t iterations = 10; for (size_t i = 0; i < iterations; ++i) { DWORD averageColor; long long elapsed; elapsed = time_call( [&] { averageColor = AverageColor_While(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_While(): " << elapsed << L" ms" << std::endl; elapsed_While += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_Serial(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_Serial(): " << elapsed << L" ms" << std::endl; elapsed_Serial += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_Task(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_Task(): " << elapsed << L" ms" << std::endl; elapsed_Task += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_ParallelInvoke(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_ParallelInvoke(): " << elapsed << L" ms" << std::endl; elapsed_ParallelInvoke += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_ParallelReduce(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_ParallelReduce(): " << elapsed << L" ms" << std::endl; elapsed_ParallelReduce += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_ParallelInvokeReduce(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_ParallelInvokeReduce(): " << elapsed << L" ms" << std::endl; elapsed_ParallelInvokeReduce += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_StdThread(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_StdThread(): " << elapsed << L" ms" << std::endl; elapsed_StdThread += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_StdThreadRecursive(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_StdThreadRecursive(): " << elapsed << L" ms" << std::endl; elapsed_StdThreadRecursive += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_StdAsync(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_StdAsync(): " << elapsed << L" ms" << std::endl; elapsed_StdAsync += elapsed; elapsed = time_call( [&] { averageColor = AverageColor_ParallelAccumulate(pixels.cbegin(), pixels.cend()); }); std::wcout << averageColor << L" Elapsed time AverageColor_ParallelAccumulate(): " << elapsed << L" ms" << std::endl; elapsed_ParallelAccumulate += elapsed; } std::wcout << L"Average AverageColor_While(): " << elapsed_While / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_Serial(): " << elapsed_Serial / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_Task(): " << elapsed_Task / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_ParallelInvoke(): " << elapsed_ParallelInvoke / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_ParallelReduce(): " << elapsed_ParallelReduce / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_ParallelInvokeReduce(): " << elapsed_ParallelInvokeReduce / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_StdThread(): " << elapsed_StdThread / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_StdThreadRecursive(): " << elapsed_StdThreadRecursive / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_StdAsync(): " << elapsed_StdAsync / iterations << L" ms" << std::endl; std::wcout << L"Average AverageColor_ParallelAccumulate(): " << elapsed_ParallelAccumulate / iterations << L" ms" << std::endl; CoUninitialize(); return 0; }