示例#1
0
        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));
        }
示例#2
0
        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());
        }