mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 23:03:45 +01:00
clusterlin: replace benchmarks with SFL-hard ones (bench)
This also adds a per-cost variant of each.
This commit is contained in:
@@ -210,40 +210,48 @@ void BenchMergeLinearizationsWorstCase(DepGraphIndex ntx, benchmark::Bench& benc
|
||||
});
|
||||
}
|
||||
|
||||
template<size_t N>
|
||||
void BenchLinearizeOptimally(benchmark::Bench& bench, const std::array<uint8_t, N>& serialized)
|
||||
void BenchLinearizeOptimallyTotal(benchmark::Bench& bench, const std::string& name, const std::vector<std::vector<uint8_t>>& serializeds)
|
||||
{
|
||||
// Determine how many transactions the serialized cluster has.
|
||||
DepGraphIndex num_tx{0};
|
||||
{
|
||||
for (const auto& serialized : serializeds) {
|
||||
SpanReader reader{serialized};
|
||||
DepGraph<BitSet<128>> depgraph;
|
||||
DepGraph<BitSet<64>> depgraph;
|
||||
reader >> Using<DepGraphFormatter>(depgraph);
|
||||
num_tx = depgraph.TxCount();
|
||||
assert(num_tx < 128);
|
||||
}
|
||||
auto bench_name = strprintf("%s_%utx_%udep", name, depgraph.TxCount(), depgraph.CountDependencies());
|
||||
|
||||
SpanReader reader{serialized};
|
||||
auto runner_fn = [&]<typename SetType>() noexcept {
|
||||
DepGraph<SetType> depgraph;
|
||||
reader >> Using<DepGraphFormatter>(depgraph);
|
||||
// Benchmark the total time to optimal.
|
||||
uint64_t rng_seed = 0;
|
||||
bench.run([&] {
|
||||
bench.name(bench_name).run([&] {
|
||||
auto [_lin, optimal, _cost] = Linearize(depgraph, /*max_iterations=*/10000000, rng_seed++);
|
||||
assert(optimal);
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (num_tx <= 32) {
|
||||
runner_fn.template operator()<BitSet<32>>();
|
||||
} else if (num_tx <= 64) {
|
||||
runner_fn.template operator()<BitSet<64>>();
|
||||
} else if (num_tx <= 96) {
|
||||
runner_fn.template operator()<BitSet<96>>();
|
||||
} else if (num_tx <= 128) {
|
||||
runner_fn.template operator()<BitSet<128>>();
|
||||
} else {
|
||||
assert(false);
|
||||
void BenchLinearizeOptimallyPerCost(benchmark::Bench& bench, const std::string& name, const std::vector<std::vector<uint8_t>>& serializeds)
|
||||
{
|
||||
for (const auto& serialized : serializeds) {
|
||||
SpanReader reader{serialized};
|
||||
DepGraph<BitSet<64>> depgraph;
|
||||
reader >> Using<DepGraphFormatter>(depgraph);
|
||||
auto bench_name = strprintf("%s_%utx_%udep", name, depgraph.TxCount(), depgraph.CountDependencies());
|
||||
|
||||
// Determine the cost of 100 rng_seeds.
|
||||
uint64_t total_cost = 0;
|
||||
for (uint64_t iter = 0; iter < 100; ++iter) {
|
||||
auto [_lin, optimal, cost] = Linearize(depgraph, /*max_iterations=*/10000000, /*rng_seed=*/iter);
|
||||
total_cost += cost;
|
||||
}
|
||||
|
||||
// Benchmark the time per cost.
|
||||
bench.name(bench_name).unit("cost").batch(total_cost).run([&] {
|
||||
uint64_t recompute_cost = 0;
|
||||
for (uint64_t iter = 0; iter < 100; ++iter) {
|
||||
auto [_lin, optimal, cost] = Linearize(depgraph, /*max_iterations=*/10000000, /*rng_seed=*/iter);
|
||||
assert(optimal);
|
||||
recompute_cost += cost;
|
||||
}
|
||||
assert(total_cost == recompute_cost);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,71 +298,57 @@ static void MergeLinearizations64TxWorstCase(benchmark::Bench& bench) { BenchMer
|
||||
static void MergeLinearizations75TxWorstCase(benchmark::Bench& bench) { BenchMergeLinearizationsWorstCase<BitSet<75>>(75, bench); }
|
||||
static void MergeLinearizations99TxWorstCase(benchmark::Bench& bench) { BenchMergeLinearizationsWorstCase<BitSet<99>>(99, bench); }
|
||||
|
||||
// The following example clusters were constructed by replaying historical mempool activity, and
|
||||
// selecting for ones that take many iterations (after the introduction of some but not all
|
||||
// linearization algorithm optimizations).
|
||||
// Constructed from replayed historical mempool activity, selecting for clusters that are slow
|
||||
// to linearize from scratch, with increasing number of transactions (9 to 63).
|
||||
static const std::vector<std::vector<uint8_t>> CLUSTERS_HISTORICAL = {
|
||||
"8540e93a008331c66a018331c66a028331c66a038331c66a048331c66a058331c66a068f1b84a1060000000000000007995e888c04010000000000000000"_hex_v_u8,
|
||||
"8e4886a46000835c819a100000835d819c000100835f819c000200837581a7200300835f819c000400835c819a1005008360819c000600836e81a3400700835f819c0008009c728d813000000000000000000000854e88df0600008e48a9c5700100835f8bfd40000183608bfd40010100"_hex_v_u8,
|
||||
"836880bf4000834c80b6600000836880bf400100834c80b6600001836880bf400101834c80b6600002836880bf400102834c80b6600003836880bf400103834c80b6600004836880bf400104834c80b6600005836880bf400105836880bf400006834c80b6600106836880bf400106834c80b6600206836880bf400107834c80b6600207823c80bf400108834c80b660020800"_hex_v_u8,
|
||||
"81b0708db03800ef7a84a6700180c57b87c87802f24f83fc7e0381a3688ce20a04cb0d82a27205b40481887e068331965207d84384a07a0880850887b31609d57a83b62a09098865c82e0707c84083a736060009932d8098240a00058c1edf48070503f55a85fc560803058b6ddf660e0002e67d858d68090107921a81a1560d0302857cb32206148235986406149a5680e67c0b000106854cc12001118578e228001281cf6499b350120000000000108578e22801128578e228001300"_hex_v_u8,
|
||||
"80df2a87e05c00f62883d34801f23983c02c02808e0784ca280380c35b86d64c0480956584f1080580a91b85d20c06808c4b84c27c0780b473868c4408f54983cf7c0980aa5385d9380a80b00285f4140b80804f8487100c8099308582700d80b3138683640efe1183fa640fa734849e28000000000000000000000000000000000fc82788ce48010000000000000000000000000000000fa92b84be300200000000000000000000000000000000ab3b84e1460300000000000000000000000000000000833dc93c0102833dc93c02028331c14402038540e12603038431cc3405028335c50e030a8331c7760506930880af020307833dc07605068331be0205068335be3a05078d09fb76030d842dcb6e030d00"_hex_v_u8,
|
||||
"8368903600836890360183689036028368903603836890360483689036058368903606836890360783689036088368903609836890360a836890360b836890360c836890361b836890360e836890360f83689036228368903611836890361283689036138359900a13158359900a13158359900a13158359900a13158359900a13158359900a13158359900a13158359900a13158359900a13158359900a13158359900a13158359900a13158359900a12148359900a12148359900a11138359900a11138359900a11138359900a1113a42281a91012000000000000000000000000000000000000002600"_hex_v_u8,
|
||||
"83689220008734a05001836892200283689220038368922004854e99400583689220068368922007836892200406836892200306836892200207854e994009000983689220030c854e9940080107836892200309854e99400b0101836892200416854e9940070209854e994005060c854e9940020c0e854e9940030804854e9940030706891aa770070207854e9940040413854e994006020d854e99400311836892200310836892200217836892200113854e994003070d854e9940020410854e994002020d8734a05006010b854e9940050612854e994002128734a0500014854e9940050015836892200114854e994001090e854e99400507148734a050020b058734a0500210836892200222854e994004090e854e9940041200"_hex_v_u8,
|
||||
"db3284df6200e45386c550018235a906028235a906038236a906048235a906058600da0005058578d94c06058236a104070582429e10080582429b040905831d982e0a05854181e1040b058f1880f2240c058235a5040d058236a9060e05823581c3080f058235a90610058235a9061105857c80804012058235ab0613058235a90613058236a90614058236990215058474ca6e16058470ca6e17058a5480df0418058470ca6e19058316a43e1b04847c8088701b0586088086481d048236af061d058235a9061e058235a9061f058235b10620058236b10621058236b10622058236b1062305847080870224058546b34425058234b30626058235838f3227058242a504212a8241a9061b2d824181be76192d875282ad702b00168242ab061929845085af4c2d000f824181e448102b860480885c25168d0884c76e1b100000000100"_hex_v_u8,
|
||||
"8514fd1a00851480d02801903183803e028368e154038368e154048368e63c058368e63c068368e154078e4b82da4e08903181ec440983688187580a83688185240b83688185240c903181db100d8e4b8391180c0d8e4b84b4760c078361e566090b8361e5660b0a8363e1020d098363e1020f088363e1020c0c8e4b81be5614058e4b81dd6e0c0d835f8184200c0d835f8181700c0d835f8181700c0d8c6686a8100b24d63b93ea661205128e4b8391180d1d937d82d740071d8e4b81dd6e071c90318dce1604338e4b848d78042c8e4b82e234042c8d1e83f106052b8e4b81dd6e05258e4b85a9700333921785880c03328e4482e03c04308e4b8687380237920f85ab68020317178e4b86dd1a001c16d77ed4c56c020e0700000000068e4b8687380100318e4b868f1e00328e4b86ae3600328f2385f62a01181a836880fe100132845a81ab1e0033836881a93001338e438ffd30031c836881a9300135835f81a5400235835f81a5400137921790ba2c023697498dfd280800180019903189f81a003900"_hex_v_u8,
|
||||
"836280c06000836180c06001836280c06002836180c06003834280b1600303836180c0600403834280b1600403836180c0600503834280b1600503836280c0600603834280b1600603877e81fc20060c833a80b160060c836280c060070c877f81fc20070b834180b160070b877e81fc20070a836280c060070a834180b160080a880381fc200809836180c060081a834280b1600719836280c0600716836180c0600614834380b1600612836180c0600511834180b1600527834380b160041f834280b160041c836180c0600617836280c0600618834080b1600516877f81fc200531880281f960140414836280c060041e836280c060041f834280b160051f834580b160071e836280c060053b834280b1600422834880b1600423836180c0600622834280b1600343836180c0600443880281fc200f091d833e80b1600328834280b1600249836280c0600345877f81fc20140b23833b80b1600149877e81fc20020345877f81fc2011081f877e81fd400e0a12880281fb00110316877e81fc2003024a877f81fc20061b1c877f81fc200e0420877f81fc20040c1d877e81fc20021e20877f81fc20041d1f877e81fd40030e1c877f81fb00030a20877e81f9600c033200"_hex_v_u8
|
||||
};
|
||||
|
||||
/* 2023-05-05T23:12:21Z 71, 521780, 543141,*/
|
||||
static constexpr auto BENCH_EXAMPLE_00 = "801081a5360092239efc6201810982ab58029b6b98c86803800eed7804800ecb7e058f2f878778068030d43407853e81902a08962a81d176098010b6620a8010b2280b8010da3a0c9f069da9580d800db11e0e9d719ad37a0f967897ed5210990e99fc0e11812c81982012804685823e0f0a893982b6040a10804682c146110a6e80db5c120a8010819806130a8079858f0c140a8054829a120c12803483a1760c116f81843c0d11718189000e11800d81ac2c0f11800d81e50e10117181c77c1111822e87f2601012815983d17211127180f2121212811584a21e1312800e80d1781412813c83e81815126f80ef5016126f80ff6c16126f80f66017126e80fd541812800d81942a1912800e80dd781a12800d81f96c1b12805282e7581b127180fd721c1271a918230b805fc11a220d8118a15a2d036f80e5002011817684d8241e346f80e1181c37805082fc04260024800d81f8621734803382b354270b12805182ca2e162f800e80d52e0d32803dc360201b850e818c400b318c49808a5a290210805181d65823142a800d81a34e0850800e81fb3c0851886994fc0a280b00082c805482d208032e28805e83ba380059801081cd4a0159811884f770002e0015e17280e49024300a0000000000000031803dcb48014200"_hex_u8;
|
||||
/* 2023-12-06T09:30:01Z 81, 141675, 647053,*/
|
||||
static constexpr auto BENCH_EXAMPLE_01 = "b348f1fc4000f365818a9e2c01b44cf7ca0002b004f0b02003b33ef8ae3004b334f9e87005800d81c85e06b368fae26007b05ef2e14208be1a8093a50409b15cf5ee500a802c80a1420b802dea440c802ce50a0d802cdc320e802cd7220f802dd72210805380f74a118174f370126e96b32812127182c4701312817389d26414128035848c221512800e82bf3816126f81e4341712801082b228181280518af57418128040859a0019127182d0401a12803e858b641b127182c4421c126f82b3481d12811486b6301e12821d89e7281f126e8a8b421f127182d6642012806284c12021126e81d34822126e86a76222126e86d8102212805187b6542312800d82fc002412803d848e0e2512801082d27a26126e8589642612800e83a9602712800e83bd0028126e81ef1a29116e858d7228126f82db5e2912801083843c2a127181c93c2b126e85d0162b127181c5622c126e84f8262c12800f8392202d12800e82b66c2e126e81d0082f12803282d50430126e84f9003012805f84be6c3112846e88df0e2b12804080d44c340a8b31898808350a800ed760350b801083a1182b517182817e2a51800e82b6582951803583cb52420030806284cb6c204f7181d300204f82688ce0303e001d800e82bb200f488010808a182822a3289cd63041000a6fcd100a408a7caaa7024800002f803584e0741e27288f3386dd783b001000802683f27e004b8c44bcd0763f0000000000000000000100000e00"_hex_u8;
|
||||
/* 2023-04-04T00:26:50Z 90, 99930, 529375,*/
|
||||
static constexpr auto BENCH_EXAMPLE_02 = "815b80b61e00800da63001cd378da70e028010991a03800e9d3e0480109708058010991a068010973a07da738fa72408de7491831009b35b88f0080a9d4485de180b71974e0c71974e0d80108e500eb27988a75a0f719632108061a56c11801087761280108a1413807893441480538c1415a606828806168010893e1780548c40188e4b80bb2c196eab3e1718805ed60e18188051c97a19188010cf781a1871b11e1b1871c5281c1880508080581d186e80b13c1e188035cf421f18805fe0482018804caa661f198035a9001f156e80cb701d1871a2281e1871ad281f18817380a16020186f98642118805ee04821198010b6702219800ea12623196eb67024198035808b0025196fa65c26198054ba1c2719807680bf7c28198053cd782919803d80b80429198051db5a2a198040d3742b19976584bb1c28196efc1c281971b21a29198052bc762a1971a2502b196eb73c2c19976381ab0c2a18806290543409862081c3423b00336fbc70224d80109e7c1c52805ebd5c1942800eb57016468034ba423405158118da28350416927480f4743000159f6a81c9462e00188051ec5e380e00800e9e420775800d9e26007c906c82f754251d0025870480f12c14280023800d9e26027e9e1385ed08102900001a804fac7a018001719856028001800da87e0180039b1a868b60064102246e9f42018005800da87e028005850d81d600026d862381a2200e0008230015831480a5480342000524803eeb32006e873582a4700a0100351300"_hex_u8;
|
||||
/* 2023-05-08T15:51:59Z 87, 76869, 505222,*/
|
||||
static constexpr auto BENCH_EXAMPLE_03 = "c040b9e15a00b10eac842601805f85931802c104bae17403ae50aaa336049d76a9bf7005c55bbeab6606ae2aa9c72c07805e81992e08af7dab817a096e80a7e4520909803e92bd780a097185c76c0b096e98e7380b09850bb9953c0c09803389f6260d096f859d620e09803f88d3000f0971829c6e1009837690f6481109806285931811097181f56814076ea09b74120980408eb73213096f87853214096f86e2701509803f8c860016098a6fe6c3721709814f92a204180980628a8a441909803285df681a0980348498661b096e8290781c096e978e081c097187da1a1d097186c05c1e097185893c1f09805f8ad9002009800d84e74e21097183a67a22097182e23423097184b53a23096ea393062309840faddd46240980618eb732250980548bee6a2609807986883c2709718298402809815388b6582909805384ec742a097181b9142b096e97b5262b096e85e14e2c0980518abb5c2d09805489e75a2e09803187e3382f097180eb1c34046f87c34a2f098309a5c54430097186911831098054899c083209801083bc1033097081e02a3409805f848f0c35096e80d4343a057180c37040006f80a22438097180a0503f03816f8381444003803f80ef003f05800580a4283f066ef72845016efb91663e09923d808d8216470041803584837c46012f9247dc86684501268267a09610450222862184db68440712803585ea40440113835d97887805800b8723c7a40a4b00022f81529ae2143c0c1f80548b8f381b311980408e955c055e802589dc10037e801083b54602658010848130006700"_hex_u8;
|
||||
/* 2023-05-01T19:32:10Z 35, 55747, 504128,*/
|
||||
static constexpr auto BENCH_EXAMPLE_04 = "801af95c00801af72801801af95c02873e85f2180202873e85f2180202873e85f21802028018fb2802068018fb2803068018fb2804068018fb2805068018fb2806068018fb2807068018fb2808068018fb2809068018fb280a068018fb280a058018fb280b058018fb280c058018fb280d058018fb280e058018fb280f058018fb2810058018fb2811058018fb2812058018fb2813058018fb2814058018fb2815058018fb2815048018fb2816048018fb2817048018fb2818048018fb2819048018fb281a048018fb281b04810d80d9481f00000100"_hex_u8;
|
||||
/* 2023-02-27T17:06:38Z 60, 55680, 502749,*/
|
||||
static constexpr auto BENCH_EXAMPLE_05 = "b5108ab56600b26d89f85601b07383b01602b22683c96003b34a83d82e04b12f83b53a05b20e83c75a066e80840a06068040be0007066fb10608066fb2120906800eba320a06842b80b05a0a066eff420b067199300b068124c3140c0680618085180d066faa1c0e068010b4440f068051af541006800da1781106857881946812066eee1613068052b31014068324808d361506806180885c150671b03216066ef11017068052b63218066ef3521806803f80865419066e93441a068035a13e1b0680628085181c06806ec4481d068117e72c1e06719c721f068077c42420068159808d1821066eef0c21058010b90022056f9908230571993024058010b00a25058010b00a260580608087402705803fc10027068032b42828068051b6322906800db11e212a8324808d361933803ff400192f826381a7141a2f8032ac08152a800db54c044e8323808d3630010002018158d84000042d821cea12002807853580d462002d01891181d022002e00"_hex_u8;
|
||||
/* 2023-04-20T22:25:49Z 99, 49100, 578622,*/
|
||||
static constexpr auto BENCH_EXAMPLE_06 = "bf3c87c14c008010955a01b21d85e07002800d946c036e8e3404b77f86c26605b33c85f55e06bd06879852078010970a08bd4b87cf00098123a7720ab2158687680b8054d4440b0a8062fa4c0c0a71ac400d0a80628081540e0a8010a2580f0a8054b676100a8032b85c110a6e9a40120a6e809012130a817f80c31e140a8175808674150a719d46160a8172d86415098033c1481609800da4181709800ada2e1809803dc85219098034b4041a096ef5501b098052d67c1c098051d3281d09800ebc4a1e098175808c641f098061c55020098078c85021096e8081141f0b6faf1e200b8061da68210b8062f000220b800ebc20230b8035d058240b8053de32250b8050b610250b6fad32260b803dc276270b803d80a610280b6ef812290b8052b6322a0b800eb57e2b0b8052bd062c0b719e522d0b71a3762e0b8010bb1e2f0b80109a78310a80109962320a8051a60c330a6f9f3e320b6e808b24330b719e40340b8117cc50350b803d80971a360b8051b930370b6f9e0a380b719b10390b8052a6003a0b6e808c76390a7195603a0a6f935c3b0a8054a31a3c0a803ce30c3b0b803fa3003c0b800dbe2a3d0b8f3480a84244058005851a44069d1bf824400b83098f284507719c723d4f6f9c1c3449719c722f4f6eb23c304f8061c5502e528061da682b4e8118bb724e022a8054b35028476e941c1d51815be02c4f01148557808e3a4f070e8104af464e001180329d364e010d805f9f6a421b9c3387aa744c0d4d71ac400b800881748098444710338173809b780b80008054d444292c12821dc040550403078b4682b4664517003f00"_hex_u8;
|
||||
/* 2023-06-05T19:56:12Z 52, 44896, 540514,*/
|
||||
static constexpr auto BENCH_EXAMPLE_07 = "b317998a4000b40098d53e01b45b99814802b7289b940003b3699a9d1204b6619a807a05814682cb78050571d854060571d8540705800e808d7a0805803480c06a09056e8189280a056ffd060b05800d80ea7a0c05803c80b80c0c03803e80d86e0d036ed2280e03811581804a0f036fd34e1003805380eb6811036e81f60e12038010ec101204805f80e83a13048033809534140471e00a15048010f95816046e81fa301704805180a74c1705800d808f1018056fd55c1905800e8091481a056e80a76e1b05805f80e2741c0571809b021c05826382c8401d0571df201e05800e809d2c1f05850083e87c1f05811580af68200571f20a21056ff9042205803e80df1e23056e81956c24056e9f542604805180e83829000e800e8080621325803380b0402a020d6ef8100e2c8c4889a96a2c000f803580ce4c2c000b6e9f54062a803480c96406260500"_hex_u8;
|
||||
/* 2023-12-05T23:48:44Z 69, 44283, 586734,*/
|
||||
static constexpr auto BENCH_EXAMPLE_08 = "83728ce80000b90befca1001806083b24002b40de6da3203b545e9c35c04b34beede3005b068e8883006d41c80b1e14c07b337e7841208b26beadb2e096e83892e090980518487380a096e82815c0a096e81ce3c0b097181db200c097181d4020d09810084ed600e096e96b0100f0971819a0210086e93da2e0f09803583ee5e1009803583c66c1109800d82bb6e1209800d81d56a1309803c82e622140971819f521509803d84a55c15057181d6161605806283ac5217056e949c5a18056e89e8641806815889e23419067181de321a066e8af2641a076e82a70a1b07803583f2081c076f81e76e1d076e81d33e1e07800d83b8761e086e82a5541f087181de302008805f84ad0021086e81c74022086e81bd3e23086e9288182408806184b3102409803283816025096e91ed662609830a88e70827096e81d14a27097181ce6028096e8cf03829097181883832016f81835c3103806181e0103203804180b8103204863584fe183304800de66434046e9e4c34056e81d6742f429213c0eb602e3d6483b06c283a6e81d73c263d6e82f9581831805485ab360e37805080c62609398b3189880838010603916db1f3583a03000110873199f8623c000000011100"_hex_u8;
|
||||
/* 2023-04-14T19:36:52Z 77, 20418, 501117,*/
|
||||
static constexpr auto BENCH_EXAMPLE_09 = "bf2989d00400815bca5c01af1e86f97602800d9d6c03800d8a3404b47988866e05b36287f92e0680109f68078010991a08805ecf1208076e80933e09078062d01c0a078054b6760b078053b6760c076f9c1c0d078054b6760e0771af260f0771b17e10078032f57011078035d56812078054e1581307886b83dc301407817480d13013068005a6001406803d80821a15066ef3201606800ea2181706800da628180671ab1219068054db0c1a06719b001b06815b80a11c1c068050b9301d066fac2a1e068033ab481f06719b1020068035ab721e07803dc2761f0771ae3c20078040f60e210771ce282207800ea4322307882a81a66024078035ad4625076efe7e26078162808e1827078118bb7228076eac7428088010bf58290871a04c2a0871bc722b086fa8382c08803d80a0142d088035d6282e088051c30c2f086efc623008800d9f6231086f986432088117bb7237028010a63034068010c84e2740800ea64c2237832c80933e1f3b830880c454390208813c80955c3905068032c73611348010a03c093c837a808a101b278050ac34093a8051ac34291b8f3b8187401d28881a82cb3a3a0a37977b86d20843000028996686a7083f030f8078d3761b27106e995a08499070839b5a1131000b00"_hex_u8;
|
||||
/* 2023-11-07T17:59:35Z 48, 4792, 498995,*/
|
||||
static constexpr auto BENCH_EXAMPLE_10 = "875f89aa1000b51ec09d7201c55cc7a72e02a11aa1fb3203b233a7f95204800ef56205b33ea9d13006803e80b26e07d90ec9dd4008b45eabbe6c09806080ca000a815984e8680a0a6f80925e0a0a803f80e1660c09937c94b7420d086e82f5640a086e80997e0b086f808d320c08800580a5640d086f8089100e08804080c9060f088115819a1c10086e82961a0f0a805f81bc0a100a6ff826110a6ef53e120a807584c60c110a6e818f32120a803c81c246130a805481d508140a8159838410150a7180a55c160a6f80821c170a6fe6101c066fe6101d06805080f854190a6e81b27c1a0a8155819c701e06805180ae0c21046e8b9a222501805180f53422001680f26880f8a62a220116803580da582007058153838e6e21000c800d80a712033a807681ae1c23000308834a82d36023020205815981e03a051a08001700"_hex_u8;
|
||||
/* 2023-11-16T10:47:08Z 77, 473962, 486863,*/
|
||||
static constexpr auto BENCH_EXAMPLE_11 = "801980c06000801980c06001801980c06002801980c06003801980c06004801980c06005801980c06006801980c06007801980c06008801980c06009801980c0600a801980c0600b801980c0600c801980c0600d801980c0600e801980c0600f801980c060108019d12c11800f80b1601111800f80b1601111801080b1601111800f80b160100e800f80b160100f801980c060110f800f80b160140d801180b1601111801180b160100d801180b160120c801180b1600f10801180b1600f11801980c0601011800f80b160140e800f80b160110f801980c060170a801180b1601210801980c060140f800f80b1601311801980c0602005801180b1601f07800f80b1601b0c800fca7c1611812081f9601638812081f9601637812081fb001636801080b160142f801980c0600e2a801080b1600f2a801180b1600d25801980c0600e25800f80b1600d27801980c0600e27801980c0600d27801180b1600e26812080b1500c27812081f960201025812081f960200f27812081fc201d101c812081fc201d101d812081fc201d0f1f812081fc201d0f20812081f9601b1016800f80b1600a35800f80b1600a36800f80b1600e32801080b160122f812081f960280040812081fc20121d1b812081f960112713812081f960160d37812081fc20140d2b812081f960130d2d812081fc20130c2c812081fb001b0157812081fb001a0245812081fc20140030812081fc20092747812081fb000b152500"_hex_u8;
|
||||
/* 2023-10-06T20:44:09Z 40, 341438, 341438,*/
|
||||
static constexpr auto BENCH_EXAMPLE_12 = "80318f4c0080318f4c0180318f4c0280318f4c0380318f4c0480318f4c0580318f4c0680318f4c078033a57807078033a57807078033a57807078033a57807078033a57807078033a57807078033a57807078033a578070780318f4c0e0180318f4c0d0380318f4c0c0580318f4c0b078033a57803128033a57803128033a57803128033a578031280318f4c0412810b9c28140300810c9c281303028033a57802188033a57802188033a5780218810c9c280b01108033a578001c810c9c2807050f8033a578001b810c98040700158033a578001c810c98040301158033a5780019806ca1240101118033a578001300"_hex_u8;
|
||||
/* 2023-11-15T21:40:46Z 96, 23608, 138286,*/
|
||||
static constexpr auto BENCH_EXAMPLE_13 = "8060829f4000b157bab07a01b27cc2b16802b22fbce54603826480a95804803da81a05bc7bcac93806800de55207800daf0608805bc71809805bc7180a800d9d4a0b805bbc700c8152d7180d805bb9380e850a8886260f800d80d33410bf38d3d55011b41dc4eb6012bd70d2ce2e138d3596af7812137180cd501313805e81f7281413718092001513803d81f90016136e8b916c1713801081861a17106e80cd2a18106f80cc3c19106e80cf161911800d80fe781b107180d87c1c106e80fb081d10803e8286701d11800d81c4781f10804082a6002010801081912e21107180ff0021116e81da4a2310850b8b864023116e89db3224116e84ff7e2610897c95993427106f80bb1a240b803581c272250b8032828c10260b6e80d42a270b804082b35a280b800d80fe3e290b805cc0282312821d8697022b0b6e8add562c0b805281c8063007811883f1082313800d80fe3e24137180c9142513800d8380102613803382c00e2713805eb32228136e8494542913800e8186742913806082b74c2a1380528285782b13800d818f7a2c136e84a5562d1380508286702e136f80a46e3e04803f8191364102805481ad4c3d076e809a5a3e077180fe4032136e838b7233138c4790cf384106853584ab624206805b80932a4801806280966c48028168ef04400b7181bd524903806282db5c375b9316acbf703a599c68c5a454385c6e81d63e364a6f80ff64334e817485a6784f023171819536234e800d81826e1e498053829a12420018834c87cb14291d2e840e8bc94c1d2825800d81b7220368811783fe0e271f1f811783e758380f001ecd55809edf6e56000000003a815984ba76008010d54d80aebb4e2c22000000000000002c807682f150007a00"_hex_u8;
|
||||
/* 2023-12-06T09:18:20Z 93, 68130, 122830,*/
|
||||
static constexpr auto BENCH_EXAMPLE_14 = "b26beadb2e00800d80ca0a01d41c80b1e14c02b068e8883003800d81af1604b34beede30056e80b14006b151f5d46c07b93e8085b02608b30cf98b1009b14ef6b3040ab176f6ab480bb7078082b8640c800d81c6460d802c80a8080e802c80a8080f802c80a14210802ce50a11802cd722127181ce6012126e81d14a13126e9b8b00141282428dd42c15128051828408150e6e81bd3e150f805f84ad00160f7181de30170f6e81c740180f800d83b876190f6e82a5541a0f6e81d33e1a106e82a70a1b106f81e76e1c10803583f2081d106e82d9401e106e96e4441f107181de321e12815889e2341f127182d60c20126e979d4e21126e8282262410800d82972c25106f838a5822126f82842a23127182d24a2412803e84bc2a2512800d83c81a26126e84f8142712805085a22c27126e889e6a2812801083aa50281280348598102912801082d5522a126e85865c2b127182c7602b1282468c82042c126e84972c2d12805485d93a2d12801083c7322e12815386e1582f126e84fb0c30126f82eb6c3011813a85b47a3111803f869f5c3211805181ed30370d6e84bf0a3411804180e1383809815883aa183a08815a8392203e05807681f140380c6e9e4c4005805485ab363255805183856030406e82f9582c45805185c1001b4f82418df1001a4e803283c50e430026800d83a6201a4b836886be3044010b8b318988084c0101803183a6120776800d828a1e087682338ae050301c33873199f8624d010032813986bc663c1034800d83a5220a6f800d82be52048000805183e364084907800d83cc4a018005815987b41e1832000017884b9dce72035035803284c11e00800885769d9538192f0000000002001000"_hex_u8;
|
||||
/* 2023-12-14T02:02:29Z 55, 247754, 247754,*/
|
||||
static constexpr auto BENCH_EXAMPLE_15 = "801980c06000801980c06001801980c06002801980c06003801980c06004801980c06005801980c06006801980c06007801980c06008801980c06009801980c0600a801980c0600b801980c0600c801980c0600d801980c0600e801180b1600e0e801180b1600e0e801180b1600e0e801180b1600e0e801180b1600e0e801180b1600e0e801180b1600d07801180b1600f06801180b1600c0a801180b1600f08801180b1600c0c801180b1600c0d801180b1600c0e801180b160100b801180b1601309812081fc200e2a812081fc200e29812081fc200e28812081fc200e0e18812081fc200e0e17801980c060042e812081fc200e0d07812081fc200e0d08812081fc200e0c0a812081fc200e0d0a801980c060081e812081fc200f0c0c812081fc200f0c0d812081fc200f0c0e801180b160083a801180b1600426801980c0600b20801980c0600a22812081fc200f0b30801180b160022b801180b160022b812081fc20062422812081fc2006220b812081fc200c0a1e812081fc2012041a00"_hex_u8;
|
||||
/* 2023-12-14T15:17:20Z 76, 102600, 103935,*/
|
||||
static constexpr auto BENCH_EXAMPLE_16 = "801980c06000801980c06001801980c06002801980c06003801980c06004801180b1600404801180b1600404801180b1600404801980c0600504801980c0600802801980c0600803801180b1600704801980c0600804801280b1600804812081fc200810812081fc20080f812081fc20080e801180b160080c800f80b160080d801980c060090d801180b160090e801980c0600a0e812181fc200a0c801180b1600a0d812181fd400a0c801980c0600a1c801980c0600916801180b1600719801180b160061b801980c0600d15801980c0600717812081fc200718801980c0600716801180b160072d801180b1600722801180b1600525801980c060091b801980c060071e801080b160071f801280b160061d812081fc20063a812181f960160815801280b1600525801980c0600625801180b1600626801980c0600726801980c0600536801180b160032b801980c060042b801280b160032d801980c060033e801180b160043e812181fc20100c27801080b160042f801980c0600342801180b1600442812081fc20150d25800f80b1600245812081fd40120619812081fc20040243812081fc20120c2c812081fd40120a1d812181fb00100623812081fc20030347812081fc20072126801980c0600236812081fc20040d2b812081fc20120328801980c0600237801180b1600337812081fc20052230801180b1600239812081fc2008242c812081fd4005112d812081fb00070b32812081f96011034700"_hex_u8;
|
||||
/* 2023-12-15T07:12:29Z 98, 112693, 112730,*/
|
||||
static constexpr auto BENCH_EXAMPLE_17 = "801980c06000801980c06001801980c06002801980c06003801980c06004801980c06005801980c06006801180b1600606801180b1600606801180b1600606801180b1600606801280b1600606801180b1600606801180b1600606801980c0600d00801980c0600b03801980c0600b04801980c0600f01812081fc200a16812081fc200a15812081fc200a14812081fc200a13812081fd400a12812181fc200a11812181fc200a0f801180b1600a10801180b1600a10801980c0600a10801180b1600b10801180b1600b10801980c0600621801980c0600915801980c060041b801180b160051b801980c0600f12801980c0600f13801980c0600d15801980c0600c17801980c060072e800f80b160082e812181fc200d150e801980c0600922801180b1600923801980c0600823801180b1600623801180b1600a20801180b1600e1c801180b1600b20801180b1600b21801980c0600a3e800f80b1600b3e801980c0600931801180b1600a31812181fc20140325801180b1600a30801180b160054c801180b160043b801980c0600336812181fc200253812081f960090944812081fc2007003c801980c0600339801180b1600433801980c0600453801980c0600340801980c060033d801080b160043d812081f960070854801980c060045a801180b160055a801180b1600545801980c0600643801980c0600641801280b1600739801180b1600562812081fc20121f27812181fc20210137812181fc2016112f801980c0600259801980c0600156812181fc20053a31801180b160025c801180b1600257801980c0600357812081fc200d2d1e812181fc20102444812181fc20035a801180b160035b801980c0600751812181fc2007392a812181fc20025f801980c060045e801180b1600350812081fc20070f6f801180b1600263812181fc201b1322812181fc2011283b812081fc2002442100"_hex_u8;
|
||||
/* 2023-12-16T02:25:33Z 99, 112399, 112399,*/
|
||||
static constexpr auto BENCH_EXAMPLE_18 = "801980c06000801980c06001801980c06002801980c06003801980c06004801980c06005801980c06006801980c06007801180b16008801180b16009801180b1600a801180b1600a0a801180b1600a0a801180b1600a0a801180b1600a0a801980c0600d06801180b1600b09801980c0601005801180b1600c0a801980c0600d0a801980c0601106801180b1600e0a801980c0601207801980c0601207801180b160100a812081e668100a812081e668100a812081e668100a801980c0601407801980c0601606812081fc201226812081fc201225812081fc201224812081fc201223801180b1600e21801980c0600b1e801180b1600c1e801180b1601316801980c060091b801980c0601312801980c0600a1c801180b160190e801180b1601315801180b1600e1b801180b1601713801180b1600f1c801980c0600d34801980c0600d30801980c060102e801980c060122d801980c0600b2a801980c0600b2a801980c0600b2b801180b1601122801180b1600e26801180b1601025801180b1600f26812081fc20280032812081fc20270034812081fc20250034801180b1600d4b801980c0600d457a809a000d46801980c0601044801980c0600e46801180b1600f43801180b160123f801180b160123e801180b1601130801180b1601131801180b1601131812081fc20230a36801980c0600a5a801180b1600a5b801980c0600a5b801180b1600b5b801980c0600b5a801180b1600f57801180b1600d3f801980c0600669801980c0600568801980c0600466801180b1600945801180b1600649801180b1600945812081fc2018234b812081fc20142534812081fc20142532812081fc20142530801180b160074d801180b1600a4b801180b1600a4a812081fc20221662812081fc200c0472812081fc20072e42812081fc20062c23812081fc20100572812081fc200f036c812081fc2001345100"_hex_u8;
|
||||
/* 2023-03-31T19:24:02Z 78, 90393, 152832,*/
|
||||
static constexpr auto BENCH_EXAMPLE_19 = "800dd042008028b13c018028b13c028028b13c038029b13c048029b13c058029b13c0680299948078029b13c088029b13c09802899480a802899480b8028b13c0c80299e700d802899480e802999480f8029b13c10802999481180299948128028b13c138029b13c1480289e701580289948168028b13c1780289948188028994819802899481a802999481b802999481c802899481d802999481e8028b13c1f8029b13c20802999482180299948228028b13c2380298c242480289948258029b13c2680288c242780298c242880299e70298f5a80ea762a824780aa00292a82038090402429813fcf00152a8203809040142a813ff700112982038090402d002d813ff70028002c8203809040270024824780aa00270025820380904025002882038090401e022a82038090401d042782038090401c01298203809040190029813ff700170028813ff700140128807b9258120128841280f6402c01002e82038090402b00062b820380904027000031813ff70011192d82038090401d000129851981a9403a0000003b82038090400c182e813ff7000b0f2982038090401314141b807b925805192b84568190001121000334807bdd400149824780aa00001f2a813ff700003d0b8203809040050d1915807bdd4001498728828f400b010004050501000a050c851981a9400104050b061a0400"_hex_u8;
|
||||
// Randomly generated clusters, selected for slow linearization, from 28 to 64 transactions.
|
||||
// The first 10 are selected for long total runtime, the last 10 for high runtime per cost.
|
||||
static const std::vector<std::vector<uint8_t>> CLUSTERS_SYNTHETIC = {
|
||||
"85058a7c008473b22d018706c70102873bd55303805e857b048732973005811487690686739032078260950508866b52098603a056000000000000000000000a8305986b0100000000000000000008852fa1260200000000000000000005855d8a0c03000000000000000000048468a9260400000000000000000004811f8449050000000000000000000483529f3e06000000000000000000048645962d07000000000000000000048333802a0800000000000000000001807187380900000000000000000001832f98220a000000000000000000018635a6380b00000000000000000001827c812c0c00000000000000000001844382700d00000000000000000000837d80410e00000000000000000000834ca16d0f00000000000000000000872d932c10000000000000000000008619b159110000000000000000000000"_hex_v_u8,
|
||||
"8040810400864384650184599d6902806c802903853fa502048332a25b058627cb6b068024897307861080790883469c7a098458b10f0a846bab240b8406a1770c8526b2290d870c710e840d8c630f8608926f108646af49118426a123128747c74213813b837d0000000000000000000000000000000000000000148629c81b010000000000000000000000000000000000000012865a857b020000000000000000000000000000000000000011866c8d3d03000000000000000000000000000000000000000f71871404000000000000000000000000000000000000000a86509a1805000000000000000000000000000000000000000a863e8c4b060000000000000000000000000000000000000009871db86a070000000000000000000000000000000000000006807b930a08000000000000000000000000000000000000000585779a2a090000000000000000000000000000000000000002831584430a00000000000000000000000000000000000000018156804a0b000000000000000000000000000000000000000100"_hex_v_u8,
|
||||
"8630852c008029804601864fb81d028602ae03038633af710481358b7a058559ad75068461a43b07865dd10a088516a42809810c8a250a821fa3150b812093470c805a85450d8708c27d0e8477aa770f8152850210806b892711810e805112821a904b13820582160000000000000000000000000000000000000000128114935f0100000000000000000000000000000000000000128179863902000000000000000000000000000000000000000e8064861103000000000000000000000000000000000000000d856a816c04000000000000000000000000000000000000000d8671b17405000000000000000000000000000000000000000d80368b0806000000000000000000000000000000000000000c847e881507000000000000000000000000000000000000000c8713811808000000000000000000000000000000000000000c801b89620900000000000000000000000000000000000000098139802b0a0000000000000000000000000000000000000009801d85440b00000000000000000000000000000000000000098161994d0c000000000000000000000000000000000000000882448c4b0d0000000000000000000000000000000000000008862b9c040e00000000000000000000000000000000000000068738e1580f000000000000000000000000000000000000000100"_hex_v_u8,
|
||||
"8345803600823fa12101862acf45028611882c038115953e0482748b51058606af0f068619a55f078436b76f086482440983358a380a846abb680b8164991f0c8142931b0d8535b1590e846d8d6d0f8400977b10811f8d6211857bc24f12857daf3300000000000000000000000000000000000000138262a8700100000000000000000000000000000000000011821d91240200000000000000000000000000000000000010870aa538030000000000000000000000000000000000001080788d68040000000000000000000000000000000000000b8240940e0500000000000000000000000000000000000009872f863c060000000000000000000000000000000000000781568460070000000000000000000000000000000000000282138e350800000000000000000000000000000000000002871c991609000000000000000000000000000000000000028072942a0a00000000000000000000000000000000000002835d0a0b00000000000000000000000000000000000002830b824f0c0000000000000000000000000000000000000282608e110d000000000000000000000000000000000000028071842f0e00000000000000000000000000000000000002837287410f00000000000000000000000000000000000001810e88671000000000000000000000000000000000000001867c977f11000000000000000000000000000000000000018704932612000000000000000000000000000000000000018724b61b13000000000000000000000000000000000000018339a072140000000000000000000000000000000000000100"_hex_v_u8,
|
||||
"8240952700865eb9710184219a7202863d8b2503833c9855048748b66705817ea16106814f8b1b07841f9349088717c90c09800d8d2d0a815190220b860bb4680c866d93250d81109a490e8075813e0f83388b3b1083268a7d118640c00f128727ae2813807b87781480428d5315833aaf6d168213a71d178623cc63188542a9531981796e1a855db8390000000000000000000000000000000000000000000000000000001b64883e0100000000000000000000000000000000000000000000000000001686638627020000000000000000000000000000000000000000000000000000168370871a03000000000000000000000000000000000000000000000000000015871b990104000000000000000000000000000000000000000000000000000014810e99080500000000000000000000000000000000000000000000000000000f80668e720600000000000000000000000000000000000000000000000000000f85738c240700000000000000000000000000000000000000000000000000000e803c8f660800000000000000000000000000000000000000000000000000000e873cb8200900000000000000000000000000000000000000000000000000000d8606cc3c0a00000000000000000000000000000000000000000000000000000b826f99050b000000000000000000000000000000000000000000000000000006815597400c000000000000000000000000000000000000000000000000000005860b955a0d00000000000000000000000000000000000000000000000000000581018f6b0e0000000000000000000000000000000000000000000000000000028644882e0f00000000000000000000000000000000000000000000000000000282048e0b1000000000000000000000000000000000000000000000000000000200"_hex_v_u8,
|
||||
"8041853f008115953c01866ea90e02816ba407038101870b04854eda0505841d995a06854ad1690783528b5e0886208a3709873de6580a8454af370b8732d21e0c846ecd410d822d9b190e8335b0440f80348137108278866d11874bd81d1284788d741385389e20148501cf0c15813b81251681108971000000000000000000000000000000000000000000000017813a9d7201000000000000000000000000000000000000000000001782448a6b020000000000000000000000000000000000000000000017855cb361030000000000000000000000000000000000000000000013833da46c04000000000000000000000000000000000000000000001281349c230500000000000000000000000000000000000000000000108367a120060000000000000000000000000000000000000000000010803b8b7c07000000000000000000000000000000000000000000000e8375864508000000000000000000000000000000000000000000000e874b901609000000000000000000000000000000000000000000000e8209942e0a000000000000000000000000000000000000000000000d83248e700b000000000000000000000000000000000000000000000d840d8b040c000000000000000000000000000000000000000000000d8619c2360d000000000000000000000000000000000000000000000d8027824f0e000000000000000000000000000000000000000000000d8135841e0f000000000000000000000000000000000000000000000d85349f0510000000000000000000000000000000000000000000000c8476a00611000000000000000000000000000000000000000000000b831caa4f12000000000000000000000000000000000000000000000b84318b7e13000000000000000000000000000000000000000000000b83319f3b1400000000000000000000000000000000000000000000048701b76515000000000000000000000000000000000000000000000481558c461600000000000000000000000000000000000000000000038529be4e170000000000000000000000000000000000000000000003835da02018000000000000000000000000000000000000000000000200"_hex_v_u8,
|
||||
"8639bf23008029863b0180539159028614c6330387408e22046782250582129117068365ad3a078075912708866e8a090982799c050a8474bf220b8548ba060c840eac020d850186460e815c85170f81628a301082369942118250a13b128644b74d13832da43314835c874f15800a8d5a00000000000000000000000000000000000000000000148707af630100000000000000000000000000000000000000000014806c993f020000000000000000000000000000000000000000001480288572030000000000000000000000000000000000000000001281449d7b04000000000000000000000000000000000000000000108505c536050000000000000000000000000000000000000000000f813e924b060000000000000000000000000000000000000000000f8510a24a070000000000000000000000000000000000000000000f8533875a080000000000000000000000000000000000000000000b8056800f090000000000000000000000000000000000000000000b870f8b0b0a0000000000000000000000000000000000000000000a87188b7a0b000000000000000000000000000000000000000000098417a87c0c00000000000000000000000000000000000000000009803d832c0d000000000000000000000000000000000000000000078663dd330e000000000000000000000000000000000000000000078511b21d0f000000000000000000000000000000000000000000058168992610000000000000000000000000000000000000000000058473bc4c110000000000000000000000000000000000000000000580428925120000000000000000000000000000000000000000000580408b61130000000000000000000000000000000000000000000581138d2814000000000000000000000000000000000000000000048647de091500000000000000000000000000000000000000000004817a85161600000000000000000000000000000000000000000004832d9d431700000000000000000000000000000000000000000003830b9512180000000000000000000000000000000000000000000382499e001900000000000000000000000000000000000000000003852d865e1a0000000000000000000000000000000000000000000380708f341b000000000000000000000000000000000000000000018555c1001c00000000000000000000000000000000000000000001822c886f1d0000000000000000000000000000000000000000000100"_hex_v_u8,
|
||||
"82689142008207a3430182548a5902846f99510382049942048226976105833884760685499138078241a81b08801608098100854b0a820c85360b87319d4e0c821e89430d8565867d0e815a8e6c0f80478c3e108571894011836fb6291283148756138650dc4f14826ca204158726b01116833d8c4117855d9f4018866f934d19856b8e1a000000000000000000000000000000000000000000000000000019857ede10010000000000000000000000000000000000000000000000000019815881400200000000000000000000000000000000000000000000000000188277a914030000000000000000000000000000000000000000000000000017861ee9650400000000000000000000000000000000000000000000000000158656e824050000000000000000000000000000000000000000000000000015874ac43206000000000000000000000000000000000000000000000000001580449118070000000000000000000000000000000000000000000000000014812c873d08000000000000000000000000000000000000000000000000001083069a7109000000000000000000000000000000000000000000000000000e800482710a000000000000000000000000000000000000000000000000000e821a80590b0000000000000000000000000000000000000000000000000009854f8e640c0000000000000000000000000000000000000000000000000009833f9a040d00000000000000000000000000000000000000000000000000088002836f0e0000000000000000000000000000000000000000000000000008843d8d6e0f0000000000000000000000000000000000000000000000000007850ba7601000000000000000000000000000000000000000000000000000078172a62211000000000000000000000000000000000000000000000000000680008879120000000000000000000000000000000000000000000000000005861f83531300000000000000000000000000000000000000000000000000048155a44c140000000000000000000000000000000000000000000000000003810199501500000000000000000000000000000000000000000000000000038571d0061600000000000000000000000000000000000000000000000000038578e624170000000000000000000000000000000000000000000000000003872d8327180000000000000000000000000000000000000000000000000002871cae031900000000000000000000000000000000000000000000000000028733844e1a00000000000000000000000000000000000000000000000000028268a4681b0000000000000000000000000000000000000000000000000001806b95541c00000000000000000000000000000000000000000000000000008457af231d000000000000000000000000000000000000000000000000000000"_hex_v_u8,
|
||||
"83159265008420be1c018635ba4702851ac26b0383559347048472943f058666ae7f068725d472078077901b08851fb31b098352bc560a84689c740b867ff24a0c807390100d80588f6f0e8670dc4a0f820aa604108747f803118340b41812841e9f5213830f9f27148557c3461583618b6916803a844d17811d9a5218863eac0e198465d8471a8578bf371b851bc6051c813e9d6e00000000000000000000000000000000000000000000000000000000001d810a9c7a01000000000000000000000000000000000000000000000000000000001d8532930402000000000000000000000000000000000000000000000000000000001c860dd80903000000000000000000000000000000000000000000000000000000001c84595c04000000000000000000000000000000000000000000000000000000001c8567930205000000000000000000000000000000000000000000000000000000001b8634ef3506000000000000000000000000000000000000000000000000000000001a873dc47007000000000000000000000000000000000000000000000000000000001a871b9543080000000000000000000000000000000000000000000000000000000019825d917f090000000000000000000000000000000000000000000000000000000019815c926f0a0000000000000000000000000000000000000000000000000000000018823c840b0b00000000000000000000000000000000000000000000000000000000178647952a0c00000000000000000000000000000000000000000000000000000000177b8d4c0d0000000000000000000000000000000000000000000000000000000014821e99240e000000000000000000000000000000000000000000000000000000001281628d230f0000000000000000000000000000000000000000000000000000000010835d8e2710000000000000000000000000000000000000000000000000000000000e84629c3611000000000000000000000000000000000000000000000000000000000d8264af3c12000000000000000000000000000000000000000000000000000000000a8300a36a13000000000000000000000000000000000000000000000000000000000a8567bf1f14000000000000000000000000000000000000000000000000000000000a8372b21815000000000000000000000000000000000000000000000000000000000a805b876e160000000000000000000000000000000000000000000000000000000008866eaa1f1700000000000000000000000000000000000000000000000000000000068018771800000000000000000000000000000000000000000000000000000000058357a23a190000000000000000000000000000000000000000000000000000000005841aa37b1a00000000000000000000000000000000000000000000000000000000048536981a1b0000000000000000000000000000000000000000000000000000000004811a8a2a1c0000000000000000000000000000000000000000000000000000000000805986361d00000000000000000000000000000000000000000000000000000000008626c9491e000000000000000000000000000000000000000000000000000000000000"_hex_v_u8,
|
||||
"802d8a6400827caa630184598938028515c01903768805048416b02d058520b716068607ee1b078668ef6a08851c897109822182100a7f8a7e0b8514df270c8608b3070d843ab13a0e8512bb210f852dab13108152996d1180518a29128662d841138121971514812a9a48158574d25b168075864a17845cbf6e188261b54119822c8a711a824a9d4b1b8505a7251c8303b3551d833dc47d1e8130a0611f8352820920870cc005218463cf0222802b9102238176884600000000000000000000000000000000000000000000000000000000000000000000000023827b65010000000000000000000000000000000000000000000000000000000000000000000000237e8313020000000000000000000000000000000000000000000000000000000000000000000000228548dc5303000000000000000000000000000000000000000000000000000000000000000000000022810f8e1f040000000000000000000000000000000000000000000000000000000000000000000000228710f61a0500000000000000000000000000000000000000000000000000000000000000000000002182518f22060000000000000000000000000000000000000000000000000000000000000000000000218636f0490700000000000000000000000000000000000000000000000000000000000000000000001f8442cc610800000000000000000000000000000000000000000000000000000000000000000000001d805b921f0900000000000000000000000000000000000000000000000000000000000000000000001d861d820d0a00000000000000000000000000000000000000000000000000000000000000000000001d827d88580b00000000000000000000000000000000000000000000000000000000000000000000001d8254952b0c00000000000000000000000000000000000000000000000000000000000000000000001d822088610d00000000000000000000000000000000000000000000000000000000000000000000001d846a060e00000000000000000000000000000000000000000000000000000000000000000000001d873c935a0f0000000000000000000000000000000000000000000000000000000000000000000000198450bc44100000000000000000000000000000000000000000000000000000000000000000000000178250b646110000000000000000000000000000000000000000000000000000000000000000000000178350c1081200000000000000000000000000000000000000000000000000000000000000000000000f8414bb381300000000000000000000000000000000000000000000000000000000000000000000000e811c84181400000000000000000000000000000000000000000000000000000000000000000000000d8246aa101500000000000000000000000000000000000000000000000000000000000000000000000b81149b15160000000000000000000000000000000000000000000000000000000000000000000000078247af1f17000000000000000000000000000000000000000000000000000000000000000000000007816e863818000000000000000000000000000000000000000000000000000000000000000000000006853b8e02190000000000000000000000000000000000000000000000000000000000000000000000068161a32e1a000000000000000000000000000000000000000000000000000000000000000000000006811d87041b00000000000000000000000000000000000000000000000000000000000000000000000200"_hex_v_u8,
|
||||
"80578c04008734c974018654a51d02856aae0d038719973c0106807f904f04018430913d000a871a985d0500018374965f030109867466000e86479a690203038735c80d0109836997010700000003840ea121080000000082699354030310803a520702000483019f2709000000108159881f0703000e847d8f10060400128128901604070e851e8f1109020100801c820f01090009803d884a040101000000010f850e8f610202000106800b880606000200000100832e826f040100000000000009856fba6002020100000008865f9a0e06000000000000000100"_hex_v_u8,
|
||||
"81088137008624a1750180398f1602807a892b0102866bd12302028049450301803282010300076e880205000280068133050002810880170401088306997c05000002852e9e020401000282239424060001000166863504010000000d8135804d0601000000098227952105000100000a851a855e06000100000a8628a34b07000100000180038015070000010008801c8a7307000000010585168d210702000000000a821a6c03000202058329981f000200098507a21a000d8723bd13000417845cab5804020000000000000f83028f260201030380106e02010315842dac580501010012873bc37e040101001a8214973b060001000a80368d7902010100001900"_hex_v_u8,
|
||||
"820ea20c0083308407018237a67a02821fa37900048320ab4a0202844db6210401811b98490008830b931701068676ba5d030100058317997504000386259140020402857cc2410402000a8001832d010c81078d35060200068149960708010004863ea83505040d83498656070200038320a77503050111830b822f070200010681018041060302008232863b090200000085619c03030502088524a00c030002078545a04602050002028100921a0405000200008473c1530900000101000e845a8d080500020100000017867087460502010000000f7489310401010102018216a16a0104000001078427af750501000000010585458b43040202000002872cda4f0304010000068209851d010200000000138321827a01000000000f8356a908010000002200"_hex_v_u8,
|
||||
"833a8843008449995c01810a873000038066934d02018616c04d0202843a87600401826a864d0402855f8779050007863d936903038572d02d040204867cc61604030180098b69020509832792510601010581798e06040504833b9439070101000d851f946f01128147927d02030014866baa5d070201000c805f854f070300010b81579177090201000483209f7a0404020283678e420400050d8340981e080101000100048070816d07000101020c85578f010b01000000000004821a972605010204000010831c94280a01000000010001812d906c0303060882599e120505000200000a80638c5707020103844d9f04080004000000000e802b8c3107010300001b83189062020703000d872cb306080202000000098370a61e0600040000010d800a870f01010401000982369a1e030204000000058747c40c0102000317854e9e1c010300000000001a873eb04001020000002500"_hex_v_u8,
|
||||
"83778b4c00834c932901853ed03202834a844c00048716a22d02038529c429020103843ebe7f0300048135944b040002810f9704040005850b9463010980628e700501000a80238d380502078739843b080000008405896304000f80094c04010d807d9739070000000c8218a32304030109853a9d460500020f817b9412030600000987498636010014850e8104060400000b80378b5407030001000b8659d87f05040001000b831e8f740a000100000009844c9f7d040501188203964806040101038201946806050000188406bd48060600000014860e9c4f0b010000000f8549c114040500030f813b82510406000218842da63e0800030115811d9b5a0501010003001c84208029070004000d832a95220500010101010022852b9b24030401010000001a857f8107050104000000000f853e9525080100000000000109821f9507050101000104827aa04602030220834f803405000201001c8268aa1603030000000001008475b43202000300000005827b93560202000100002900"_hex_v_u8,
|
||||
"812d9c7200852fd301018170943702824a9e630387272402048353b33102038556b159020481599b00010883528735030381718370030107842cbf77050103816c8a1c0600048422c55d04078321a409090000000982688622050508806f8c090017873c5b08010004817fa04a050201048567c15f0505011082219f00080201118135892e07060000078360af6d0309138031824c0608001185739b080a020101000582018d0a0a000311813d860109010f8452bc6400060411825a8e2b050702098246a769012484049d3c07070100138313853a06080000158553b84b0b0203000000000010817da176030d1883388476040314852381580405050020830e966a0100042585128a3e08000001000121836f870403000700010000000025862cad000207020001128742d7180701010200010001088606da7c06000400010001000b84699b2d06030101000000010000138418b6250602030000001f84155c0401050013846a81610101030106873fd029020101000001000e82508521010300010d862ec12700000000001500"_hex_v_u8,
|
||||
"7d836f008521bb6b018061934b0285118b7903802285670203850f8b5201058221a327030287369342060080188c340601802d8f68060003840fb2400700028227a713070100028747c93d06010007874b99630503010281779f3103060380228e000602000f802f831a09000106857781300803000000108707a45d080001010011830a9132030811821aa471080301000010864aca7c0602021185758d640702000110843c8a2306000214850ec3040a01020100000082568231030a00000d810e927503000a0d8001803e070001021980209041010c0005822f9c6205070005835cbf50030b000011852bb20f0a0400000000001d83179f210c010101000000001a806a967c05030403208212980d0404030302832ca5660902020000001f852e9e39080303020000028572ca5208010203020013816192320e010000010000228672ef1d06060100011082419e6a050701021f8424b26e05040104010c8420bf780406030000000000855ac63c0b00010100000000000c8426ae25030501030016874a9330030104030019871be924060200010000000000118644cd2103010302010f8345ad03000401010d81379c2102000100010030837f810901010000000e832bb24f0100000600"_hex_v_u8,
|
||||
"816ba22900836f867101873c8056028511815803815497480205804283330105807e1d020383028a6100058533cc7b0100086a893d040003822493090302000b86108056020a854cbe4b05010483128c2d090000000182359815010c7281540800010002810889440602000e8518d60f09000000108563e05b0602020e8544ba220b000001018655da2105041382438a0c080202000381138a2b0702031085508f2904080004867ecb6709020002048375b142080103011a867bcc450508011983368a0b0c0200000a8420a84a0b03020000098312af7d0606020000088443c4550502050200068524b179090300000002001981188579030a00000217806d8f0a0c000005000d8076851a0800020003021581359369060101060103846eae34070203000200010022832a86670d0100000000000102830891620a00010100030000000001810592140900020001000003278712eb5d090500000100011f813f921a05020402128212ac1607010000090a870fc33001041981708e7a000903010a835ba272020900010001001884618f680207000101010118850bb168070301020000000680779a6f0406000002001f8670843605010500011e842e904709010003010000000d8222ae010205020128866086120702020000000000001082029c35010101030b82639c7802010300000100328138801001020102002000"_hex_v_u8,
|
||||
"815e9a23008324a10d01825bb246028470af1301048737ba3202048264aa000304843383590403857ba37c05028351be6805028123965a0700098567c53f0307854fde3e04000e825aa8790305098259b529020f8365985d0505068246ac510800010e83448c410215801b8464011c85548a540705010f840c9d10050800118472bb480211821aa7510d010000000010823b9d50010c108533a8030607020007804e90030d0000000a80799051060701078717900106070000168511962d0209000209806c801c060603001a8347a86607060102000f8245924309030001031a8177a513070504001b81348064080a0000000002856ce16106010902000f850088600701090200048044847b09040301010020842189140d04010000010000168210a91b02000609208618ae420609020000000b8257951b0b00070100000009855d8b7b0902030520810190300a0701000000000000028254ae7b0700060001031f8748bf21040902108264af760f0004000001000a813587660c0005000100000000002d8256a04a080a00000000246a8526030a06001780068011050a000403866ecf5a080a03000000008603c30509020000050f8250916201070306000025825385380e00000200000000348210836504090200010100048334b97a060502000201012c84088e520705020002010105814a8c65050507011a8178a15e05010101000000003680448c190200020300010100003280388f2c03000000010000000000002600"_hex_v_u8,
|
||||
"824da926008527804e01871bca36028604b04f038558d62c04804a960f02048513d87301068229897103058675a07e03000b843c8311050201814e5d02030c87029e020109841dc65a0601038227a325070101088334801c06030102853ee538070005688b0d080200010d8406a94d0b000000000b852bbf050a020000000a811380750d0000000005825c935d0b000200000a871bcb700902020109824187140f00000000098614ec7f0d000003078621942b080800058454bb1c0e030000000a847e630d030001000b8601e07e0c0002030c8655bf0b030f00018306bb5705010c1487038e071200000000001b856f816f1000000100020018820a9a530a0208000a81398a74001321853a944a060a03000117835aaf1c09030701118529b8690709020201248621bd330e010001010202148022800104100981428234090800030100188517cd2007060100020305836dc031020209022782449b69040c0100000001108651ac0a0607010101000000022a8337c0610505040202000001228547cd7c0d02000102020000000d843eba2a0b0501000000020025810f94010b0002030101000000010e803c921006000008041b8453bb3a0a0600030000000000000017841bae620708030100000016813f9924110100000200000000000000000c8637f36205060200050006857eb53f08020900000000002d810b9e580c0005000201000000000786459b700207060101188536b7790a0601000000010000000006854d905f08070201000000001680578f6a09030200030031837c8419080006000000022e8518a8500500040501000028861dd07e0801010300003b8743b97202000002000105003b8545b730010200010000000000001f00"_hex_v_u8
|
||||
};
|
||||
|
||||
static void LinearizeOptimallyExample00(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_00); }
|
||||
static void LinearizeOptimallyExample01(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_01); }
|
||||
static void LinearizeOptimallyExample02(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_02); }
|
||||
static void LinearizeOptimallyExample03(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_03); }
|
||||
static void LinearizeOptimallyExample04(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_04); }
|
||||
static void LinearizeOptimallyExample05(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_05); }
|
||||
static void LinearizeOptimallyExample06(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_06); }
|
||||
static void LinearizeOptimallyExample07(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_07); }
|
||||
static void LinearizeOptimallyExample08(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_08); }
|
||||
static void LinearizeOptimallyExample09(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_09); }
|
||||
static void LinearizeOptimallyExample10(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_10); }
|
||||
static void LinearizeOptimallyExample11(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_11); }
|
||||
static void LinearizeOptimallyExample12(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_12); }
|
||||
static void LinearizeOptimallyExample13(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_13); }
|
||||
static void LinearizeOptimallyExample14(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_14); }
|
||||
static void LinearizeOptimallyExample15(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_15); }
|
||||
static void LinearizeOptimallyExample16(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_16); }
|
||||
static void LinearizeOptimallyExample17(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_17); }
|
||||
static void LinearizeOptimallyExample18(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_18); }
|
||||
static void LinearizeOptimallyExample19(benchmark::Bench& bench) { BenchLinearizeOptimally(bench, BENCH_EXAMPLE_19); }
|
||||
static void LinearizeOptimallyTotal(benchmark::Bench& bench)
|
||||
{
|
||||
BenchLinearizeOptimallyTotal(bench, "LinearizeOptimallyHistoricalTotal", CLUSTERS_HISTORICAL);
|
||||
BenchLinearizeOptimallyTotal(bench, "LinearizeOptimallySyntheticTotal", CLUSTERS_SYNTHETIC);
|
||||
}
|
||||
|
||||
static void LinearizeOptimallyPerCost(benchmark::Bench& bench)
|
||||
{
|
||||
BenchLinearizeOptimallyPerCost(bench, "LinearizeOptimallyHistoricalPerCost", CLUSTERS_HISTORICAL);
|
||||
BenchLinearizeOptimallyPerCost(bench, "LinearizeOptimallySyntheticPerCost", CLUSTERS_SYNTHETIC);
|
||||
}
|
||||
|
||||
BENCHMARK(Linearize16TxWorstCase20Iters, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(Linearize16TxWorstCase120Iters, benchmark::PriorityLevel::HIGH);
|
||||
@@ -397,23 +391,5 @@ BENCHMARK(MergeLinearizations64TxWorstCase, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(MergeLinearizations75TxWorstCase, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(MergeLinearizations99TxWorstCase, benchmark::PriorityLevel::HIGH);
|
||||
|
||||
BENCHMARK(LinearizeOptimallyExample00, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample01, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample02, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample03, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample04, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample05, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample06, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample07, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample08, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample09, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample10, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample11, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample12, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample13, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample14, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample15, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample16, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample17, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample18, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyExample19, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyTotal, benchmark::PriorityLevel::HIGH);
|
||||
BENCHMARK(LinearizeOptimallyPerCost, benchmark::PriorityLevel::HIGH);
|
||||
|
||||
@@ -334,6 +334,15 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
unsigned CountDependencies() const noexcept
|
||||
{
|
||||
unsigned ret = 0;
|
||||
for (auto i : Positions()) {
|
||||
ret += GetReducedParents(i).Count();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/** Reduce memory usage if possible. No observable effect. */
|
||||
void Compact() noexcept
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user