1 // ****************************************************************************
2 // sort benchmark from DARPA PERFECT TAV suite
3 // ----------------------------------------------------------------------------
10 // Need 7 times the input size for: input data, indices,
11 // four copies, and buckets.
12 FAKE_MALLOC_INIT( (8 * DATA_SIZE_SORT
), radix
)
14 int main( int argc
, char* argv
[] )
18 int* index
= fake_malloc_radix (sizeof(int) * DATA_SIZE_SORT
);
19 for ( int i
= 0; i
< DATA_SIZE_SORT
; i
++ )
23 // Access every element of input_data_sort to make sure it's in cache
24 // (or at least that as much as possible of its beginning is).
26 for(int i
= DATA_SIZE_SORT
-1; i
>= 0; i
--) {
27 sum
+= input_data_sort
[i
];
32 const bool prealloc
= true;
34 const bool prealloc
= false;
39 #define read_csr_safe(reg) ({ long __tmp = 0; \
40 asm volatile ("csrr %0, " #reg : "+r"(__tmp)); \
44 long cycles
= read_csr_safe(cycle
);
45 long instret
= read_csr_safe(instret
);
48 #if defined(USE_N_SQUARED_SORT)
49 const char* algo
= "N_SQUARED";
50 err
= n_squared_sort ( input_data_sort
, index
, DATA_SIZE_SORT
);
51 #elif defined(USE_RADIX_SORT)
52 const char* algo
= "RADIX";
53 err
= radix_sort_tuples ( (int *) input_data_sort
, index
, DATA_SIZE_SORT
, RADIX_BITS
);
54 #elif defined(USE_INSERTION_SORT)
55 const char* algo
= "INSERTION";
56 err
= insertion_sort ( input_data_sort
, index
, DATA_SIZE_SORT
);
58 const char* algo
= "QUICKSORT";
59 err
= quicksort ( input_data_sort
, index
, DATA_SIZE_SORT
);
62 cycles
= read_csr_safe(cycle
) - cycles
;
63 instret
= read_csr_safe(instret
) - instret
;
69 for(int i
= 0; i
< DATA_SIZE_SORT
-1; i
++)
71 if((unsigned int) input_data_sort
[i
] > (unsigned int) input_data_sort
[i
+1])
74 for(int j
= 0; j
< DATA_SIZE_SORT
; j
++)
75 printf("%d:\t%d\n", j
, input_data_sort
[j
]);
80 /*printf("sort_cycles = %ld\n", cycles);
81 printf("sort_instret = %d\n", instret);
82 printf("sort_size = %d\n", DATA_SIZE_SORT);
83 printf("sort_algo = %s\n", algo);
84 printf("sort_radix_bits = %d\n", RADIX_BITS);
85 printf("sort_prealloc = %s\n", prealloc ? "true" : "false");
86 printf("sort_err = %d\n", err);