Message ID | 1507211472-1194-3-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/4] sparc: Implement memcpy/mempcpy ifunc selection in C | expand |
From: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Thu, 5 Oct 2017 10:51:11 -0300 > Both SPARC support multiarch platforms (sparcv9 and sparc64) have the > a default assembly implemented memcpy. Since it should not be any > restriction about it them on the loader object and assuming they are > faster than generic ones this patch uses them for rtld objects. > > Also, there is no indication neither on original patch [1] or in commit > message why the generic one where used instead of the sparc optimized > ones. The ultra1 memcpy is really an extremely non-ideal variant to use as the default for anything. It's much slower on newer cpus, as the block loads and stores used in the ultra1 version aren't optimized the same way they were in those older chips. The C version is faster on newer cpus and definitely a better choice as a default, especially because it doesn't use any cpu specific instructions like the ultra1 variant does. In the Linux kernel we have an assembler version we use as the default which doesn't use any special instructions.
On 05/10/2017 13:49, David Miller wrote: > From: Adhemerval Zanella <adhemerval.zanella@linaro.org> > Date: Thu, 5 Oct 2017 10:51:11 -0300 > >> Both SPARC support multiarch platforms (sparcv9 and sparc64) have the >> a default assembly implemented memcpy. Since it should not be any >> restriction about it them on the loader object and assuming they are >> faster than generic ones this patch uses them for rtld objects. >> >> Also, there is no indication neither on original patch [1] or in commit >> message why the generic one where used instead of the sparc optimized >> ones. > > The ultra1 memcpy is really an extremely non-ideal variant to use as > the default for anything. > > It's much slower on newer cpus, as the block loads and stores used in > the ultra1 version aren't optimized the same way they were in those > older chips. > > The C version is faster on newer cpus and definitely a better choice > as a default, especially because it doesn't use any cpu specific > instructions like the ultra1 variant does. > > In the Linux kernel we have an assembler version we use as the default > which doesn't use any special instructions. Thanks for the explanation, although it does not explain why the ultra1 is currently the default for sparc64 (sysdeps/sparc/sparc64/memcpy.S) and also the default selection for multiarch. The C version is used solely for loader currently. I tried to check which are the performance of C implementation against ultra1 one on a niagara5 and results are: - on bench-memcpy the C version is slight slower for sizes up to 32 (about 4% faster for sizes up to 16, 40% from 16 to 32 and 50% up to 32). It is definitely faster for sizes higher than 64 (62% faster for sizes from 64 to 128 and 85% for sizes higher than 128). - on bench-memcpy-random shows no performance difference, however bench-memcpy-large shows the C implementation is indeed faster for all inputs. So I think that instead of using default memcpy for rtld, the best strategy would to use the C implementation instead as default and add ultra1 as another option for ifunc resolution. { "timing_type": "hp_timing", "functions": { "memcpy": { "bench-variant": "random", "ifuncs": ["__memcpy_niagara4", "__memcpy_niagara2", "__memcpy_niagara1", "__memcpy_ultra1", "__memcpy_c"], "results": [ { "max-size": 4096, "timings": [295019, 285867, 335106, 304419, 302071] }, { "max-size": 8192, "timings": [280727, 277078, 323454, 296089, 296732] }, { "max-size": 16384, "timings": [306328, 296740, 346874, 314423, 313847] }, { "max-size": 32768, "timings": [313908, 308621, 354756, 324550, 323395] }, { "max-size": 65536, "timings": [344289, 336540, 394800, 353721, 357068] }] } } } { "timing_type": "hp_timing", "functions": { "memcpy": { "bench-variant": "default", "ifuncs": ["builtin_memcpy", "simple_memcpy", "__memcpy_niagara4", "__memcpy_niagara2", "__memcpy_niagara1", "__memcpy_ultra1", "__memcpy_c"], "results": [ { "length": 1, "align1": 0, "align2": 0, "timings": [1104.31, 13.0625, 16.7656, 47.4062, 34.625, 40.7969, 36.1562] }, { "length": 1, "align1": 0, "align2": 0, "timings": [20.7344, 10.6562, 14.2969, 18.0781, 18.0938, 17.0469, 19.3438] }, { "length": 1, "align1": 0, "align2": 0, "timings": [19.8281, 10.6562, 14.2812, 17.6094, 17.7344, 17.4219, 19.0625] }, { "length": 1, "align1": 0, "align2": 0, "timings": [19.4844, 10.6562, 14.2812, 17.5469, 16.4531, 16.75, 19.8281] }, { "length": 2, "align1": 0, "align2": 0, "timings": [21.7344, 22.0312, 18.7031, 31.2188, 26.2031, 25.4688, 28.8438] }, { "length": 2, "align1": 1, "align2": 0, "timings": [19.5938, 19.9688, 14.8906, 24.7812, 23.6094, 16.2188, 27.2812] }, { "length": 2, "align1": 0, "align2": 1, "timings": [20.5, 19.8906, 15.2031, 24.2812, 22.9688, 15.8906, 28.1562] }, { "length": 2, "align1": 1, "align2": 1, "timings": [20.1562, 19.0938, 14.8438, 22.7188, 22.0781, 15.8906, 27.375] }, { "length": 4, "align1": 0, "align2": 0, "timings": [25.0938, 34.6562, 25.625, 21.2656, 20, 28.0156, 37.9375] }, { "length": 4, "align1": 2, "align2": 0, "timings": [74.9375, 25.3281, 79.0938, 35.0312, 31.7969, 28.0156, 34.2188] }, { "length": 4, "align1": 0, "align2": 2, "timings": [69.0938, 24.1094, 68.0625, 28.0469, 28.5312, 27.8906, 34.1875] }, { "length": 4, "align1": 2, "align2": 2, "timings": [70.0312, 24.0312, 66.7031, 28.1094, 25.5938, 26.5625, 34.1875] }, { "length": 8, "align1": 0, "align2": 0, "timings": [29.6094, 48.9688, 24.2656, 45.4375, 39.5, 40.3906, 51.7812] }, { "length": 8, "align1": 3, "align2": 0, "timings": [88.1094, 37.4375, 81.4219, 44.1875, 45.8906, 34.7344, 46.4219] }, { "length": 8, "align1": 0, "align2": 3, "timings": [81.4375, 36.9219, 76.7656, 37.2656, 36.9531, 34.2656, 46.625] }, { "length": 8, "align1": 3, "align2": 3, "timings": [81.2969, 35.6094, 76.0469, 34.6094, 36.0781, 34.1719, 44.9688] }, { "length": 16, "align1": 0, "align2": 0, "timings": [67.9688, 68.5469, 58.4844, 34.9688, 45.8281, 57.8594, 75.8438] }, { "length": 16, "align1": 4, "align2": 0, "timings": [60.6094, 58.9062, 53.0938, 54.3281, 64.6719, 60.1719, 59.8125] }, { "length": 16, "align1": 0, "align2": 4, "timings": [61.4688, 58.9844, 53.0625, 87.1406, 108.625, 37.25, 88.0312] }, { "length": 16, "align1": 4, "align2": 4, "timings": [60.0938, 58.9844, 53.1875, 57.0312, 57.5156, 31.2344, 88.5625] }, { "length": 32, "align1": 0, "align2": 0, "timings": [41.1875, 117.203, 33, 39, 42.3125, 37.5625, 57.7969] }, { "length": 32, "align1": 5, "align2": 0, "timings": [70.625, 106.547, 57.3906, 59.2188, 57.7812, 162.266, 53.4375] }, { "length": 32, "align1": 0, "align2": 5, "timings": [157.828, 107, 139.047, 105.859, 110.266, 245.234, 107.547] }, { "length": 32, "align1": 5, "align2": 5, "timings": [134.656, 107.844, 101.062, 94.5, 93.3438, 65.5938, 110.469] }, { "length": 64, "align1": 0, "align2": 0, "timings": [50.0625, 226.016, 44.8438, 55.9062, 50.5625, 56.6094, 56.9062] }, { "length": 64, "align1": 6, "align2": 0, "timings": [77.2812, 225.797, 68.8281, 73.9531, 74.0312, 161.359, 66.7188] }, { "length": 64, "align1": 0, "align2": 6, "timings": [145.203, 225.188, 133.656, 104.484, 109.891, 243.031, 98.4531] }, { "length": 64, "align1": 6, "align2": 6, "timings": [79.5156, 226.047, 62.9844, 89.5938, 82.4219, 70.4844, 87.8906] }, { "length": 128, "align1": 0, "align2": 0, "timings": [133.938, 417.578, 118.594, 72.3594, 259.328, 72.2656, 67.9375] }, { "length": 128, "align1": 7, "align2": 0, "timings": [228.891, 417.172, 217.547, 110.438, 294.781, 186.047, 96.3594] }, { "length": 128, "align1": 0, "align2": 7, "timings": [328.031, 417.812, 309.719, 138.609, 504.922, 267.328, 126.469] }, { "length": 128, "align1": 7, "align2": 7, "timings": [233.844, 417.578, 222.875, 130.875, 482.609, 96.5156, 105.906] }, { "length": 256, "align1": 0, "align2": 0, "timings": [164.125, 801.594, 156.891, 528.234, 314.219, 95.6406, 109.969] }, { "length": 256, "align1": 8, "align2": 0, "timings": [157.922, 801.609, 151.578, 563.484, 313.734, 89.5938, 93.5469] }, { "length": 256, "align1": 0, "align2": 8, "timings": [262.906, 801.578, 221.078, 832.297, 538.25, 82.2656, 92.4688] }, { "length": 256, "align1": 8, "align2": 8, "timings": [254.406, 801.594, 218.344, 751.828, 523.703, 82.2656, 92.5] }, { "length": 512, "align1": 0, "align2": 0, "timings": [246.5, 1569.56, 236.594, 673.062, 386.234, 835.203, 172.469] }, { "length": 512, "align1": 9, "align2": 0, "timings": [333.781, 1569.56, 321.031, 695.219, 478.188, 783.531, 257.078] }, { "length": 512, "align1": 0, "align2": 9, "timings": [439.859, 1569.58, 419.5, 907.453, 700.703, 897.172, 365.938] }, { "length": 512, "align1": 9, "align2": 9, "timings": [381.547, 1569.58, 364.719, 886.172, 618, 873.188, 219.172] }, { "length": 1024, "align1": 0, "align2": 0, "timings": [403.312, 3105.58, 390.469, 957.469, 551.234, 976.844, 320.156] }, { "length": 1024, "align1": 10, "align2": 0, "timings": [493.016, 3105.81, 479.688, 970.844, 751.703, 962.5, 485.938] }, { "length": 1024, "align1": 0, "align2": 10, "timings": [595.266, 3106.25, 573.953, 1197.27, 993.641, 1116.22, 519.031] }, { "length": 1024, "align1": 10, "align2": 10, "timings": [558.875, 3105.81, 538.188, 1172.83, 778.375, 1104.25, 5235.78] }, { "length": 2048, "align1": 0, "align2": 0, "timings": [711.922, 6177.8, 698, 1520.27, 949.188, 1389.56, 580.172] }, { "length": 2048, "align1": 11, "align2": 0, "timings": [843, 6177.84, 832.828, 1535.2, 1322, 1380.7, 904.141] }, { "length": 2048, "align1": 0, "align2": 11, "timings": [903.672, 6182.53, 891.219, 1802.75, 1522.86, 1495.52, 935.75] }, { "length": 2048, "align1": 11, "align2": 11, "timings": [857.234, 6178.23, 845.109, 1729.52, 1195.28, 1476.55, 623.656] }, { "length": 4096, "align1": 0, "align2": 0, "timings": [1326.77, 12707.1, 1313, 2647.8, 1772.73, 2197.03, 1090.64] }, { "length": 4096, "align1": 12, "align2": 0, "timings": [1434.52, 12331.8, 1402.78, 2664.81, 2403.75, 2198.64, 1739.91] }, { "length": 4096, "align1": 0, "align2": 12, "timings": [1512.84, 12324.8, 1493.83, 3052.48, 2642.42, 2287.92, 1768.97] }, { "length": 4096, "align1": 12, "align2": 12, "timings": [1407.02, 12322, 1429.42, 2865.95, 2021.94, 2272.27, 1126.33] }, { "length": 8192, "align1": 0, "align2": 0, "timings": [2570.88, 24617.4, 2553.47, 4901.33, 3598.92, 3859.39, 2125.73] }, { "length": 8192, "align1": 13, "align2": 0, "timings": [2836.59, 24611.1, 2809.27, 4921.42, 4582.08, 3859.48, 3433.42] }, { "length": 8192, "align1": 0, "align2": 13, "timings": [3545.12, 24610.6, 2933.81, 5491.77, 4795.16, 3967.22, 3494.17] }, { "length": 8192, "align1": 13, "align2": 13, "timings": [2729.34, 24610.6, 2715.8, 5122.61, 3799.27, 3953.42, 2224.47] }, { "length": 16384, "align1": 0, "align2": 0, "timings": [5097.59, 49188.8, 5085.94, 10186.9, 7338.25, 7847.52, 5902.27] }, { "length": 16384, "align1": 14, "align2": 0, "timings": [5286.89, 49199.9, 5252.14, 10273.5, 8998.58, 7602.14, 6832.72] }, { "length": 16384, "align1": 0, "align2": 14, "timings": [5955.66, 49190.6, 5340.47, 10428.8, 9190.97, 7826.78, 6839.39] }, { "length": 16384, "align1": 14, "align2": 14, "timings": [5292.27, 49199.2, 5255.86, 10330.3, 7578.17, 7961.38, 6285.44] }, { "length": 32768, "align1": 0, "align2": 0, "timings": [12813.5, 98343, 11937.2, 19630, 16859.4, 17639.8, 10210.5] }, { "length": 32768, "align1": 15, "align2": 0, "timings": [11274.9, 100272, 11503.1, 20330.9, 17764.6, 17054.2, 13730] }, { "length": 32768, "align1": 0, "align2": 15, "timings": [12425.5, 98343.9, 11262.3, 20399.2, 17928.7, 17039.4, 13831] }, { "length": 32768, "align1": 15, "align2": 15, "timings": [12227.3, 98350.2, 12145, 19800.4, 16828.3, 20054.5, 10298.1] }, { "length": 65536, "align1": 0, "align2": 0, "timings": [27778.3, 196774, 25230, 40669, 38732.3, 40669.8, 26624.9] }, { "length": 65536, "align1": 16, "align2": 0, "timings": [25550.4, 198301, 25295.7, 41461.1, 38993.7, 40954.7, 26689.1] }, { "length": 65536, "align1": 0, "align2": 16, "timings": [26350.3, 196825, 25459.6, 46308, 42703.1, 45040.3, 26732.9] }, { "length": 65536, "align1": 16, "align2": 16, "timings": [25633, 196870, 25355.7, 40868.4, 38262.7, 40633.9, 26703.8] }, { "length": 0, "align1": 0, "align2": 0, "timings": [27.625, 15.5, 14.0312, 18.2344, 18.1875, 17.8594, 20.625] }, { "length": 0, "align1": 0, "align2": 0, "timings": [17.4219, 12.7031, 11.7344, 12.8125, 15.1406, 14.0625, 18.6875] }, { "length": 0, "align1": 0, "align2": 0, "timings": [15.6875, 12.0938, 12.1094, 12.0312, 14.3281, 12.6562, 18.7031] }, { "length": 0, "align1": 0, "align2": 0, "timings": [15.7344, 11.8125, 12.0938, 12.0625, 12.5156, 12.1719, 18.4219] }, { "length": 1, "align1": 0, "align2": 0, "timings": [21.0156, 17.0156, 16.5469, 19.5625, 22.2812, 24.4688, 20.1406] }, { "length": 1, "align1": 1, "align2": 0, "timings": [19.5469, 12.7344, 14.6094, 17.0781, 17.6094, 17.4375, 19.4375] }, { "length": 1, "align1": 0, "align2": 1, "timings": [19.375, 11.5156, 14.625, 17.125, 17.9375, 17.9531, 18.9219] }, { "length": 1, "align1": 1, "align2": 1, "timings": [18.6094, 11.0938, 13.9219, 16.0312, 17.625, 17.2812, 19.3281] }, { "length": 2, "align1": 0, "align2": 0, "timings": [20.0781, 18.3906, 16.0625, 27.4219, 27.0938, 22.2188, 29.3125] }, { "length": 2, "align1": 2, "align2": 0, "timings": [20.3594, 18.2969, 17.4062, 23.4531, 23.1094, 16.6719, 26.5781] }, { "length": 2, "align1": 0, "align2": 2, "timings": [20.0156, 17.4219, 15.2969, 22.7031, 21.8906, 16.0938, 26.5469] }, { "length": 2, "align1": 2, "align2": 2, "timings": [19.125, 18, 14.9531, 21.9062, 21.4844, 16.0938, 26.9688] }, { "length": 3, "align1": 0, "align2": 0, "timings": [34.1719, 47.7969, 23.4844, 59.0156, 63.375, 26.3438, 59.375] }, { "length": 3, "align1": 3, "align2": 0, "timings": [21.4531, 44.625, 17.2969, 52.5938, 65.3125, 19.7969, 54.5469] }, { "length": 3, "align1": 0, "align2": 3, "timings": [21.5312, 43.7344, 17.2812, 51.2031, 65.2188, 19.5625, 54.0781] }, { "length": 3, "align1": 3, "align2": 3, "timings": [20.7188, 43.7188, 16.8906, 56.5469, 51.2188, 18.7031, 54.0312] }, { "length": 4, "align1": 0, "align2": 0, "timings": [29.6719, 32.9062, 22.375, 19.2188, 18.5312, 27.7344, 59.0625] }, { "length": 4, "align1": 4, "align2": 0, "timings": [24.25, 26.3125, 20.5469, 16.375, 16.2344, 27.3438, 33.25] }, { "length": 4, "align1": 0, "align2": 4, "timings": [25.4062, 24.9062, 17.0469, 16.375, 15.8594, 26.9062, 32.9375] }, { "length": 4, "align1": 4, "align2": 4, "timings": [22.7344, 24.0781, 17.9219, 16.375, 15.6406, 26.5625, 32.625] }, { "length": 5, "align1": 0, "align2": 0, "timings": [32.0469, 35.25, 23.2188, 35.0938, 44.4062, 31, 37.9531] }, { "length": 5, "align1": 5, "align2": 0, "timings": [78.8281, 26.4844, 78.2344, 30.7031, 31.6406, 27.5781, 36.75] }, { "length": 5, "align1": 0, "align2": 5, "timings": [75.9688, 25.5938, 69.4844, 28.0625, 28.5156, 26.4531, 36.4062] }, { "length": 5, "align1": 5, "align2": 5, "timings": [74.375, 25.625, 69.0781, 30.7031, 27.6406, 25.5938, 36.375] }, { "length": 6, "align1": 0, "align2": 0, "timings": [39.3125, 35.0625, 36.2031, 34.2031, 36.25, 33.6406, 44.1094] }, { "length": 6, "align1": 6, "align2": 0, "timings": [78.2031, 36.5938, 71.8906, 30.5625, 60.9062, 31.0938, 38.5938] }, { "length": 6, "align1": 0, "align2": 6, "timings": [74.8594, 29.7969, 70.3594, 31.0156, 58.1406, 30.4531, 38.5625] }, { "length": 6, "align1": 6, "align2": 6, "timings": [74.0469, 29.7188, 70.3438, 31.0156, 32.3125, 29.6406, 38.5938] }, { "length": 7, "align1": 0, "align2": 0, "timings": [45.1875, 39.2969, 32.0469, 38.5938, 41.4062, 35.1875, 46.5469] }, { "length": 7, "align1": 7, "align2": 0, "timings": [81.6562, 57.5781, 75.2656, 33.0312, 33.0938, 32.0938, 41.9375] }, { "length": 7, "align1": 0, "align2": 7, "timings": [79.5156, 32.3125, 73.9375, 35.6719, 32.6875, 31.7188, 41.9375] }, { "length": 7, "align1": 7, "align2": 7, "timings": [78.7031, 56.2656, 73.1875, 33.0312, 32.2812, 29.6719, 41.6094] }, { "length": 8, "align1": 0, "align2": 0, "timings": [31.6719, 38.7812, 22.8281, 40.3125, 35.7656, 37.1719, 45.7031] }, { "length": 8, "align1": 8, "align2": 0, "timings": [27.4531, 35.2969, 20.9219, 42.9062, 34.5469, 35.6094, 44.5156] }, { "length": 8, "align1": 0, "align2": 8, "timings": [26.7344, 35.2969, 20.4531, 38.2344, 33.7969, 33.5781, 44.5156] }, { "length": 8, "align1": 8, "align2": 8, "timings": [26.3281, 34.875, 21.3125, 36.4375, 33.375, 33.6719, 44.5156] }, { "length": 9, "align1": 0, "align2": 0, "timings": [37.4375, 46.7188, 39.5312, 56.9531, 49.8125, 40.2344, 54.5156] }, { "length": 9, "align1": 9, "align2": 0, "timings": [93.7031, 38.3125, 82.3906, 38.8906, 39.375, 33.625, 49.125] }, { "length": 9, "align1": 0, "align2": 9, "timings": [84.9688, 37.9219, 79.3125, 40.7812, 39.875, 33.6094, 47.625] }, { "length": 9, "align1": 9, "align2": 9, "timings": [84.5938, 38.7969, 79.3281, 38.0469, 38.5469, 33.7031, 47.625] }, { "length": 10, "align1": 0, "align2": 0, "timings": [55.1406, 46.5156, 37.7969, 46.2969, 42.7656, 45.4062, 54.3906] }, { "length": 10, "align1": 10, "align2": 0, "timings": [91.5781, 40.5938, 82.7969, 42.2812, 40.1719, 38, 52.1406] }, { "length": 10, "align1": 0, "align2": 10, "timings": [86.1406, 40.6406, 81.9531, 40.6406, 39.3125, 37.625, 50.5469] }, { "length": 10, "align1": 10, "align2": 10, "timings": [86.1406, 40.6406, 81.6406, 39.7188, 39.3125, 37.625, 50.5469] }, { "length": 11, "align1": 0, "align2": 0, "timings": [40.5156, 50.9844, 36.7812, 52.5156, 51.4531, 44.8438, 55.9688] }, { "length": 11, "align1": 11, "align2": 0, "timings": [92.9688, 44.0625, 85.5, 44.4062, 44.0625, 38.7969, 53.625] }, { "length": 11, "align1": 0, "align2": 11, "timings": [90.3125, 43.5625, 85.5781, 43.6094, 45.1875, 38.0469, 53.6406] }, { "length": 11, "align1": 11, "align2": 11, "timings": [89.1406, 43.1406, 85.0938, 43.2188, 44.0469, 37.6094, 53.6094] }, { "length": 12, "align1": 0, "align2": 0, "timings": [39.8438, 52.1406, 32.2031, 30.7969, 29.1406, 46.3906, 61.75] }, { "length": 12, "align1": 12, "align2": 0, "timings": [33.9375, 47.8281, 27.9688, 25.625, 25.125, 42.5312, 56.5781] }, { "length": 12, "align1": 0, "align2": 12, "timings": [33.25, 47.4375, 27.5938, 26.4688, 24.7031, 43.0469, 56.9688] }, { "length": 12, "align1": 12, "align2": 12, "timings": [33.6406, 46.5625, 27.4531, 25.0781, 25.6562, 42.1562, 56.625] }, { "length": 13, "align1": 0, "align2": 0, "timings": [45.5469, 56.9531, 37.6562, 75.1562, 67.6406, 49.0469, 62.9375] }, { "length": 13, "align1": 13, "align2": 0, "timings": [102.844, 49.5938, 101.469, 63.4688, 63.7344, 42.375, 59.6094] }, { "length": 13, "align1": 0, "align2": 13, "timings": [99.4531, 49.6562, 92.4062, 63.0312, 64.1094, 41.6562, 59.6094] }, { "length": 13, "align1": 13, "align2": 13, "timings": [96.7812, 49.5938, 92.2656, 62.5469, 66.5, 41.7031, 59.2344] }, { "length": 14, "align1": 0, "align2": 0, "timings": [42.375, 54.9844, 39.5469, 58.5781, 55.1094, 49.7656, 65.4062] }, { "length": 14, "align1": 14, "align2": 0, "timings": [101.906, 52.625, 99.3125, 50.3125, 54.4531, 46.6562, 62.9375] }, { "length": 14, "align1": 0, "align2": 14, "timings": [103.25, 53.1875, 95.1094, 53.0625, 51.7656, 47.9531, 62.9375] }, { "length": 14, "align1": 14, "align2": 14, "timings": [99.5625, 52.5781, 94.3125, 50.3125, 51.8125, 46.4688, 62.5469] }, { "length": 15, "align1": 0, "align2": 0, "timings": [44.6094, 66.2188, 36.8906, 62.0781, 63.1094, 51.1406, 69.3906] }, { "length": 15, "align1": 15, "align2": 0, "timings": [105.609, 55.6406, 98.4219, 58.25, 54.9219, 46.4531, 65.2344] }, { "length": 15, "align1": 0, "align2": 15, "timings": [102.625, 55.6406, 97.5156, 52.6719, 53.625, 46.0938, 65.2344] }, { "length": 15, "align1": 15, "align2": 15, "timings": [101.906, 55.6406, 97.5625, 52.6719, 54.1094, 46.0938, 65.2344] }, { "length": 16, "align1": 0, "align2": 0, "timings": [61.4688, 62.9375, 53.0781, 41.7188, 37.3438, 59.875, 58.2969] }, { "length": 16, "align1": 16, "align2": 0, "timings": [59.6875, 58.3906, 53.0781, 26.1562, 26.4688, 34.5312, 46.7031] }, { "length": 16, "align1": 0, "align2": 16, "timings": [60.0781, 58.1406, 52.7031, 26.1094, 26.4531, 34.5, 46.0938] }, { "length": 16, "align1": 16, "align2": 16, "timings": [59.7188, 58.1406, 53.125, 26.125, 27.1875, 34.1406, 46.0781] }, { "length": 17, "align1": 0, "align2": 0, "timings": [93.4375, 72.5938, 75.8594, 50.5938, 43.6719, 44.6094, 54.0781] }, { "length": 17, "align1": 17, "align2": 0, "timings": [117.547, 61.9219, 107.266, 46.4375, 60.0938, 148.781, 48.3281] }, { "length": 17, "align1": 0, "align2": 17, "timings": [109.797, 61.6094, 103.781, 81.3125, 79.7031, 220.578, 85.3438] }, { "length": 17, "align1": 17, "align2": 17, "timings": [108.047, 61.6094, 103.609, 74.875, 68.4844, 65.3281, 84.6094] }, { "length": 18, "align1": 0, "align2": 0, "timings": [80.0625, 68.125, 61.7031, 41.7656, 45.0469, 39.2031, 61.2188] }, { "length": 18, "align1": 18, "align2": 0, "timings": [117.812, 65.3125, 106.328, 47.625, 52.8281, 193.359, 53.6562] }, { "length": 18, "align1": 0, "align2": 18, "timings": [111.406, 64.5625, 106.109, 65.3281, 72.75, 232.094, 81.75] }, { "length": 18, "align1": 18, "align2": 18, "timings": [111.016, 65.3281, 106, 61.2969, 62.3594, 53.7344, 86.3125] }, { "length": 19, "align1": 0, "align2": 0, "timings": [69.875, 71.5312, 67.0469, 69.6719, 69.1094, 47.9219, 81.9531] }, { "length": 19, "align1": 19, "align2": 0, "timings": [119.656, 67.625, 111.219, 96.0156, 91.2812, 178.953, 99.2188] }, { "length": 19, "align1": 0, "align2": 19, "timings": [114.766, 67.9375, 110.172, 74.2969, 74.8125, 204.219, 77.6562] }, { "length": 19, "align1": 19, "align2": 19, "timings": [113.656, 67.1406, 109.875, 65.125, 62.8281, 65.2344, 85.4531] }, { "length": 20, "align1": 0, "align2": 0, "timings": [67.5, 76.0781, 45.0938, 32.0156, 36.4219, 41.1562, 65.375] }, { "length": 20, "align1": 20, "align2": 0, "timings": [102.344, 70.5469, 98.9844, 58.9219, 56.5, 50.0625, 65.2969] }, { "length": 20, "align1": 0, "align2": 20, "timings": [70.0156, 70.8906, 56.6562, 74.0312, 61.7344, 34.5312, 64.3281] }, { "length": 20, "align1": 20, "align2": 20, "timings": [66.3438, 71.0156, 56.9219, 62.625, 62.125, 35.2969, 67.5312] }, { "length": 21, "align1": 0, "align2": 0, "timings": [55.125, 76.2812, 35.6094, 46.5312, 35.6719, 42.5781, 70.0938] }, { "length": 21, "align1": 21, "align2": 0, "timings": [108.453, 73.1562, 99.2344, 63.8594, 62.3125, 212.109, 61.875] }, { "length": 21, "align1": 0, "align2": 21, "timings": [132.453, 73.9219, 133.203, 84.5469, 83.8438, 207.5, 95.8281] }, { "length": 21, "align1": 21, "align2": 21, "timings": [93.4531, 73.8906, 77.625, 82.1094, 89.9688, 52.9062, 92.3906] }, { "length": 22, "align1": 0, "align2": 0, "timings": [44.8906, 81.2031, 38, 38.5781, 43.625, 41.8438, 74.8281] }, { "length": 22, "align1": 22, "align2": 0, "timings": [102.016, 76.5156, 97.8906, 56.7031, 63.2812, 190.75, 62.8125] }, { "length": 22, "align1": 0, "align2": 22, "timings": [110.516, 76.5781, 103.484, 67.2969, 66.2969, 239.797, 72.7969] }, { "length": 22, "align1": 22, "align2": 22, "timings": [59.0469, 76.9219, 53.9375, 53.875, 49.2344, 45.125, 79.7344] }, { "length": 23, "align1": 0, "align2": 0, "timings": [48.0312, 85.7656, 38.9062, 71.7031, 72.6094, 43.4531, 71.375] }, { "length": 23, "align1": 23, "align2": 0, "timings": [110.125, 79.9219, 101.312, 63.2031, 61.7031, 191.938, 68.9219] }, { "length": 23, "align1": 0, "align2": 23, "timings": [107.234, 79.1406, 99.625, 60.75, 67.7188, 207.094, 73.9688] }, { "length": 23, "align1": 23, "align2": 23, "timings": [52.7188, 79.5312, 48.7656, 59.5625, 50.0312, 43.5938, 73.2188] }, { "length": 24, "align1": 0, "align2": 0, "timings": [49.3594, 90.25, 36.3281, 31.3594, 39.2188, 45.0469, 58.375] }, { "length": 24, "align1": 24, "align2": 0, "timings": [40.2188, 83.2969, 35.25, 29.375, 27.9688, 34.9688, 50.9062] }, { "length": 24, "align1": 0, "align2": 24, "timings": [38.5938, 82.9531, 34.6406, 26.9375, 26.875, 34.0312, 48.9844] }, { "length": 24, "align1": 24, "align2": 24, "timings": [38.9688, 83.2969, 34.2969, 27.75, 26.7969, 34.1094, 49.3438] }, { "length": 25, "align1": 0, "align2": 0, "timings": [46.1562, 90.5938, 36.5938, 35.2188, 38.25, 43.6719, 59.8281] }, { "length": 25, "align1": 25, "align2": 0, "timings": [97.5938, 87.1719, 89.9375, 47.9375, 46.375, 153.828, 53.5312] }, { "length": 25, "align1": 0, "align2": 25, "timings": [133.156, 86.375, 109.859, 77.1562, 82.1875, 197.422, 89.5] }, { "length": 25, "align1": 25, "align2": 25, "timings": [81.0312, 86.0625, 64.5469, 68.1406, 70.2344, 55.75, 80.7656] }, { "length": 26, "align1": 0, "align2": 0, "timings": [46.4219, 96.8438, 38.125, 42.8906, 41.6875, 39.2656, 67.9844] }, { "length": 26, "align1": 26, "align2": 0, "timings": [101.312, 88.5938, 91.4688, 54.2969, 56.125, 184.281, 57.1719] }, { "length": 26, "align1": 0, "align2": 26, "timings": [121.547, 88.5625, 111.438, 83.3125, 78.5, 230.266, 88.625] }, { "length": 26, "align1": 26, "align2": 26, "timings": [81.3438, 88.1406, 60.0625, 57.3125, 57.2344, 45.4062, 85.7188] }, { "length": 27, "align1": 0, "align2": 0, "timings": [46.0781, 98.9531, 39.6719, 71.625, 70.6875, 44.625, 84.5938] }, { "length": 27, "align1": 27, "align2": 0, "timings": [126.969, 91.9531, 115.891, 85.5781, 82.2188, 186.5, 85.0781] }, { "length": 27, "align1": 0, "align2": 27, "timings": [126.859, 92.5938, 114.812, 79.125, 82.2031, 204.547, 83.8281] }, { "length": 27, "align1": 27, "align2": 27, "timings": [71.4062, 92.7344, 62.375, 66.25, 64.7656, 48.7188, 85.7656] }, { "length": 28, "align1": 0, "align2": 0, "timings": [44.4375, 102.891, 36.6719, 40.9844, 39.4531, 42.4375, 67.4062] }, { "length": 28, "align1": 28, "align2": 0, "timings": [100.188, 95.375, 98.1875, 57.5156, 55.2188, 40.6875, 65.3438] }, { "length": 28, "align1": 0, "align2": 28, "timings": [71.1875, 95.375, 59.9375, 68.75, 70.8125, 34.8438, 69.2656] }, { "length": 28, "align1": 28, "align2": 28, "timings": [73.2344, 95.9219, 62.4531, 49.1406, 68.25, 37.4688, 74.8906] }, { "length": 29, "align1": 0, "align2": 0, "timings": [49.8594, 108.391, 43.1094, 46.6562, 43.0938, 45.2344, 76.1562] }, { "length": 29, "align1": 29, "align2": 0, "timings": [108.766, 97.1562, 99.0156, 59.9375, 60.9219, 191.719, 64.8281] }, { "length": 29, "align1": 0, "align2": 29, "timings": [137.703, 97.1562, 123.578, 88.7188, 98.0938, 198.609, 93.7344] }, { "length": 29, "align1": 29, "align2": 29, "timings": [110.578, 97.1562, 90, 88.75, 87.8281, 54.7031, 98.2344] }, { "length": 30, "align1": 0, "align2": 0, "timings": [49.75, 108.625, 38.6719, 51.9375, 40.9688, 40.8125, 74.0781] }, { "length": 30, "align1": 30, "align2": 0, "timings": [106.812, 100.141, 102.922, 58.7969, 60.1562, 193.969, 67.8281] }, { "length": 30, "align1": 0, "align2": 30, "timings": [115.438, 100.141, 106.406, 74.0156, 69.5625, 241.219, 71.2031] }, { "length": 30, "align1": 30, "align2": 30, "timings": [62.2812, 100.141, 52.9531, 47.3125, 51.4844, 47.5781, 81.7812] }, { "length": 31, "align1": 0, "align2": 0, "timings": [50.6562, 111.703, 42.3438, 74.1406, 74.3125, 43.1406, 77.2812] }, { "length": 31, "align1": 31, "align2": 0, "timings": [111.047, 103.594, 106.906, 63.7031, 62.4219, 196.844, 71.4219] }, { "length": 31, "align1": 0, "align2": 31, "timings": [121.297, 103.156, 106.688, 70.7031, 73.2344, 199.281, 72.7656] }, { "length": 31, "align1": 31, "align2": 31, "timings": [61.6406, 103.156, 50, 56.6719, 55.625, 45.2969, 76.6406] }, { "length": 48, "align1": 0, "align2": 0, "timings": [52.7031, 178.375, 42.375, 43.6719, 50.0781, 50.5156, 52.7969] }, { "length": 48, "align1": 3, "align2": 0, "timings": [66.2812, 177.172, 57.8438, 66.1094, 65.7031, 156.266, 67.8438] }, { "length": 48, "align1": 0, "align2": 3, "timings": [157.219, 178.625, 150.703, 123.656, 140.797, 236.828, 115.719] }, { "length": 48, "align1": 3, "align2": 3, "timings": [67.875, 177.172, 61.7031, 97.2969, 104.562, 60.9844, 106.75] }, { "length": 80, "align1": 0, "align2": 0, "timings": [55.875, 273.281, 42.8906, 59.8594, 62.5312, 57.6562, 68.375] }, { "length": 80, "align1": 5, "align2": 0, "timings": [90.5156, 273.25, 79.2031, 90.0156, 79.6875, 173.484, 73.2656] }, { "length": 80, "align1": 0, "align2": 5, "timings": [175.797, 273.281, 169.094, 127.828, 125.609, 237.016, 135.516] }, { "length": 80, "align1": 5, "align2": 5, "timings": [107.953, 273.25, 93.8438, 104.672, 100.328, 77.125, 124.453] }, { "length": 96, "align1": 0, "align2": 0, "timings": [55.625, 321.188, 44.3438, 63.6875, 61.1406, 64.3281, 75.4219] }, { "length": 96, "align1": 6, "align2": 0, "timings": [91.625, 321.188, 80.9375, 85.9219, 88.9062, 168.891, 76.8281] }, { "length": 96, "align1": 0, "align2": 6, "timings": [153.969, 321.188, 146.188, 108.766, 118.359, 236.688, 110.719] }, { "length": 96, "align1": 6, "align2": 6, "timings": [83.3125, 321.188, 71.8281, 86.3438, 92.4219, 71.3906, 100.547] }, { "length": 112, "align1": 0, "align2": 0, "timings": [60.3594, 369.172, 56.375, 65.2031, 66.9688, 69.6719, 62.7188] }, { "length": 112, "align1": 7, "align2": 0, "timings": [101.875, 369.812, 89.8906, 97.125, 99.2812, 180.438, 84.3125] }, { "length": 112, "align1": 0, "align2": 7, "timings": [160.641, 369.844, 152.484, 119.734, 121.391, 239.672, 115.844] }, { "length": 112, "align1": 7, "align2": 7, "timings": [78.1719, 369.172, 71.2969, 121.672, 120.781, 87.1094, 96.1875] }, { "length": 144, "align1": 0, "align2": 0, "timings": [219.469, 465.172, 205.453, 79.9688, 331.578, 80.0625, 81.0312] }, { "length": 144, "align1": 9, "align2": 0, "timings": [311, 465.172, 300.203, 113.734, 355.891, 198.078, 95.4219] }, { "length": 144, "align1": 0, "align2": 9, "timings": [321.672, 465.172, 302.297, 148.016, 531.359, 234.75, 136.75] }, { "length": 144, "align1": 9, "align2": 9, "timings": [259.391, 465.984, 228.391, 116.688, 521.031, 94.2812, 101.719] }, { "length": 160, "align1": 0, "align2": 0, "timings": [189.734, 513.984, 173.141, 79.4531, 411.469, 60.8438, 74.9062] }, { "length": 160, "align1": 10, "align2": 0, "timings": [256.094, 513.969, 241.703, 119.594, 440.312, 199.094, 106.469] }, { "length": 160, "align1": 0, "align2": 10, "timings": [342, 513.578, 331.641, 146.484, 593.094, 290.562, 136.172] }, { "length": 160, "align1": 10, "align2": 10, "timings": [246.5, 513.562, 225.219, 108.859, 581.203, 104.109, 114.203] }, { "length": 176, "align1": 0, "align2": 0, "timings": [188.656, 561.578, 174.969, 83.7812, 430.734, 62.2344, 77.8281] }, { "length": 176, "align1": 11, "align2": 0, "timings": [259.734, 561.969, 254.094, 133.312, 451.969, 207.688, 113.656] }, { "length": 176, "align1": 0, "align2": 11, "timings": [345.047, 561.984, 338.859, 204.781, 633.328, 293.594, 195.969] }, { "length": 176, "align1": 11, "align2": 11, "timings": [245.328, 561.969, 229.594, 136.859, 620.953, 106.906, 141.625] }, { "length": 192, "align1": 0, "align2": 0, "timings": [145.703, 609.984, 137.594, 86.9375, 270.703, 65.6875, 85.8438] }, { "length": 192, "align1": 12, "align2": 0, "timings": [241.047, 609.172, 230.703, 143.047, 307.438, 126.047, 120.484] }, { "length": 192, "align1": 0, "align2": 12, "timings": [338.922, 609.172, 323.469, 165.938, 549.438, 110.125, 150.984] }, { "length": 192, "align1": 12, "align2": 12, "timings": [248.047, 609.172, 232.906, 110.344, 529.031, 82.7344, 115.688] }, { "length": 208, "align1": 0, "align2": 0, "timings": [238.141, 657.172, 223.703, 98.8125, 352.641, 67.3594, 94.125] }, { "length": 208, "align1": 13, "align2": 0, "timings": [325.156, 657.188, 314.328, 151.266, 379.578, 230.391, 122.781] }, { "length": 208, "align1": 0, "align2": 13, "timings": [357.406, 657.172, 341.422, 195.016, 574.438, 315.359, 177.906] }, { "length": 208, "align1": 13, "align2": 13, "timings": [288.344, 658, 267.812, 142.469, 544.469, 115.156, 159.609] }, { "length": 224, "align1": 0, "align2": 0, "timings": [199.625, 705.578, 187.812, 98.6406, 440.844, 71.4375, 92.5781] }, { "length": 224, "align1": 14, "align2": 0, "timings": [273.719, 706.672, 258.312, 212.047, 472.828, 241.297, 131.719] }, { "length": 224, "align1": 0, "align2": 14, "timings": [334.125, 706.672, 323.703, 185.547, 623.562, 293.469, 156.625] }, { "length": 224, "align1": 14, "align2": 14, "timings": [256.047, 714.812, 232.203, 129.781, 604.656, 120.578, 125.547] }, { "length": 240, "align1": 0, "align2": 0, "timings": [213.578, 753.578, 196.547, 104.984, 453.297, 74.9844, 94.0625] }, { "length": 240, "align1": 15, "align2": 0, "timings": [279.859, 754, 270.906, 223.734, 484.203, 241.156, 134.766] }, { "length": 240, "align1": 0, "align2": 15, "timings": [343.797, 753.984, 335.031, 187.422, 663.562, 322.578, 159.188] }, { "length": 240, "align1": 15, "align2": 15, "timings": [262.688, 754.672, 237.688, 158.406, 642.266, 118.75, 119.5] }, { "length": 272, "align1": 0, "align2": 0, "timings": [257.125, 850.656, 246.422, 610.656, 374.688, 96.4844, 108.203] }, { "length": 272, "align1": 17, "align2": 0, "timings": [347.297, 849.156, 334.469, 633.719, 416.5, 311.969, 147.484] }, { "length": 272, "align1": 0, "align2": 17, "timings": [356.844, 849.172, 337.562, 898.812, 654.781, 321.297, 185.734] }, { "length": 272, "align1": 17, "align2": 17, "timings": [271.625, 849.969, 265.281, 826.125, 617.328, 133.078, 134.844] }, { "length": 288, "align1": 0, "align2": 0, "timings": [215.562, 897.969, 210.453, 693.094, 466.391, 95.1562, 112.219] }, { "length": 288, "align1": 18, "align2": 0, "timings": [287.984, 897.562, 274.625, 716.031, 508.859, 292.5, 155.516] }, { "length": 288, "align1": 0, "align2": 18, "timings": [371.141, 897.984, 363.188, 901.5, 656.844, 397.406, 184.938] }, { "length": 288, "align1": 18, "align2": 18, "timings": [280.719, 897.969, 266.406, 847.734, 622.812, 134.75, 142.016] }, { "length": 304, "align1": 0, "align2": 0, "timings": [227.25, 945.984, 212.5, 708.812, 476.312, 93.1875, 108.641] }, { "length": 304, "align1": 19, "align2": 0, "timings": [293.5, 945.984, 284.109, 728.938, 519.219, 329.125, 157.078] }, { "length": 304, "align1": 0, "align2": 19, "timings": [380.516, 945.984, 374.719, 846.328, 570.734, 398.922, 239.938] }, { "length": 304, "align1": 19, "align2": 19, "timings": [305.438, 945.172, 290.391, 755.016, 538.219, 157.562, 157.203] }, { "length": 320, "align1": 0, "align2": 0, "timings": [189.984, 993.172, 180.875, 562.453, 324.922, 96.2969, 118.109] }, { "length": 320, "align1": 20, "align2": 0, "timings": [275.75, 993.188, 266.766, 592.656, 382, 156.719, 171.516] }, { "length": 320, "align1": 0, "align2": 20, "timings": [375.109, 993.562, 360.234, 829.594, 589.297, 165.734, 198.703] }, { "length": 320, "align1": 20, "align2": 20, "timings": [265.094, 994, 240.344, 769.641, 542.922, 108.906, 173.344] }, { "length": 336, "align1": 0, "align2": 0, "timings": [275.469, 1041.98, 258.016, 635.484, 390.75, 98.3125, 121.688] }, { "length": 336, "align1": 21, "align2": 0, "timings": [361.656, 1041.17, 352.172, 660.172, 452.609, 309.516, 173.062] }, { "length": 336, "align1": 0, "align2": 21, "timings": [387.297, 1041.56, 379.438, 922.359, 678.531, 403.172, 236.156] }, { "length": 336, "align1": 21, "align2": 21, "timings": [307.297, 1041.98, 293.516, 860.609, 631.344, 167.656, 198.391] }, { "length": 352, "align1": 0, "align2": 0, "timings": [234.125, 1089.97, 229.609, 728.469, 488.562, 102.656, 126.266] }, { "length": 352, "align1": 22, "align2": 0, "timings": [303.812, 1089.98, 294.516, 752.594, 542.672, 315.984, 179.562] }, { "length": 352, "align1": 0, "align2": 22, "timings": [373.844, 1089.98, 357.625, 934.828, 686.906, 382.938, 213.109] }, { "length": 352, "align1": 22, "align2": 22, "timings": [283.422, 1089.59, 272.391, 872.094, 644.234, 166.969, 166.297] }, { "length": 368, "align1": 0, "align2": 0, "timings": [234.891, 1137.98, 230.484, 740.125, 498.172, 107.359, 123.156] }, { "length": 368, "align1": 23, "align2": 0, "timings": [311.734, 1137.98, 300.281, 763.281, 553.094, 346.047, 186.203] }, { "length": 368, "align1": 0, "align2": 23, "timings": [377.594, 1137.98, 369.156, 828.172, 583.812, 394.344, 211.531] }, { "length": 368, "align1": 23, "align2": 23, "timings": [297.203, 1137.16, 281.609, 763.391, 521.094, 166.188, 166.609] }, { "length": 384, "align1": 0, "align2": 0, "timings": [204.656, 1185.17, 196.625, 601.594, 342.188, 718.828, 133.172] }, { "length": 384, "align1": 24, "align2": 0, "timings": [199.156, 1185.16, 192.328, 675.047, 348.188, 738.828, 127.578] }, { "length": 384, "align1": 0, "align2": 24, "timings": [288.297, 1185.17, 275, 890.891, 573.828, 785.297, 124.797] }, { "length": 384, "align1": 24, "align2": 24, "timings": [280.234, 1185.56, 272.703, 832.375, 562.484, 755.328, 124.766] }, { "length": 400, "align1": 0, "align2": 0, "timings": [289.781, 1233.98, 281.25, 677.469, 411.516, 708.828, 143.297] }, { "length": 400, "align1": 25, "align2": 0, "timings": [381.844, 1233.16, 369.5, 736.484, 480.75, 713, 197.938] }, { "length": 400, "align1": 0, "align2": 25, "timings": [393.703, 1233.17, 378.047, 927.859, 707.75, 813.172, 243.438] }, { "length": 400, "align1": 25, "align2": 25, "timings": [306.75, 1233.56, 292.172, 894, 652.328, 794.406, 172.172] }, { "length": 416, "align1": 0, "align2": 0, "timings": [260.375, 1282.64, 242.969, 768.047, 507.906, 713.203, 141.172] }, { "length": 416, "align1": 26, "align2": 0, "timings": [320.453, 1281.97, 313.781, 827.453, 575.906, 716.016, 209.156] }, { "length": 416, "align1": 0, "align2": 26, "timings": [408.641, 1281.98, 397.281, 960.578, 750.328, 823.422, 248.406] }, { "length": 416, "align1": 26, "align2": 26, "timings": [326.094, 1281.84, 296.594, 935.25, 693.672, 818.422, 169.594] }, { "length": 432, "align1": 0, "align2": 0, "timings": [270.172, 1329.98, 256.766, 783.859, 517.953, 729.719, 141.375] }, { "length": 432, "align1": 27, "align2": 0, "timings": [330.516, 1329.98, 325.688, 839.891, 587.078, 727.438, 217.859] }, { "length": 432, "align1": 0, "align2": 27, "timings": [416.172, 1329.98, 407.438, 854.609, 645.016, 806.797, 283.125] }, { "length": 432, "align1": 27, "align2": 27, "timings": [338.609, 1331.08, 322.219, 828.109, 575.141, 820.094, 176.922] }, { "length": 448, "align1": 0, "align2": 0, "timings": [231.344, 1377.56, 216.094, 635.031, 362.688, 737.953, 143.812] }, { "length": 448, "align1": 28, "align2": 0, "timings": [314.891, 1377.17, 304.219, 694.641, 443.109, 734.766, 222.375] }, { "length": 448, "align1": 0, "align2": 28, "timings": [407.281, 1377.17, 390.391, 890.344, 679.969, 812.719, 248.688] }, { "length": 448, "align1": 28, "align2": 28, "timings": [329.453, 1377.97, 305.781, 876.422, 611.156, 798.406, 212.828] }, { "length": 464, "align1": 0, "align2": 0, "timings": [315.312, 1425.97, 303.234, 707.969, 433.547, 739.312, 154.875] }, { "length": 464, "align1": 29, "align2": 0, "timings": [393.266, 1425.19, 384.922, 766.75, 517.359, 738.188, 232.703] }, { "length": 464, "align1": 0, "align2": 29, "timings": [429.141, 1425.17, 414.922, 956.078, 741.312, 831.141, 293.25] }, { "length": 464, "align1": 29, "align2": 29, "timings": [345.828, 1425.59, 306.812, 932.625, 669.672, 805.484, 223.25] }, { "length": 480, "align1": 0, "align2": 0, "timings": [277.594, 1473.97, 264.969, 800.703, 527.203, 741.75, 158.234] }, { "length": 480, "align1": 30, "align2": 0, "timings": [344.281, 1473.98, 329.766, 861.438, 609.297, 741.297, 235.422] }, { "length": 480, "align1": 0, "align2": 30, "timings": [410.969, 1473.58, 389.766, 995.266, 781.781, 826.828, 291.406] }, { "length": 480, "align1": 30, "align2": 30, "timings": [316.562, 1473.58, 308.422, 973.844, 711.016, 812.781, 185.625] }, { "length": 496, "align1": 0, "align2": 0, "timings": [283.469, 1521.97, 275.469, 816.094, 538.719, 745.703, 155.016] }, { "length": 496, "align1": 31, "align2": 0, "timings": [351.406, 1521.97, 338.938, 874.141, 620.5, 749.047, 237.938] }, { "length": 496, "align1": 0, "align2": 31, "timings": [418.375, 1521.98, 400.078, 883.062, 680.016, 830.828, 266.516] }, { "length": 496, "align1": 31, "align2": 31, "timings": [339.422, 1521.56, 315.297, 862.031, 596.531, 831.453, 185.141] }, { "length": 1024, "align1": 0, "align2": 0, "timings": [404.047, 3105.58, 388.641, 953.391, 552.922, 972.109, 321.172] }, { "length": 1024, "align1": 32, "align2": 0, "timings": [396.625, 3105.16, 390.953, 1006.23, 548.531, 975.594, 317.609] }, { "length": 1024, "align1": 0, "align2": 32, "timings": [452.562, 3105.17, 436.453, 1227.55, 794.969, 1016.7, 316.844] }, { "length": 1024, "align1": 32, "align2": 32, "timings": [444.594, 3105.95, 433.906, 1185.55, 791.547, 1002.55, 317.109] }, { "length": 1056, "align1": 0, "align2": 0, "timings": [450.781, 3201.58, 438.203, 1126.55, 718.203, 974.625, 326.672] }, { "length": 1056, "align1": 33, "align2": 0, "timings": [515.781, 3201.58, 503.391, 1162.8, 919.641, 979.312, 498.422] }, { "length": 1056, "align1": 0, "align2": 33, "timings": [588.281, 3201.98, 563.469, 1173.05, 890.641, 1072.31, 542.438] }, { "length": 1056, "align1": 33, "align2": 33, "timings": [528.062, 3201.17, 524.922, 1087.41, 682.109, 1067.45, 381.109] }, { "length": 1088, "align1": 0, "align2": 0, "timings": [423.5, 3297.17, 412.5, 989.406, 571.766, 979.594, 335.188] }, { "length": 1088, "align1": 34, "align2": 0, "timings": [506.234, 3297.19, 491.547, 1031.64, 786.75, 997.016, 511.219] }, { "length": 1088, "align1": 0, "align2": 34, "timings": [596.391, 3297.17, 585.438, 1299.89, 1021, 1114.3, 550.234] }, { "length": 1088, "align1": 34, "align2": 34, "timings": [539.375, 3297.98, 531.906, 1222.64, 811.125, 1109.98, 392.812] }, { "length": 1120, "align1": 0, "align2": 0, "timings": [466.25, 3393.58, 459.297, 1160.28, 740.062, 990.922, 344.953] }, { "length": 1120, "align1": 35, "align2": 0, "timings": [531.109, 3393.58, 519.641, 1199.16, 949.266, 997.172, 521.391] }, { "length": 1120, "align1": 0, "align2": 35, "timings": [603.781, 3393.98, 585.203, 1232.61, 948.453, 1089.89, 552.484] }, { "length": 1120, "align1": 35, "align2": 35, "timings": [573.266, 3393.17, 572.062, 1149.8, 732.953, 1076.14, 396.25] }, { "length": 1152, "align1": 0, "align2": 0, "timings": [443.172, 3492.2, 426.312, 1030.33, 599.062, 1014.25, 352.031] }, { "length": 1152, "align1": 36, "align2": 0, "timings": [527.344, 3489.19, 511.531, 1074.5, 826.125, 1022.59, 536.375] }, { "length": 1152, "align1": 0, "align2": 36, "timings": [622.234, 3489.17, 605.156, 1344.38, 1051.19, 1085.39, 562.484] }, { "length": 1152, "align1": 36, "align2": 36, "timings": [506.109, 3489.98, 496.25, 1259.08, 834.781, 1081.22, 390.953] }, { "length": 1184, "align1": 0, "align2": 0, "timings": [491.375, 3585.97, 481.969, 1195.16, 761.734, 1028.31, 360.562] }, { "length": 1184, "align1": 37, "align2": 0, "timings": [548.75, 3585.58, 539.641, 1241.2, 985.469, 1031.41, 547.859] }, { "length": 1184, "align1": 0, "align2": 37, "timings": [649.219, 3585.98, 631.5, 1235.19, 955.656, 1118.53, 604.391] }, { "length": 1184, "align1": 37, "align2": 37, "timings": [602.156, 3585.97, 593.953, 1160.95, 735.906, 1113.77, 425.812] }, { "length": 1216, "align1": 0, "align2": 0, "timings": [454.016, 3681.97, 447.688, 1059.36, 614.438, 1039.3, 367.094] }, { "length": 1216, "align1": 38, "align2": 0, "timings": [547.328, 3681.16, 530.547, 1128.67, 855.391, 1046.33, 561.453] }, { "length": 1216, "align1": 0, "align2": 38, "timings": [645.203, 3681.84, 618.719, 1370.95, 1080.98, 1146.28, 589.062] }, { "length": 1216, "align1": 38, "align2": 38, "timings": [569.828, 3682.66, 559.438, 1292.33, 857.594, 1137.8, 444.734] }, { "length": 1248, "align1": 0, "align2": 0, "timings": [508.344, 3777.97, 499.172, 1231.67, 779.766, 1051.11, 376.547] }, { "length": 1248, "align1": 39, "align2": 0, "timings": [566.766, 3777.56, 556.875, 1284.05, 1016.88, 1054.95, 573.859] }, { "length": 1248, "align1": 0, "align2": 39, "timings": [638.172, 3778.02, 616.328, 1276.69, 978.609, 1157.16, 599.953] }, { "length": 1248, "align1": 39, "align2": 39, "timings": [590.062, 3777.95, 587.828, 1194.73, 747.859, 1147.64, 425.922] }, { "length": 1280, "align1": 0, "align2": 0, "timings": [476, 3873.58, 464.094, 1097.86, 641.375, 1066.12, 382.703] }, { "length": 1280, "align1": 40, "align2": 0, "timings": [470.062, 3873.17, 464.25, 1194.92, 645.312, 1074.8, 381.188] }, { "length": 1280, "align1": 0, "align2": 40, "timings": [524.688, 3873.17, 516.594, 1386.02, 886.641, 1120.55, 380.688] }, { "length": 1280, "align1": 40, "align2": 40, "timings": [517.672, 3873.58, 515.375, 1298.89, 848.125, 1113.83, 380.25] }, { "length": 1312, "align1": 0, "align2": 0, "timings": [525.406, 3969.97, 518.156, 1264.55, 808.688, 1074.48, 390.688] }, { "length": 1312, "align1": 41, "align2": 0, "timings": [585.391, 3969.59, 576.578, 1338.25, 1059.75, 1070.48, 599.891] }, { "length": 1312, "align1": 0, "align2": 41, "timings": [656.922, 3969.98, 638.391, 1300.5, 1013.78, 1176.86, 648.922] }, { "length": 1312, "align1": 41, "align2": 41, "timings": [630.812, 3969.19, 623.938, 1225.44, 758.641, 1174.47, 449.219] }, { "length": 1344, "align1": 0, "align2": 0, "timings": [494.297, 4065.17, 483.234, 1133.11, 666.578, 1089.22, 399.578] }, { "length": 1344, "align1": 42, "align2": 0, "timings": [580.547, 4065.17, 566.312, 1216.09, 921.953, 1092.14, 614.078] }, { "length": 1344, "align1": 0, "align2": 42, "timings": [672.266, 4065.17, 655.531, 1404.36, 1116.02, 1221.34, 657.344] }, { "length": 1344, "align1": 42, "align2": 42, "timings": [619.609, 4065.58, 606.766, 1331.94, 864.172, 1201.98, 459.844] }, { "length": 1376, "align1": 0, "align2": 0, "timings": [550.641, 4161.97, 534.875, 1301.58, 837.016, 1103.12, 408.891] }, { "length": 1376, "align1": 43, "align2": 0, "timings": [603.375, 4162, 593.516, 1379.25, 1088.83, 1114.2, 625.953] }, { "length": 1376, "align1": 0, "align2": 43, "timings": [667.906, 4162.02, 656.797, 1338.59, 1047.41, 1194.98, 656.047] }, { "length": 1376, "align1": 43, "align2": 43, "timings": [643.984, 4163.41, 642.078, 1260.09, 787.672, 1188.88, 470.031] }, { "length": 1408, "align1": 0, "align2": 0, "timings": [516.328, 4257.56, 504.422, 1168.27, 692.516, 1112.41, 414.984] }, { "length": 1408, "align1": 44, "align2": 0, "timings": [595.875, 4257.17, 586.109, 1251.02, 957.266, 1116.97, 641.156] }, { "length": 1408, "align1": 0, "align2": 44, "timings": [688.25, 4257.17, 670.375, 1442.59, 1151.61, 1196.58, 689.609] }, { "length": 1408, "align1": 44, "align2": 44, "timings": [662.406, 4257.97, 567.359, 1366.59, 888.797, 1187.08, 453.188] }, { "length": 1440, "align1": 0, "align2": 0, "timings": [565.688, 4353.97, 556.266, 1336.39, 854.328, 1132.12, 424.516] }, { "length": 1440, "align1": 45, "align2": 0, "timings": [615.719, 4353.64, 610.438, 1421.84, 1117.83, 1127.44, 651.938] }, { "length": 1440, "align1": 0, "align2": 45, "timings": [722.078, 4353.97, 698.969, 1373.27, 1088.58, 1220, 705.359] }, { "length": 1440, "align1": 45, "align2": 45, "timings": [697.281, 4353.56, 684.516, 1307.61, 832.453, 1221.19, 490.75] }, { "length": 1472, "align1": 0, "align2": 0, "timings": [530.219, 4449.97, 523.109, 1200.11, 712.609, 1137.41, 430.812] }, { "length": 1472, "align1": 46, "align2": 0, "timings": [615.344, 4449.16, 600.969, 1301.91, 991.328, 1143.47, 666.875] }, { "length": 1472, "align1": 0, "align2": 46, "timings": [708.875, 4449.84, 691.109, 1481.19, 1185.53, 1247.88, 690.344] }, { "length": 1472, "align1": 46, "align2": 46, "timings": [645.141, 4450.28, 644.984, 1401.11, 914.828, 1239.41, 508] }, { "length": 1504, "align1": 0, "align2": 0, "timings": [583.156, 4545.58, 576.047, 1369.84, 877.031, 1155.27, 440.125] }, { "length": 1504, "align1": 47, "align2": 0, "timings": [637.844, 4546.02, 628.641, 1455.86, 1152.33, 1150.3, 679.016] }, { "length": 1504, "align1": 0, "align2": 47, "timings": [709.344, 4545.58, 690.781, 1410.73, 1119.02, 1254.95, 702.078] }, { "length": 1504, "align1": 47, "align2": 47, "timings": [681.078, 4545.58, 678.578, 1331.88, 839.047, 1249.64, 492.984] }, { "length": 1536, "align1": 0, "align2": 0, "timings": [551.219, 4641.58, 545.281, 1237.25, 741.062, 1165.42, 445.875] }, { "length": 1536, "align1": 48, "align2": 0, "timings": [548.953, 4641.19, 541.359, 1285.02, 732.578, 1173.58, 444.312] }, { "length": 1536, "align1": 0, "align2": 48, "timings": [600.031, 4641.17, 592.047, 1509.72, 942.781, 1219.25, 445.234] }, { "length": 1536, "align1": 48, "align2": 48, "timings": [593.547, 4641.59, 587.422, 1435.95, 937.938, 1210.77, 444.297] }, { "length": 1568, "align1": 0, "align2": 0, "timings": [605.453, 4737.98, 594.078, 1401.61, 900.25, 1180.2, 454.766] }, { "length": 1568, "align1": 49, "align2": 0, "timings": [667.812, 4738.02, 647.891, 1448.75, 1194.33, 1185.12, 704.062] }, { "length": 1568, "align1": 0, "align2": 49, "timings": [728.344, 4738.02, 708.688, 1392.89, 1161.78, 1273.69, 754.516] }, { "length": 1568, "align1": 49, "align2": 49, "timings": [737.938, 4737.17, 721.031, 1366.09, 873.266, 1267.41, 499.5] }, { "length": 1600, "align1": 0, "align2": 0, "timings": [573.812, 4833.17, 562.672, 1273.28, 767.594, 1189.64, 466.422] }, { "length": 1600, "align1": 50, "align2": 0, "timings": [649.203, 4833.19, 637.906, 1313.61, 1058.78, 1197.67, 718.047] }, { "length": 1600, "align1": 0, "align2": 50, "timings": [738.906, 4833.17, 728.812, 1487.56, 1253.56, 1311.11, 763.594] }, { "length": 1600, "align1": 50, "align2": 50, "timings": [1848.25, 4835.22, 684.859, 1514.25, 969.641, 1322.73, 509.359] }, { "length": 1632, "align1": 0, "align2": 0, "timings": [628.406, 4929.58, 615.156, 1440.94, 927.969, 1203.36, 474.078] }, { "length": 1632, "align1": 51, "align2": 0, "timings": [678.984, 4929.97, 670.984, 1483.52, 1229.19, 1211.53, 731.828] }, { "length": 1632, "align1": 0, "align2": 51, "timings": [750.469, 4929.97, 731.25, 1416.7, 1186.8, 1319.16, 759.109] }, { "length": 1632, "align1": 51, "align2": 51, "timings": [759.469, 4930.36, 738.828, 1397.47, 882.641, 1299.31, 518.328] }, { "length": 1664, "align1": 0, "align2": 0, "timings": [587.953, 5025.97, 573.875, 1309.55, 795.375, 1216.59, 478.734] }, { "length": 1664, "align1": 52, "align2": 0, "timings": [676.766, 5025.16, 661.594, 1353.22, 1091.8, 1224.91, 744.125] }, { "length": 1664, "align1": 0, "align2": 52, "timings": [761.625, 5025.17, 750.312, 1521.12, 1283.78, 1297.27, 773.141] }, { "length": 1664, "align1": 52, "align2": 52, "timings": [668.312, 5025.95, 726.859, 1503.52, 986.5, 1291.45, 516.125] }, { "length": 1696, "align1": 0, "align2": 0, "timings": [639.891, 5121.97, 631.016, 1476.22, 951.703, 1230.77, 487.938] }, { "length": 1696, "align1": 53, "align2": 0, "timings": [696.594, 5121.56, 689.469, 1522.42, 1254.41, 1239.25, 756.25] }, { "length": 1696, "align1": 0, "align2": 53, "timings": [796.266, 5121.58, 775.562, 1449.92, 1221.2, 1324.97, 811.547] }, { "length": 1696, "align1": 53, "align2": 53, "timings": [727.406, 5121.95, 740.312, 1428.44, 907.016, 1320.75, 546.438] }, { "length": 1728, "align1": 0, "align2": 0, "timings": [611.359, 5217.97, 597.594, 1344.33, 820.312, 1241.41, 494.219] }, { "length": 1728, "align1": 54, "align2": 0, "timings": [693.844, 5217.17, 675.109, 1386.94, 1125.25, 1252.48, 769.938] }, { "length": 1728, "align1": 0, "align2": 54, "timings": [780.969, 5217.84, 768.391, 1554.88, 1315.42, 1338.53, 798.094] }, { "length": 1728, "align1": 54, "align2": 54, "timings": [721.469, 5218.28, 711.516, 1534.77, 1011.7, 1330.19, 552.703] }, { "length": 1760, "align1": 0, "align2": 0, "timings": [663.719, 5313.58, 650.688, 1508.02, 980.859, 1257.58, 504.656] }, { "length": 1760, "align1": 55, "align2": 0, "timings": [717.328, 5314.03, 707.609, 1555.61, 1288.97, 1259.98, 782.656] }, { "length": 1760, "align1": 0, "align2": 55, "timings": [784.547, 5313.97, 766.578, 1500.89, 1254.69, 1348.58, 805.797] }, { "length": 1760, "align1": 55, "align2": 55, "timings": [741.078, 5313.98, 726.453, 1466.81, 938.656, 1348.67, 539.938] }, { "length": 1792, "align1": 0, "align2": 0, "timings": [629.812, 5409.97, 618.688, 1380.47, 844.328, 1270.86, 510.438] }, { "length": 1792, "align1": 56, "align2": 0, "timings": [626.578, 5409.17, 620.562, 1509.89, 842.266, 1317.36, 508.344] }, { "length": 1792, "align1": 0, "align2": 56, "timings": [681.969, 5409.17, 671.391, 1597.55, 1049.25, 1320.11, 509.359] }, { "length": 1792, "align1": 56, "align2": 56, "timings": [674.594, 5409.58, 672.547, 1573.75, 1038.89, 1311.62, 509.375] }, { "length": 1824, "align1": 0, "align2": 0, "timings": [681.891, 5505.58, 669.781, 1549.06, 1006.05, 1284.5, 518.859] }, { "length": 1824, "align1": 57, "align2": 0, "timings": [748.141, 5505.98, 724.859, 1668.44, 1329.25, 1286, 809.828] }, { "length": 1824, "align1": 0, "align2": 57, "timings": [813.172, 5506.59, 781.266, 1540.52, 1312.55, 1344.41, 871.938] }, { "length": 1824, "align1": 57, "align2": 57, "timings": [717.938, 5506, 702.844, 1507.94, 965.234, 1332.73, 556.594] }, { "length": 1856, "align1": 0, "align2": 0, "timings": [651.094, 5601.97, 635.703, 1413.73, 868.188, 1293.81, 527.172] }, { "length": 1856, "align1": 58, "align2": 0, "timings": [730.844, 5601.19, 710.312, 1536.14, 1198.28, 1305.62, 824.578] }, { "length": 1856, "align1": 0, "align2": 58, "timings": [810.297, 5601.17, 799.844, 1630.56, 1383.09, 1388.17, 865.125] }, { "length": 1856, "align1": 58, "align2": 58, "timings": [709.422, 5601.59, 700.281, 1605.95, 1063.12, 1371.22, 560.609] }, { "length": 1888, "align1": 0, "align2": 0, "timings": [695.125, 5697.97, 689.531, 1580.42, 1032.7, 1312.06, 538.312] }, { "length": 1888, "align1": 59, "align2": 0, "timings": [746.234, 5697.98, 737.922, 1714.77, 1358.45, 1322.62, 836.406] }, { "length": 1888, "align1": 0, "align2": 59, "timings": [820.594, 5697.58, 800.312, 1583.62, 1310.17, 1365.52, 864.844] }, { "length": 1888, "align1": 59, "align2": 59, "timings": [726.062, 5697.98, 713.688, 1559.03, 996.516, 1361.27, 570.141] }, { "length": 1920, "align1": 0, "align2": 0, "timings": [663.359, 5793.97, 656.094, 1450.38, 939.75, 1319.98, 543.828] }, { "length": 1920, "align1": 60, "align2": 0, "timings": [752.359, 5793.17, 728.141, 1575.05, 1233.23, 1335.38, 849.734] }, { "length": 1920, "align1": 0, "align2": 60, "timings": [834.078, 5793.17, 819.688, 1669.06, 1449.8, 1378.48, 924.125] }, { "length": 1920, "align1": 60, "align2": 60, "timings": [735.969, 5793.58, 716.859, 1642.95, 1122.27, 1374.89, 581.75] }, { "length": 1952, "align1": 0, "align2": 0, "timings": [720.672, 5889.97, 707.266, 1616.73, 1109.34, 1337.05, 554.016] }, { "length": 1952, "align1": 61, "align2": 0, "timings": [768.016, 5890.05, 755.031, 1740.36, 1392.91, 1341.59, 861.984] }, { "length": 1952, "align1": 0, "align2": 61, "timings": [866.594, 5889.58, 846.172, 1599.06, 1343.05, 1392.53, 914.422] }, { "length": 1952, "align1": 61, "align2": 61, "timings": [775.203, 5889.59, 757.719, 1570.02, 1011.52, 1386.06, 610.547] }, { "length": 1984, "align1": 0, "align2": 0, "timings": [687.797, 5985.58, 671.703, 1482.53, 960.328, 1348.5, 561.406] }, { "length": 1984, "align1": 62, "align2": 0, "timings": [770.578, 5985.19, 746.109, 1617.97, 1268.91, 1363.16, 875.516] }, { "length": 1984, "align1": 0, "align2": 62, "timings": [860.109, 5985.84, 837.328, 1698.58, 1458.98, 1407.27, 897.547] }, { "length": 1984, "align1": 62, "align2": 62, "timings": [739.609, 5986.28, 726.891, 1683, 1116.5, 1399.86, 613.031] }, { "length": 2016, "align1": 0, "align2": 0, "timings": [737.625, 6081.58, 729.328, 1647.55, 1129.17, 1363.94, 568.391] }, { "length": 2016, "align1": 63, "align2": 0, "timings": [786.938, 6082.03, 774.062, 1774.28, 1427.14, 1366.14, 889.062] }, { "length": 2016, "align1": 0, "align2": 63, "timings": [851.625, 6081.58, 834.656, 1627.39, 1373.86, 1417.42, 910.484] }, { "length": 2016, "align1": 63, "align2": 63, "timings": [745.531, 7184.59, 750.781, 1601.55, 1079.95, 1418.48, 601.531] }, { "length": 8192, "align1": 0, "align2": 0, "timings": [2617.83, 24611.3, 2551.62, 5061.19, 3624.98, 3858.86, 2126.98] }] } } } { "timing_type": "hp_timing", "functions": { "memcpy": { "bench-variant": "large", "ifuncs": ["__memcpy_niagara4", "__memcpy_niagara2", "__memcpy_niagara1", "__memcpy_ultra1", "__memcpy_c"], "results": [ { "length": 65543, "align1": 0, "align2": 0, "timings": [59127.1, 50140.2, 47568.8, 72907.4, 29730.2] }, { "length": 65551, "align1": 0, "align2": 3, "timings": [35074.1, 58193.6, 48056.7, 53652.4, 38544.1] }, { "length": 65567, "align1": 3, "align2": 0, "timings": [33287.4, 56042.3, 45161.9, 54339.6, 37674.2] }, { "length": 65599, "align1": 3, "align2": 5, "timings": [33360.3, 58022, 45390.5, 53861.4, 37517.5] }, { "length": 131079, "align1": 0, "align2": 0, "timings": [90264.6, 99100, 93145.8, 99447.2, 70812.8] }, { "length": 131087, "align1": 0, "align2": 3, "timings": [73837, 107689, 87828.9, 99008.3, 79760.9] }, { "length": 131103, "align1": 3, "align2": 0, "timings": [72335.1, 108369, 87037.8, 99012, 80061.6] }, { "length": 131135, "align1": 3, "align2": 5, "timings": [72164.8, 107436, 87604.3, 98978, 80012.7] }, { "length": 262151, "align1": 0, "align2": 0, "timings": [179844, 197113, 184066, 192429, 146549] }, { "length": 262159, "align1": 0, "align2": 3, "timings": [157043, 212988, 160545, 191674, 157602] }, { "length": 262175, "align1": 3, "align2": 0, "timings": [165027, 199828, 159090, 191833, 158787] }, { "length": 262207, "align1": 3, "align2": 5, "timings": [164956, 206744, 166331, 193132, 159041] }, { "length": 524295, "align1": 0, "align2": 0, "timings": [533385, 574664, 562402, 551662, 493239] }, { "length": 524303, "align1": 0, "align2": 3, "timings": [481687, 604455, 511358, 553130, 511505] }, { "length": 524319, "align1": 3, "align2": 0, "timings": [490018, 568112, 492695, 550434, 514233] }, { "length": 524351, "align1": 3, "align2": 5, "timings": [480925, 597437, 514106, 560834, 516341] }, { "length": 1048583, "align1": 0, "align2": 0, "timings": [1.11891e+06, 1.21379e+06, 1.1737e+06, 1.23087e+06, 1.07554e+06] }, { "length": 1048591, "align1": 0, "align2": 3, "timings": [1.04617e+06, 1.36087e+06, 1.25046e+06, 1.32489e+06, 1.13088e+06] }, { "length": 1048607, "align1": 3, "align2": 0, "timings": [1.05295e+06, 1.21036e+06, 1.0852e+06, 1.20669e+06, 1.11625e+06] }, { "length": 1048639, "align1": 3, "align2": 5, "timings": [1.0514e+06, 1.25004e+06, 1.06701e+06, 1.18965e+06, 1.116e+06] }, { "length": 2097159, "align1": 0, "align2": 0, "timings": [2.69514e+06, 3.22031e+06, 3.1901e+06, 3.37276e+06, 2.35872e+06] }, { "length": 2097167, "align1": 0, "align2": 3, "timings": [2.20282e+06, 2.80237e+06, 2.98769e+06, 3.20854e+06, 2.46728e+06] }, { "length": 2097183, "align1": 3, "align2": 0, "timings": [2.17914e+06, 2.68061e+06, 3.18438e+06, 3.20131e+06, 2.427e+06] }, { "length": 2097215, "align1": 3, "align2": 5, "timings": [2.13129e+06, 2.54599e+06, 2.28398e+06, 2.69756e+06, 2.31616e+06] }, { "length": 4194311, "align1": 0, "align2": 0, "timings": [6.44985e+06, 6.84935e+06, 6.36142e+06, 6.6896e+06, 9.85727e+06] }, { "length": 4194319, "align1": 0, "align2": 3, "timings": [9.1533e+06, 7.40558e+06, 7.21224e+06, 1.01661e+07, 9.91204e+06] }, { "length": 4194335, "align1": 3, "align2": 0, "timings": [8.63271e+06, 6.38308e+06, 6.37415e+06, 6.67057e+06, 9.51175e+06] }, { "length": 4194367, "align1": 3, "align2": 5, "timings": [8.59695e+06, 6.66938e+06, 6.48887e+06, 7.43697e+06, 9.84484e+06] }, { "length": 8388615, "align1": 0, "align2": 0, "timings": [1.81105e+07, 1.96478e+07, 1.91947e+07, 1.86411e+07, 2.54114e+07] }, { "length": 8388623, "align1": 0, "align2": 3, "timings": [2.33228e+07, 2.3391e+07, 2.14993e+07, 2.59313e+07, 2.83967e+07] }, { "length": 8388639, "align1": 3, "align2": 0, "timings": [2.4374e+07, 2.49625e+07, 2.00963e+07, 1.8503e+07, 2.82517e+07] }, { "length": 8388671, "align1": 3, "align2": 5, "timings": [2.33218e+07, 2.39182e+07, 2.1584e+07, 2.00245e+07, 2.83425e+07] }, { "length": 16777223, "align1": 0, "align2": 0, "timings": [4.03404e+07, 4.96037e+07, 5.23379e+07, 5.04445e+07, 5.11504e+07] }, { "length": 16777231, "align1": 0, "align2": 3, "timings": [4.69308e+07, 6.2349e+07, 4.98645e+07, 5.77437e+07, 5.71984e+07] }, { "length": 16777247, "align1": 3, "align2": 0, "timings": [4.88141e+07, 6.08496e+07, 4.51228e+07, 4.58737e+07, 5.72227e+07] }, { "length": 16777279, "align1": 3, "align2": 5, "timings": [4.6599e+07, 6.24816e+07, 4.97614e+07, 5.09817e+07, 5.72153e+07] }, { "length": 33554439, "align1": 0, "align2": 0, "timings": [6.57336e+07, 8.45818e+07, 9.20476e+07, 8.58418e+07, 8.84407e+07] }, { "length": 33554447, "align1": 0, "align2": 3, "timings": [7.87364e+07, 1.11608e+08, 8.69825e+07, 1.03096e+08, 1.01216e+08] }, { "length": 33554463, "align1": 3, "align2": 0, "timings": [8.36701e+07, 1.08938e+08, 7.55594e+07, 8.45694e+07, 1.00481e+08] }, { "length": 33554495, "align1": 3, "align2": 5, "timings": [7.87672e+07, 1.11732e+08, 8.68008e+07, 1.03159e+08, 1.01291e+08] }] } } }
On 05/10/2017 15:02, Adhemerval Zanella wrote: > > > On 05/10/2017 13:49, David Miller wrote: >> From: Adhemerval Zanella <adhemerval.zanella@linaro.org> >> Date: Thu, 5 Oct 2017 10:51:11 -0300 >> >>> Both SPARC support multiarch platforms (sparcv9 and sparc64) have the >>> a default assembly implemented memcpy. Since it should not be any >>> restriction about it them on the loader object and assuming they are >>> faster than generic ones this patch uses them for rtld objects. >>> >>> Also, there is no indication neither on original patch [1] or in commit >>> message why the generic one where used instead of the sparc optimized >>> ones. >> >> The ultra1 memcpy is really an extremely non-ideal variant to use as >> the default for anything. >> >> It's much slower on newer cpus, as the block loads and stores used in >> the ultra1 version aren't optimized the same way they were in those >> older chips. >> >> The C version is faster on newer cpus and definitely a better choice >> as a default, especially because it doesn't use any cpu specific >> instructions like the ultra1 variant does. >> >> In the Linux kernel we have an assembler version we use as the default >> which doesn't use any special instructions. > > Thanks for the explanation, although it does not explain why the ultra1 > is currently the default for sparc64 (sysdeps/sparc/sparc64/memcpy.S) > and also the default selection for multiarch. The C version is used > solely for loader currently. > > I tried to check which are the performance of C implementation against > ultra1 one on a niagara5 and results are: > > - on bench-memcpy the C version is slight slower for sizes up to > 32 (about 4% faster for sizes up to 16, 40% from 16 to 32 and > 50% up to 32). It is definitely faster for sizes higher than > 64 (62% faster for sizes from 64 to 128 and 85% for sizes > higher than 128). > > - on bench-memcpy-random shows no performance difference, however > bench-memcpy-large shows the C implementation is indeed faster > for all inputs. > > So I think that instead of using default memcpy for rtld, the best > strategy would to use the C implementation instead as default and > add ultra1 as another option for ifunc resolution. One thing I forgot to ask is whether if you have any data points how slow the C implementation would be compared to current default sparc64 memcpy. Because one options would just remove it and use the C as default without providing it as an option.
From: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Thu, 5 Oct 2017 15:02:02 -0300 > Thanks for the explanation, although it does not explain why the ultra1 > is currently the default for sparc64 (sysdeps/sparc/sparc64/memcpy.S) > and also the default selection for multiarch. The C version is used > solely for loader currently. I never got around to fixing up this situation on the glibc side, that's why. > I tried to check which are the performance of C implementation against > ultra1 one on a niagara5 and results are: > > - on bench-memcpy the C version is slight slower for sizes up to > 32 (about 4% faster for sizes up to 16, 40% from 16 to 32 and > 50% up to 32). It is definitely faster for sizes higher than > 64 (62% faster for sizes from 64 to 128 and 85% for sizes > higher than 128). > > - on bench-memcpy-random shows no performance difference, however > bench-memcpy-large shows the C implementation is indeed faster > for all inputs. > > So I think that instead of using default memcpy for rtld, the best > strategy would to use the C implementation instead as default and > add ultra1 as another option for ifunc resolution. Yes, that's a good way to go.
From: Adhemerval Zanella <adhemerval.zanella@linaro.org> Date: Thu, 5 Oct 2017 15:12:33 -0300 > One thing I forgot to ask is whether if you have any data points how > slow the C implementation would be compared to current default > sparc64 memcpy. Because one options would just remove it and use > the C as default without providing it as an option. Well, on actual Ultra1/2/2e/2i chips, it is significantly faster than the C implementation. But in rtld the safest thing to do is use a simple memcpy that works on every cpu, regardless of cpu caps.
On 05/10/2017 15:30, David Miller wrote: > From: Adhemerval Zanella <adhemerval.zanella@linaro.org> > Date: Thu, 5 Oct 2017 15:12:33 -0300 > >> One thing I forgot to ask is whether if you have any data points how >> slow the C implementation would be compared to current default >> sparc64 memcpy. Because one options would just remove it and use >> the C as default without providing it as an option. > > Well, on actual Ultra1/2/2e/2i chips, it is significantly faster > than the C implementation. > > But in rtld the safest thing to do is use a simple memcpy that works > on every cpu, regardless of cpu caps. > Right, I think we can live with it. I withdrawn both patch 3 and 4 then.
diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.S b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.S new file mode 100644 index 0000000..8e524da --- /dev/null +++ b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.S @@ -0,0 +1 @@ +#include <sysdeps/sparc/sparc32/sparcv9/memcpy.S> diff --git a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c b/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c deleted file mode 100644 index 304ad4e..0000000 --- a/sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c +++ /dev/null @@ -1 +0,0 @@ -#include <sparc64/multiarch/rtld-memcpy.c> diff --git a/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c b/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c deleted file mode 100644 index 6f8386b..0000000 --- a/sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c +++ /dev/null @@ -1 +0,0 @@ -#include <sparc64/rtld-memcpy.c> diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.S b/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.S new file mode 100644 index 0000000..dc7e095 --- /dev/null +++ b/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.S @@ -0,0 +1 @@ +#include <sysdeps/sparc/sparc64/memcpy.S> diff --git a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c b/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c deleted file mode 100644 index 2452575..0000000 --- a/sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c +++ /dev/null @@ -1 +0,0 @@ -#include "../rtld-memcpy.c" diff --git a/sysdeps/sparc/sparc64/rtld-memcpy.c b/sysdeps/sparc/sparc64/rtld-memcpy.c deleted file mode 100644 index 52f8302..0000000 --- a/sysdeps/sparc/sparc64/rtld-memcpy.c +++ /dev/null @@ -1,3 +0,0 @@ -#define NO_MEMPCPY_STPCPY_REDIRECT -#include <string/memcpy.c> -#include <string/mempcpy.c>