small changed
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
/* clang-format off */
|
||||
#if SN_IS_ARCH(SN_ARCH_X86_64)
|
||||
|
||||
#include "sn_intrinsic.h"
|
||||
// #include "sn_intrinsic.h"
|
||||
#include "sn_template.fma.x86.h"
|
||||
#include "sn_intrinsic.std.h"
|
||||
#include "sn_intrinsic.context.x86.h"
|
||||
|
||||
@@ -136,17 +137,6 @@ SN_MK_PROC_DECL_STD(float, avx, _fma, fma)
|
||||
_mm256_store_ps((float *)&ans_cur->f32_y[1], c23);
|
||||
}
|
||||
|
||||
#define SN_MK_FMA_F32_512_PHASE(i)\
|
||||
do { \
|
||||
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
|
||||
c_0 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
|
||||
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
|
||||
c_1 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
|
||||
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
|
||||
c_2 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
|
||||
ak = _mm512_broadcast_f32x4(left_##i ->f32_x[0]);\
|
||||
c_3 = _mm512_fmadd_ps(ak, _mm512_permute_ps(b_##i, _FMA_SELECT(0)), c_##i);\
|
||||
}while(0)
|
||||
|
||||
SN_MK_PROC_DECL_STD(float, 512, , fma)
|
||||
{
|
||||
@@ -187,39 +177,6 @@ SN_MK_PROC_DECL_STD(float, 512, , fma)
|
||||
_mm512_store_ps((float *)ans_cur, c_0);
|
||||
}
|
||||
|
||||
// double
|
||||
#define DOUBLE_KERNEL_FMA_CYCLE(i) \
|
||||
do { \
|
||||
/* k = 0 */ \
|
||||
register __m128d b_lo = _mm_load_pd(right_values + (2 * i + 0)); \
|
||||
register __m128d b_hi = _mm_load_pd(right_values + (2 * i + 1)); \
|
||||
register __m128d a_lo = _mm_load_pd(left_values + (0 * 2 + 0)); \
|
||||
register __m128d a_hi = _mm_load_pd(left_values + (0 * 2 + 1)); \
|
||||
register __m128d b = _mm_shuffle_pd(b_lo, b_lo, 0x0); \
|
||||
c##i##_lo = _mm_add_pd(c##i##_lo, _mm_mul_pd(a_lo, b)); \
|
||||
c##i##_hi = _mm_add_pd(c##i##_hi, _mm_mul_pd(a_hi, b)); \
|
||||
\
|
||||
/* group = 1 */ \
|
||||
a_lo = _mm_load_pd(left_values + (1 * 2 + 0)); \
|
||||
a_hi = _mm_load_pd(left_values + (1 * 2 + 1)); \
|
||||
b = _mm_shuffle_pd(b_lo, b_lo, 0x3); \
|
||||
c##i##_lo = _mm_add_pd(c##i##_lo, _mm_mul_pd(a_lo, b)); \
|
||||
c##i##_hi = _mm_add_pd(c##i##_hi, _mm_mul_pd(a_hi, b)); \
|
||||
\
|
||||
/* groupp = 2 */ \
|
||||
a_lo = _mm_load_pd(left_values + (2 * 2 + 0)); \
|
||||
a_hi = _mm_load_pd(left_values + (2 * 2 + 1)); \
|
||||
b = _mm_shuffle_pd(b_hi, b_hi, 0x0); \
|
||||
c##i##_lo = _mm_add_pd(c##i##_lo, _mm_mul_pd(a_lo, b)); \
|
||||
c##i##_hi = _mm_add_pd(c##i##_hi, _mm_mul_pd(a_hi, b)); \
|
||||
\
|
||||
/* froup = 3 */ \
|
||||
a_lo = _mm_load_pd(left_values + (3 * 2 + 0)); \
|
||||
a_hi = _mm_load_pd(left_values + (3 * 2 + 1)); \
|
||||
b = _mm_shuffle_pd(b_hi, b_hi, 0x3); \
|
||||
c##i##_lo = _mm_add_pd(c##i##_lo, _mm_mul_pd(a_lo, b)); \
|
||||
c##i##_hi = _mm_add_pd(c##i##_hi, _mm_mul_pd(a_hi, b)); \
|
||||
} while (0)
|
||||
|
||||
SN_MK_PROC_DECL_STD(double, sse, , fma)
|
||||
{
|
||||
@@ -243,13 +200,13 @@ SN_MK_PROC_DECL_STD(double, sse, , fma)
|
||||
const double *right_values = &right_cur->m[0][0];
|
||||
const double *left_values = &left_cur->m[0][0];
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(0);
|
||||
SN_MK_FMA_F64_SSE_PHASE(0);
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(1);
|
||||
SN_MK_FMA_F64_SSE_PHASE(1);
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(2);
|
||||
SN_MK_FMA_F64_SSE_PHASE(2);
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(3);
|
||||
SN_MK_FMA_F64_SSE_PHASE(3);
|
||||
}
|
||||
|
||||
ans_cur->f64_x[0] = c0_lo;
|
||||
|
||||
@@ -48,7 +48,7 @@ SN_API int SN_DECL sn_get_numa_overall(int *out_numa_count, int *count_of_each_n
|
||||
return 1;
|
||||
}
|
||||
|
||||
SN_API int SN_DECL sn_get_numa_each(int numa_id, uint64_t *internal, uint64_t *global)
|
||||
SN_API int SN_DECL sn_get_numa_each(int numa_id, uint64_t *internal, uint32_t *global)
|
||||
{
|
||||
ULONGLONG mask = 0;
|
||||
if (!GetNumaNodeProcessorMask((UCHAR)numa_id, &mask))
|
||||
@@ -56,9 +56,9 @@ SN_API int SN_DECL sn_get_numa_each(int numa_id, uint64_t *internal, uint64_t *g
|
||||
|
||||
int intra = 0;
|
||||
while (mask) {
|
||||
unsigned long idx;
|
||||
uint32_t idx;
|
||||
_BitScanForward64(&idx, mask);
|
||||
internal[intra] = intra;
|
||||
int _ = (internal == NULL) ? intra : (internal[intra] = intra);
|
||||
global[intra] = (int)idx;
|
||||
intra++;
|
||||
mask &= mask - 1;
|
||||
|
||||
Reference in New Issue
Block a user