This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.18-663-g9f6e964c


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  9f6e964c3a951b6e19ed934aec1f0c101c295987 (commit)
      from  ee0a148a56083ed438ef2e6b312af38018643e7f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=9f6e964c3a951b6e19ed934aec1f0c101c295987

commit 9f6e964c3a951b6e19ed934aec1f0c101c295987
Author: Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
Date:   Thu Dec 19 06:45:54 2013 -0500

    benchtests: Add strtok benchmark

diff --git a/ChangeLog b/ChangeLog
index 9cd05ba..bee6f8b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-12-19  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>
+
+	* benchtests/Makefile: Add bench-strtok.
+	* benchtests/bench-strtok.c: New file: strtok benchtest.
+
 2013-12-19  Allan McRae  <allan@archlinux.org>
 
 	* manual/install.texi: Suppress menu for plain text output.
diff --git a/benchtests/Makefile b/benchtests/Makefile
index eea384d..117228b 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -28,7 +28,7 @@ string-bench := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \
 		mempcpy memset rawmemchr stpcpy stpncpy strcasecmp strcasestr \
 		strcat strchr strchrnul strcmp strcpy strcspn strlen \
 		strncasecmp strncat strncmp strncpy strnlen strpbrk strrchr \
-		strspn strstr strcpy_chk stpcpy_chk memrchr strsep
+		strspn strstr strcpy_chk stpcpy_chk memrchr strsep strtok
 string-bench-all := $(string-bench)
 
 stdlib-bench := strtod
diff --git a/benchtests/bench-strtok.c b/benchtests/bench-strtok.c
new file mode 100644
index 0000000..c76d0e3
--- /dev/null
+++ b/benchtests/bench-strtok.c
@@ -0,0 +1,205 @@
+/* Measure strtok functions.
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define TEST_MAIN
+#define TEST_NAME "strtok"
+#include "bench-string.h"
+
+char *
+simple_strtok (char *s1, char *s2)
+{
+  static char *saveptr;
+  char *token;
+  ssize_t i = 0, j = 0;
+  int found = 0;
+  size_t s2len = strlen (s2);
+
+  if (s1 == NULL)
+    s1 = saveptr;
+  if (s1 == NULL || *s1 == '\0')
+    return NULL;
+
+  while (!found)
+    {
+      if (s1[i] == '\0')
+	{
+	  saveptr = NULL;
+	  return NULL;
+	}
+      for (j = 0; j < s2len; j++)
+	{
+	  if (s1[i] == s2[j])
+	    {
+	      i++;
+	      found = 0;
+	      break;
+	    }
+	  found = 1;
+	}
+    }
+  token = s1 + i;
+  i++;
+  found = 0;
+  while (!found)
+    {
+      if (s1[i] == '\0')
+	{
+	  saveptr = NULL;
+	  return token;
+	}
+      for (j = 0; j < s2len; j++)
+	{
+	  if (s1[i] == s2[j])
+	    {
+	      found = 1;
+	      break;
+	    }
+	}
+      i++;
+    }
+  s1[i - 1] = '\0';
+  saveptr = s1 + i;
+  return token;
+}
+
+typedef char *(*proto_t) (const char *, const char *);
+
+IMPL (simple_strtok, 0)
+IMPL (strtok, 1)
+
+static void
+do_one_test (impl_t * impl, const char *s1, const char *s2)
+{
+  size_t i, iters = INNER_LOOP_ITERS;
+  timing_t start, stop, cur;
+  TIMING_NOW (start);
+  for (i = 0; i < iters; ++i)
+    {
+      CALL (impl, s1, s2);
+      CALL (impl, NULL, s2);
+      CALL (impl, NULL, s2);
+    }
+  TIMING_NOW (stop);
+
+  TIMING_DIFF (cur, start, stop);
+
+  TIMING_PRINT_MEAN ((double) cur, (double) iters);
+
+}
+
+
+static void
+do_test (size_t align1, size_t align2, size_t len1, size_t len2, int fail)
+{
+  char *s2 = (char *) (buf2 + align2);
+  static const char d[] = "1234567890abcdef";
+#define dl (sizeof (d) - 1)
+  char *ss2 = s2;
+  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
+    {
+      size_t t = l > dl ? dl : l;
+      ss2 = mempcpy (ss2, d, t);
+    }
+  s2[len2] = '\0';
+
+  printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
+	  len1, len2, align1, align2, fail ? "fail" : "found");
+
+  FOR_EACH_IMPL (impl, 0)
+  {
+    char *s1 = (char *) (buf1 + align1);
+    if (fail)
+      {
+	char *ss1 = s1;
+	for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
+	  {
+	    size_t t = l > dl ? dl : l;
+	    memcpy (ss1, d, t);
+	    ++ss1[len2 > 7 ? 7 : len2 - 1];
+	    ss1 += t;
+	  }
+      }
+    else
+      {
+	memset (s1, '0', len1);
+	memcpy (s1 + (len1 - len2) - 2, s2, len2);
+	if ((len1 / len2) > 4)
+	  memcpy (s1 + (len1 - len2) - (3 * len2), s2, len2);
+      }
+    s1[len1] = '\0';
+    do_one_test (impl, s1, s2);
+  }
+  putchar ('\n');
+}
+
+static int
+test_main (void)
+{
+  test_init ();
+
+  printf ("%23s", "");
+  FOR_EACH_IMPL (impl, 0)
+    printf ("\t%s", impl->name);
+  putchar ('\n');
+
+  for (size_t klen = 2; klen < 32; ++klen)
+    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
+      {
+	do_test (0, 0, hlen, klen, 0);
+	do_test (0, 0, hlen, klen, 1);
+	do_test (0, 3, hlen, klen, 0);
+	do_test (0, 3, hlen, klen, 1);
+	do_test (0, 9, hlen, klen, 0);
+	do_test (0, 9, hlen, klen, 1);
+	do_test (0, 15, hlen, klen, 0);
+	do_test (0, 15, hlen, klen, 1);
+
+	do_test (3, 0, hlen, klen, 0);
+	do_test (3, 0, hlen, klen, 1);
+	do_test (3, 3, hlen, klen, 0);
+	do_test (3, 3, hlen, klen, 1);
+	do_test (3, 9, hlen, klen, 0);
+	do_test (3, 9, hlen, klen, 1);
+	do_test (3, 15, hlen, klen, 0);
+	do_test (3, 15, hlen, klen, 1);
+
+	do_test (9, 0, hlen, klen, 0);
+	do_test (9, 0, hlen, klen, 1);
+	do_test (9, 3, hlen, klen, 0);
+	do_test (9, 3, hlen, klen, 1);
+	do_test (9, 9, hlen, klen, 0);
+	do_test (9, 9, hlen, klen, 1);
+	do_test (9, 15, hlen, klen, 0);
+	do_test (9, 15, hlen, klen, 1);
+
+	do_test (15, 0, hlen, klen, 0);
+	do_test (15, 0, hlen, klen, 1);
+	do_test (15, 3, hlen, klen, 0);
+	do_test (15, 3, hlen, klen, 1);
+	do_test (15, 9, hlen, klen, 0);
+	do_test (15, 9, hlen, klen, 1);
+	do_test (15, 15, hlen, klen, 0);
+	do_test (15, 15, hlen, klen, 1);
+      }
+  do_test (0, 0, page_size - 1, 16, 0);
+  do_test (0, 0, page_size - 1, 16, 1);
+
+  return ret;
+}
+
+#include "../test-skeleton.c"

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |    5 ++
 benchtests/Makefile                           |    2 +-
 benchtests/{bench-strsep.c => bench-strtok.c} |   77 +++++++++++++++++-------
 3 files changed, 60 insertions(+), 24 deletions(-)
 copy benchtests/{bench-strsep.c => bench-strtok.c} (80%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]