             if (src.id() >= dst.id()) return; // imposes ordering
             degree_t src_len = dst.degree();
             degree_t dst_len = dst.degree();
-            int i = 3;
-            
+            int i = MAX_ADJ_UNIONS_BINS-1;
+            /*
+            if (i > 3)
+                i = 3;
+            */
+            /*
             total_work = src_len + dst_len - 1;
             int W;
             while (i > 0) {

        }*/
        
        //threads_per = 256;
        forAllEdgesAdjUnionBalanced(hornet, hd_queue_info().d_queues[bin], hd_queue_info().queue_pos[bin], op, threads_per, 0);
        //forAllEdgesAdjUnionImbalanced(hornet, hd_queue_info().d_queues[bin], hd_queue_info().queue_pos[bin], op, threads_per, 1);
        TM.stop();
        TM.print("queue processing:");
        TM.reset();

    using namespace adj_union;
    auto       id = blockIdx.x * blockDim.x + threadIdx.x;
    auto queue_id = id / threads_per_union;
    auto block_union_offset = blockIdx.x % ((threads_per_union+blockDim.x-1) / blockDim.x); // > 1 if threads_per_union > block size
    auto thread_union_id = ((block_union_offset*blockDim.x)+threadIdx.x) % threads_per_union;
    auto stride = blockDim.x * gridDim.x;
    auto queue_stride = stride / threads_per_union;
    for (auto i = queue_id; i < size; i += queue_stride) {
