  * @param[in] ADVANCE_TYPE              enumerator of advance type: V2V, V2E, E2V, or E2E
  * @param[in] inverse_graph             whether this iteration of advance operation is in the opposite direction to the previous iteration (false by default)
  * @param[in] REDUCE_OP                 enumerator of available reduce operations: plus, multiplies, bit_or, bit_and, bit_xor, maximum, minimum. none by default.
+ * @param[in] REDUCE_TYPE               enumerator of available reduce types: EMPTY(do not do reduce) VERTEX(extract value from |V| array) EDGE(extract value from |E| array)
  * @param[in] d_value_to_reduce         array to store values to reduce
  * @param[out] d_reduce_frontier        neighbor list values for nodes in the output frontier
  * @param[out] d_reduced_value          array to store reduced values


            // TODO: switch R_TYPE for different reduce operators
            // Do segreduction using d_scanned_edges and d_reduce_frontier
            SegReduceCsr(d_reduce_frontier, partitioned_scanned_edges, output_queue_len,frontier_attribute.queue_length,
            false, d_reduced_value, (int)0, mgpu::plus<typename KernelPolicy::Value>(), context);

            // save the result to d_reduced_value
            //
            break;
        }
        /*case LB:

 * @param[in] d_out_key_queue           Device pointer of output key array to the outgoing frontier queue
 * @param[in] d_in_value_queue          Device pointer of input value array to the incoming frontier queue
 * @param[in] d_out_value_queue         Device pointer of output value array to the outgoing frontier queue
 * @param[in] d_row_offsets             Device pointer of SizeT to the row offsets queue
 * @param[in] d_column_indices          Device pointer of VertexId to the column indices queue
 * @param[in] d_column_offsets          Device pointer of SizeT to the row offsets queue for inverse graph
 * @param[in] d_row_indices             Device pointer of VertexId to the column indices queue for inverse graph
