'Split the array into equal partition of the `section` size.
If the array cannot be equally divided, the last section will be
smaller.'

def split(self, section, stream=0):

    stream = self._default_stream(stream)
    if (self.ndim != 1):
        raise ValueError('only    support    1d    array')
    if (self.strides[0] != self.dtype.itemsize):
        raise ValueError('only    support    unit    stride')
    nsect = int(math.ceil((float(self.size) / section)))
    strides = self.strides
    itemsize = self.dtype.itemsize
    for i in range(nsect):
        begin = (i * section)
        end = min((begin + section), self.size)
        shape = ((end - begin),)
        gpu_data = self.gpu_data.view((begin * itemsize), (end * itemsize))
        (yield DeviceNDArray(shape, strides, dtype=self.dtype, stream=stream, gpu_data=gpu_data))
