示例#1
0
 public static T ExclusiveScanWithBoundaries <T, TScanOperation>(
     T value,
     out ScanBoundaries <T> boundaries)
     where T : unmanaged
     where TScanOperation : struct, IScanReduceOperation <T> =>
 ExclusiveScanWithBoundaries <T, TScanOperation, GroupImplementation>(
     value,
     out boundaries);
示例#2
0
 public static T ExclusiveScanWithBoundaries <T, TScanOperation>(
     T value,
     out ScanBoundaries <T> boundaries)
     where T : unmanaged
     where TScanOperation : struct, IScanReduceOperation <T> =>
 ILGroupExtensions.ExclusiveScanWithBoundaries <T, TScanOperation>(
     value,
     out boundaries);
        public static T InclusiveScanWithBoundaries <T, TScanOperation>(T value, out ScanBoundaries <T> boundaries)
            where T : unmanaged
            where TScanOperation : struct, IScanReduceOperation <T>
        {
            var scanned = GroupExtensions.InclusiveScan <T, TScanOperation>(value);

            boundaries = new ScanBoundaries <T>(
                Group.Broadcast(scanned, 0),
                Group.Broadcast(scanned, Group.DimX - 1));
            return(scanned);
        }
示例#4
0
        public static T InclusiveScanWithBoundaries <T, TScanOperation, TImpl>(
            T value,
            out ScanBoundaries <T> boundaries)
            where T : unmanaged
            where TScanOperation : struct, IScanReduceOperation <T>
            where TImpl : struct, IILFunctionImplementation
        {
            TImpl impl         = default;
            var   sharedMemory = InclusiveScanImplementation <T, TScanOperation, TImpl>(
                value);

            boundaries = new ScanBoundaries <T>(
                sharedMemory[0],
                sharedMemory[impl.ThreadDimension - 1]);
            return(sharedMemory[impl.ThreadIndex]);
        }
示例#5
0
        public static T ExclusiveScanWithBoundaries <T, TScanOperation, TImpl>(
            T value,
            out ScanBoundaries <T> boundaries)
            where T : unmanaged
            where TScanOperation : struct, IScanReduceOperation <T>
            where TImpl : struct, IILFunctionImplementation
        {
            TImpl impl         = default;
            var   sharedMemory = InclusiveScanImplementation <T, TScanOperation, TImpl>(
                value);

            boundaries = new ScanBoundaries <T>(
                sharedMemory[0],
                sharedMemory[Math.Max(0, impl.ThreadDimension - 2)]);
            return(impl.IsFirstThread
                ? default(TScanOperation).Identity
                : sharedMemory[impl.ThreadIndex - 1]);
        }
示例#6
0
 public T Scan(T value, out ScanBoundaries <T> boundaries) =>
 ExclusiveScanWithBoundaries <T, TScanOperation>(value, out boundaries);