Exemplo n.º 1
0
        public Gpu4DTensor(CudaProvider provider, IReadOnlyList <FloatTensor> data)
        {
            var firstTensor = data.First();
            var firstMatrix = firstTensor.Matrix.First();

            _cuda    = provider;
            _rows    = firstMatrix.RowCount;
            _columns = firstMatrix.ColumnCount;
            _depth   = firstTensor.Matrix.Length;
            _count   = data.Count;

            var matrixSize = _rows * _columns;

            _data = provider.CreateMatrix(matrixSize * _depth, _count, (index, k) => {
                var z   = index / matrixSize;
                var rem = index % matrixSize;
                var i   = rem / _rows;
                var j   = rem % _rows;
                return(data[k].Matrix[z].Row[j].Data[i]);
            });
            provider.Register(this);

            _subVector  = new Lazy <List <GpuVector[]> >(_GetSubVectors);
            _tensorInfo = new Lazy <TensorInput>(_GetInput);

#if DEBUG
            if (_id == _badAlloc)
            {
                Debugger.Break();
            }
#endif
        }
Exemplo n.º 2
0
        public IMatrix CombineDepthSlices()
        {
            Debug.Assert(IsValid);
            var ret = _cuda.CreateMatrix(_rows, _columns, true);

            foreach (var item in Matrices)
            {
                ret.AddInPlace(item);
            }
            return(ret);
        }