Problem on fma data sync or thread load unbalance

This commit is contained in:
Youmu Liu
2025-09-03 21:29:45 +08:00
parent 125040620b
commit c9442d2b4f
3 changed files with 209 additions and 196 deletions
+10 -4
View File
@@ -1,5 +1,6 @@
#include "sn_intrinsic.h"
// ans = left * right(T) + ans
INTERNAL void SN_DECL kernel_fma_sse(mat_kernel const *restrict left,
mat_kernel const *restrict right, mat_kernel *restrict ans)
{
@@ -29,8 +30,13 @@ INTERNAL void SN_DECL kernel_fma_sse(mat_kernel const *restrict left,
_mm_add_ps(ans3, _mm_mul_ps(source3, broadcast));
}
}
_mm_store_ps(&ans->xmm[0], ans0);
_mm_store_ps(&ans->xmm[1], ans1);
_mm_store_ps(&ans->xmm[2], ans2);
_mm_store_ps(&ans->xmm[3], ans3);
source0 = _mm_load_ps(&ans->xmm[0]);
source1 = _mm_load_ps(&ans->xmm[1]);
source2 = _mm_load_ps(&ans->xmm[2]);
source3 = _mm_load_ps(&ans->xmm[3]);
_mm_store_ps(&ans->xmm[0], _mm_add_ps(source0, ans0));
_mm_store_ps(&ans->xmm[1], _mm_add_ps(source1, ans1));
_mm_store_ps(&ans->xmm[2], _mm_add_ps(source2, ans2));
_mm_store_ps(&ans->xmm[3], _mm_add_ps(source3, ans3));
}