Message ID | 1507211472-1194-3-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | Dropped |
Headers |
Received: (qmail 130164 invoked by alias); 5 Oct 2017 13:51:27 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: <libc-alpha.sourceware.org> List-Unsubscribe: <mailto:libc-alpha-unsubscribe-##L=##H@sourceware.org> List-Subscribe: <mailto:libc-alpha-subscribe@sourceware.org> List-Archive: <http://sourceware.org/ml/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-help@sourceware.org>, <http://sourceware.org/ml/#faqs> Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 129659 invoked by uid 89); 5 Oct 2017 13:51:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qk0-f172.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=RC/ATDGehJqhCUCrVBY7shiXa5Iqmk3EZz/jcR9TaY8=; b=UDob7VHfEID1XHxi569jfO3XSf6nqR+ezMfvT9YLfoQyYN1ERgyDaqPl2l6jGoDivn 2NPT9Egd7v1/eCS8T1BaYvWzJz0cMEMpnCuI5AFIu8x23wQDijjxgr1ST5m7Vp78+xvo 7+2cOgxg1agAVJ9xpPVujElqSmXcwScPA/yB0XdsQgVnzHz/0vMRpZcmlvTXYWUT/Yvx GxWT0QbjwGKWnSRoTPz0aXeVgnhaRUa2chUJF5aW8Y8cG6t/c2OEigsKCAmbGv7LH3J/ IrQKcTlBs5zn/U4Ml01Ls1mKsWW5La2Um2g1Y7pyhfRr0Z8eMYLf/J+TZ7S0I7oNcv1R 9z0w== X-Gm-Message-State: AMCzsaX11ACcdTjkrEXSi7KJtI/0F+fIBkfjx6Q4gXhxc0fD2+RCiS1W DPBlNKDkRAub7YpyGrOstBWy5mN4Tis= X-Google-Smtp-Source: AOwi7QCxe+VxSBo/GC8Buo8icfgG+4K5iCkrIWFTftQ7MF6+z2mwU4mWz9d3/dPuPsnrmpK78Y3m/A== X-Received: by 10.55.108.195 with SMTP id h186mr27861772qkc.18.1507211483155; Thu, 05 Oct 2017 06:51:23 -0700 (PDT) From: Adhemerval Zanella <adhemerval.zanella@linaro.org> To: libc-alpha@sourceware.org Subject: [PATCH 3/4] sparc: Use default memcpy for rtld objects Date: Thu, 5 Oct 2017 10:51:11 -0300 Message-Id: <1507211472-1194-3-git-send-email-adhemerval.zanella@linaro.org> In-Reply-To: <1507211472-1194-1-git-send-email-adhemerval.zanella@linaro.org> References: <1507211472-1194-1-git-send-email-adhemerval.zanella@linaro.org> |
Commit Message
Adhemerval Zanella Netto
Oct. 5, 2017, 1:51 p.m. UTC
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. Checked on sparc64-linux-gnu and sparcv9-linux-gnu. * sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.S: New file. * sysdeps/sparc/sparc64/multiarch/rtld-memcpy.S: Likewise. * sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c: Remove file. * sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c: Likewise. * sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c: Likewise. * sysdeps/sparc/sparc64/rtld-memcpy.c: Likewise. --- ChangeLog | 8 ++++++++ sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.S | 1 + sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c | 1 - sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c | 1 - sysdeps/sparc/sparc64/multiarch/rtld-memcpy.S | 1 + sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c | 1 - sysdeps/sparc/sparc64/rtld-memcpy.c | 3 --- 7 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.S delete mode 100644 sysdeps/sparc/sparc32/sparcv9/multiarch/rtld-memcpy.c delete mode 100644 sysdeps/sparc/sparc32/sparcv9/rtld-memcpy.c create mode 100644 sysdeps/sparc/sparc64/multiarch/rtld-memcpy.S delete mode 100644 sysdeps/sparc/sparc64/multiarch/rtld-memcpy.c delete mode 100644 sysdeps/sparc/sparc64/rtld-memcpy.c
Comments
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>