Re: [PATCH v1] commands: Add dhrystone

2015-07-27 Thread Jan Lübbe
On Fr, 2015-07-24 at 13:41 +0200, Daniel Schultz wrote:
 At the end of the do_dhrystone function:
 
  if (user_time  TOO_SMALL_TIME) {
  number_of_runs = number_of_runs * 10;
  new_argv[0] = argv[0];
  sprintf(tmp_str, %i, number_of_runs);
  new_argv[1] = tmp_str;
  printf(Measured time too small to obtain meaningful results\n);
  printf(or a timer wrap happend. I will increase the number\n);
  printf(of runs by *10 to %d\n, number_of_runs);
  printf(user_time: %llu ns\n, user_time);
  do_dhrystone(2, new_argv);
  ...
 
 I'm sure there is a better solution.

Why not just loop for a few seconds?

Regards,
Jan
-- 
Pengutronix e.K.   | |
Industrial Linux Solutions | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0|
Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917- |


___
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


Re: [PATCH v1] commands: Add dhrystone

2015-07-24 Thread Sascha Hauer
On Thu, Jul 23, 2015 at 10:01:32AM +0200, Daniel Schultz wrote:
 This tool will help to measure the system performance.
 
 Some SoCs haven't the possibility to route their clocks to the output pins.
 So you can use dhrystone to get a feedback about the clock speed.
 
 Signed-off-by: Daniel Schultz d.schu...@phytec.de
 ---
 
 Changes:
   v1:
   applied RFC suggestions:
   -removed 'default n' in Kconfig
   -refactored time defines with default time units
   -only print variable values when values are wrong
   -added units to printf
   -the iteration parameter is now optional. The programm starts
   with 1 iterations and adjust higher, when execution time
   is too short.

I can see that the parameter is now optional, but I can't find the code
which adjusts the number of iterations. Am I missing something?

   -changed variable name (microseconds - nanoseconds)
   -corrected the command description
 
  commands/Kconfig |   6 +
  commands/Makefile|   1 +
  commands/dhrystone.c | 466 
 +++
  3 files changed, 473 insertions(+)
  create mode 100644 commands/dhrystone.c
 
 diff --git a/commands/Kconfig b/commands/Kconfig
 index bb6674e..30485c0 100644
 --- a/commands/Kconfig
 +++ b/commands/Kconfig
 @@ -2102,6 +2102,12 @@ config CMD_STATE
   depends on STATE
   prompt state
  
 +config CMD_DHRYSTONE
 + bool
 + prompt dhrystone
 + help
 +   CPU benchmark tool
 +
  # end Miscellaneous commands
  endmenu
  
 diff --git a/commands/Makefile b/commands/Makefile
 index 3698347..879caec 100644
 --- a/commands/Makefile
 +++ b/commands/Makefile
 @@ -112,3 +112,4 @@ obj-$(CONFIG_CMD_NV)  += nv.o
  obj-$(CONFIG_CMD_DEFAULTENV) += defaultenv.o
  obj-$(CONFIG_CMD_STATE)  += state.o
  obj-$(CONFIG_CMD_DHCP)   += dhcp.o
 +obj-$(CONFIG_CMD_DHRYSTONE)  += dhrystone.o
 diff --git a/commands/dhrystone.c b/commands/dhrystone.c
 new file mode 100644
 index 000..e965011
 --- /dev/null
 +++ b/commands/dhrystone.c
 @@ -0,0 +1,466 @@
 +/*
 + * (C) Copyright 2014 - 2015 Phytec Messtechnik GmbH
 + * Author: Stefan Müller-Klieser s.mueller-klie...@phytec.de
 + * Author: Daniel Schultz d.schu...@phytec.de
 + *
 + * based on DHRYSTONE Benchmark Program
 + * Version:C, Version 2.1
 + * Date:   May 25, 1988
 + * Author: Reinhold P. Weicker
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2
 + * as published by the Free Software Foundation.
 + *
 + * This program 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 General Public License for more details.
 + *
 + */
 +
 +#include common.h
 +#include command.h
 +#include errno.h
 +#include clock.h
 +#include asm-generic/div64.h
 +#include malloc.h
 +#include stdbool.h
 +#include stdio.h /* for strcpy, strcmp */
 +
 +enum idents {ident_1, ident_2, ident_3, ident_4, ident_5};
 +
 +/* General definitions: */
 +
 +struct record {
 + struct record   *ptr_comp;
 + enum idents discr;
 + union {
 + struct {
 + enum idents enum_comp;
 + int int_comp;
 + charstr_comp[31];
 + } var_1;
 + struct {
 + enum idents enum_comp_2;
 + charstr_2_comp[31];
 + } var_2;
 + struct {
 + char char_1_Comp;
 + char char_2_Comp;
 + } var_3;
 + } variant;
 +};
 +
 +/* Global Variables: */
 +
 +struct record*record_glob;
 +struct record*next_record_glob;
 +int  int_glob;
 +bool bool_glob;
 +char char_1_glob;
 +char char_2_glob;
 +int  arr_1_glob[50];
 +int  arr_2_glob[50][50];

These should all be static.

 +
 +/* variables for time measurement: */
 +
 +#define TOO_SMALL_TIME (50 * MSECOND)
 +/* Measurements should last at least 50mseconds */
 +#define TOO_LARGE_TIME (2 * SECOND)
 +
 +u64   begin_time;
 +u64   end_time;
 +u64   user_time;
 +u64   nanoseconds;
 +u64   dhrystones_per_second;

These should probably be local variables in do_dhrystone().

 +/* end of variables for time measurement */
 +
 +enum idents compare_chars(char char_1, char char_2)
 +{
 + if (char_1 != char_2) {
 + return ident_1;
 + } else { /* should not executed */
 + char_1_glob = char_1;
 + return ident_2;
 + }
 +}
 +
 +bool compare_strs(char str_1[31], char 

[PATCH v1] commands: Add dhrystone

2015-07-23 Thread Daniel Schultz
This tool will help to measure the system performance.

Some SoCs haven't the possibility to route their clocks to the output pins.
So you can use dhrystone to get a feedback about the clock speed.

Signed-off-by: Daniel Schultz d.schu...@phytec.de
---

Changes:
v1:
applied RFC suggestions:
-removed 'default n' in Kconfig
-refactored time defines with default time units
-only print variable values when values are wrong
-added units to printf
-the iteration parameter is now optional. The programm starts
with 1 iterations and adjust higher, when execution time
is too short.
-changed variable name (microseconds - nanoseconds)
-corrected the command description

 commands/Kconfig |   6 +
 commands/Makefile|   1 +
 commands/dhrystone.c | 466 +++
 3 files changed, 473 insertions(+)
 create mode 100644 commands/dhrystone.c

diff --git a/commands/Kconfig b/commands/Kconfig
index bb6674e..30485c0 100644
--- a/commands/Kconfig
+++ b/commands/Kconfig
@@ -2102,6 +2102,12 @@ config CMD_STATE
depends on STATE
prompt state
 
+config CMD_DHRYSTONE
+   bool
+   prompt dhrystone
+   help
+ CPU benchmark tool
+
 # end Miscellaneous commands
 endmenu
 
diff --git a/commands/Makefile b/commands/Makefile
index 3698347..879caec 100644
--- a/commands/Makefile
+++ b/commands/Makefile
@@ -112,3 +112,4 @@ obj-$(CONFIG_CMD_NV)+= nv.o
 obj-$(CONFIG_CMD_DEFAULTENV)   += defaultenv.o
 obj-$(CONFIG_CMD_STATE)+= state.o
 obj-$(CONFIG_CMD_DHCP) += dhcp.o
+obj-$(CONFIG_CMD_DHRYSTONE)+= dhrystone.o
diff --git a/commands/dhrystone.c b/commands/dhrystone.c
new file mode 100644
index 000..e965011
--- /dev/null
+++ b/commands/dhrystone.c
@@ -0,0 +1,466 @@
+/*
+ * (C) Copyright 2014 - 2015 Phytec Messtechnik GmbH
+ * Author: Stefan Müller-Klieser s.mueller-klie...@phytec.de
+ * Author: Daniel Schultz d.schu...@phytec.de
+ *
+ * based on DHRYSTONE Benchmark Program
+ * Version:C, Version 2.1
+ * Date:   May 25, 1988
+ * Author: Reinhold P. Weicker
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program 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 General Public License for more details.
+ *
+ */
+
+#include common.h
+#include command.h
+#include errno.h
+#include clock.h
+#include asm-generic/div64.h
+#include malloc.h
+#include stdbool.h
+#include stdio.h /* for strcpy, strcmp */
+
+enum idents {ident_1, ident_2, ident_3, ident_4, ident_5};
+
+/* General definitions: */
+
+struct record {
+   struct record   *ptr_comp;
+   enum idents discr;
+   union {
+   struct {
+   enum idents enum_comp;
+   int int_comp;
+   charstr_comp[31];
+   } var_1;
+   struct {
+   enum idents enum_comp_2;
+   charstr_2_comp[31];
+   } var_2;
+   struct {
+   char char_1_Comp;
+   char char_2_Comp;
+   } var_3;
+   } variant;
+};
+
+/* Global Variables: */
+
+struct record  *record_glob;
+struct record  *next_record_glob;
+intint_glob;
+bool   bool_glob;
+char   char_1_glob;
+char   char_2_glob;
+intarr_1_glob[50];
+intarr_2_glob[50][50];
+
+/* variables for time measurement: */
+
+#define TOO_SMALL_TIME (50 * MSECOND)
+/* Measurements should last at least 50mseconds */
+#define TOO_LARGE_TIME (2 * SECOND)
+
+u64 begin_time;
+u64 end_time;
+u64 user_time;
+u64 nanoseconds;
+u64 dhrystones_per_second;
+/* end of variables for time measurement */
+
+enum idents compare_chars(char char_1, char char_2)
+{
+   if (char_1 != char_2) {
+   return ident_1;
+   } else { /* should not executed */
+   char_1_glob = char_1;
+   return ident_2;
+   }
+}
+
+bool compare_strs(char str_1[31], char str_2[31])
+{
+   int offset;
+
+   offset = 2;
+   while (offset = 2)
+   if (compare_chars(str_1[offset], str_2[offset+1]) == ident_1)
+   ++offset;
+   if (strcmp(str_1, str_2)  0) {
+   int_glob = offset + 7;
+   return true;
+   } else {
+   return false;
+