code: func (r *RS) encodePart(start, end int, dataVects, parityVects [][]byte, updateOnly bool) {
  	undoneSize := end - start
  	splitSize := (undoneSize >> 4) << 4 // splitSize could be 0(when undoneSize < 16)
  	d, p, g, cF := r.DataCnt, r.ParityCnt, r.genMatrix, r.cpu
  	if splitSize >= 16 {
  		end2 := start + splitSize
  		for i := 0; i < d; i++ {
  			for j := 0; j < p; j++ {
  				if i != 0 || updateOnly == true {
  					coeffMulVectUpdate(g[j*d+i], dataVects[i][start:end2], parityVects[j][start:end2], cF)
  				} else {
  					coeffMulVect(g[j*d+i], dataVects[0][start:end2], parityVects[j][start:end2], cF)
  				}
  			}
  		}
  	}
  	if undoneSize > splitSize { // 0 < undoneSize-splitSize < 16
  		for i := 0; i < d; i++ {
  			for j := 0; j < p; j++ {
  				if i != 0 || updateOnly == true {
  					coeffMulVectUpdateBase(g[j*d+i], dataVects[i][start:end], parityVects[j][start:end])
  				} else {
  					coeffMulVectBase(g[j*d], dataVects[0][start:end], parityVects[j][start:end])
  				}
  			}
  		}
  	}
  }
docs: // encode data[i][start:end]