Refactor SPMD lane abstraction and add gather support
- Rename ISPMD interfaces to ISPMDLane for clarity - Add gather and mask load methods to ISPMDLane, implement for ScalarLane and WideLane - Add GetUnsafePtr() for direct pointer access - Update MathV and vector types to use new interface and gather methods - Update SPMD job interfaces and implementations to ISPMDLane - Improve hash codes, range checks, and safety checks in vector types - Update codegen templates for new interface/methods - Refactor SPMD jobs to use gather methods for efficient vectorized access
This commit is contained in:
@@ -6,7 +6,7 @@ using System.Runtime.CompilerServices;
|
||||
namespace Misaki.HighPerformance.Mathematics.SPMD;
|
||||
|
||||
public unsafe struct Vector4<TLane, TNumber> : IEquatable<Vector4<TLane, TNumber>>
|
||||
where TLane : ISPMD<TLane, TNumber>
|
||||
where TLane : ISPMDLane<TLane, TNumber>
|
||||
where TNumber : unmanaged, INumber<TNumber>, IBinaryNumber<TNumber>, IMinMaxValue<TNumber>, IBitwiseOperators<TNumber, TNumber, TNumber>
|
||||
{
|
||||
public TLane x;
|
||||
@@ -55,12 +55,12 @@ public unsafe struct Vector4<TLane, TNumber> : IEquatable<Vector4<TLane, TNumber
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
[Conditional("ENABLE_COLLECTION_CHECKS")]
|
||||
[Conditional("MHP_ENABLE_SAFETY_CHECKS")]
|
||||
private static void RangeCheck(int index)
|
||||
{
|
||||
if (index < 0 || index >= 4)
|
||||
{
|
||||
throw new IndexOutOfRangeException($"Index {index} is out of range for Vector2.");
|
||||
throw new IndexOutOfRangeException($"Index {index} is out of range for Vector4.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,8 +498,13 @@ public unsafe struct Vector4<TLane, TNumber> : IEquatable<Vector4<TLane, TNumber
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public override int GetHashCode()
|
||||
public override readonly int GetHashCode()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var hash = new HashCode();
|
||||
hash.Add(x);
|
||||
hash.Add(y);
|
||||
hash.Add(z);
|
||||
hash.Add(w);
|
||||
return hash.ToHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user