  *  TODO(sxjscience) Explore the possibility of int lhs_count and rhs_count
  */
 template<typename DType>
-__device__ __inline__ void chan_merge_partition(const DType lhs_mean,
+__device__ __inline__ void ChanMergePartition(const DType lhs_mean,
                                                 const DType lhs_sigma2,
                                                 const DType lhs_count,
                                                 DType& rhs_mean,

 *
 */
template<typename DType>
__device__ __forceinline__ void welford_online_sum_step(const DType curr,
                                                        DType& mean,
                                                        DType& sigma2,
                                                        DType& count) {
  count += DType(1);
  DType delta = curr - mean;
  mean += delta / count;

  DType count = 0;
  DType mean = 0;
  DType sigma2 = 0;

  if (bid < nbatch) {
    extern __shared__ char buf[];  // Shared memory
    int tid = threadIdx.x + threadIdx.y * blockDim.x;
    const DType* col_vals = in_data + bid * nchannel;
    BlockWelfordOnlineSum(tid, nthread, col_vals, nchannel, mean, sigma2, count);

    // Merge the mean/sigma2 within a warp
    // Use the Chan's Parallel Algorithm to merge all (mean, sigma2, counts)
