Class SimdHorizontalOperations
- Namespace
- DotCompute.Backends.CPU.Kernels.Simd
- Assembly
- DotCompute.Backends.CPU.dll
Horizontal operations for SIMD vectors - operations that combine elements within a single vector. Provides optimized horizontal sum, min, max, and product operations.
public static class SimdHorizontalOperations
- Inheritance
-
SimdHorizontalOperations
- Inherited Members
Methods
HorizontalMax(Vector128<float>)
Performs horizontal max of a 128-bit vector.
public static float HorizontalMax(Vector128<float> vector)
Parameters
Returns
HorizontalMax(Vector256<float>)
Performs horizontal max of a 256-bit vector.
public static float HorizontalMax(Vector256<float> vector)
Parameters
Returns
HorizontalMax(Vector512<float>)
Performs horizontal max of a 512-bit vector.
public static float HorizontalMax(Vector512<float> vector)
Parameters
Returns
HorizontalMaxNeon(Vector128<float>)
Performs horizontal max of a 128-bit float vector using ARM NEON.
public static float HorizontalMaxNeon(Vector128<float> vector)
Parameters
Returns
HorizontalMin(Vector128<float>)
Performs horizontal min of a 128-bit vector.
public static float HorizontalMin(Vector128<float> vector)
Parameters
Returns
HorizontalMin(Vector256<float>)
Performs horizontal min of a 256-bit vector.
public static float HorizontalMin(Vector256<float> vector)
Parameters
Returns
HorizontalMin(Vector512<float>)
Performs horizontal min of a 512-bit vector.
public static float HorizontalMin(Vector512<float> vector)
Parameters
Returns
HorizontalMinNeon(Vector128<float>)
Performs horizontal min of a 128-bit float vector using ARM NEON.
public static float HorizontalMinNeon(Vector128<float> vector)
Parameters
Returns
HorizontalProduct(Vector128<float>)
Performs horizontal product of a 128-bit vector.
public static float HorizontalProduct(Vector128<float> vector)
Parameters
Returns
HorizontalProduct(Vector256<float>)
Performs horizontal product of a 256-bit vector.
public static float HorizontalProduct(Vector256<float> vector)
Parameters
Returns
HorizontalProduct(Vector512<float>)
Performs horizontal product of a 512-bit vector.
public static float HorizontalProduct(Vector512<float> vector)
Parameters
Returns
HorizontalSum(Vector128<double>)
Performs horizontal sum of a 128-bit double vector.
public static double HorizontalSum(Vector128<double> vector)
Parameters
Returns
HorizontalSum(Vector128<int>)
Performs horizontal sum of a 128-bit integer vector.
public static int HorizontalSum(Vector128<int> vector)
Parameters
Returns
HorizontalSum(Vector128<float>)
Performs horizontal sum of a 128-bit vector.
public static float HorizontalSum(Vector128<float> vector)
Parameters
Returns
HorizontalSum(Vector256<double>)
Performs horizontal sum of a 256-bit double vector.
public static double HorizontalSum(Vector256<double> vector)
Parameters
Returns
HorizontalSum(Vector256<int>)
Performs horizontal sum of a 256-bit integer vector.
public static int HorizontalSum(Vector256<int> vector)
Parameters
Returns
HorizontalSum(Vector256<float>)
Performs horizontal sum of a 256-bit vector.
public static float HorizontalSum(Vector256<float> vector)
Parameters
Returns
HorizontalSum(Vector512<float>)
Performs horizontal sum of a 512-bit vector.
public static float HorizontalSum(Vector512<float> vector)
Parameters
Returns
HorizontalSumCrossPlatform(Vector128<float>)
Performs horizontal sum using the best available SIMD implementation for the current platform. Automatically selects AVX/SSE on x86 or NEON on ARM.
public static float HorizontalSumCrossPlatform(Vector128<float> vector)
Parameters
Returns
HorizontalSumNeon(Vector128<double>)
Performs horizontal sum of a 128-bit double vector using ARM NEON.
public static double HorizontalSumNeon(Vector128<double> vector)
Parameters
Returns
HorizontalSumNeon(Vector128<int>)
Performs horizontal sum of a 128-bit integer vector using ARM NEON.
public static int HorizontalSumNeon(Vector128<int> vector)
Parameters
Returns
HorizontalSumNeon(Vector128<float>)
Performs horizontal sum of a 128-bit float vector using ARM NEON. Uses Vector64 pairwise operations for maximum compatibility.
public static float HorizontalSumNeon(Vector128<float> vector)
Parameters
Returns
HorizontalSumPortable<T>(Vector<T>)
Performs horizontal sum using Vector<T> which auto-selects SIMD width. Portable across all platforms with automatic SIMD selection.
public static T HorizontalSumPortable<T>(Vector<T> vector) where T : struct, INumber<T>
Parameters
vectorVector<T>
Returns
- T
Type Parameters
T
ParallelTreeReduction(float[])
Performs a parallel tree reduction on an array using SIMD operations. This is the most efficient way to reduce large arrays.
public static float ParallelTreeReduction(float[] data)
Parameters
datafloat[]The input array to reduce.
Returns
- float
The sum of all elements.
Remarks
Uses a three-phase approach for optimal performance:
- SIMD reduction phase: processes Vector256 chunks in parallel
- Horizontal reduction: combines SIMD results per thread
- Final reduction: combines thread results
ParallelTreeReductionDouble(double[])
Performs a parallel tree reduction for double precision.
public static double ParallelTreeReductionDouble(double[] data)
Parameters
datadouble[]
Returns
ParallelTreeReductionInt(int[])
Performs a parallel tree reduction for integers.
public static long ParallelTreeReductionInt(int[] data)
Parameters
dataint[]