coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] numfmt: improve processing throughput by 800%


From: Pádraig Brady
Subject: [PATCH] numfmt: improve processing throughput by 800%
Date: Fri, 2 May 2014 01:58:59 +0100

The devmsg() calls that took quote_n() arguments,
didn't normally output anything, but still incurred
the overhead of those quote_n() calls.

* src/numfmt.c (devmsg): Move the inline function
with _internal_ enablement check to...
* src/system.h: ...here as a variadic macro, with
the enablement check at the outer level.
* src/factor.c: As per numfmt.c but there is no
performance change in this case.
* MEWS: Mention the significant performance improvement.
---
 NEWS         |    1 +
 src/factor.c |   16 ----------------
 src/numfmt.c |   16 ----------------
 src/system.h |   10 ++++++++++
 4 files changed, 11 insertions(+), 32 deletions(-)

diff --git a/NEWS b/NEWS
index 92ab59d..50303f9 100644
--- a/NEWS
+++ b/NEWS
@@ -68,6 +68,7 @@ GNU coreutils NEWS                                    -*- 
outline -*-
 
   numfmt supports zero padding of numbers using the standard printf
   syntax of a leading zero, for example --format="%010f".
+  Also throughput was improved by up to 800% by avoiding redundant processing.
 
   shred now supports multiple passes on GNU/Linux tape devices by rewinding
   the tape before each pass, avoids redundant writes to empty files,
diff --git a/src/factor.c b/src/factor.c
index c55edb8..63924d5 100644
--- a/src/factor.c
+++ b/src/factor.c
@@ -689,22 +689,6 @@ verify (W <= WIDE_UINT_BITS);
    This flag is used only in the GMP code.  */
 static bool dev_debug = false;
 
-/* Like error(0, 0, ...), but without an implicit newline.
-   Also a noop unless the global DEV_DEBUG is set.
-   TODO: Replace with variadic macro in system.h or
-   move to a separate module.  */
-static inline void
-devmsg (char const *fmt, ...)
-{
-  if (dev_debug)
-    {
-      va_list ap;
-      va_start (ap, fmt);
-      vfprintf (stderr, fmt, ap);
-      va_end (ap);
-    }
-}
-
 /* Prove primality or run probabilistic tests.  */
 static bool flag_prove_primality = true;
 
diff --git a/src/numfmt.c b/src/numfmt.c
index c744875..e8f53fc 100644
--- a/src/numfmt.c
+++ b/src/numfmt.c
@@ -198,22 +198,6 @@ static int decimal_point_length;
 /* debugging for developers.  Enables devmsg().  */
 static bool dev_debug = false;
 
-/* Like error(0, 0, ...), but without an implicit newline.
-   Also a noop unless the global DEV_DEBUG is set.
-   TODO: Replace with variadic macro in system.h or
-   move to a separate module.  */
-static inline void
-devmsg (char const *fmt, ...)
-{
-  if (dev_debug)
-    {
-      va_list ap;
-      va_start (ap, fmt);
-      vfprintf (stderr, fmt, ap);
-      va_end (ap);
-    }
-}
-
 static inline int
 default_scale_base (enum scale_type scale)
 {
diff --git a/src/system.h b/src/system.h
index a9588e7..f295ad1 100644
--- a/src/system.h
+++ b/src/system.h
@@ -617,6 +617,16 @@ usable_st_size (struct stat const *sb)
 
 void usage (int status) ATTRIBUTE_NORETURN;
 
+/* Like error(0, 0, ...), but without an implicit newline.
+   Also a noop unless the global DEV_DEBUG is set.  */
+#define devmsg(...)                    \
+  do                                   \
+    {                                  \
+      if (dev_debug)                   \
+        fprintf (stderr, __VA_ARGS__); \
+    }                                  \
+  while (0)
+
 #define emit_cycle_warning(file_name)  \
   do                                   \
     {                                  \
-- 
1.7.7.6




reply via email to

[Prev in Thread] Current Thread [Next in Thread]