   for (; l + 3 < nchannel; l += 4 * nthread) {
 #pragma unroll
     for (int i = 0; i < 4; ++i) {
-      welford_online_sum_step(col_vals[l + i], mean, sigma2, count);
+      StepWelfordOnlineSum(col_vals[l + i], mean, sigma2, count);
     }
   }
   for(; l < nchannel; ++l) {
-    welford_online_sum_step(col_vals[l], mean, sigma2, count);
+    StepWelfordOnlineSum(col_vals[l], mean, sigma2, count);
   }
 }
 

      DType meanB = WARP_SHFL(mean, src_lane);
      DType sigma2B = WARP_SHFL(sigma2, src_lane);
      DType countB = WARP_SHFL(count, src_lane);
      chan_merge_partition(meanB, sigma2B, countB, mean, sigma2, count);
    }
    if (blockDim.y == 1) {
      mean = WARP_SHFL(mean, 0);

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