      */
     __device__ __forceinline__ void ConsumeTile(
         CoordinateT&        tile_coord,
-        ItemOffsetPairT&    block_carry)
+        ValueT&             block_carry)
     {
         __syncthreads();
 

            if (accumulate)
            {
                // Move down (accumulate)
                thread_segment[ITEM].offset = 0;
                thread_segment[ITEM].value  = tile_nonzeros[thread_current_coord.y];
                ++thread_current_coord.y;
            }
            else
            {
                // Move right (reset)
                thread_segment[ITEM].offset = 1;
                thread_segment[ITEM].value  = 0.0;
                ++thread_current_coord.x;
            }
            flags[ITEM] = thread_segment[ITEM].offset;
        }


        // Block-wide reduce-value-by-key
        ItemOffsetPairT     tile_aggregate;
        ItemOffsetPairT     scan_identity(0.0, 0);
        ReduceBySegmentOpT  scan_op;
        BlockScanT(temp_storage.scan).ExclusiveScan(thread_segment, thread_segment, scan_identity, scan_op, tile_aggregate);


        // Scatter

        ValueT* row_partials = reinterpret_cast<ValueT*>(temp_storage.merge_items);

        #pragma unroll
        for (int ITEM = 0; ITEM < ITEMS_PER_THREAD; ++ITEM)
        {
            if (flags[ITEM] == 0)
            {
                thread_segment[ITEM].offset = TILE_ITEMS;
            }
            row_partials[thread_segment[ITEM].offset] = thread_segment[ITEM].value;


/*
            if (flags[ITEM])
            {
                row_partials[thread_segment[ITEM].offset] = thread_segment[ITEM].value;
//                d_vector_y[tile_coord.x + thread_segment[ITEM].offset] = thread_segment[ITEM].value;
            }
*/
        }

        // Update block carry and the current tile coordinate
        if (threadIdx.x == 0)
            block_carry = scan_op(block_carry, tile_aggregate);

        tile_coord = tile_end_coord;
    }


        // Output the tile's merge-path carry
        if (threadIdx.x == 0)
        {
            d_tile_carry_rows[blockIdx.x] = block_coord.x;
            d_tile_carry_values[blockIdx.x] = block_carry;
        }
    }

