better kernel fma
This commit is contained in:
@@ -142,9 +142,13 @@ namespace StgSharp.Mathematics.Numeric
|
||||
{
|
||||
throw new IndexOutOfRangeException("Matrix dimensions must agree.");
|
||||
}
|
||||
if (left.Layout != MatrixLayout.DenseRectangle ||
|
||||
right.Layout != MatrixLayout.DenseRectangle ||
|
||||
ans.Layout != MatrixLayout.DenseRectangle) {
|
||||
throw new NotSupportedException("Only dense rectangle matrices are supported.");
|
||||
}
|
||||
long count = (long)left.KernelColumnLength * left.KernelRowLength;
|
||||
|
||||
// int size = MatrixPanel.KernelSideCount<float>();
|
||||
if (count <= 1024)
|
||||
{
|
||||
MatrixParallelThread[] pool = null;
|
||||
@@ -155,15 +159,22 @@ namespace StgSharp.Mathematics.Numeric
|
||||
{
|
||||
for (int j = 0; j < ans.KernelColumnLength; j++)
|
||||
{
|
||||
MatrixKernel<float>* ansPanel = ans.GetKernelAddressUnsafe(i, j);
|
||||
NativeIntrinsic.Context.mat[f32].clear_panel((MatrixPanel*)ansPanel);
|
||||
MatrixKernel<float>* ansPanel = GetKernelAddressUnsafe(ans.Buffer,
|
||||
ans.KernelColumnLength,
|
||||
i, j);
|
||||
|
||||
// Console.WriteLine($"{i}{j}");
|
||||
// NativeIntrinsic.Context.mat[f32].clear_panel((MatrixPanel*)ansPanel);
|
||||
for (int k = 0; k < left.KernelColumnLength; k++)
|
||||
{
|
||||
NativeIntrinsic.Context
|
||||
.mat[f32].kernel_fma((MatrixPanel*)left.GetKernelAddressUnsafe(i, k),
|
||||
(MatrixPanel*)right.GetKernelAddressUnsafe(k, j),
|
||||
.mat[f32].kernel_fma((MatrixPanel*)GetKernelAddressUnsafe(left.Buffer,
|
||||
left.KernelColumnLength,
|
||||
i,
|
||||
k),
|
||||
(MatrixPanel*)GetKernelAddressUnsafe(right.Buffer,
|
||||
right.KernelColumnLength,
|
||||
k,
|
||||
j),
|
||||
(MatrixPanel*)ansPanel);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user