Beispiel #1
0
        public static void AddXYTran(AlignedArray x, int[] rgposY, AlignedArray valuesY,
                                     int posMinY, int iposMinY, int iposLimY, AlignedArray mat,
                                     AlignedArray accGrads, AlignedArray accUpdates, float decay, float cond, int crow)
        {
            Contracts.Assert(Compat(x));
            Contracts.AssertNonEmpty(rgposY);
            Contracts.Assert(Compat(valuesY));
            Contracts.Assert(Compat(mat));
            Contracts.Assert(0 <= iposMinY && iposMinY <= iposLimY && iposLimY <= rgposY.Length);
            Contracts.Assert(0 < crow && crow <= x.Size);
            Contracts.Assert(x.Size * valuesY.Size == mat.Size);
            Contracts.Assert(mat.Size == accGrads.Size);
            Contracts.Assert(mat.Size == accUpdates.Size);

            if (iposMinY >= iposLimY)
            {
                return;
            }

            unsafe
            {
                fixed(float *px = &x.Items[0])
                fixed(float *py   = &valuesY.Items[0])
                fixed(int *pposy  = &rgposY[0])
                fixed(float *pmat = &mat.Items[0])
                fixed(float *pag  = &accGrads.Items[0])
                fixed(float *pau  = &accUpdates.Items[0])
                {
                    Thunk.AddXYTranGradPX(Ptr(x, px), pposy, Ptr(valuesY, py), posMinY, iposMinY, iposLimY, Ptr(mat, pmat),
                                          Ptr(accGrads, pag), Ptr(accUpdates, pau), decay, cond, crow, valuesY.Size);
                }
            }
        }