Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Try applying prefix perfect hashing to long strings #381

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

jviotti
Copy link
Member

@jviotti jviotti commented Feb 26, 2025

Signed-off-by: Juan Cruz Viotti [email protected]

@jviotti
Copy link
Member Author

jviotti commented Feb 26, 2025

@michaelmior Can you trigger a full benchmark run on this branch so we see how the results look like?

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/llvm)

Benchmark suite Current: eedfb8e Previous: 948ff42 Ratio
Compiler_Draft6_AdaptiveCard 68596540133.000015 ns/iter 68312483298.999954 ns/iter 1.00
Compiler_2019_09_OMC_JSON_V2 11096021441.999994 ns/iter 11027577914.999994 ns/iter 1.01
Evaluator_Draft4_Meta_1_No_Callback 287.02182420632744 ns/iter 283.29378537909406 ns/iter 1.01
Evaluator_Draft4_Required_Properties 674.3950864224112 ns/iter 632.4423405808556 ns/iter 1.07
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 32.208382546147114 ns/iter 33.192458142463074 ns/iter 0.97
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 14.006250490433253 ns/iter 13.700405805883841 ns/iter 1.02
Evaluator_Draft4_Items_Schema 586.7326471202888 ns/iter 602.5183530511814 ns/iter 0.97
Evaluator_Draft4_Nested_Object 5.608376677477891 ns/iter 5.29143462267445 ns/iter 1.06
Evaluator_Draft4_Properties_Triad_Optional 903.0460415765921 ns/iter 909.7315316208591 ns/iter 0.99
Evaluator_Draft4_Properties_Triad_Closed 724.3363530532328 ns/iter 704.8883847375886 ns/iter 1.03
Evaluator_Draft4_Properties_Triad_Required 901.690103340391 ns/iter 870.563567254097 ns/iter 1.04
Evaluator_Draft4_Properties_Closed 83.25563971666479 ns/iter 84.72792529301914 ns/iter 0.98
Evaluator_Draft4_Non_Recursive_Ref 29.246666960170103 ns/iter 32.42864832421251 ns/iter 0.90
Evaluator_Draft4_Pattern_Properties_True 241.85851901583533 ns/iter 238.17980650851408 ns/iter 1.02
Evaluator_Draft4_Ref_To_Single_Property 13.993164473480048 ns/iter 13.386196486430197 ns/iter 1.05
Evaluator_Draft4_Additional_Properties_Type 53.48384929094504 ns/iter 61.42778935417907 ns/iter 0.87
Evaluator_Draft4_Nested_Oneof 89.23402448405889 ns/iter 87.09661132245628 ns/iter 1.02
Evaluator_Draft4_Short_Enum 17.737105804614668 ns/iter 16.541326548371554 ns/iter 1.07
Evaluator_Draft4_Long_Enum 19.65938255813928 ns/iter 20.60598578090524 ns/iter 0.95
Evaluator_Draft4_Long_Enum_Short_Strings 17.804522591311468 ns/iter 16.527633495163105 ns/iter 1.08
Evaluator_Draft4_Type_Object 10.265734120365417 ns/iter 10.675890973243625 ns/iter 0.96
Evaluator_Draft6_Property_Names 159.38770500269715 ns/iter 135.21534181685047 ns/iter 1.18
Evaluator_Draft7_If_Then_Else 41.04596502633076 ns/iter 40.264602685940325 ns/iter 1.02
Evaluator_Draft7_Vercel_1 46888.314678074166 ns/iter 46109.40225884788 ns/iter 1.02
Evaluator_Draft7_Helm_Chart_Lock_1 281.121773365759 ns/iter 290.27327204713333 ns/iter 0.97
Evaluator_Draft7_Helm_Chart_Lock_2 274.48599004714737 ns/iter 285.5089956124682 ns/iter 0.96
Evaluator_Draft7_Jasmine_1 186.60235312017082 ns/iter 183.02722014496152 ns/iter 1.02
Evaluator_Draft7_Dependabot_1 1213.752554345237 ns/iter 1213.7633163001685 ns/iter 1.00
Evaluator_2019_09_Unevaluated_Properties 52.6485211349994 ns/iter 53.5883776303539 ns/iter 0.98
Evaluator_2019_09_OMC_JSON_V2_1 1468.248543393476 ns/iter 1453.4585640775135 ns/iter 1.01
Evaluator_2020_12_Dynamic_Ref 982.2173287675413 ns/iter 555.3676392593713 ns/iter 1.77
Evaluator_2020_12_Dynamic_Ref_Single 10.596666268324332 ns/iter 10.29100527968794 ns/iter 1.03
Evaluator_2020_12_CQL_1 4640.775278137335 ns/iter 3675.2992595013147 ns/iter 1.26
Evaluator_2020_12_OpenAPI 200629.27231253422 ns/iter 198604.35611510076 ns/iter 1.01

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/llvm)

Benchmark suite Current: eedfb8e Previous: 948ff42 Ratio
Compiler_Draft6_AdaptiveCard 52587980500.000015 ns/iter 61551956292 ns/iter 0.85
Compiler_2019_09_OMC_JSON_V2 8766306999.999983 ns/iter 10721463792.00001 ns/iter 0.82
Evaluator_Draft4_Meta_1_No_Callback 178.3982751727045 ns/iter 218.58423096866224 ns/iter 0.82
Evaluator_Draft4_Required_Properties 408.232776378486 ns/iter 518.066517757114 ns/iter 0.79
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 19.394285565245443 ns/iter 29.246656981953603 ns/iter 0.66
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 7.900929154494332 ns/iter 10.36342343954891 ns/iter 0.76
Evaluator_Draft4_Items_Schema 271.3148910970938 ns/iter 397.875918161459 ns/iter 0.68
Evaluator_Draft4_Nested_Object 3.2956612047700413 ns/iter 5.0168518991750854 ns/iter 0.66
Evaluator_Draft4_Properties_Triad_Optional 795.6940817821494 ns/iter 1193.4733223289068 ns/iter 0.67
Evaluator_Draft4_Properties_Triad_Closed 627.8121637179256 ns/iter 984.0590789701389 ns/iter 0.64
Evaluator_Draft4_Properties_Triad_Required 784.2035776243488 ns/iter 1291.783498677157 ns/iter 0.61
Evaluator_Draft4_Properties_Closed 46.52591351788647 ns/iter 71.25083602950475 ns/iter 0.65
Evaluator_Draft4_Non_Recursive_Ref 10.127182502402487 ns/iter 14.247365219812387 ns/iter 0.71
Evaluator_Draft4_Pattern_Properties_True 167.75244241489358 ns/iter 259.2083879612843 ns/iter 0.65
Evaluator_Draft4_Ref_To_Single_Property 7.424063405605765 ns/iter 10.786996372168245 ns/iter 0.69
Evaluator_Draft4_Additional_Properties_Type 17.281543375811363 ns/iter 23.766955624504845 ns/iter 0.73
Evaluator_Draft4_Nested_Oneof 55.58319185997478 ns/iter 79.32997939620354 ns/iter 0.70
Evaluator_Draft4_Short_Enum 9.615669694169696 ns/iter 11.735057082014663 ns/iter 0.82
Evaluator_Draft4_Long_Enum 31.607759110437282 ns/iter 36.63894305072789 ns/iter 0.86
Evaluator_Draft4_Long_Enum_Short_Strings 9.817049245708724 ns/iter 12.740211506129116 ns/iter 0.77
Evaluator_Draft4_Type_Object 5.908043370165953 ns/iter 8.04992899014708 ns/iter 0.73
Evaluator_Draft6_Property_Names 95.60106404932046 ns/iter 125.5883808885968 ns/iter 0.76
Evaluator_Draft7_If_Then_Else 26.24418393754093 ns/iter 34.56532018390313 ns/iter 0.76
Evaluator_Draft7_Vercel_1 33014.025684843495 ns/iter 44769.56257649099 ns/iter 0.74
Evaluator_Draft7_Helm_Chart_Lock_1 111.34383905636382 ns/iter 138.13669675721914 ns/iter 0.81
Evaluator_Draft7_Helm_Chart_Lock_2 104.4284549354584 ns/iter 134.58666460428105 ns/iter 0.78
Evaluator_Draft7_Jasmine_1 106.72204712288529 ns/iter 158.3842014636993 ns/iter 0.67
Evaluator_Draft7_Dependabot_1 741.1574458192081 ns/iter 962.0183519338063 ns/iter 0.77
Evaluator_2019_09_Unevaluated_Properties 36.42114338934061 ns/iter 50.75916669999856 ns/iter 0.72
Evaluator_2019_09_OMC_JSON_V2_1 965.3233957384659 ns/iter 1339.0691159210646 ns/iter 0.72
Evaluator_2020_12_Dynamic_Ref 403.5391981624088 ns/iter 490.2068786578752 ns/iter 0.82
Evaluator_2020_12_Dynamic_Ref_Single 5.645857108685083 ns/iter 6.660412293595355 ns/iter 0.85
Evaluator_2020_12_CQL_1 2459.286241943554 ns/iter 2840.1839373391526 ns/iter 0.87
Evaluator_2020_12_OpenAPI 160409.43136761815 ns/iter 201753.37065519788 ns/iter 0.80

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/gcc)

Benchmark suite Current: eedfb8e Previous: 948ff42 Ratio
Compiler_Draft6_AdaptiveCard 60189805030.822754 ns/iter 62149394989.01367 ns/iter 0.97
Compiler_2019_09_OMC_JSON_V2 8073983192.443848 ns/iter 8439273118.972778 ns/iter 0.96
Evaluator_Draft4_Meta_1_No_Callback 159.52314298881572 ns/iter 191.23994242141546 ns/iter 0.83
Evaluator_Draft4_Required_Properties 317.47745429788074 ns/iter 373.4863770429236 ns/iter 0.85
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 18.59646750735067 ns/iter 22.393473022631248 ns/iter 0.83
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 7.204556102387926 ns/iter 9.597184809283359 ns/iter 0.75
Evaluator_Draft4_Items_Schema 439.24847774160884 ns/iter 596.4238053902826 ns/iter 0.74
Evaluator_Draft4_Nested_Object 2.049115583793565 ns/iter 2.1816040713940987 ns/iter 0.94
Evaluator_Draft4_Properties_Triad_Optional 804.2525366220336 ns/iter 889.0806348010688 ns/iter 0.90
Evaluator_Draft4_Properties_Triad_Closed 651.2549132604439 ns/iter 757.5436404547306 ns/iter 0.86
Evaluator_Draft4_Properties_Triad_Required 816.4232885838622 ns/iter 920.1548159841592 ns/iter 0.89
Evaluator_Draft4_Properties_Closed 65.67706104829438 ns/iter 87.31750577444393 ns/iter 0.75
Evaluator_Draft4_Non_Recursive_Ref 12.703967032269222 ns/iter 14.613592810920931 ns/iter 0.87
Evaluator_Draft4_Pattern_Properties_True 182.48455943293268 ns/iter 206.62383081215097 ns/iter 0.88
Evaluator_Draft4_Ref_To_Single_Property 7.0039962721272495 ns/iter 7.472020779468345 ns/iter 0.94
Evaluator_Draft4_Additional_Properties_Type 24.211500429804666 ns/iter 31.460650055828136 ns/iter 0.77
Evaluator_Draft4_Nested_Oneof 55.81623414662195 ns/iter 59.75039324431016 ns/iter 0.93
Evaluator_Draft4_Short_Enum 8.042344326322189 ns/iter 8.822358417753616 ns/iter 0.91
Evaluator_Draft4_Long_Enum 9.640942615858386 ns/iter 9.710155104240057 ns/iter 0.99
Evaluator_Draft4_Long_Enum_Short_Strings 9.07926488273047 ns/iter 8.221891930414822 ns/iter 1.10
Evaluator_Draft4_Type_Object 4.634940320346698 ns/iter 4.673648286645476 ns/iter 0.99
Evaluator_Draft6_Property_Names 106.68568439016516 ns/iter 113.89489339934102 ns/iter 0.94
Evaluator_Draft7_If_Then_Else 26.63087298551005 ns/iter 30.280366430066486 ns/iter 0.88
Evaluator_Draft7_Vercel_1 43449.95409449384 ns/iter 43821.91533090722 ns/iter 0.99
Evaluator_Draft7_Helm_Chart_Lock_1 177.82411471171258 ns/iter 178.9649020917839 ns/iter 0.99
Evaluator_Draft7_Helm_Chart_Lock_2 166.33107271825637 ns/iter 175.85674884224298 ns/iter 0.95
Evaluator_Draft7_Jasmine_1 130.95458978656782 ns/iter 145.0467125479412 ns/iter 0.90
Evaluator_Draft7_Dependabot_1 940.4802827649074 ns/iter 969.3054284113986 ns/iter 0.97
Evaluator_2019_09_Unevaluated_Properties 34.97079384929331 ns/iter 35.872648102444074 ns/iter 0.97
Evaluator_2019_09_OMC_JSON_V2_1 1044.8438865186313 ns/iter 1057.1723022736335 ns/iter 0.99
Evaluator_2020_12_Dynamic_Ref 461.9503836599327 ns/iter 448.6718664368614 ns/iter 1.03
Evaluator_2020_12_Dynamic_Ref_Single 4.810244811136937 ns/iter 4.560672313260583 ns/iter 1.05
Evaluator_2020_12_CQL_1 2526.5369819961475 ns/iter 2625.478350597879 ns/iter 0.96
Evaluator_2020_12_OpenAPI 170264.4661361096 ns/iter 276689.6236507627 ns/iter 0.62

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/gcc)

Benchmark suite Current: eedfb8e Previous: 948ff42 Ratio
Evaluator_2020_12_Dynamic_Ref 631.0818547075328 ns/iter 634.9157483528479 ns/iter 0.99
Evaluator_2020_12_Dynamic_Ref_Single 9.73029761756413 ns/iter 9.343948255419704 ns/iter 1.04
Evaluator_2020_12_CQL_1 3802.3879901334217 ns/iter 3784.995509095865 ns/iter 1.00
Evaluator_2020_12_OpenAPI 229935.04229507232 ns/iter 226326.13008130927 ns/iter 1.02
Evaluator_2019_09_Unevaluated_Properties 53.00667890430672 ns/iter 53.880314891576674 ns/iter 0.98
Evaluator_2019_09_OMC_JSON_V2_1 1362.6150602753721 ns/iter 1495.4300668669046 ns/iter 0.91
Evaluator_Draft7_If_Then_Else 45.34305472830434 ns/iter 45.1577688846125 ns/iter 1.00
Evaluator_Draft7_Vercel_1 46663.06132138789 ns/iter 47724.161990650675 ns/iter 0.98
Evaluator_Draft7_Helm_Chart_Lock_1 124.96467449970417 ns/iter 126.32508740328751 ns/iter 0.99
Evaluator_Draft7_Helm_Chart_Lock_2 123.33911417451677 ns/iter 122.72965346423626 ns/iter 1.00
Evaluator_Draft7_Jasmine_1 153.0179766353647 ns/iter 164.67718349407988 ns/iter 0.93
Evaluator_Draft7_Dependabot_1 938.8019319815683 ns/iter 935.4511028021172 ns/iter 1.00
Evaluator_Draft6_Property_Names 173.0269869881307 ns/iter 195.81746458909933 ns/iter 0.88
Evaluator_Draft4_Meta_1_No_Callback 243.80818135844282 ns/iter 243.46948881325656 ns/iter 1.00
Evaluator_Draft4_Required_Properties 460.4548663818013 ns/iter 468.8564483661102 ns/iter 0.98
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 29.676198536367934 ns/iter 29.17354595127744 ns/iter 1.02
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 10.379973321192095 ns/iter 10.283490798971632 ns/iter 1.01
Evaluator_Draft4_Items_Schema 495.63595632692244 ns/iter 507.00778581952335 ns/iter 0.98
Evaluator_Draft4_Nested_Object 4.249916951308043 ns/iter 3.8604097309468632 ns/iter 1.10
Evaluator_Draft4_Properties_Triad_Optional 1046.5859008753278 ns/iter 1048.9824534438778 ns/iter 1.00
Evaluator_Draft4_Properties_Triad_Closed 833.3751650090759 ns/iter 830.5912291246178 ns/iter 1.00
Evaluator_Draft4_Properties_Triad_Required 1032.9470871760077 ns/iter 1041.001573948017 ns/iter 0.99
Evaluator_Draft4_Properties_Closed 74.70184768516063 ns/iter 72.96655774241094 ns/iter 1.02
Evaluator_Draft4_Non_Recursive_Ref 12.536764766115382 ns/iter 12.780182721597882 ns/iter 0.98
Evaluator_Draft4_Pattern_Properties_True 289.8557108195994 ns/iter 275.1816965255089 ns/iter 1.05
Evaluator_Draft4_Ref_To_Single_Property 10.356341442038067 ns/iter 10.314375569149613 ns/iter 1.00
Evaluator_Draft4_Additional_Properties_Type 15.357552193788242 ns/iter 15.573346114262723 ns/iter 0.99
Evaluator_Draft4_Nested_Oneof 108.72135111148832 ns/iter 112.82183884708809 ns/iter 0.96
Evaluator_Draft4_Short_Enum 18.06507201825563 ns/iter 17.727768609640655 ns/iter 1.02
Evaluator_Draft4_Long_Enum 26.062955217527954 ns/iter 23.303412677018194 ns/iter 1.12
Evaluator_Draft4_Long_Enum_Short_Strings 18.060033131812276 ns/iter 17.79957501691184 ns/iter 1.01
Evaluator_Draft4_Type_Object 9.797904681908534 ns/iter 9.337990985024707 ns/iter 1.05
Compiler_2019_09_OMC_JSON_V2 10686997476.999977 ns/iter 10747970438.000038 ns/iter 0.99
Compiler_Draft6_AdaptiveCard 69797893883.99991 ns/iter 68009856280.00001 ns/iter 1.03

This comment was automatically generated by workflow using github-action-benchmark.

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (windows/msvc)

Benchmark suite Current: eedfb8e Previous: 948ff42 Ratio
Compiler_Draft6_AdaptiveCard 168833258300 ns/iter 163445904700.00003 ns/iter 1.03
Compiler_2019_09_OMC_JSON_V2 24341284300.0001 ns/iter 23953018500.0001 ns/iter 1.02
Evaluator_Draft4_Meta_1_No_Callback 351.19128996583976 ns/iter 371.44627295597496 ns/iter 0.95
Evaluator_Draft4_Required_Properties 749.3191964286692 ns/iter 770.2389508928828 ns/iter 0.97
Evaluator_Draft4_Many_Optional_Properties_Minimal_Match 39.94605468750555 ns/iter 37.736573660713496 ns/iter 1.06
Evaluator_Draft4_Few_Optional_Properties_Minimal_Match 16.836752119395747 ns/iter 15.583415178568316 ns/iter 1.08
Evaluator_Draft4_Items_Schema 686.8388392857431 ns/iter 700.7735491070731 ns/iter 0.98
Evaluator_Draft4_Nested_Object 6.915763392857853 ns/iter 6.032035999999152 ns/iter 1.15
Evaluator_Draft4_Properties_Triad_Optional 1565.314508928495 ns/iter 1603.23482142845 ns/iter 0.98
Evaluator_Draft4_Properties_Triad_Closed 1273.360000000017 ns/iter 1309.3073214284752 ns/iter 0.97
Evaluator_Draft4_Properties_Triad_Required 1552.8819196428044 ns/iter 1597.3600446430275 ns/iter 0.97
Evaluator_Draft4_Properties_Closed 91.37478794643629 ns/iter 89.54558975241797 ns/iter 1.02
Evaluator_Draft4_Non_Recursive_Ref 35.36272206004814 ns/iter 31.9732504995821 ns/iter 1.11
Evaluator_Draft4_Pattern_Properties_True 222.02602432745567 ns/iter 229.09621327048256 ns/iter 0.97
Evaluator_Draft4_Ref_To_Single_Property 16.899213949334076 ns/iter 15.966292410714646 ns/iter 1.06
Evaluator_Draft4_Additional_Properties_Type 65.43951785713732 ns/iter 58.102008928569504 ns/iter 1.13
Evaluator_Draft4_Nested_Oneof 103.99364267885677 ns/iter 109.6426424266797 ns/iter 0.95
Evaluator_Draft4_Short_Enum 21.98785937499892 ns/iter 24.166450000003742 ns/iter 0.91
Evaluator_Draft4_Long_Enum 24.017909330156222 ns/iter 22.749354656810034 ns/iter 1.06
Evaluator_Draft4_Long_Enum_Short_Strings 24.441367857142332 ns/iter 28.53157098152246 ns/iter 0.86
Evaluator_Draft4_Type_Object 13.743899938643764 ns/iter 13.499971814728742 ns/iter 1.02
Evaluator_Draft6_Property_Names 157.81620535713716 ns/iter 166.16935267858173 ns/iter 0.95
Evaluator_Draft7_If_Then_Else 51.11156000000392 ns/iter 53.68955357141659 ns/iter 0.95
Evaluator_Draft7_Vercel_1 69605.84821429044 ns/iter 70558.23214285185 ns/iter 0.99
Evaluator_Draft7_Helm_Chart_Lock_1 296.9475740013867 ns/iter 287.7396152076016 ns/iter 1.03
Evaluator_Draft7_Helm_Chart_Lock_2 271.59743846419576 ns/iter 263.15238451574913 ns/iter 1.03
Evaluator_Draft7_Jasmine_1 217.99737500000305 ns/iter 221.1005000000199 ns/iter 0.99
Evaluator_Draft7_Dependabot_1 1513.3643913551323 ns/iter 1557.8464285712 ns/iter 0.97
Evaluator_2019_09_Unevaluated_Properties 64.29816071428515 ns/iter 75.27516741071392 ns/iter 0.85
Evaluator_2019_09_OMC_JSON_V2_1 1840.68860775753 ns/iter 1877.4745334594957 ns/iter 0.98
Evaluator_2020_12_Dynamic_Ref 861.0914905840947 ns/iter 852.3513392856127 ns/iter 1.01
Evaluator_2020_12_Dynamic_Ref_Single 13.371856413516173 ns/iter 13.35072047611205 ns/iter 1.00
Evaluator_2020_12_CQL_1 4870.283567217909 ns/iter 5070.947000001524 ns/iter 0.96
Evaluator_2020_12_OpenAPI 277118.60184819903 ns/iter 290403.73644033866 ns/iter 0.95

This comment was automatically generated by workflow using github-action-benchmark.

@michaelmior
Copy link
Collaborator

@michaelmior
Copy link
Collaborator

Just glancing through the results, it looks like cold runs are slightly slower on average and warm runs faster. I think we'll have to do a more thorough analysis to see if this is this worthwhile.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants