in reply to Re^7: Challenge: CPU-optimized byte-wise or-equals (for a meter of beer)
in thread Challenge: CPU-optimized byte-wise or-equals (for a meter of beer)
The fastest pure-Perl solution in every case seems to be mrm_5, and usually by a decent margin. That's a version of moritz's code slightly tweaked with some of the tips taken from avar's code. moritz's own code (as tweaked for in-place fairness by ikegami) seems to be near the top quite consistently. So if pure Perl speed is the goal, moritz seems to have been on the right track all along. As my code for mrm_5 is just variations on improving his, I think he should get most of the credit for it (especially since he didn't go stupid halfway through and break it like I did).
Strawberry 5.8.8 on WinXP, AthlonXP 2400+, 1GB
Rate split1 substr1 ikegami1 avar2 corion avar2_pos mrm_ +6 ikegami2 bart ikegami3 mrm_3 ikegami4 mrm_4 mrm_1 moritz mrm_5 split1 0.626/s -- -98% -98% -100% -100% -100% -100 +% -100% -100% -100% -100% -100% -100% -100% -100% -100% substr1 28.9/s 4516% -- -24% -87% -90% -92% -93 +% -93% -93% -93% -96% -96% -96% -97% -97% -98% ikegami1 38.0/s 5968% 31% -- -83% -87% -89% -91 +% -91% -91% -91% -95% -95% -95% -96% -96% -97% avar2 224/s 35729% 676% 490% -- -24% -36% -47 +% -48% -48% -48% -69% -71% -72% -73% -74% -82% corion 294/s 46801% 916% 673% 31% -- -16% -30 +% -32% -32% -32% -60% -62% -64% -65% -66% -77% avar2_pos 351/s 55891% 1113% 823% 56% 19% -- -17 +% -19% -19% -19% -52% -55% -57% -59% -59% -73% mrm_6 420/s 67019% 1354% 1006% 87% 43% 20% - +- -3% -3% -3% -42% -46% -48% -50% -51% -67% ikegami2 431/s 68773% 1392% 1035% 92% 47% 23% 3 +% -- 0% -0% -41% -45% -47% -49% -49% -66% bart 431/s 68773% 1392% 1035% 92% 47% 23% 3 +% 0% -- -0% -41% -45% -47% -49% -49% -66% ikegami3 433/s 69021% 1397% 1039% 93% 47% 23% 3 +% 0% 0% -- -41% -44% -47% -49% -49% -66% mrm_3 729/s 116298% 2421% 1818% 225% 148% 108% 73 +% 69% 69% 68% -- -6% -10% -14% -14% -43% ikegami4 777/s 124046% 2589% 1946% 247% 165% 122% 85 +% 80% 80% 80% 7% -- -4% -8% -9% -39% mrm_4 813/s 129735% 2713% 2040% 262% 177% 132% 93 +% 89% 89% 88% 12% 5% -- -4% -5% -36% mrm_1 846/s 135098% 2829% 2128% 277% 188% 141% 101 +% 96% 96% 96% 16% 9% 4% -- -1% -34% moritz 852/s 136005% 2848% 2143% 280% 190% 143% 103 +% 98% 98% 97% 17% 10% 5% 1% -- -33% mrm_5 1277/s 203929% 4320% 3262% 469% 335% 264% 204 +% 196% 196% 195% 75% 64% 57% 51% 50% --
cygperl 5.8.7 on same machine1..16 ok 1 - corion gets some value ok 2 - substr1 gets same value ok 3 - mrm_1 gets same value ok 4 - mrm_4 gets same value ok 5 - split1 gets same value ok 6 - moritz gets same value ok 7 - avar2_pos gets same value ok 8 - ikegami1 gets same value ok 9 - ikegami2 gets same value ok 10 - ikegami3 gets same value ok 11 - ikegami4 gets same value ok 12 - bart gets same value ok 13 - mrm_3 gets same value ok 14 - mrm_5 gets same value
Rate split1 substr1 ikegami1 corion bart ikegami3 ikegam +i2 avar2 mrm_6 ikegami4 avar2_pos mrm_3 moritz mrm_1 mrm_4 mrm_5 split1 1.52/s -- -94% -96% -99% -100% -100% -10 +0% -100% -100% -100% -100% -100% -100% -100% -100% -100% substr1 26.4/s 1634% -- -33% -90% -93% -93% -9 +3% -94% -94% -97% -98% -98% -98% -98% -98% -99% ikegami1 39.6/s 2503% 50% -- -85% -90% -90% -9 +0% -91% -91% -95% -96% -96% -97% -97% -97% -98% corion 271/s 17675% 925% 583% -- -29% -30% -3 +3% -38% -40% -65% -75% -75% -80% -81% -82% -87% bart 381/s 24955% 1345% 863% 41% -- -1% - +5% -12% -16% -50% -64% -65% -72% -73% -75% -81% ikegami3 385/s 25198% 1359% 872% 42% 1% -- - +5% -11% -15% -50% -64% -65% -72% -72% -74% -81% ikegami2 403/s 26410% 1428% 918% 49% 6% 5% +-- -7% -11% -48% -62% -63% -71% -71% -73% -80% avar2 435/s 28448% 1546% 997% 61% 14% 13% +8% -- -4% -43% -59% -60% -68% -69% -71% -79% mrm_6 454/s 29747% 1621% 1047% 68% 19% 18% 1 +3% 5% -- -41% -58% -58% -67% -68% -70% -78% ikegami4 769/s 50405% 2812% 1840% 184% 102% 100% 9 +1% 77% 69% -- -28% -30% -44% -45% -49% -63% avar2_pos 1072/s 70355% 3962% 2607% 296% 181% 179% 16 +6% 147% 136% 40% -- -2% -22% -23% -28% -48% mrm_3 1094/s 71790% 4045% 2662% 304% 187% 184% 17 +1% 152% 141% 42% 2% -- -21% -22% -27% -47% moritz 1377/s 90389% 5117% 3376% 409% 261% 258% 24 +1% 217% 203% 79% 28% 26% -- -2% -8% -33% mrm_1 1398/s 91779% 5197% 3430% 417% 267% 263% 24 +7% 222% 208% 82% 30% 28% 2% -- -7% -32% mrm_4 1496/s 98168% 5566% 3675% 453% 292% 288% 27 +1% 244% 229% 95% 39% 37% 9% 7% -- -27% mrm_5 2061/s 135297% 7706% 5102% 662% 440% 435% 41 +1% 374% 354% 168% 92% 88% 50% 47% 38% --
split1 1.51/s -- -86% -91% -99% -99% -99% -99% - +99% -99% -100% -100% -100% -100% -100% -100% -100% substr1 10.6/s 602% -- -39% -94% -95% -95% -95% - +96% -96% -97% -97% -98% -98% -98% -98% -99% ikegami1 17.4/s 1050% 64% -- -90% -91% -92% -93% - +93% -93% -95% -96% -96% -97% -97% -97% -98% corion 167/s 10961% 1475% 862% -- -17% -21% -29% - +29% -30% -49% -60% -63% -73% -73% -76% -81% avar2 201/s 13202% 1794% 1056% 20% -- -5% -14% - +15% -15% -38% -52% -56% -68% -68% -71% -77% mrm_6 211/s 13837% 1884% 1112% 26% 5% -- -10% - +11% -11% -35% -49% -53% -66% -67% -70% -76% bart 234/s 15415% 2109% 1249% 40% 17% 11% -- +-1% -1% -28% -43% -48% -62% -63% -66% -73% ikegami3 236/s 15512% 2122% 1257% 41% 17% 12% 1% + -- -1% -28% -43% -48% -62% -63% -66% -73% ikegami2 237/s 15610% 2136% 1266% 42% 18% 13% 1% + 1% -- -27% -43% -48% -62% -62% -66% -72% avar2_pos 326/s 21477% 2972% 1776% 95% 62% 55% 39% +38% 37% -- -21% -28% -48% -48% -53% -62% ikegami4 415/s 27358% 3809% 2287% 148% 106% 97% 77% +76% 75% 27% -- -8% -34% -34% -40% -52% mrm_3 453/s 29865% 4166% 2505% 171% 125% 115% 93% +92% 91% 39% 9% -- -27% -28% -34% -47% mrm_1 624/s 41207% 5780% 3491% 273% 211% 196% 166% 1 +65% 163% 91% 50% 38% -- -1% -10% -27% moritz 629/s 41567% 5832% 3522% 277% 213% 199% 169% 1 +67% 165% 93% 52% 39% 1% -- -9% -27% mrm_4 690/s 45595% 6405% 3872% 313% 244% 228% 195% 1 +93% 191% 112% 66% 52% 11% 10% -- -20% mrm_5 860/s 56848% 8007% 4850% 415% 328% 309% 267% 2 +65% 263% 164% 107% 90% 38% 37% 25% --
Rate split1 substr1 ikegami1 corion avar2 ikegami2 ikegami +3 bart mrm_6 avar2_pos ikegami4 mrm_3 moritz mrm_4 mrm_1 mrm_5 split1 1.46/s -- -89% -89% -99% -99% -99% -99 +% -99% -99% -100% -100% -100% -100% -100% -100% -100% substr1 13.6/s 835% -- -0% -93% -94% -94% -95 +% -95% -95% -96% -97% -98% -98% -98% -98% -99% ikegami1 13.7/s 839% 0% -- -93% -94% -94% -95 +% -95% -95% -96% -97% -98% -98% -98% -98% -99% corion 198/s 13469% 1351% 1346% -- -13% -20% -24 +% -26% -29% -38% -53% -67% -74% -74% -74% -80% avar2 226/s 15417% 1559% 1553% 14% -- -8% -13 +% -15% -19% -29% -46% -62% -70% -70% -70% -77% ikegami2 247/s 16823% 1709% 1703% 25% 9% -- -5 +% -7% -12% -22% -41% -59% -67% -67% -67% -75% ikegami3 261/s 17804% 1814% 1808% 32% 15% 6% - +- -2% -7% -18% -38% -56% -65% -65% -65% -74% bart 266/s 18129% 1849% 1842% 34% 17% 8% 2 +% -- -5% -16% -37% -55% -65% -65% -65% -73% mrm_6 281/s 19147% 1957% 1951% 42% 24% 14% 7 +% 6% -- -12% -33% -53% -63% -63% -63% -72% avar2_pos 317/s 21680% 2228% 2221% 61% 40% 29% 22 +% 19% 13% -- -25% -47% -58% -58% -58% -68% ikegami4 421/s 28805% 2990% 2980% 113% 86% 71% 61 +% 59% 50% 33% -- -29% -44% -44% -44% -58% mrm_3 596/s 40762% 4268% 4254% 201% 163% 141% 128 +% 124% 112% 88% 41% -- -21% -21% -21% -40% moritz 750/s 51361% 5401% 5383% 279% 232% 204% 187 +% 182% 167% 136% 78% 26% -- -1% -1% -25% mrm_4 756/s 51729% 5440% 5422% 282% 234% 206% 189 +% 184% 169% 138% 79% 27% 1% -- -0% -24% mrm_1 756/s 51781% 5446% 5428% 282% 234% 207% 190 +% 185% 170% 138% 79% 27% 1% 0% -- -24% mrm_5 997/s 68261% 7208% 7184% 404% 341% 304% 282 +% 275% 255% 214% 136% 67% 33% 32% 32% --
Just for kicks: miniperl 5.9.5 on Mandriva
Rate split1 substr1 ikegami1 corion avar2 ikegami2 ikegami +3 bart mrm_6 avar2_pos ikegami4 mrm_3 mrm_4 mrm_1 moritz mrm_5 split1 1.47/s -- -89% -89% -99% -99% -99% -99 +% -99% -99% -100% -100% -100% -100% -100% -100% -100% substr1 13.6/s 827% -- -1% -93% -94% -94% -95 +% -95% -95% -96% -97% -98% -98% -98% -98% -99% ikegami1 13.8/s 836% 1% -- -93% -94% -94% -95 +% -95% -95% -96% -97% -98% -98% -98% -98% -99% corion 209/s 14081% 1429% 1414% -- -6% -15% -21 +% -22% -26% -32% -51% -66% -73% -73% -73% -80% avar2 222/s 14992% 1528% 1512% 6% -- -9% -16 +% -17% -22% -28% -48% -64% -71% -71% -71% -78% ikegami2 244/s 16517% 1692% 1675% 17% 10% -- -7 +% -9% -14% -21% -43% -60% -68% -69% -69% -76% ikegami3 263/s 17814% 1832% 1813% 26% 19% 8% - +- -2% -7% -15% -38% -57% -66% -66% -66% -74% bart 268/s 18098% 1863% 1843% 28% 21% 10% 2 +% -- -6% -13% -37% -56% -65% -66% -66% -74% mrm_6 283/s 19159% 1977% 1957% 36% 28% 16% 8 +% 6% -- -8% -33% -54% -63% -64% -64% -72% avar2_pos 308/s 20876% 2162% 2140% 48% 39% 26% 17 +% 15% 9% -- -27% -50% -60% -60% -60% -70% ikegami4 425/s 28821% 3019% 2989% 104% 92% 74% 61 +% 59% 50% 38% -- -31% -45% -45% -45% -59% mrm_3 614/s 41671% 4405% 4361% 195% 177% 151% 133 +% 130% 117% 99% 44% -- -20% -21% -21% -40% mrm_4 768/s 52111% 5531% 5476% 268% 246% 214% 191 +% 187% 171% 149% 81% 25% -- -1% -1% -25% mrm_1 777/s 52718% 5596% 5541% 272% 250% 218% 195 +% 190% 174% 152% 83% 26% 1% -- -0% -24% moritz 777/s 52765% 5601% 5546% 273% 250% 218% 195 +% 190% 174% 152% 83% 27% 1% 0% -- -24% mrm_5 1027/s 69737% 7431% 7358% 392% 363% 320% 290 +% 284% 263% 233% 141% 67% 34% 32% 32% --
|
|---|