         if (size) {
             threads_per = 1 << (threads_log-1); 
             printf("threads_per=%d, size=%d\n", threads_per, size);
+            //printf("bin_index=%d, start_index=%d, end_index=%d\n", bin_index, start_index, end_index);
             TM.start();
             forAllEdgesAdjUnionImbalanced(hornet, hd_queue_info().d_edge_queue, start_index, end_index, op, threads_per, 1);
             TM.stop();

        TM.print("balanced queue processing:");
        TM.reset();
    }

    // imbalanced kernel
    const int LOG_OFFSET2 = 2;
    const int IMBALANCED_THREADS_LOGMAX = BINS_1D_DIM-1; 
    bin_offset = MAX_ADJ_UNIONS_BINS/2;
    threads_log = 1;
    while ((threads_log < IMBALANCED_THREADS_LOGMAX) && (threads_log+LOG_OFFSET2 < BINS_1D_DIM)) 

    TM.print("queueing and binning:");
    TM.reset();
    
    /*
    cudaMemcpy(hd_queue_info().queue_pos, hd_queue_info().d_queue_pos, (MAX_ADJ_UNIONS_BINS+1)*sizeof(unsigned long long), cudaMemcpyDeviceToHost);
    for (auto i = 0; i < MAX_ADJ_UNIONS_BINS+1; i++)
