tiled fma is ok, mat mul is now available again

This commit is contained in:
Youmu Liu
2026-01-12 15:09:39 +08:00
parent b8bf1e9f08
commit ad3b2212fa
6 changed files with 172 additions and 119 deletions
+27 -17
View File
@@ -67,30 +67,22 @@ namespace StgSharp.Mathematics.Numeric
if (y < 0 || y > _size.ElementColumnLength || x < 0 || x > _size.ElementRowLength) {
throw new ArgumentOutOfRangeException($"Index [{x},{y}] is out of matrix index range.");
}
int
k_c = y / 4,
c = y % 4,
k_r = x / 4,
r = x % 4;
ref MatrixKernel<T> kernel = ref GetMatrixKernel(k_r, k_c);
return Unsafe.IsNullRef(ref kernel) ? T.Zero : kernel[r, c];
long offset = GetElementOffset(x, y);
if (offset < 0) {
return T.Zero;
}
return ((T*)Buffer)[offset];
}
set
{
if (y < 0 || y > _size.ElementColumnLength || x < 0 || x > _size.ElementRowLength) {
throw new ArgumentOutOfRangeException($"Index [{x},{y}] is out of matrix index range.");
}
int
k_c = y / 4,
c = y % 4,
k_r = x / 4,
r = x % 4;
ref MatrixKernel<T> kernel = ref GetMatrixKernel(k_r, k_c);
if (!Unsafe.IsNullRef(ref kernel)) {
kernel[r, c] = value;
long offset = GetElementOffset(x, y);
if (offset < 0) {
return;
}
((T*)Buffer)[offset] = value;
}
}
@@ -151,6 +143,24 @@ namespace StgSharp.Mathematics.Numeric
ref Unsafe.NullRef<MatrixKernel<T>>();
}
internal long GetElementOffset(
int x,
int y
)
{
int
k_c = y / 4,
c = y % 4,
k_r = x / 4,
r = x % 4;
if (!_boarder.IsInBuffer(k_r, k_c, in _size)) {
return -1;
}
long kernelOffset = _boarder.GetIndexOffset(k_r, k_c, in _size);
return kernelOffset * 16 + 4 * r + c;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal unsafe ref T GetElementUnsafe(
int x,