コード例 #1
0
        /// <summary>
        /// Pins pointers to underlying matrix arrays and stores them for later use.
        /// The order of matrices is preserved.
        /// </summary>
        /// <remarks>
        /// When <see cref="rowMajor"/> is set, arrays are decoupled from original matrices.
        /// Changes made to arrays will be synchronized only upon <see cref="Dispose"/>.
        /// </remarks>
        /// <param name="rowMajor">
        /// Indicates whether matrices should be converted to row-major format.
        /// </param>
        /// <param name="generateDefinitions">Whether to generate matrix definitions for GPU transfer.</param>
        /// <param name="matrices">Matrices to pin pointers to.</param>
        public MatrixPointersBag(bool rowMajor, bool generateDefinitions, params Matrix <T>[] matrices)
        {
            _rowMajor = rowMajor;

            _arrayMap = rowMajor ? new List <Tuple <Matrix <T>, T[]> >() : null;
            _defs     = generateDefinitions ? new MatrixDefinition[matrices.Length] : null;

            _disposed = false;
            _handles  = new GCHandle[matrices.Length];
            _pointers = new IntPtr[matrices.Length];

            for (int i = 0; i < matrices.Length; i++)
            {
                var matrix = matrices[i];
                T[] array;
                if (rowMajor)
                {
                    array = matrix.ToRowMajorArray();
                    _arrayMap.Add(new Tuple <Matrix <T>, T[]>(matrix, array));
                }
                else
                {
                    array = matrix.AsColumnMajorArray();
                }

                _handles[i] = GCHandle.Alloc(array, GCHandleType.Pinned);

                var ptr = _handles[i].AddrOfPinnedObject();
                _pointers[i] = ptr;

                if (generateDefinitions)
                {
                    _defs[i] = new MatrixDefinition(matrix.RowCount, matrix.ColumnCount, 1, ptr);
                }
            }
        }
コード例 #2
0
 public override void TestClampMatrix(MatrixDefinition matrix, float threshold)
 {
     Testing.TestClampMatrixGpu(matrix, threshold);
 }
コード例 #3
0
 public override void TestMatrixTransfer(MatrixDefinition matrix)
 {
     Testing.TestMatrixTransferGpu(matrix);
 }
コード例 #4
0
 public override void TestCrossEntropyBackprop(MatrixDefinition m1, MatrixDefinition m2, MatrixDefinition result)
 {
     Testing.TestCrossEntropyBackpropGpu(m1, m2, result);
 }
コード例 #5
0
 public override void TestRMSPropUpdate(MatrixDefinition weight, MatrixDefinition grad, MatrixDefinition cache1, MatrixDefinition cache2, MatrixDefinition cacheM, float learningRate, float decayRate, float momentum, float weightDecay)
 {
     Testing.TestRMSPropUpdateGpu(weight, grad, cache1, cache2, cacheM, learningRate, decayRate, momentum, weightDecay);
 }
コード例 #6
0
 public abstract void TestMatrixTransferRowMajor(MatrixDefinition matrix);
コード例 #7
0
 public override double TestCrossEntropyError(MatrixDefinition m1, MatrixDefinition m2)
 {
     return(Testing.TestCrossEntropyErrorGpu(m1, m2));
 }
コード例 #8
0
 public static extern void TestMatrixTransferRowMajorGpu(MatrixDefinition matrix);
コード例 #9
0
 public abstract void TestClampMatrix(MatrixDefinition matrix, float threshold);
コード例 #10
0
 public static extern void TestRMSPropUpdateGpu(MatrixDefinition weight, MatrixDefinition grad, MatrixDefinition cache1,
                                                MatrixDefinition cache2, MatrixDefinition cacheM, float learningRate, float decayRate, float momentum, float weightDecay);
コード例 #11
0
 public static extern void TestClampMatrixGpu(MatrixDefinition matrix, float threshold);
コード例 #12
0
 public static extern void TestCrossEntropyBackpropGpu(MatrixDefinition m1, MatrixDefinition m2, MatrixDefinition result);
コード例 #13
0
 public abstract void TestRMSPropUpdate(MatrixDefinition weight, MatrixDefinition grad, MatrixDefinition cache1,
                                        MatrixDefinition cache2, MatrixDefinition cacheM, float learningRate, float decayRate, float momentum, float weightDecay);
コード例 #14
0
 public static extern double TestCrossEntropyErrorGpu(MatrixDefinition m1, MatrixDefinition m2);
コード例 #15
0
 public abstract void TestCrossEntropyBackprop(MatrixDefinition m1, MatrixDefinition m2, MatrixDefinition result);
コード例 #16
0
 public abstract double TestCrossEntropyError(MatrixDefinition m1, MatrixDefinition m2);