]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/test_and_benchmark/libbenchmark/src/libbenchmark_benchmarkinstance/libbenchmark_benchmarkinstance_run.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / test_and_benchmark / libbenchmark / src / libbenchmark_benchmarkinstance / libbenchmark_benchmarkinstance_run.c
1 /***** includes *****/
2 #include "libbenchmark_benchmarkinstance_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 void libbenchmark_benchmarkinstance_run( struct libbenchmark_benchmarkinstance_state *bs,
10                                          struct lfds710_list_aso_state *lpset,
11                                          enum libbenchmark_topology_numa_mode numa_mode,
12                                          struct libshared_memory_state *ms,
13                                          struct libbenchmark_results_state *rs )
14 {
15   char
16     *lpset_string,
17     temp[64];
18
19   lfds710_pal_uint_t
20     operation_count;
21
22   struct lfds710_list_aso_element
23     *lasoe;
24
25   struct libbenchmark_topology_node_state
26     *tns;
27
28   LFDS710_PAL_ASSERT( bs != NULL );
29   LFDS710_PAL_ASSERT( lpset != NULL );
30   // TRD : numa_mode can be any value in its range
31   LFDS710_PAL_ASSERT( ms != NULL );
32   LFDS710_PAL_ASSERT( rs != NULL );
33
34   libshared_memory_set_rollback( ms );
35
36   lpset_string = libbenchmark_topology_generate_lpset_string( bs->ts, ms, lpset );
37
38   libbenchmark_pal_print_string( lpset_string );
39
40   libbenchmark_pal_print_string( " " );
41   libbenchmark_pal_print_string( libbenchmark_globals_datastructure_names[bs->datastructure_id] );
42   libbenchmark_pal_print_string( " " );
43   libbenchmark_pal_print_string( libbenchmark_globals_lock_names[bs->lock_id] );
44
45   libbenchmark_pal_print_string( " (" );
46   libbenchmark_pal_print_string( libbenchmark_globals_numa_mode_names[numa_mode] );
47   libbenchmark_pal_print_string( ")" );
48
49   bs->init_function( bs->ts, lpset, ms, numa_mode, &bs->tsets );
50
51   libbenchmark_threadset_run( &bs->tsets );
52
53   // TRD : cleanup transfers results to the resultset
54   bs->cleanup_function( lpset, numa_mode, rs, &bs->tsets );
55
56   libbenchmark_threadset_cleanup( &bs->tsets );
57
58   // TRD : print the results
59
60   lasoe = NULL;
61
62   while( LFDS710_LIST_ASO_GET_START_AND_THEN_NEXT(*lpset, lasoe) )
63   {
64     tns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasoe );
65
66     libbenchmark_results_get_result( rs, 
67                                      bs->datastructure_id,
68                                      bs->benchmark_id,
69                                      bs->lock_id,
70                                      numa_mode,
71                                      lpset,
72                                      tns,
73                                      &operation_count );
74
75     libshared_ansi_strcpy( temp, ", " );
76     libshared_ansi_strcat_number( temp, operation_count / libbenchmark_globals_benchmark_duration_in_seconds );
77     libshared_ansi_strcat( temp, " (" );
78
79     // libshared_ansi_strcat_number_with_leading_zeros( temp, LIBBENCHMARK_TOPOLOGY_NODE_GET_LOGICAL_PROCESSOR_NUMBER(*tns), 3 );
80     libshared_ansi_strcat_number( temp, LIBBENCHMARK_TOPOLOGY_NODE_GET_LOGICAL_PROCESSOR_NUMBER(*tns) );
81
82     if( LIBBENCHMARK_TOPOLOGY_NODE_IS_WINDOWS_GROUP_NUMBER(*tns) )
83     {
84       libshared_ansi_strcat( temp, "/" );
85       libshared_ansi_strcat_number( temp, LIBBENCHMARK_TOPOLOGY_NODE_GET_WINDOWS_GROUP_NUMBER(*tns) );
86     }
87
88     libshared_ansi_strcat( temp, ")" );
89
90     libbenchmark_pal_print_string( temp );
91   }
92
93   libbenchmark_pal_print_string( "\n" );
94
95   libshared_memory_rollback( ms );
96
97   return;
98 }
99