示例#1
0
        public int CountEquals(ContiguousMemoryBuffer rhs, MemoryBuffer cache)
        {
            Debug.Assert(Buffer.pointer != 0);
            Debug.Assert(rhs.Buffer.pointer != 0);
            Debug.Assert(Size == rhs.Size);

            bool needToFreeCache = cache.pointer == 0;

            if (needToFreeCache)
            {
                cache.memorySpace = memorySpace;
                cache.mathDomain  = mathDomain;
                cache.size        = (uint)Size;
                Alloc(cache);
            }

            // calculate the difference
            CuBlasApi.Subtract(cache, Buffer, rhs.Buffer);

            // calculate how many non-zeros, overriding cache
            CuBlasApi.IsNonZero(cache, cache);

            double ret = CubApi.Sum(cache);

            // we are counting the zero entries
            ret = Size - ret;

            if (needToFreeCache)
            {
                Free(cache);
            }

            return((int)ret);
        }
示例#2
0
 public double AbsoluteMaximum()
 {
     Debug.Assert(Buffer.pointer != 0);
     return(CubApi.AbsMax(Buffer));
 }
示例#3
0
 public double Sum()
 {
     Debug.Assert(Buffer.pointer != 0);
     return(CubApi.Sum(Buffer));
 }
示例#4
0
 public double Minimum()
 {
     Debug.Assert(Buffer.pointer != 0);
     return(CubApi.Min(Buffer));
 }