2 #include "libbenchmark_benchmarkinstance_internal.h"
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 )
22 struct lfds710_list_aso_element
25 struct libbenchmark_topology_node_state
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 );
34 libshared_memory_set_rollback( ms );
36 lpset_string = libbenchmark_topology_generate_lpset_string( bs->ts, ms, lpset );
38 libbenchmark_pal_print_string( lpset_string );
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] );
45 libbenchmark_pal_print_string( " (" );
46 libbenchmark_pal_print_string( libbenchmark_globals_numa_mode_names[numa_mode] );
47 libbenchmark_pal_print_string( ")" );
49 bs->init_function( bs->ts, lpset, ms, numa_mode, &bs->tsets );
51 libbenchmark_threadset_run( &bs->tsets );
53 // TRD : cleanup transfers results to the resultset
54 bs->cleanup_function( lpset, numa_mode, rs, &bs->tsets );
56 libbenchmark_threadset_cleanup( &bs->tsets );
58 // TRD : print the results
62 while( LFDS710_LIST_ASO_GET_START_AND_THEN_NEXT(*lpset, lasoe) )
64 tns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasoe );
66 libbenchmark_results_get_result( rs,
75 libshared_ansi_strcpy( temp, ", " );
76 libshared_ansi_strcat_number( temp, operation_count / libbenchmark_globals_benchmark_duration_in_seconds );
77 libshared_ansi_strcat( temp, " (" );
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) );
82 if( LIBBENCHMARK_TOPOLOGY_NODE_IS_WINDOWS_GROUP_NUMBER(*tns) )
84 libshared_ansi_strcat( temp, "/" );
85 libshared_ansi_strcat_number( temp, LIBBENCHMARK_TOPOLOGY_NODE_GET_WINDOWS_GROUP_NUMBER(*tns) );
88 libshared_ansi_strcat( temp, ")" );
90 libbenchmark_pal_print_string( temp );
93 libbenchmark_pal_print_string( "\n" );
95 libshared_memory_rollback( ms );