[Patch] Speed up strcoll by inlining

Leonhard Holz leonhard.holz@web.de
Sun Nov 16 08:47:00 GMT 2014


This patch improves the performance of strcoll_l by inlining the two 
helper functions get_next_seq and do_compare.

measurement	old      	new      	diff
glibc files	202,393,000	138,597,000	-31.52%
vi_VN.UTF-8	2,772,150	2,055,920	-25.84%
en_US.UTF-8	2,741,380	1,952,770	-28.77%
ar_SA.UTF-8	3,062,180	2,484,940	-18.85%
zh_CN.UTF-8	917,198  	875,756  	-4.52%
cs_CZ.UTF-8	3,455,670	2,465,530	-28.65%
en_GB.UTF-8	3,334,790	2,420,540	-27.42%
da_DK.UTF-8	2,805,660	2,023,430	-27.88%
pl_PL.UTF-8	2,640,710	2,014,960	-23.70%
fr_FR.UTF-8	3,504,700	2,642,280	-24.61%
pt_PT.UTF-8	3,542,390	2,599,250	-26.62%
el_GR.UTF-8	4,529,580	3,881,700	-14.30%
ru_RU.UTF-8	3,527,070	2,806,480	-20.43%
iw_IL.UTF-8	3,047,060	2,530,360	-16.96%
es_ES.UTF-8	3,089,990	2,376,410	-23.09%
hi_IN.UTF-8	222,487,000	223,397,000	0.41%
sv_SE.UTF-8	2,724,630	2,019,420	-25.88%
hu_HU.UTF-8	4,446,990	3,658,830	-17.72%
tr_TR.UTF-8	2,966,180	2,200,790	-25.80%
is_IS.UTF-8	2,559,480	2,012,190	-21.38%
it_IT.UTF-8	3,301,190	2,527,230	-23.44%
sr_RS.UTF-8	2,973,150	2,322,010	-21.90%
ja_JP.UTF-8	985,042  	1,044,980	6.08%

2014-11-16  Leonhard Holz  <leonhard.holz@web.de>

     * string/strcoll_l.c (get_next_seq): __always_inline.
     * string/strcoll_l.c (do_compare): __always_inline.
-------------- next part --------------
diff --git a/string/strcoll_l.c b/string/strcoll_l.c
index 7a2d066..ddac7e5 100644
--- a/string/strcoll_l.c
+++ b/string/strcoll_l.c
@@ -63,7 +63,7 @@ typedef struct
 } coll_seq;
 
 /* Get next sequence.  Traverse the string as required.  */
-static void
+static __always_inline void
 get_next_seq (coll_seq *seq, int nrules, const unsigned char *rulesets,
 	      const USTRING_TYPE *weights, const int32_t *table,
 	      const USTRING_TYPE *extra, const int32_t *indirect,
@@ -194,7 +194,7 @@ get_next_seq (coll_seq *seq, int nrules, const unsigned char *rulesets,
 }
 
 /* Compare two sequences.  */
-static int
+static __always_inline int
 do_compare (coll_seq *seq1, coll_seq *seq2, int position,
 	    const USTRING_TYPE *weights)
 {


More information about the Libc-alpha mailing list