PATCH: Optimize memcmp for ia32
H. J. Lu
hjl@lucon.org
Mon Feb 9 19:36:00 GMT 2004
On Mon, Feb 09, 2004 at 10:37:03AM -0800, Ulrich Drepper wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> H. J. Lu wrote:
>
> > I don't think anyone will be happy to run the current glibc on anything
> > less than Pentium Pro.
>
> That's unfortunately not true,
>
>
> > We can investigate how often it is called in gcc. But it is used by
> > some applications and my patch will help them.
>
> We can? You must know what kind of string length etc are used to write
> improvements. If you don't have the data your "improvements" might be
> bad for all the interesting cases.
>
On Prescott, I got
old old new speedup
simple_memcmp memcmp memcmp
Length 1, alignment 1/ 1 28 161 28 21 666.667
Length 1, alignment 1/ 1 21 161 28 21 666.667
Length 1, alignment 1/ 1 28 161 21 21 666.667
Length 2, alignment 2/ 2 28 168 28 35 380
Length 2, alignment 2/ 2 28 168 28 35 380
Length 2, alignment 2/ 2 28 168 28 35 380
Length 3, alignment 3/ 3 35 168 35 35 380
Length 3, alignment 3/ 3 28 175 28 35 400
Length 3, alignment 3/ 3 35 175 35 35 400
Length 4, alignment 4/ 4 35 175 42 28 525
Length 4, alignment 4/ 4 35 175 42 35 400
Length 4, alignment 4/ 4 35 175 35 35 400
Length 5, alignment 5/ 5 49 175 49 28 525
Length 5, alignment 5/ 5 42 182 49 35 420
Length 5, alignment 5/ 5 42 182 42 35 420
Length 6, alignment 6/ 6 56 182 49 28 550
Length 6, alignment 6/ 6 49 189 56 35 440
Length 6, alignment 6/ 6 49 189 56 35 440
Length 7, alignment 7/ 7 56 189 56 28 575
Length 7, alignment 7/ 7 56 189 56 35 440
Length 7, alignment 7/ 7 56 189 56 35 440
Length 8, alignment 0/ 0 63 189 63 28 575
Length 8, alignment 0/ 0 56 196 56 35 460
Length 8, alignment 0/ 0 56 196 56 35 460
Length 9, alignment 1/ 1 63 196 63 28 600
Length 9, alignment 1/ 1 63 196 63 35 460
Length 9, alignment 1/ 1 63 196 63 35 460
Length 10, alignment 2/ 2 119 196 77 35 460
Length 10, alignment 2/ 2 70 203 70 35 480
Length 10, alignment 2/ 2 70 203 70 35 480
Length 11, alignment 3/ 3 112 203 77 35 480
Length 11, alignment 3/ 3 112 203 70 35 480
Length 11, alignment 3/ 3 112 203 77 35 480
Length 12, alignment 4/ 4 119 203 119 28 625
Length 12, alignment 4/ 4 119 210 84 35 500
Length 12, alignment 4/ 4 119 210 77 35 500
Length 13, alignment 5/ 5 119 210 119 35 500
Length 13, alignment 5/ 5 119 217 119 35 520
Length 13, alignment 5/ 5 119 217 119 35 520
Length 14, alignment 6/ 6 126 217 133 28 675
Length 14, alignment 6/ 6 126 224 126 35 540
Length 14, alignment 6/ 6 126 217 126 35 520
Length 15, alignment 7/ 7 133 217 133 35 520
Length 15, alignment 7/ 7 133 224 140 35 540
Length 15, alignment 7/ 7 133 224 133 35 540
Length 1, alignment 0/ 0 21 161 21 21 666.667
Length 1, alignment 0/ 0 28 168 21 21 700
Length 1, alignment 0/ 0 21 161 21 21 666.667
Length 2, alignment 0/ 0 28 168 35 28 500
Length 2, alignment 0/ 0 28 168 28 35 380
Length 2, alignment 0/ 0 28 168 28 28 500
Length 3, alignment 0/ 0 35 168 35 35 380
Length 3, alignment 0/ 0 28 175 35 35 400
Length 3, alignment 0/ 0 35 175 35 35 400
Length 4, alignment 0/ 0 35 175 42 28 525
Length 4, alignment 0/ 0 35 175 42 35 400
Length 4, alignment 0/ 0 35 175 42 28 525
Length 5, alignment 0/ 0 84 175 49 28 525
Length 5, alignment 0/ 0 42 182 49 35 420
Length 5, alignment 0/ 0 42 182 49 35 420
Length 6, alignment 0/ 0 56 182 49 28 550
Length 6, alignment 0/ 0 49 189 56 35 440
Length 6, alignment 0/ 0 49 189 56 35 440
Length 7, alignment 0/ 0 56 189 56 28 575
Length 7, alignment 0/ 0 49 189 56 35 440
Length 7, alignment 0/ 0 49 189 56 35 440
Length 8, alignment 0/ 0 63 189 63 35 440
Length 8, alignment 0/ 0 56 196 63 35 460
Length 8, alignment 0/ 0 56 196 63 35 460
Length 9, alignment 0/ 0 63 196 70 28 600
Length 9, alignment 0/ 0 63 196 63 35 460
Length 9, alignment 0/ 0 63 196 63 35 460
Length 10, alignment 0/ 0 70 196 77 35 460
Length 10, alignment 0/ 0 70 203 70 35 480
Length 10, alignment 0/ 0 70 203 70 35 480
Length 11, alignment 0/ 0 112 203 84 35 480
Length 11, alignment 0/ 0 70 203 84 35 480
Length 11, alignment 0/ 0 70 203 70 35 480
Length 12, alignment 0/ 0 119 203 119 35 480
Length 12, alignment 0/ 0 119 210 84 35 500
Length 12, alignment 0/ 0 119 210 77 35 500
Length 13, alignment 0/ 0 126 210 126 28 650
Length 13, alignment 0/ 0 119 217 119 35 520
Length 13, alignment 0/ 0 119 217 119 35 520
Length 14, alignment 0/ 0 133 217 126 35 520
Length 14, alignment 0/ 0 126 217 126 35 520
Length 14, alignment 0/ 0 126 217 119 35 520
Length 15, alignment 0/ 0 133 217 133 35 520
Length 15, alignment 0/ 0 133 224 133 35 540
Length 15, alignment 0/ 0 133 224 133 35 540
Length 4, alignment 0/ 0 35 175 35 28 525
Length 4, alignment 0/ 0 35 175 35 28 525
Length 4, alignment 0/ 0 35 175 35 28 525
Length 32, alignment 0/ 0 231 287 231 35 720
Length 32, alignment 7/ 2 231 287 231 35 720
Length 32, alignment 0/ 0 231 287 231 35 720
Length 32, alignment 0/ 0 231 287 224 35 720
Length 8, alignment 0/ 0 63 189 63 28 575
Length 8, alignment 0/ 0 56 196 56 35 460
Length 8, alignment 0/ 0 56 196 56 35 460
Length 64, alignment 0/ 0 420 413 420 56 637.5
Length 64, alignment 6/ 4 420 413 420 56 637.5
Length 64, alignment 0/ 0 420 420 420 63 566.667
Length 64, alignment 0/ 0 420 420 420 63 566.667
Length 16, alignment 0/ 0 140 224 140 35 540
Length 16, alignment 0/ 0 133 224 133 35 540
Length 16, alignment 0/ 0 140 224 140 35 540
Length 128, alignment 0/ 0 805 672 812 140 380
Length 128, alignment 5/ 6 805 672 812 189 255.556
Length 128, alignment 0/ 0 805 672 805 154 336.364
Length 128, alignment 0/ 0 805 672 805 154 336.364
Length 32, alignment 0/ 0 231 287 231 35 720
Length 32, alignment 0/ 0 224 287 224 35 720
Length 32, alignment 0/ 0 231 287 224 35 720
Length 256, alignment 0/ 0 1575 1183 1575 203 482.759
Length 256, alignment 4/ 0 1575 1183 1575 203 482.759
Length 256, alignment 0/ 0 1568 1183 1568 217 445.161
Length 256, alignment 0/ 0 1568 1183 1568 217 445.161
Length 64, alignment 0/ 0 420 420 420 56 650
Length 64, alignment 0/ 0 420 420 420 63 566.667
Length 64, alignment 0/ 0 420 420 420 63 566.667
Length 512, alignment 0/ 0 3108 2205 3108 336 556.25
Length 512, alignment 3/ 2 3108 2205 3108 553 298.734
Length 512, alignment 0/ 0 3108 2212 3108 343 544.898
Length 512, alignment 0/ 0 3108 2212 3108 343 544.898
Length 128, alignment 0/ 0 805 672 812 140 380
Length 128, alignment 0/ 0 805 672 805 154 336.364
Length 128, alignment 0/ 0 805 672 805 154 336.364
Length 1024, alignment 0/ 0 6181 4256 6181 595 615.294
Length 1024, alignment 2/ 4 6181 4256 6181 882 382.54
Length 1024, alignment 0/ 0 6181 4256 6181 609 598.851
Length 1024, alignment 0/ 0 6181 4256 6181 609 598.851
Length 256, alignment 0/ 0 1575 1183 1575 203 482.759
Length 256, alignment 0/ 0 1568 1183 1575 217 445.161
Length 256, alignment 0/ 0 1568 1183 1575 217 445.161
Length 2048, alignment 0/ 0 12327 8351 12327 1120 645.625
Length 2048, alignment 1/ 6 10290 8351 12327 1995 318.596
Length 2048, alignment 0/ 0 10283 8351 12327 1141 631.902
Length 2048, alignment 0/ 0 10283 8351 12320 1141 631.902
Length 512, alignment 0/ 0 2611 2205 3108 336 556.25
Length 512, alignment 0/ 0 2604 2212 3108 343 544.898
Length 512, alignment 0/ 0 2604 2212 3108 343 544.898
Length 4096, alignment 0/ 0 20524 16541 24612 2177 659.807
Length 4096, alignment 0/ 0 20524 16548 24612 2177 660.129
Length 4096, alignment 0/ 0 20524 16548 24612 2184 657.692
Length 4096, alignment 0/ 0 20524 16548 24612 2184 657.692
Length 1024, alignment 0/ 0 5166 4256 6181 595 615.294
Length 1024, alignment 0/ 0 5159 4256 6188 609 598.851
Length 1024, alignment 0/ 0 5159 4256 6181 609 598.851
Length 16, alignment 1/ 2 133 224 140 35 540
Length 16, alignment 1/ 2 133 224 140 35 540
Length 16, alignment 1/ 2 140 224 140 35 540
Length 32, alignment 2/ 4 210 287 231 42 583.333
Length 32, alignment 2/ 4 203 287 231 42 583.333
Length 32, alignment 2/ 4 203 287 231 35 720
Length 64, alignment 3/ 6 371 413 420 63 555.556
Length 64, alignment 3/ 6 364 420 420 84 400
Length 64, alignment 3/ 6 364 420 420 84 400
Length 128, alignment 4/ 0 686 672 805 140 380
Length 128, alignment 4/ 0 679 672 805 154 336.364
Length 128, alignment 4/ 0 686 672 805 154 336.364
Length 256, alignment 5/ 2 1330 1183 1575 315 275.556
Length 256, alignment 5/ 2 1323 1183 1568 357 231.373
Length 256, alignment 5/ 2 1260 1183 1568 364 225
Length 512, alignment 6/ 4 2597 2205 3108 476 363.235
Length 512, alignment 6/ 4 2450 2212 3108 497 345.07
Length 512, alignment 6/ 4 2611 2212 3108 497 345.07
Length 1024, alignment 7/ 6 5166 4256 6181 1036 310.811
Length 1024, alignment 7/ 6 5166 4256 6181 1050 305.333
Length 1024, alignment 7/ 6 5166 4256 6181 1043 308.054
I got similar results on other processors.
H.J.
More information about the Libc-alpha
mailing list