1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 | // // compare linear insert with different POD sizes. std::list vs std::vector // #include <list> #include <vector> #include <deque> #include <iostream> #include <iomanip> #include <random> #include <functional> #include <iostream> #include <chrono> #include <string> #include <numeric> #include <algorithm> #include <cassert> namespace g2 { typedef std::chrono::high_resolution_clock clock; typedef std::chrono::microseconds microseconds; typedef std::chrono::milliseconds milliseconds; clock::time_point now(){return clock::now();} microseconds intervalUs(const clock::time_point& t1, const clock::time_point& t0) {return std::chrono::duration_cast<microseconds>(t1 - t0);} milliseconds intervalMs(const clock::time_point& t1,const clock::time_point& t0) {return std::chrono::duration_cast<milliseconds>(t1 - t0);} class StopWatch { clock::time_point start_; public: StopWatch() : start_(clock::now()){} clock::time_point restart() { start_ = clock::now(); return start_;} microseconds elapsedUs() { return intervalUs(now(), start_);} milliseconds elapsedMs() {return intervalMs(now(), start_);} }; } // g2 typedef unsigned int Number; typedef long long int TimeValue; const std::string rows_explained = "elements list_time vector_time deque_time "; // Silly POD to test with variadic POD size template<Number Size> struct POD { Number a[Size]; bool operator>=(const POD& b) const { return (this->a[0] >= b.a[0]); } }; // Random integer function from http://www2.research.att.com/~bs/C++0xFAQ.html#std-random int random_int(int low, int high) { using namespace std; static default_random_engine engine {}; typedef uniform_int_distribution<int> Distribution; static Distribution distribution {}; return distribution(engine, Distribution::param_type{low, high}); } // Use a template approach to use functor, function pointer or lambda to insert an // element in the input container and return the "time result". // Search is LINEAR. Elements are insert in SORTED order template<typename ValueType, typename Container> void linearInsertion(const std::vector<ValueType>& numbers, Container& container) { std::for_each(numbers.begin(), numbers.end(), [&](const ValueType& n) { auto itr = container.begin(); for (; itr!= container.end(); ++itr) { if ((*itr) >= n) { break; } } container.insert(itr, n); }); } // Measure time in microseconds (us) for linear insert in a std container template<typename Container, typename ValueType> TimeValue linearInsertPerformance(const std::vector<ValueType>& randoms, Container& container) { g2::StopWatch watch; linearInsertion<ValueType, Container>(std::cref(randoms), container); auto time = watch.elapsedUs().count(); return time; } template<Number SizeOfPod> void listVsVectorLinearPerformance(const size_t nbr_of_randoms) { // Generate n random values and push to storage typedef POD<SizeOfPod> POD_value; std::vector<POD_value> values(nbr_of_randoms); const auto lower_limit = 0; const auto upper_limit = nbr_of_randoms -1; std::for_each(values.begin(), values.end(), [&](POD_value& n) { n.a[0] = random_int(lower_limit, upper_limit);}); TimeValue list_time; TimeValue vector_time; TimeValue deque_time; std::cout << nbr_of_randoms << ",\t" << std::flush; { // force local scope - to clear up the containers at exit std::list<POD_value> list; list_time = linearInsertPerformance<std::list<POD_value>, POD_value>(values, list); } { std::vector<POD_value> vector; vector_time = linearInsertPerformance<std::vector<POD_value>, POD_value>(values, vector); } { std::deque<POD_value> deque; deque_time = linearInsertPerformance<std::deque<POD_value>, POD_value>(values, deque); } std::cout << "\t" << list_time << ",\t" << vector_time << ",\t" << deque_time; std::cout << ",\tsizeof(POD): " << sizeof(POD_value) << " bytes" << std::endl << std::flush; } template<Number PodSizeIn4ByteIncrements> void measure() { g2::StopWatch watch; std::cout << "Measuring In Microseconds (us)" << std::endl; std::cout << rows_explained << std::endl; // small increments for measuring up to 4000 listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(100); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(200); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(400); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(800); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(1000); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(2000); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(3000); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(4000); listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(5000); for(auto cnt = 5000; cnt <= 11000; cnt+=2000) { listVsVectorLinearPerformance<PodSizeIn4ByteIncrements>(cnt); } auto total_time_ms = watch.elapsedMs().count(); std::cout << "[" << rows_explained << "]" << std::endl; typedef POD<PodSizeIn4ByteIncrements> POD_value; std::cout << "Test finished for " << sizeof(POD_value) << " bytes POD" << std::endl; std::cout << "The POD sized test took " << total_time_ms << " milliseconds (or " << total_time_ms/1000 << " seconds)\n\n" << std::endl; } int main(int argc, char** argv) { g2::StopWatch watch; measure<1>(); // measure 4 bytes measure<2>(); // measure 8 bytes measure<4>(); // measure 16 bytes measure<8>(); // 32 bytes measure<16>(); // 64 bytes measure<32>(); // 128 bytes*/ measure<64>(); // 256 bytes auto total_time_s = watch.elapsedMs().count()/1000; std::cout << "\n\n**********************************************\n" << std::endl; std::cout << "Exiting test: the whole measuring took " << total_time_s << " seconds"; std::cout << " (or " << total_time_s/(60) << " minutes)" << std::endl; return 0; } |
Ly8KLy8gY29tcGFyZSBsaW5lYXIgaW5zZXJ0IHdpdGggZGlmZmVyZW50IFBPRCBzaXplcy4gc3RkOjpsaXN0IHZzIHN0ZDo6dmVjdG9yCi8vCgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+CgoKbmFtZXNwYWNlIGcyCnsKICB0eXBlZGVmIHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2sgY2xvY2s7CiAgdHlwZWRlZiBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIG1pY3Jvc2Vjb25kczsKICB0eXBlZGVmIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgbWlsbGlzZWNvbmRzOwoKICBjbG9jazo6dGltZV9wb2ludCBub3coKXtyZXR1cm4gY2xvY2s6Om5vdygpO30KCiAgbWljcm9zZWNvbmRzIGludGVydmFsVXMoY29uc3QgY2xvY2s6OnRpbWVfcG9pbnQmIHQxLCBjb25zdCBjbG9jazo6dGltZV9wb2ludCYgdDApCiAge3JldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxtaWNyb3NlY29uZHM+KHQxIC0gdDApO30KCiAgbWlsbGlzZWNvbmRzIGludGVydmFsTXMoY29uc3QgY2xvY2s6OnRpbWVfcG9pbnQmIHQxLGNvbnN0IGNsb2NrOjp0aW1lX3BvaW50JiB0MCkKICB7cmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PG1pbGxpc2Vjb25kcz4odDEgLSB0MCk7fQoKCiAgY2xhc3MgU3RvcFdhdGNoCiAgewogICAgY2xvY2s6OnRpbWVfcG9pbnQgc3RhcnRfOwogIHB1YmxpYzoKICAgIFN0b3BXYXRjaCgpIDogc3RhcnRfKGNsb2NrOjpub3coKSl7fQogICAgY2xvY2s6OnRpbWVfcG9pbnQgcmVzdGFydCgpICAgICAgICAgeyBzdGFydF8gPSBjbG9jazo6bm93KCk7IHJldHVybiBzdGFydF87fQogICAgbWljcm9zZWNvbmRzIGVsYXBzZWRVcygpICAgICAgICAgICAgeyByZXR1cm4gaW50ZXJ2YWxVcyhub3coKSwgc3RhcnRfKTt9CiAgICBtaWxsaXNlY29uZHMgZWxhcHNlZE1zKCkgICAgICAgICAgICB7cmV0dXJuIGludGVydmFsTXMobm93KCksIHN0YXJ0Xyk7fQogIH07Cn0gLy8gZzIKCnR5cGVkZWYgdW5zaWduZWQgaW50ICBOdW1iZXI7CnR5cGVkZWYgbG9uZyBsb25nIGludCAgICAgICAgICAgIFRpbWVWYWx1ZTsKY29uc3Qgc3RkOjpzdHJpbmcgcm93c19leHBsYWluZWQgPSAiZWxlbWVudHMgICAgICAgICBsaXN0X3RpbWUgICB2ZWN0b3JfdGltZSAgIGRlcXVlX3RpbWUgIjsKCgovLyBTaWxseSBQT0QgdG8gdGVzdCB3aXRoIHZhcmlhZGljIFBPRCBzaXplCnRlbXBsYXRlPE51bWJlciBTaXplPgpzdHJ1Y3QgUE9ECnsKICAgTnVtYmVyIGFbU2l6ZV07CgogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBQT0QmIGIpIGNvbnN0CiAgewogICAgcmV0dXJuICh0aGlzLT5hWzBdID49IGIuYVswXSk7CiAgfQp9OwoKCi8vIFJhbmRvbSBpbnRlZ2VyIGZ1bmN0aW9uIGZyb20gaHR0cDovL3d3dzIucmVzZWFyY2guYXR0LmNvbS9+YnMvQysrMHhGQVEuaHRtbCNzdGQtcmFuZG9tCmludCByYW5kb21faW50KGludCBsb3csIGludCBoaWdoKQp7CiAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICBzdGF0aWMgZGVmYXVsdF9yYW5kb21fZW5naW5lIGVuZ2luZSB7fTsKICB0eXBlZGVmIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxpbnQ+IERpc3RyaWJ1dGlvbjsKICBzdGF0aWMgRGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbiB7fTsKICByZXR1cm4gZGlzdHJpYnV0aW9uKGVuZ2luZSwgRGlzdHJpYnV0aW9uOjpwYXJhbV90eXBle2xvdywgaGlnaH0pOwp9CgoKCi8vIFVzZSBhIHRlbXBsYXRlIGFwcHJvYWNoIHRvIHVzZSBmdW5jdG9yLCBmdW5jdGlvbiBwb2ludGVyIG9yIGxhbWJkYSB0byBpbnNlcnQgYW4KLy8gZWxlbWVudCBpbiB0aGUgaW5wdXQgY29udGFpbmVyIGFuZCByZXR1cm4gdGhlICJ0aW1lIHJlc3VsdCIuCi8vIFNlYXJjaCBpcyBMSU5FQVIuIEVsZW1lbnRzIGFyZSBpbnNlcnQgaW4gU09SVEVEIG9yZGVyCnRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQ29udGFpbmVyPgp2b2lkIGxpbmVhckluc2VydGlvbihjb25zdCBzdGQ6OnZlY3RvcjxWYWx1ZVR5cGU+JiBudW1iZXJzLCBDb250YWluZXImIGNvbnRhaW5lcikKewogICAgc3RkOjpmb3JfZWFjaChudW1iZXJzLmJlZ2luKCksIG51bWJlcnMuZW5kKCksCiAgICAgICAgICAgICAgICAgIFsmXShjb25zdCBWYWx1ZVR5cGUmIG4pCiAgICB7CiAgICAgICAgYXV0byBpdHIgPSBjb250YWluZXIuYmVnaW4oKTsKICAgICAgICBmb3IgKDsgaXRyIT0gY29udGFpbmVyLmVuZCgpOyArK2l0cikKICAgICAgICB7CiAgICAgICAgICAgIGlmICgoKml0cikgPj0gbikgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGFpbmVyLmluc2VydChpdHIsIG4pOwogICAgfSk7Cn0KCi8vIE1lYXN1cmUgdGltZSBpbiBtaWNyb3NlY29uZHMgKHVzKSBmb3IgbGluZWFyIGluc2VydCBpbiBhIHN0ZCBjb250YWluZXIKdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyLCB0eXBlbmFtZSBWYWx1ZVR5cGU+ClRpbWVWYWx1ZSBsaW5lYXJJbnNlcnRQZXJmb3JtYW5jZShjb25zdCBzdGQ6OnZlY3RvcjxWYWx1ZVR5cGU+JiByYW5kb21zLCBDb250YWluZXImIGNvbnRhaW5lcikKewogICAgZzI6OlN0b3BXYXRjaCB3YXRjaDsKICAgIGxpbmVhckluc2VydGlvbjxWYWx1ZVR5cGUsIENvbnRhaW5lcj4oc3RkOjpjcmVmKHJhbmRvbXMpLCBjb250YWluZXIpOwogICAgYXV0byB0aW1lID0gd2F0Y2guZWxhcHNlZFVzKCkuY291bnQoKTsKICAgIHJldHVybiB0aW1lOwp9Cgp0ZW1wbGF0ZTxOdW1iZXIgU2l6ZU9mUG9kPgp2b2lkIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlKGNvbnN0IHNpemVfdCBuYnJfb2ZfcmFuZG9tcykKewogIC8vIEdlbmVyYXRlIG4gcmFuZG9tIHZhbHVlcyBhbmQgcHVzaCB0byBzdG9yYWdlCiAgdHlwZWRlZiBQT0Q8U2l6ZU9mUG9kPiBQT0RfdmFsdWU7CiAgc3RkOjp2ZWN0b3I8UE9EX3ZhbHVlPiB2YWx1ZXMobmJyX29mX3JhbmRvbXMpOwogIGNvbnN0IGF1dG8gbG93ZXJfbGltaXQgPSAwOwogIGNvbnN0IGF1dG8gdXBwZXJfbGltaXQgPSBuYnJfb2ZfcmFuZG9tcyAtMTsKICBzdGQ6OmZvcl9lYWNoKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCksIFsmXShQT0RfdmFsdWUmIG4pIHsgbi5hWzBdID0gcmFuZG9tX2ludChsb3dlcl9saW1pdCwgdXBwZXJfbGltaXQpO30pOwoKICBUaW1lVmFsdWUgbGlzdF90aW1lOwogIFRpbWVWYWx1ZSB2ZWN0b3JfdGltZTsKICBUaW1lVmFsdWUgZGVxdWVfdGltZTsKICBzdGQ6OmNvdXQgPDwgbmJyX29mX3JhbmRvbXMgPDwgIixcdCIgPDwgc3RkOjpmbHVzaDsKICB7IC8vIGZvcmNlIGxvY2FsIHNjb3BlIC0gdG8gY2xlYXIgdXAgdGhlIGNvbnRhaW5lcnMgYXQgZXhpdAogICAgc3RkOjpsaXN0PFBPRF92YWx1ZT4gICAgICBsaXN0OwogICAgbGlzdF90aW1lID0gbGluZWFySW5zZXJ0UGVyZm9ybWFuY2U8c3RkOjpsaXN0PFBPRF92YWx1ZT4sIFBPRF92YWx1ZT4odmFsdWVzLCBsaXN0KTsKICB9CiAgewogICAgc3RkOjp2ZWN0b3I8UE9EX3ZhbHVlPiAgICB2ZWN0b3I7CiAgICB2ZWN0b3JfdGltZSA9IGxpbmVhckluc2VydFBlcmZvcm1hbmNlPHN0ZDo6dmVjdG9yPFBPRF92YWx1ZT4sIFBPRF92YWx1ZT4odmFsdWVzLCB2ZWN0b3IpOwogIH0KCiAgewogICAgc3RkOjpkZXF1ZTxQT0RfdmFsdWU+ICAgIGRlcXVlOwogICAgZGVxdWVfdGltZSA9IGxpbmVhckluc2VydFBlcmZvcm1hbmNlPHN0ZDo6ZGVxdWU8UE9EX3ZhbHVlPiwgUE9EX3ZhbHVlPih2YWx1ZXMsIGRlcXVlKTsKICB9CgoKICBzdGQ6OmNvdXQgPDwgIlx0IiA8PCBsaXN0X3RpbWUgPDwgIixcdCIgPDwgdmVjdG9yX3RpbWUgPDwgIixcdCIgPDwgZGVxdWVfdGltZTsKICBzdGQ6OmNvdXQgPDwgIixcdHNpemVvZihQT0QpOiAiIDw8IHNpemVvZihQT0RfdmFsdWUpIDw8ICIgYnl0ZXMiIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmZsdXNoOwoKfQoKICAgdGVtcGxhdGU8TnVtYmVyIFBvZFNpemVJbjRCeXRlSW5jcmVtZW50cz4KICAgdm9pZCBtZWFzdXJlKCkKICAgewogICAgIGcyOjpTdG9wV2F0Y2ggd2F0Y2g7CiAgICAgc3RkOjpjb3V0IDw8ICJNZWFzdXJpbmcgSW4gTWljcm9zZWNvbmRzICh1cykiIDw8IHN0ZDo6ZW5kbDsKICAgICBzdGQ6OmNvdXQgPDwgcm93c19leHBsYWluZWQgPDwgc3RkOjplbmRsOwoKICAgICAvLyBzbWFsbCBpbmNyZW1lbnRzIGZvciBtZWFzdXJpbmcgdXAgdG8gNDAwMAogICAgIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlPFBvZFNpemVJbjRCeXRlSW5jcmVtZW50cz4oMTAwKTsKICAgICBsaXN0VnNWZWN0b3JMaW5lYXJQZXJmb3JtYW5jZTxQb2RTaXplSW40Qnl0ZUluY3JlbWVudHM+KDIwMCk7CiAgICAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2U8UG9kU2l6ZUluNEJ5dGVJbmNyZW1lbnRzPig0MDApOwogICAgIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlPFBvZFNpemVJbjRCeXRlSW5jcmVtZW50cz4oODAwKTsKICAgICBsaXN0VnNWZWN0b3JMaW5lYXJQZXJmb3JtYW5jZTxQb2RTaXplSW40Qnl0ZUluY3JlbWVudHM+KDEwMDApOwogICAgIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlPFBvZFNpemVJbjRCeXRlSW5jcmVtZW50cz4oMjAwMCk7CiAgICAgbGlzdFZzVmVjdG9yTGluZWFyUGVyZm9ybWFuY2U8UG9kU2l6ZUluNEJ5dGVJbmNyZW1lbnRzPigzMDAwKTsKICAgICBsaXN0VnNWZWN0b3JMaW5lYXJQZXJmb3JtYW5jZTxQb2RTaXplSW40Qnl0ZUluY3JlbWVudHM+KDQwMDApOwogICAgIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlPFBvZFNpemVJbjRCeXRlSW5jcmVtZW50cz4oNTAwMCk7CgogICAgIGZvcihhdXRvIGNudCA9IDUwMDA7IGNudCA8PSAxMTAwMDsgY250Kz0yMDAwKQogICAgIHsKICAgICAgIGxpc3RWc1ZlY3RvckxpbmVhclBlcmZvcm1hbmNlPFBvZFNpemVJbjRCeXRlSW5jcmVtZW50cz4oY250KTsKICAgICB9CiAgICAgYXV0byB0b3RhbF90aW1lX21zID0gd2F0Y2guZWxhcHNlZE1zKCkuY291bnQoKTsKICAgICBzdGQ6OmNvdXQgPDwgIlsiIDw8IHJvd3NfZXhwbGFpbmVkIDw8ICJdIiA8PCBzdGQ6OmVuZGw7CgogICAgIHR5cGVkZWYgUE9EPFBvZFNpemVJbjRCeXRlSW5jcmVtZW50cz4gUE9EX3ZhbHVlOwogICAgIHN0ZDo6Y291dCA8PCAiVGVzdCBmaW5pc2hlZCBmb3IgIiA8PCBzaXplb2YoUE9EX3ZhbHVlKSA8PCAiIGJ5dGVzIFBPRCIgPDwgc3RkOjplbmRsOwogICAgIHN0ZDo6Y291dCA8PCAiVGhlIFBPRCBzaXplZCB0ZXN0IHRvb2sgIiA8PCB0b3RhbF90aW1lX21zIDw8ICIgbWlsbGlzZWNvbmRzIChvciAiIDw8IHRvdGFsX3RpbWVfbXMvMTAwMCA8PCAiIHNlY29uZHMpXG5cbiIgPDwgc3RkOjplbmRsOwogICB9CgoKCiAgIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgewogICAgIGcyOjpTdG9wV2F0Y2ggd2F0Y2g7CiAgICAgbWVhc3VyZTwxPigpOyAvLyBtZWFzdXJlIDQgYnl0ZXMKICAgICBtZWFzdXJlPDI+KCk7IC8vIG1lYXN1cmUgOCBieXRlcwogICAgIG1lYXN1cmU8ND4oKTsgLy8gbWVhc3VyZSAxNiBieXRlcwogICAgIG1lYXN1cmU8OD4oKTsgLy8gMzIgYnl0ZXMKICAgICBtZWFzdXJlPDE2PigpOyAvLyA2NCBieXRlcwogICAgIG1lYXN1cmU8MzI+KCk7IC8vIDEyOCBieXRlcyovCiAgICAgbWVhc3VyZTw2ND4oKTsgLy8gMjU2IGJ5dGVzCiAgICAgYXV0byB0b3RhbF90aW1lX3MgPSB3YXRjaC5lbGFwc2VkTXMoKS5jb3VudCgpLzEwMDA7CiAgICAgc3RkOjpjb3V0IDw8ICJcblxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIiA8PCBzdGQ6OmVuZGw7CiAgICAgc3RkOjpjb3V0IDw8ICJFeGl0aW5nIHRlc3Q6IHRoZSB3aG9sZSBtZWFzdXJpbmcgdG9vayAiIDw8IHRvdGFsX3RpbWVfcyA8PCAiIHNlY29uZHMiOwogICAgIHN0ZDo6Y291dCA8PCAiIChvciAiIDw8IHRvdGFsX3RpbWVfcy8oNjApIDw8ICIgbWludXRlcykiIDw8IHN0ZDo6ZW5kbDsKCiAgICAgcmV0dXJuIDA7CiAgIH0KCgo=
-
upload with new input
-
result: Time limit exceeded time: 15s memory: 5312 kB signal: 24 (SIGXCPU)
Measuring In Microseconds (us) elements list_time vector_time deque_time 100, 18, 18, 21, sizeof(POD): 4 bytes 200, 30, 31, 46, sizeof(POD): 4 bytes 400, 83, 83, 136, sizeof(POD): 4 bytes 800, 290, 275, 449, sizeof(POD): 4 bytes 1000, 403, 393, 685, sizeof(POD): 4 bytes 2000, 1497, 1470, 2573, sizeof(POD): 4 bytes 3000, 3235, 3179, 5536, sizeof(POD): 4 bytes 4000, 5637, 5542, 9633, sizeof(POD): 4 bytes 5000, 10446, 8625, 15253, sizeof(POD): 4 bytes 5000, 10594, 8662, 15306, sizeof(POD): 4 bytes 7000, 33073, 16752, 29667, sizeof(POD): 4 bytes 9000, 71371, 27394, 48053, sizeof(POD): 4 bytes 11000, 127991, 40922, 72330, sizeof(POD): 4 bytes [elements list_time vector_time deque_time ] Test finished for 4 bytes POD The POD sized test took 582 milliseconds (or 0 seconds) Measuring In Microseconds (us) elements list_time vector_time deque_time 100, 16, 15, 22, sizeof(POD): 8 bytes 200, 29, 37, 54, sizeof(POD): 8 bytes 400, 80, 115, 167, sizeof(POD): 8 bytes 800, 262, 419, 600, sizeof(POD): 8 bytes 1000, 413, 617, 935, sizeof(POD): 8 bytes 2000, 1512, 2355, 3611, sizeof(POD): 8 bytes 3000, 3548, 5511, 7926, sizeof(POD): 8 bytes 4000, 9322, 9041, 13632, sizeof(POD): 8 bytes 5000, 19051, 14150, 21541, sizeof(POD): 8 bytes 5000, 19035, 14174, 21401, sizeof(POD): 8 bytes 7000, 50541, 27541, 41525, sizeof(POD): 8 bytes 9000, 98414, 45873, 68926, sizeof(POD): 8 bytes 11000, 165153, 70999, 103739, sizeof(POD): 8 bytes [elements list_time vector_time deque_time ] Test finished for 8 bytes POD The POD sized test took 847 milliseconds (or 0 seconds) Measuring In Microseconds (us) elements list_time vector_time deque_time 100, 13, 19, 32, sizeof(POD): 16 bytes 200, 30, 48, 66, sizeof(POD): 16 bytes 400, 97, 137, 203, sizeof(POD): 16 bytes 800, 278, 484, 742, sizeof(POD): 16 bytes 1000, 405, 743, 1117, sizeof(POD): 16 bytes 2000, 1549, 2806, 4296, sizeof(POD): 16 bytes 3000, 5326, 6231, 9918, sizeof(POD): 16 bytes 4000, 13891, 11109, 18281, sizeof(POD): 16 bytes 5000, 27564, 17827, 30167, sizeof(POD): 16 bytes 5000, 28079, 18142, 29430, sizeof(POD): 16 bytes 7000, 69680, 39270, 61577, sizeof(POD): 16 bytes 9000, 133828, 70351, 109575, sizeof(POD): 16 bytes 11000, 217309, 112564, 167331, sizeof(POD): 16 bytes [elements list_time vector_time deque_time ] Test finished for 16 bytes POD The POD sized test took 1215 milliseconds (or 1 seconds) Measuring In Microseconds (us) elements list_time vector_time deque_time 100, 17, 25, 31, sizeof(POD): 32 bytes 200, 30, 65, 83, sizeof(POD): 32 bytes 400, 88, 207, 303, sizeof(POD): 32 bytes 800, 285, 760, 1084, sizeof(POD): 32 bytes 1000, 417, 1185, 1669, sizeof(POD): 32 bytes 2000, 2449, 4630, 6661, sizeof(POD): 32 bytes 3000, 8737, 12297, 16092, sizeof(POD): 32 bytes 4000, 19623, 26994, 29460, sizeof(POD): 32 bytes 5000, 34135, 44987, 47772, sizeof(POD): 32 bytes 5000, 35326, 53879, 49129, sizeof(POD): 32 bytes 7000, 80189, 101926, 100646, sizeof(POD): 32 bytes 9000, 148011, 172254, 170403, sizeof(POD): 32 bytes 11000, 238875, 265761, 254506, sizeof(POD): 32 bytes [elements list_time vector_time deque_time ] Test finished for 32 bytes POD The POD sized test took 1936 milliseconds (or 1 seconds) Measuring In Microseconds (us) elements list_time vector_time deque_time 100, 14, 33, 53, sizeof(POD): 64 bytes 200, 36, 96, 138, sizeof(POD): 64 bytes 400, 107, 361, 491, sizeof(POD): 64 bytes 800, 371, 1714, 1882, sizeof(POD): 64 bytes 1000, 652, 2903, 2882, sizeof(POD): 64 bytes 2000, 5208, 14625, 13156, sizeof(POD): 64 bytes 3000, 13885, 36723, 34668, sizeof(POD): 64 bytes 4000, 29540, 66297, 59874, sizeof(POD): 64 bytes 5000, 48984, 106224, 97407, sizeof(POD): 64 bytes 5000, 48851, 106039, 102512, sizeof(POD): 64 bytes 7000, 98475, 209986, 212567, sizeof(POD): 64 bytes 9000, 208395, 359029, 347251, sizeof(POD): 64 bytes 11000, 308337, 561461, 540677, sizeof(POD): 64 bytes [elements list_time vector_time deque_time ] Test finished for 64 bytes POD The POD sized test took 3651 milliseconds (or 3 seconds) Measuring In Microseconds (us) elements list_time vector_time deque_time 100, 20, 55, 67, sizeof(POD): 128 bytes 200, 34, 184, 243, sizeof(POD): 128 bytes 400, 99, 664, 825, sizeof(POD): 128 bytes 800, 344, 3223, 3373, sizeof(POD): 128 bytes 1000, 603, 5543, 5436, sizeof(POD): 128 bytes 2000, 5131, 26725, 22801, sizeof(POD): 128 bytes 3000, 15589, 62033, 54406, sizeof(POD): 128 bytes 4000, 29407, 114862, 105530, sizeof(POD): 128 bytes 5000, 54591, 186082, 167228, sizeof(POD): 128 bytes 5000, 49293, 188096, 168613, sizeof(POD): 128 bytes 7000, 116838, 388462, 334585, sizeof(POD): 128 bytes 9000, 196422, 664962, 582932, sizeof(POD): 128 bytes 11000, 329338, 1041045, 890064, sizeof(POD): 128 bytes [elements list_time vector_time deque_time ] Test finished for 128 bytes POD The POD sized test took 5829 milliseconds (or 5 seconds) Measuring In Microseconds (us) elements list_time vector_time deque_time 100, 22, 114, 111, sizeof(POD): 256 bytes 200, 48, 389, 437, sizeof(POD): 256 bytes 400, 166, 1703, 1636, sizeof(POD): 256 bytes 800, 666, 7938, 6714, sizeof(POD): 256 bytes 1000, 990, 12154, 11316, sizeof(POD): 256 bytes 2000, 6986, 52560, 51073, sizeof(POD): 256 bytes 3000, 17463, 130203, 118161, sizeof(POD): 256 bytes 4000, 35687, 239496, 208851, sizeof(POD): 256 bytes 5000,
TESTING: POD (growing) 15s list vs vector. linear search


