assert(pbqp);
assert(node);
+ (void) pbqp;
+
edge = node->edges[0];
mat = edge->costs;
is_src = edge->src == node;
static void back_propagate_RN(pbqp *pbqp, pbqp_node *node)
{
- vector *vec = NULL;
- pbqp_node *neighbor = NULL;
- pbqp_edge *edge = NULL;
- unsigned idx = 0;
+ vector *vec = NULL;
+ pbqp_node *neighbor = NULL;
+ pbqp_edge *edge = NULL;
+ unsigned idx = 0;
assert(pbqp);
edge = node->edges[idx];
neighbor = edge->src == node ? edge->tgt : edge->src;
- if(edge->src == node) /* node is edge src node */
+ /* node is edge src node */
+ if(edge->src == node)
vector_add_matrix_col(vec, edge->costs, neighbor->solution);
- else /* node is edge tgt node */
+ /* node is edge tgt node */
+ else
vector_add_matrix_row(vec, edge->costs, neighbor->solution);
}
static void apply_RN_co_without_selection(pbqp *pbqp, plist_t *rpeo)
{
- pbqp_node *node = NULL;
- pbqp_node *neighbor = NULL;
- pbqp_edge *edge = NULL;
- unsigned idx = 0;
+ pbqp_node *node = NULL;
+ pbqp_node *neighbor = NULL;
+ pbqp_edge *edge = NULL;
+ unsigned idx = 0;
(void)pbqp;
continue;
disconnect_edge(neighbor, edge);
- reorder_node(neighbor);
+ reorder_node_after_edge_deletion(neighbor);
}
/* Remove node from old bucket */
{
#if KAPS_TIMING
/* create timers */
- ir_timer_t *t_edge = ir_timer_register("be_pbqp_edges", "pbqp reduce independent edges");
- ir_timer_t *t_r0 = ir_timer_register("be_pbqp_r0", "pbqp R0 reductions");
- ir_timer_t *t_r1 = ir_timer_register("be_pbqp_r1", "pbqp R1 reductions");
- ir_timer_t *t_r2 = ir_timer_register("be_pbqp_r2", "pbqp R2 reductions");
- ir_timer_t *t_rn = ir_timer_register("be_pbqp_rN", "pbqp RN reductions");
-
- /* reset timers */
- ir_timer_reset(t_edge);
- ir_timer_reset(t_r0);
- ir_timer_reset(t_r1);
- ir_timer_reset(t_r2);
- ir_timer_reset(t_rn);
+ ir_timer_t *t_edge = ir_timer_new();
+ ir_timer_t *t_r1 = ir_timer_new();
+ ir_timer_t *t_r2 = ir_timer_new();
+ ir_timer_t *t_rn = ir_timer_new();
#endif
for (;;) {
if (edge_bucket_get_length(edge_bucket) > 0) {
#if KAPS_TIMING
- ir_timer_start(t_r0);
+ ir_timer_start(t_edge);
#endif
apply_edge(pbqp);
#if KAPS_TIMING
- ir_timer_stop(t_r0);
+ ir_timer_stop(t_edge);
#endif
} else if (node_bucket_get_length(node_buckets[1]) > 0) {
#if KAPS_TIMING
#endif
} else {
#if KAPS_TIMING
- printf("%-20s: %8.3lf msec\n", ir_timer_get_description(t_edge), (double)ir_timer_elapsed_usec(t_edge) / 1000.0);
- printf("%-20s: %8.3lf msec\n", ir_timer_get_description(t_r0), (double)ir_timer_elapsed_usec(t_r0) / 1000.0);
- printf("%-20s: %8.3lf msec\n", ir_timer_get_description(t_r1), (double)ir_timer_elapsed_usec(t_r1) / 1000.0);
- printf("%-20s: %8.3lf msec\n", ir_timer_get_description(t_r2), (double)ir_timer_elapsed_usec(t_r2) / 1000.0);
- printf("%-20s: %8.3lf msec\n", ir_timer_get_description(t_rn), (double)ir_timer_elapsed_usec(t_rn) / 1000.0);
+ printf("PBQP RE reductions: %10.3lf msec\n", (double)ir_timer_elapsed_usec(t_edge) / 1000.0);
+ printf("PBQP R1 reductions: %10.3lf msec\n", (double)ir_timer_elapsed_usec(t_r1) / 1000.0);
+ printf("PBQP R2 reductions: %10.3lf msec\n", (double)ir_timer_elapsed_usec(t_r2) / 1000.0);
+ printf("PBQP RN reductions: %10.3lf msec\n", (double)ir_timer_elapsed_usec(t_rn) / 1000.0);
#endif
return;
#if KAPS_STATISTIC
fh = fopen("solutions.pb", "a");
- fprintf(fh, ": %lld RE:%u R0:%u R1:%u R2:%u RM:%u RN/BF:%u\n", pbqp->solution,
+ #if KAPS_USE_UNSIGNED
+ fprintf(fh, ": %u RE:%u R0:%u R1:%u R2:%u RM:%u RN/BF:%u\n", pbqp->solution,
+ pbqp->num_edges, pbqp->num_r0, pbqp->num_r1, pbqp->num_r2,
+ pbqp->num_rm, pbqp->num_rn);
+ #else
+ fprintf(fh, ": %lld RE:%u R0:%u R1:%u R2:%u RM:%u RN/BF:%u\n", pbqp->solution,
pbqp->num_edges, pbqp->num_r0, pbqp->num_r1, pbqp->num_r2,
pbqp->num_rm, pbqp->num_rn);
+ #endif
fclose(fh);
#endif