2 #include "libbenchmark_benchmarks_btree_au_internal.h"
5 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element
10 struct lfds700_btree_au_element
14 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_thread_benchmark_state
21 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_numa_benchmark_state
27 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element
30 struct lfds700_btree_au_state
34 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_overall_benchmark_state
36 enum libbenchmark_topology_numa_mode
43 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element
46 struct lfds700_btree_au_state
50 /***** private prototypes *****/
51 static int key_compare_function( void const *new_key, void const *existing_key );
57 /****************************************************************************/
58 void libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_init( struct libbenchmark_topology_state *ts,
59 struct lfds710_list_aso_state *logical_processor_set,
60 struct libshared_memory_state *ms,
61 enum libbenchmark_topology_numa_mode numa_mode,
62 struct libbenchmark_threadset_state *tsets )
64 enum lfds700_btree_au_insert_result
67 struct lfds700_misc_prng_state
73 number_logical_processors,
74 number_benchmark_elements,
75 number_logical_processors_in_numa_node,
76 largest_number_logical_processors_in_numa_node = 0,
77 total_number_benchmark_elements;
79 struct lfds710_list_asu_element
83 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_overall_benchmark_state
86 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_numa_benchmark_state
89 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_thread_benchmark_state
92 struct lfds700_btree_au_state
95 struct libbenchmark_prng_state
98 struct libbenchmark_threadset_per_numa_state
102 struct libbenchmark_threadset_per_thread_state
105 struct libbenchmark_topology_node_state
108 LFDS710_PAL_ASSERT( ts != NULL );
109 LFDS710_PAL_ASSERT( logical_processor_set != NULL );
110 LFDS710_PAL_ASSERT( ms != NULL );
111 // TRD : numa_mode can be any value in its range
112 LFDS710_PAL_ASSERT( tsets != NULL );
114 lfds700_misc_prng_init( &lfds700_ps );
116 lfds710_list_aso_query( logical_processor_set, LFDS710_LIST_ASO_QUERY_GET_POTENTIALLY_INACCURATE_COUNT, NULL, (void *) &number_logical_processors );
118 libbenchmark_threadset_init( tsets, ts, logical_processor_set, ms, libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_thread, NULL );
120 total_number_benchmark_elements = number_logical_processors * 1024;
122 obs = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_overall_benchmark_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
124 LIBBENCHMARK_PRNG_INIT( ps, LFDS710_PRNG_SEED );
128 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_SMP:
129 bs = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct lfds700_btree_au_state), LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES );
130 lfds700_btree_au_init_valid_on_current_logical_core( bs, key_compare_function, LIBBENCHMARK_DATASTRUCTURE_BTREE_AU_GCC_SPINLOCK_ATOMIC_EXISTING_KEY_FAIL, NULL );
132 obs->bme = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element) * total_number_benchmark_elements, LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES );
133 obs->element_key_array = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(lfds710_pal_uint_t) * total_number_benchmark_elements, sizeof(lfds710_pal_uint_t) );
135 for( loop = 0 ; loop < total_number_benchmark_elements ; loop++ )
138 LIBBENCHMARK_PRNG_GENERATE( ps, obs->bme[loop].datum );
139 obs->element_key_array[loop] = obs->bme[loop].datum;
141 LFDS700_BTREE_AU_SET_KEY_IN_ELEMENT( obs->bme[loop].be, &obs->bme[loop] );
142 LFDS700_BTREE_AU_SET_VALUE_IN_ELEMENT( obs->bme[loop].be, &obs->bme[loop] );
143 ir = lfds700_btree_au_insert( bs, &obs->bme[loop].be, NULL, &lfds700_ps );
145 while( ir == LFDS700_BTREE_AU_INSERT_RESULT_FAILURE_EXISTING_KEY );
149 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue) )
151 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
152 ptbs = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_thread_benchmark_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
153 LIBBENCHMARK_PRNG_GENERATE( ps, ptbs->per_thread_prng_seed );
154 pts->users_per_thread_state = ptbs;
158 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA:
159 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_numa_states,lasue) )
161 pns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
164 number_logical_processors_in_numa_node = 0;
166 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue_lp) )
168 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue_lp );
170 libbenchmark_topology_query( ts, LIBBENCHMARK_TOPOLOGY_QUERY_GET_NUMA_NODE_FOR_LOGICAL_PROCESSOR, pts->tns_lp, &numa_node_for_lp );
172 if( LIBBENCHMARK_TOPOLOGY_NODE_GET_NUMA_ID(*numa_node_for_lp) == pns->numa_node_id )
173 number_logical_processors_in_numa_node++;
176 if( number_logical_processors_in_numa_node > largest_number_logical_processors_in_numa_node )
180 bs = libshared_memory_alloc_from_specific_node( ms, largest_pns->numa_node_id, sizeof(struct lfds700_btree_au_state), LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES );
181 lfds700_btree_au_init_valid_on_current_logical_core( bs, key_compare_function, LFDS700_BTREE_AU_EXISTING_KEY_FAIL, NULL );
183 obs->element_key_array = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(lfds710_pal_uint_t) * total_number_benchmark_elements, sizeof(lfds710_pal_uint_t) );
187 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_numa_states,lasue) )
189 pns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
191 /* TRD : for each NUMA node, figure out how many LPs in the current set are in that NUMA node
192 and allocate then the correct number of elements from this NUMA node (1024 per LP)
196 number_logical_processors_in_numa_node = 0;
198 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue_lp) )
200 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue_lp );
202 libbenchmark_topology_query( ts, LIBBENCHMARK_TOPOLOGY_QUERY_GET_NUMA_NODE_FOR_LOGICAL_PROCESSOR, pts->tns_lp, &numa_node_for_lp );
204 if( LIBBENCHMARK_TOPOLOGY_NODE_GET_NUMA_ID(*numa_node_for_lp) == pns->numa_node_id )
205 number_logical_processors_in_numa_node++;
208 number_benchmark_elements = number_logical_processors_in_numa_node * 1024;
210 ptns = libshared_memory_alloc_from_specific_node( ms, pns->numa_node_id, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_numa_benchmark_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
211 ptns->element_key_array = libshared_memory_alloc_from_specific_node( ms, pns->numa_node_id, sizeof(lfds710_pal_uint_t) * total_number_benchmark_elements, sizeof(lfds710_pal_uint_t) );
212 ptns->number_element_keys = total_number_benchmark_elements;
214 ptns->bme = libshared_memory_alloc_from_specific_node( ms, pns->numa_node_id, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element) * number_benchmark_elements, LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES );
216 for( loop = 0 ; loop < number_benchmark_elements ; loop++, index++ )
219 LIBBENCHMARK_PRNG_GENERATE( ps, ptns->bme[loop].datum );
220 obs->element_key_array[index] = ptns->bme[loop].datum;
222 LFDS700_BTREE_AU_SET_KEY_IN_ELEMENT( ptns->bme[loop].be, &ptns->bme[loop] );
223 LFDS700_BTREE_AU_SET_VALUE_IN_ELEMENT( ptns->bme[loop].be, &ptns->bme[loop] );
224 ir = lfds700_btree_au_insert( bs, &ptns->bme[loop].be, NULL, &lfds700_ps );
226 while( ir == LFDS700_BTREE_AU_INSERT_RESULT_FAILURE_EXISTING_KEY );
228 pns->users_per_numa_state = ptns;
231 // TRD : now copy over into each NUMA node state the element_key_array
234 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_numa_states,lasue) )
236 pns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
237 ptns = pns->users_per_numa_state;
239 for( loop = 0 ; loop < total_number_benchmark_elements ; loop++ )
240 ptns->element_key_array[loop] = obs->element_key_array[loop];
245 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue) )
247 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
248 ptbs = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_thread_benchmark_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
249 LIBBENCHMARK_PRNG_GENERATE( ps, ptbs->per_thread_prng_seed );
250 LIBBENCHMARK_PRNG_MURMURHASH3_MIXING_FUNCTION( ptbs->per_thread_prng_seed );
251 pts->users_per_thread_state = ptbs;
255 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA_BUT_NOT_USED:
256 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_numa_states,lasue) )
258 pns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
261 number_logical_processors_in_numa_node = 0;
263 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue_lp) )
265 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue_lp );
267 libbenchmark_topology_query( ts, LIBBENCHMARK_TOPOLOGY_QUERY_GET_NUMA_NODE_FOR_LOGICAL_PROCESSOR, pts->tns_lp, &numa_node_for_lp );
269 if( LIBBENCHMARK_TOPOLOGY_NODE_GET_NUMA_ID(*numa_node_for_lp) == pns->numa_node_id )
270 number_logical_processors_in_numa_node++;
273 if( number_logical_processors_in_numa_node > largest_number_logical_processors_in_numa_node )
277 bs = libshared_memory_alloc_from_specific_node( ms, largest_pns->numa_node_id, sizeof(struct lfds700_btree_au_state), LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES );
278 lfds700_btree_au_init_valid_on_current_logical_core( bs, key_compare_function, LFDS700_BTREE_AU_EXISTING_KEY_FAIL, NULL );
280 obs->element_key_array = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(lfds710_pal_uint_t) * total_number_benchmark_elements, sizeof(lfds710_pal_uint_t) );
284 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_numa_states,lasue) )
286 pns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
288 /* TRD : for each NUMA node, figure out how many LPs in the current set are in that NUMA node
289 and allocate then the correct number of elements from this NUMA node (1024 per LP)
293 number_logical_processors_in_numa_node = 0;
295 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue_lp) )
297 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue_lp );
299 libbenchmark_topology_query( ts, LIBBENCHMARK_TOPOLOGY_QUERY_GET_NUMA_NODE_FOR_LOGICAL_PROCESSOR, pts->tns_lp, &numa_node_for_lp );
301 if( LIBBENCHMARK_TOPOLOGY_NODE_GET_NUMA_ID(*numa_node_for_lp) == pns->numa_node_id )
302 number_logical_processors_in_numa_node++;
305 number_benchmark_elements = number_logical_processors_in_numa_node * 1024;
307 ptns = libshared_memory_alloc_from_specific_node( ms, pns->numa_node_id, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_numa_benchmark_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
308 ptns->element_key_array = libshared_memory_alloc_from_specific_node( ms, pns->numa_node_id, sizeof(lfds710_pal_uint_t) * total_number_benchmark_elements, sizeof(lfds710_pal_uint_t) );
309 ptns->number_element_keys = total_number_benchmark_elements;
311 // TRD : everyone stores their elements in the same NUMA node
312 ptns->bme = libshared_memory_alloc_from_specific_node( ms, largest_pns->numa_node_id, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element) * number_benchmark_elements, LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES );
314 for( loop = 0 ; loop < number_benchmark_elements ; loop++, index++ )
317 LIBBENCHMARK_PRNG_GENERATE( ps, ptns->bme[loop].datum );
318 obs->element_key_array[index] = ptns->bme[loop].datum;
320 LFDS700_BTREE_AU_SET_KEY_IN_ELEMENT( ptns->bme[loop].be, &ptns->bme[loop] );
321 LFDS700_BTREE_AU_SET_VALUE_IN_ELEMENT( ptns->bme[loop].be, &ptns->bme[loop] );
322 ir = lfds700_btree_au_insert( bs, &ptns->bme[loop].be, NULL, &lfds700_ps );
324 while( ir == LFDS700_BTREE_AU_INSERT_RESULT_FAILURE_EXISTING_KEY );
326 pns->users_per_numa_state = ptns;
329 // TRD : now copy over into each NUMA node state the element_key_array
332 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_numa_states,lasue) )
334 pns = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
335 ptns = pns->users_per_numa_state;
337 for( loop = 0 ; loop < total_number_benchmark_elements ; loop++ )
338 ptns->element_key_array[loop] = obs->element_key_array[loop];
343 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue) )
345 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
346 ptbs = libshared_memory_alloc_from_most_free_space_node( ms, sizeof(struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_thread_benchmark_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
347 LIBBENCHMARK_PRNG_GENERATE( ps, ptbs->per_thread_prng_seed );
348 LIBBENCHMARK_PRNG_MURMURHASH3_MIXING_FUNCTION( ptbs->per_thread_prng_seed );
349 pts->users_per_thread_state = ptbs;
354 obs->number_element_keys = total_number_benchmark_elements;
356 obs->numa_mode = numa_mode;
358 tsets->users_threadset_state = obs;
367 /****************************************************************************/
368 libshared_pal_thread_return_t LIBSHARED_PAL_THREAD_CALLING_CONVENTION libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_thread( void *libbenchmark_threadset_per_thread_state )
370 int long long unsigned
373 time_units_per_second;
376 *element_key_array = NULL,
378 number_element_keys = 0,
383 struct libbenchmark_prng_state
386 struct lfds700_btree_au_element
389 struct lfds700_btree_au_state
392 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_thread_benchmark_state
395 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_numa_benchmark_state
398 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_overall_benchmark_state
401 struct libbenchmark_threadset_per_thread_state
404 LFDS710_MISC_BARRIER_LOAD;
406 LFDS710_PAL_ASSERT( libbenchmark_threadset_per_thread_state != NULL );
408 pts = (struct libbenchmark_threadset_per_thread_state *) libbenchmark_threadset_per_thread_state;
410 ptbs = LIBBENCHMARK_THREADSET_PER_THREAD_STATE_GET_USERS_PER_THREAD_STATE( *pts );
411 obs = LIBBENCHMARK_THREADSET_PER_THREAD_STATE_GET_USERS_OVERALL_STATE( *pts );
412 if( obs->numa_mode == LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA or obs->numa_mode == LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA_BUT_NOT_USED )
413 pnbs = LIBBENCHMARK_THREADSET_PER_THREAD_STATE_GET_USERS_PER_NUMA_STATE( *pts );
416 LIBBENCHMARK_PRNG_INIT( ps, ptbs->per_thread_prng_seed );
418 LIBBENCHMARK_PAL_TIME_UNITS_PER_SECOND( &time_units_per_second );
420 switch( obs->numa_mode )
422 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_SMP:
423 element_key_array = obs->element_key_array;
424 number_element_keys = obs->number_element_keys;
427 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA:
428 element_key_array = pnbs->element_key_array;
429 number_element_keys = pnbs->number_element_keys;
432 case LIBBENCHMARK_TOPOLOGY_NUMA_MODE_NUMA_BUT_NOT_USED:
433 element_key_array = pnbs->element_key_array;
434 number_element_keys = pnbs->number_element_keys;
438 libbenchmark_threadset_thread_ready_and_wait( pts );
440 LIBBENCHMARK_PAL_GET_HIGHRES_TIME( ¤t_time );
442 end_time = current_time + time_units_per_second * libbenchmark_globals_benchmark_duration_in_seconds;
444 while( current_time < end_time )
446 LIBBENCHMARK_PRNG_GENERATE( ps, random_value );
447 index = random_value % number_element_keys;
450 lfds700_btree_au_get_by_key( bs, &element_key_array[index], &existing_be );
451 // LFDS700_BTREE_AU_GET_VALUE_FROM_ELEMENT( benchmark_state->bs, *existing_be, datum );
453 LIBBENCHMARK_PRNG_GENERATE( ps, random_value );
454 index = random_value % number_element_keys;
457 lfds700_btree_au_get_by_key( bs, &element_key_array[index], &existing_be );
458 // LFDS700_BTREE_AU_SET_VALUE_IN_ELEMENT( benchmark_state->bs, *existing_be, benchmark_state->benchmark_element_array[index].datum );
462 if( time_loop++ == TIME_LOOP_COUNT )
465 LIBBENCHMARK_PAL_GET_HIGHRES_TIME( ¤t_time );
469 ptbs->operation_count = operation_count;
471 LFDS710_MISC_BARRIER_STORE;
473 lfds710_misc_force_store();
475 return LIBSHARED_PAL_THREAD_RETURN_CAST(RETURN_SUCCESS);
482 /****************************************************************************/
483 void libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_cleanup( struct lfds710_list_aso_state *logical_processor_set,
484 enum libbenchmark_topology_numa_mode numa_mode,
485 struct libbenchmark_results_state *rs,
486 struct libbenchmark_threadset_state *tsets )
488 struct lfds710_list_asu_element
491 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_overall_benchmark_state
494 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_per_thread_benchmark_state
497 struct libbenchmark_threadset_per_thread_state
500 LFDS710_PAL_ASSERT( logical_processor_set != NULL );
501 // TRD : numa_mode can be any value in its range
502 LFDS710_PAL_ASSERT( rs != NULL );
503 LFDS710_PAL_ASSERT( tsets != NULL );
505 while( LFDS710_LIST_ASU_GET_START_AND_THEN_NEXT(tsets->list_of_per_thread_states,lasue) )
507 pts = LFDS710_LIST_ASU_GET_VALUE_FROM_ELEMENT( *lasue );
509 ptbs = LIBBENCHMARK_THREADSET_PER_THREAD_STATE_GET_USERS_PER_THREAD_STATE( *pts );
511 libbenchmark_results_put_result( rs,
512 LIBBENCHMARK_DATASTRUCTURE_ID_BTREE_AU,
513 LIBBENCHMARK_BENCHMARK_ID_READN_THEN_WRITEN,
514 LIBBENCHMARK_LOCK_ID_LIBLFDS700_LOCKFREE,
516 logical_processor_set,
517 LIBBENCHMARK_TOPOLOGY_NODE_GET_LOGICAL_PROCESSOR_NUMBER( *pts->tns_lp ),
518 LIBBENCHMARK_TOPOLOGY_NODE_GET_WINDOWS_GROUP_NUMBER( *pts->tns_lp ),
519 ptbs->operation_count );
522 obs = tsets->users_threadset_state;;
524 lfds700_btree_au_cleanup( obs->bs, NULL );
533 /****************************************************************************/
534 static int key_compare_function( void const *new_key, void const *existing_key )
536 struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element
537 *new_benchmark_element,
538 *existing_benchmark_element;
540 LFDS710_PAL_ASSERT( new_key != NULL );
541 LFDS710_PAL_ASSERT( existing_key != NULL );
543 new_benchmark_element = (struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element *) new_key;
544 existing_benchmark_element = (struct libbenchmark_benchmark_btree_au_liblfds700_lockfree_readn_writen_benchmark_element *) existing_key;
546 if( new_benchmark_element->datum < existing_benchmark_element->datum )
549 if( new_benchmark_element->datum > existing_benchmark_element->datum )