This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] ARM: Add optimized ARMv7 strcmp implementation
- From: Richard Earnshaw <rearnsha at arm dot com>
- To: "Joseph S. Myers" <joseph at codesourcery dot com>
- Cc: Will Newton <will dot newton at linaro dot org>, "libc-alpha at sourceware dot org" <libc-alpha at sourceware dot org>
- Date: Fri, 25 Apr 2014 12:11:36 +0100
- Subject: Re: [PATCH] ARM: Add optimized ARMv7 strcmp implementation
- Authentication-results: sourceware.org; auth=none
- References: <1398256338-24784-1-git-send-email-will dot newton at linaro dot org> <Pine dot LNX dot 4 dot 64 dot 1404241437500 dot 6535 at digraph dot polyomino dot org dot uk>
On 24/04/14 15:42, Joseph S. Myers wrote:
> On Wed, 23 Apr 2014, Will Newton wrote:
>
>> Add an optimized implementation of strcmp for ARMv7-A cores. This
>> implementation is significantly faster than the current generic C
>> implementation, particularly for strings of 16 bytes and longer.
>
> Could you please describe the testing (at least the string/ tests should
> have been run for both endiannesses) and be more specific about
> "significantly faster" (benchmark results - on specific identified
> hardware - using glibc's benchtests are desirable for such string function
> tests, in addition to any other benchmarks you may have used if glibc's
> benchtests aren't useful for the cases of interest)?
These are the improvements for a production board with cortex-a15. For
very short strings there's a fair amount of noise in the measurements,
but the regressions are generally very small, while the improvements can
be significant. Yes, there are cases where the new code is more than
three times faster.
R.
Length 1 alignment 1/1: 15.63%
Length 1 alignment 1/1: 1.61%
Length 1 alignment 1/1: -0.04%
Length 2 alignment 2/2: 39.45%
Length 2 alignment 2/2: 51.49%
Length 2 alignment 2/2: 47.71%
Length 3 alignment 3/3: -1.46%
Length 3 alignment 3/3: 47.09%
Length 3 alignment 3/3: 48.54%
Length 4 alignment 4/4: -7.89%
Length 4 alignment 4/4: 0.00%
Length 4 alignment 4/4: -0.03%
Length 5 alignment 5/5: -4.09%
Length 5 alignment 5/5: -4.11%
Length 5 alignment 5/5: -1.42%
Length 6 alignment 6/6: 4.17%
Length 6 alignment 6/6: 2.81%
Length 6 alignment 6/6: 4.29%
Length 7 alignment 7/7: 6.93%
Length 7 alignment 7/7: 4.19%
Length 7 alignment 7/7: 2.84%
Length 8 alignment 8/8: 12.86%
Length 8 alignment 8/8: 15.40%
Length 8 alignment 8/8: 13.88%
Length 9 alignment 9/9: 37.50%
Length 9 alignment 9/9: 59.20%
Length 9 alignment 9/9: 20.03%
Length 10 alignment 10/10: 52.00%
Length 10 alignment 10/10: 11.45%
Length 10 alignment 10/10: 12.82%
Length 11 alignment 11/11: 58.13%
Length 11 alignment 11/11: 67.18%
Length 11 alignment 11/11: 15.93%
Length 12 alignment 12/12: 50.61%
Length 12 alignment 12/12: 13.90%
Length 12 alignment 12/12: 18.85%
Length 13 alignment 13/13: 60.85%
Length 13 alignment 13/13: 13.68%
Length 13 alignment 13/13: 10.69%
Length 14 alignment 14/14: 66.23%
Length 14 alignment 14/14: 16.44%
Length 14 alignment 14/14: 16.48%
Length 15 alignment 15/15: 72.64%
Length 15 alignment 15/15: 72.58%
Length 15 alignment 15/15: 72.58%
Length 16 alignment 16/16: 70.66%
Length 16 alignment 16/16: 84.07%
Length 16 alignment 16/16: 84.07%
Length 17 alignment 17/17: 68.39%
Length 17 alignment 17/17: 80.53%
Length 17 alignment 17/17: 76.75%
Length 18 alignment 18/18: 74.99%
Length 18 alignment 18/18: 83.33%
Length 18 alignment 18/18: 84.73%
Length 19 alignment 19/19: 80.86%
Length 19 alignment 19/19: 82.18%
Length 19 alignment 19/19: 87.50%
Length 20 alignment 20/20: 35.61%
Length 20 alignment 20/20: 83.75%
Length 20 alignment 20/20: 81.31%
Length 21 alignment 21/21: 49.39%
Length 21 alignment 21/21: 69.13%
Length 21 alignment 21/21: 71.59%
Length 22 alignment 22/22: 44.69%
Length 22 alignment 22/22: 63.97%
Length 22 alignment 22/22: 73.16%
Length 23 alignment 23/23: 51.82%
Length 23 alignment 23/23: 79.02%
Length 23 alignment 23/23: 79.79%
Length 24 alignment 24/24: 62.08%
Length 24 alignment 24/24: 87.17%
Length 24 alignment 24/24: 93.34%
Length 25 alignment 25/25: 48.28%
Length 25 alignment 25/25: 68.28%
Length 25 alignment 25/25: 80.27%
Length 26 alignment 26/26: 55.85%
Length 26 alignment 26/26: 76.21%
Length 26 alignment 26/26: 79.79%
Length 27 alignment 27/27: 75.34%
Length 27 alignment 27/27: 85.72%
Length 27 alignment 27/27: 80.02%
Length 28 alignment 28/28: 52.72%
Length 28 alignment 28/28: 69.16%
Length 28 alignment 28/28: 65.85%
Length 29 alignment 29/29: 65.49%
Length 29 alignment 29/29: 60.48%
Length 29 alignment 29/29: 67.50%
Length 30 alignment 30/30: 67.02%
Length 30 alignment 30/30: 71.98%
Length 30 alignment 30/30: 71.11%
Length 31 alignment 31/31: 66.29%
Length 31 alignment 31/31: 71.43%
Length 31 alignment 31/31: 70.23%
Length 4 alignment 0/0: 4.48%
Length 4 alignment 0/0: 14.90%
Length 4 alignment 0/0: 9.19%
Length 4 alignment 0/0: 9.38%
Length 4 alignment 0/0: -14.30%
Length 4 alignment 0/0: 4.69%
Length 4 alignment 0/1: -17.09%
Length 4 alignment 1/2: -10.69%
Length 8 alignment 0/0: 4.05%
Length 8 alignment 0/0: 8.70%
Length 8 alignment 0/0: 14.72%
Length 8 alignment 0/0: 14.98%
Length 8 alignment 0/0: 22.73%
Length 8 alignment 0/0: 9.09%
Length 8 alignment 0/2: 10.59%
Length 8 alignment 2/3: 29.27%
Length 16 alignment 0/0: 44.31%
Length 16 alignment 0/0: 105.97%
Length 16 alignment 0/0: 91.31%
Length 16 alignment 0/0: 75.53%
Length 16 alignment 0/0: 46.52%
Length 16 alignment 0/0: 60.55%
Length 16 alignment 0/3: 1.46%
Length 16 alignment 3/4: 7.76%
Length 32 alignment 0/0: 14.62%
Length 32 alignment 0/0: 100.03%
Length 32 alignment 0/0: 98.84%
Length 32 alignment 0/0: 34.27%
Length 32 alignment 0/0: 24.78%
Length 32 alignment 0/0: 81.48%
Length 32 alignment 0/4: 80.47%
Length 32 alignment 4/5: -2.03%
Length 64 alignment 0/0: 98.29%
Length 64 alignment 0/0: 102.75%
Length 64 alignment 0/0: 140.99%
Length 64 alignment 0/0: 142.60%
Length 64 alignment 0/0: 129.61%
Length 64 alignment 0/0: 125.91%
Length 64 alignment 0/5: 25.23%
Length 64 alignment 5/6: 37.97%
Length 128 alignment 0/0: 43.83%
Length 128 alignment 0/0: 33.34%
Length 128 alignment 0/0: 55.93%
Length 128 alignment 0/0: 91.75%
Length 128 alignment 0/0: 148.25%
Length 128 alignment 0/0: 136.22%
Length 128 alignment 0/6: 24.40%
Length 128 alignment 6/7: 34.18%
Length 256 alignment 0/0: 84.87%
Length 256 alignment 0/0: 104.30%
Length 256 alignment 0/0: 95.59%
Length 256 alignment 0/0: 86.65%
Length 256 alignment 0/0: 109.61%
Length 256 alignment 0/0: 97.53%
Length 256 alignment 0/7: 25.79%
Length 256 alignment 7/8: 32.29%
Length 512 alignment 0/0: 195.49%
Length 512 alignment 0/0: 140.54%
Length 512 alignment 0/0: 148.29%
Length 512 alignment 0/0: 164.03%
Length 512 alignment 0/0: 150.61%
Length 512 alignment 0/0: 174.32%
Length 512 alignment 0/8: 193.32%
Length 512 alignment 8/9: 60.42%
Length 1024 alignment 0/0: 238.38%
Length 1024 alignment 0/0: 239.21%
Length 1024 alignment 0/0: 247.45%
Length 1024 alignment 0/0: 241.00%
Length 1024 alignment 0/0: 241.49%
Length 1024 alignment 0/0: 340.83%
Length 1024 alignment 0/9: 64.46%
Length 1024 alignment 9/10: 62.71%
Length 16 alignment 1/2: 37.79%
Length 16 alignment 2/1: 33.02%
Length 16 alignment 1/2: 38.88%
Length 16 alignment 2/1: 34.80%
Length 16 alignment 1/2: 38.49%
Length 16 alignment 2/1: 40.42%
Length 32 alignment 2/4: 25.43%
Length 32 alignment 4/2: 29.08%
Length 32 alignment 2/4: 30.27%
Length 32 alignment 4/2: -4.03%
Length 32 alignment 2/4: 32.73%
Length 32 alignment 4/2: -4.69%
Length 64 alignment 3/6: -4.86%
Length 64 alignment 6/3: 2.38%
Length 64 alignment 3/6: -3.60%
Length 64 alignment 6/3: 6.44%
Length 64 alignment 3/6: -3.60%
Length 64 alignment 6/3: 7.55%
Length 128 alignment 4/8: 71.91%
Length 128 alignment 8/4: 77.35%
Length 128 alignment 4/8: 67.13%
Length 128 alignment 8/4: 58.60%
Length 128 alignment 4/8: 70.61%
Length 128 alignment 8/4: 58.14%
Length 256 alignment 5/10: 40.61%
Length 256 alignment 10/5: 42.76%
Length 256 alignment 5/10: 40.78%
Length 256 alignment 10/5: 42.96%
Length 256 alignment 5/10: 40.17%
Length 256 alignment 10/5: 42.74%
Length 512 alignment 6/12: 44.60%
Length 512 alignment 12/6: 47.72%
Length 512 alignment 6/12: 46.02%
Length 512 alignment 12/6: 48.19%
Length 512 alignment 6/12: 45.56%
Length 512 alignment 12/6: 48.07%
Length 1024 alignment 7/14: 63.23%
Length 1024 alignment 14/7: 63.54%
Length 1024 alignment 7/14: 63.07%
Length 1024 alignment 14/7: 63.54%
Length 1024 alignment 7/14: 63.18%
Length 1024 alignment 14/7: 63.83%