vector and matrix optimization

This commit is contained in:
Youmu Liu
2025-10-14 18:13:18 +08:00
parent 47d2bfe558
commit c5eaf250ab
16 changed files with 482 additions and 381 deletions
+5 -6
View File
@@ -1,7 +1,6 @@
#include "StgSharpNative.h"
#include "sn_intrinsic.h"
#if defined(_MSC_VER) && !defined(__clang__)
#include <intrin.h>
#include <isa_availability.h>
@@ -71,7 +70,7 @@ void load_intrinsic_sse(sn_intrinsic *context)
context->f32_scalar_mul = f32_scalar_mul_sse;
context->f32_sub = (MATARITHMETIC)f32_sub_sse;
context->f32_transpose = (MATTRANSPOSEPROC)f32_transpose_sse;
context->normalize_3 = normalize;
context->f32_normalize_3 = f32_normalize;
}
void load_intrinsic_avx(sn_intrinsic *context)
@@ -80,11 +79,11 @@ void load_intrinsic_avx(sn_intrinsic *context)
context->factorial_simd = factorial_simd_sse;
context->index_pair = index_pair_sse;
context->f32_add = (MATARITHMETIC)f32_add_avx;
context->f32_fma = (void(*)(void*, void*, void*))f32_fma_sse;
context->f32_fma = (void (*)(void *, void *, void *))f32_fma_sse;
context->f32_scalar_mul = f32_scalar_mul_avx;
context->f32_sub = (MATARITHMETIC)f32_sub_avx;
context->f32_transpose = (MATTRANSPOSEPROC)f32_transpose_avx;
context->normalize_3 = normalize;
context->f32_normalize_3 = f32_normalize;
}
void load_intrinsic_512(sn_intrinsic *context)
@@ -93,9 +92,9 @@ void load_intrinsic_512(sn_intrinsic *context)
context->factorial_simd = factorial_simd_sse;
context->index_pair = index_pair_sse;
context->f32_add = (MATARITHMETIC)f32_add_512;
context->f32_fma = (void(*)(void*, void*, void*))f32_fma_sse;
context->f32_fma = (void (*)(void *, void *, void *))f32_fma_sse;
context->f32_scalar_mul = f32_scalar_mul_512;
context->f32_sub = (MATARITHMETIC)f32_sub_512;
context->f32_transpose = (MATTRANSPOSEPROC)f32_transpose_512;
context->normalize_3 = normalize;
context->f32_normalize_3 = f32_normalize;
}
+1 -1
View File
@@ -1,7 +1,7 @@
#include "sn_intrinsic.h"
#include "sn_internal.h"
SN_API void SN_DECL normalize(VEC(float) *restrict source, VEC(float) *restrict target)
INTERNAL void SN_DECL f32_normalize(VEC(float) *restrict source, VEC(float) *restrict target)
{
register __m128 s = _mm_load_ps(&source->xmm);
register __m128 a_length_sq = _mm_mul_ps(s, s);