public IVector Column(int index) { Debug.Assert(IsValid); //var ret = _cuda.Allocate(_rows); //ret.DeviceVariable.CopyToDevice(_data.DeviceVariable, index * _rows * sizeof(float), 0, _rows * sizeof(float)); //return new GpuVector(_cuda, ret); var columnSize = _rows * sizeof(float); var offset = index * columnSize; var ptr = new PtrToMemory(_cuda.Context, new CUdeviceptr(_data.DeviceVariable.DevicePointer.Pointer + offset), columnSize); return(new GpuVector(_cuda, ptr)); }
public IReadOnlyList <IVector> Split(int blockCount) { Debug.Assert(IsValid); var blockSize = Count / blockCount; var ptr = _data.DevicePointer.Pointer; var size = blockSize * sizeof(float); return(Enumerable.Range(0, blockCount).Select(i => { var offset = (size * i); var ptr2 = new PtrToMemory(_cuda.Context, new CUdeviceptr(ptr + offset), size); return new GpuVector(_cuda, ptr2); }).ToList()); }