     typedef BlockExchange<VertexId, BLOCK_THREADS, ITEMS_PER_THREAD, true>      BlockExchangeRows;
     typedef BlockExchange<Value, BLOCK_THREADS, ITEMS_PER_THREAD, true>         BlockExchangeValues;
     typedef BlockDiscontinuity<HeadFlag, BLOCK_THREADS>                         BlockDiscontinuity;
-    typedef BlockReduce<PartialSum, BLOCK_THREADS>                              BlockReduce;
 
     // Shared memory type for this threadblock
     struct TempStorage

            // vertex for out-of-bound items, but zero-valued
            LoadWarpStriped<LOAD_DEFAULT>(d_columns + block_offset, guarded_items, VertexId(0), columns);
            LoadWarpStriped<LOAD_DEFAULT>(d_values + block_offset, guarded_items, Value(0), values);
            LoadWarpStriped<LOAD_DEFAULT>(d_rows + block_offset, guarded_items, last_block_row, rows);
        }
        else
        {

            block_aggregate,                // (Out)
            carry);                         // (In-out)

        // Barrier for smem reuse and coherence
        __syncthreads();

        // Scatter an accumulated dot product if it is the head of a valid row
        #pragma unroll
        for (int ITEM = 0; ITEM < ITEMS_PER_THREAD; ITEM++)
