This simply adds xml function calls to allow the dumping of results and samples
into an xml file.

Compilation is conditional to LIB_XML.

Signed-off-by: Gilles Carry <[EMAIL PROTECTED]>
---
 testcases/realtime/func/matrix_mult/matrix_mult.c |   68 +++++++++++++++++++-
 1 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/testcases/realtime/func/matrix_mult/matrix_mult.c 
b/testcases/realtime/func/matrix_mult/matrix_mult.c
index e27f47d..87aee24 100644
--- a/testcases/realtime/func/matrix_mult/matrix_mult.c
+++ b/testcases/realtime/func/matrix_mult/matrix_mult.c
@@ -43,6 +43,9 @@
 #include <librttest.h>
 #include <libjvmsim.h>
 #include <libstats.h>
+#ifdef LIB_XML
+#include <libxml.h>
+#endif
 
 #define MAX_CPUS       8192
 #define PRIO           43
@@ -137,7 +140,7 @@ void matrix_mult(int m_size)
        }
 }
 
-void matrix_mult_record(int m_size, int index)
+void matrix_mult_record(int m_size, int index, int cpuid)
 {
        nsec_t start, end, delta;
        int i;
@@ -149,6 +152,8 @@ void matrix_mult_record(int m_size, int index)
        delta = (long)((end - start)/NS_PER_US);
        curdat->records[index].x = index;
        curdat->records[index].y = delta;
+       curdat->records[index].t = start;
+       curdat->records[index].c = cpuid;
 }
 
 int set_affinity(void)
@@ -189,7 +194,7 @@ void *concurrent_thread(void *thread)
        index = iterations_percpu * thread_id; /* To avoid stats overlapping */
        pthread_barrier_wait(&mult_start);
        for (i=0; i < iterations_percpu; i++)
-               matrix_mult_record(MATRIX_SIZE, index++);
+               matrix_mult_record(MATRIX_SIZE, index++, cpuid);
 
        return NULL;
 }
@@ -232,7 +237,7 @@ void main_thread(void)
        printf("\nRunning sequential operations\n");
        start = rt_gettime();
        for (i = 0; i < iterations; i++)
-               matrix_mult_record(MATRIX_SIZE, i);
+               matrix_mult_record(MATRIX_SIZE, i, cpuid);
        end = rt_gettime();
        delta = (long)((end - start)/NS_PER_US);
 
@@ -310,6 +315,58 @@ void main_thread(void)
                criteria);
        printf("Result: %s\n", ret ? "FAIL" : "PASS");
 
+#ifdef LIB_XML
+       if (! xml_dump)
+               return;
+
+       {
+               xml_stream_t *xs;
+
+               /* XML dump */
+               xs = xml_stream_init("matrix_mult", "ltp-run", "matrix-mult");
+               if (!xs) {
+                       fprintf(stderr, "Warning: could not save results as 
xml\n");
+                       return;
+               }
+               xml_entry(xs, "title", "Matrix Multiplication (SMP 
Performance)");
+               xml_start_tag(xs, "parameters");
+               xml_entry(xs, "iterations", "%ld", iterations);
+               xml_entry(xs, "calc-per-iter", "%ld", ops);
+               xml_end_tag(xs, "parameters");
+
+               xml_start_tag(xs, "sequential");
+               xml_entry(xs, "min", "%ld",smin);
+               xml_entry(xs, "max", "%ld",smax);
+               xml_entry(xs, "avg", "%.4f",savg);
+               xml_entry(xs, "stddev", "%.4f",stats_stddev(&sdat));
+
+               xml_stats_container_save(xs, "data",
+                               "Iteration", "Runtime (us)", &sdat, "points");
+               xml_stats_container_save(xs, "histogram",
+                               "Runtime (us)", "Samples", &shist, "steps");
+               xml_end_tag(xs, "sequential");
+
+               xml_start_tag(xs, "concurrent");
+               xml_entry(xs, "min", "%ld",cmin);
+               xml_entry(xs, "max", "%ld",cmax);
+               xml_entry(xs, "avg", "%.4f",cavg);
+               xml_entry(xs, "stddev", "%.4f",stats_stddev(&cdat));
+
+               xml_stats_container_save(xs, "data",
+                               "Iteration", "Runtime (us)", &cdat, "points");
+               xml_stats_container_save(xs, "histogram",
+                               "Runtime (us)", "Samples", &chist, "steps");
+               xml_end_tag(xs, "concurrent");
+
+               xml_start_tag(xs, "ratio");
+               xml_entry(xs, "min", "%.4f",(float)smin/cmin);
+               xml_entry(xs, "max", "%.4f",(float)smax/cmax);
+               xml_entry(xs, "avg", "%.4f",(float)savg/cavg);
+               xml_end_tag(xs, "ratio");
+               xml_stream_close (xs, "ltp-run");
+       }
+#endif
+
        return;
 }
 
@@ -317,7 +374,10 @@ int main(int argc, char *argv[])
 {
        setup();
        pass_criteria = PASS_CRITERIA;
-       rt_init("jl:i:h", parse_args, argc, argv);
+       if (rt_init("jl:i:h", parse_args, argc, argv)) {
+               usage();
+               exit(1);
+       }
        numcpus = sysconf(_SC_NPROCESSORS_ONLN);
        /* the minimum avg concurrent multiplier to pass */
        criteria = pass_criteria * numcpus;
-- 
1.5.5.GIT


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to