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);
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); }
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]); }
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]); }
public T Scan(T value, out ScanBoundaries <T> boundaries) => ExclusiveScanWithBoundaries <T, TScanOperation>(value, out boundaries);