#include "sn_network.h"
#include "sn_random.h"
+#include "histogram.h"
#if !defined(__GNUC__) || !__GNUC__
# define __attribute__(x) /**/
#endif
static int inputs_num = 16;
+static _Bool use_bitonic = 0;
static char *initial_input_file = NULL;
static char *best_output_file = NULL;
static _Bool do_loop = 1;
static uint64_t max_iterations = 0;
+static histogram_t *histogram;
+
static void sigint_handler (int signal __attribute__((unused)))
{
do_loop = 0;
" -i <file> Initial input file (REQUIRED)\n"
" -o <file> Write the current best solution to <file>\n"
" -n <number> Maximum number of steps (iterations) to perform\n"
+ " -b Use the bitonic merger instead of the odd-even merger\n"
" -h Display usage information (this message)\n"
"\n",
name);
{
int option;
- while ((option = getopt (argc, argv, "i:o:n:h")) != -1)
+ while ((option = getopt (argc, argv, "i:o:n:bh")) != -1)
{
switch (option)
{
break;
}
+ case 'b':
+ use_bitonic = 1;
+ break;
+
case 'h':
default:
exit_usage (argv[0], EXIT_SUCCESS);
assert (nright != NULL);
/* combine the two parents */
- nret = sn_network_combine (nleft, nright);
+ if (use_bitonic)
+ nret = sn_network_combine_bitonic_merge (nleft, nright);
+ else
+ nret = sn_network_combine_odd_even_merge (nleft, nright);
sn_network_destroy (nleft);
sn_network_destroy (nright);
best_solution = sn_network_clone (next);
}
+ hist_account (histogram, sn_network_get_comparator_num (next));
+
sn_network_destroy (n);
n = next;
iteration_counter++;
struct sigaction sigint_action;
struct sigaction sigterm_action;
+ histogram = hist_create ();
+
read_options (argc, argv);
if (initial_input_file == NULL)
exit_usage (argv[0], EXIT_FAILURE);
random_walk (start_network);
start_network = NULL;
+ hist_print (histogram);
+ hist_destroy (histogram);
+ histogram = NULL;
+
if (best_solution != NULL)
{
if (best_output_file != NULL)