arrange of proj structure
This commit is contained in:
@@ -56,24 +56,20 @@ void load_intrinsic_sse(sn_intrinsic *context, SIMDID id)
|
||||
context->mat[F32].buffer_scalar_mul = BUF_PROC(float, sse, , scalar_mul);
|
||||
context->mat[F32].buffer_sub = BUF_PROC(float, sse, , sub);
|
||||
context->mat[F32].buffer_transpose = KER_PROC(float, sse, , transpose);
|
||||
context->mat[F32].build_panel = NULL;
|
||||
context->mat[F32].clear_panel = PNL_PROC(float, sse, , clear);
|
||||
context->mat[F32].ker_fma = KER_PROC(float, sse, , fma);
|
||||
context->mat[F32].ker_tile_fma = KERTILE_PROC(float, sse, , fma);
|
||||
context->mat[F32].pivot = NULL;
|
||||
context->mat[F32].store_panel = NULL;
|
||||
|
||||
context->mat[F64].buffer_add = BUF_PROC(double, sse, , add);
|
||||
context->mat[F64].buffer_fill = BUF_PROC(double, sse, , fill);
|
||||
context->mat[F64].buffer_scalar_mul = BUF_PROC(double, sse, , scalar_mul);
|
||||
context->mat[F64].buffer_sub = BUF_PROC(double, sse, , sub);
|
||||
context->mat[F64].buffer_transpose = NULL;
|
||||
context->mat[F64].build_panel = NULL;
|
||||
context->mat[F64].clear_panel = PNL_PROC(double, sse, , clear);
|
||||
context->mat[F64].ker_fma = KER_PROC(double, sse, , fma);
|
||||
context->mat[F64].ker_tile_fma = KERTILE_PROC(double, sse, , fma);
|
||||
context->mat[F64].pivot = NULL;
|
||||
context->mat[F64].store_panel = NULL;
|
||||
|
||||
context->vec_f32_normalize_3 = f32_normalize;
|
||||
}
|
||||
@@ -93,28 +89,24 @@ void load_intrinsic_avx(sn_intrinsic *context, SIMDID id)
|
||||
context->mat[F32].buffer_scalar_mul = BUF_PROC(float, avx, , scalar_mul);
|
||||
context->mat[F32].buffer_sub = BUF_PROC(float, avx, , sub);
|
||||
context->mat[F32].buffer_transpose = KER_PROC(float, avx, , transpose);
|
||||
context->mat[F32].build_panel = BUILD_PANEL(avx, float);
|
||||
context->mat[F32].clear_panel = PNL_PROC(float, avx, , clear);
|
||||
context->mat[F32].ker_fma = is_fma ? KER_PROC(float, avx, , fma) :
|
||||
KER_PROC(float, avx, _fma, fma);
|
||||
context->mat[F32].ker_tile_fma = is_fma ? KERTILE_PROC(float, avx, , fma) :
|
||||
KERTILE_PROC(float, avx, _fma, fma);
|
||||
context->mat[F32].pivot = NULL;
|
||||
context->mat[F32].store_panel = STORE_PANEL(avx, float);
|
||||
|
||||
context->mat[F64].buffer_add = BUF_PROC(double, avx, , add);
|
||||
context->mat[F64].buffer_fill = BUF_PROC(double, avx, , fill);
|
||||
context->mat[F64].buffer_scalar_mul = BUF_PROC(double, avx, , scalar_mul);
|
||||
context->mat[F64].buffer_sub = BUF_PROC(double, avx, , sub);
|
||||
context->mat[F64].buffer_transpose = NULL;
|
||||
context->mat[F64].build_panel = NULL;
|
||||
context->mat[F64].clear_panel = PNL_PROC(double, avx, , clear);
|
||||
context->mat[F64].ker_fma = is_fma ? KER_PROC(double, avx, , fma) :
|
||||
KER_PROC(double, avx, _fma, fma);
|
||||
context->mat[F64].ker_tile_fma = is_fma ? KERTILE_PROC(double, avx, , fma) :
|
||||
KERTILE_PROC(double, avx, _fma, fma);
|
||||
context->mat[F64].pivot = NULL;
|
||||
context->mat[F64].store_panel = NULL;
|
||||
|
||||
context->vec_f32_normalize_3 = f32_normalize;
|
||||
}
|
||||
@@ -130,24 +122,20 @@ void load_intrinsic_512(sn_intrinsic *context, SIMDID id)
|
||||
context->mat[F32].buffer_scalar_mul = BUF_PROC(float, 512, , scalar_mul);
|
||||
context->mat[F32].buffer_sub = BUF_PROC(float, 512, , sub);
|
||||
context->mat[F32].buffer_transpose = KER_PROC(float, 512, , transpose);
|
||||
context->mat[F32].build_panel = BUILD_PANEL(512, float);
|
||||
context->mat[F32].clear_panel = PNL_PROC(float, 512, , clear);
|
||||
context->mat[F32].ker_fma = KER_PROC(float, 512, , fma);
|
||||
context->mat[F32].ker_tile_fma = KERTILE_PROC(float, 512, , fma);
|
||||
context->mat[F32].pivot = NULL;
|
||||
context->mat[F32].store_panel = STORE_PANEL(512, float);
|
||||
|
||||
context->mat[F64].buffer_add = BUF_PROC(double, 512, , add);
|
||||
context->mat[F64].buffer_fill = BUF_PROC(double, 512, , fill);
|
||||
context->mat[F64].buffer_scalar_mul = BUF_PROC(double, 512, , scalar_mul);
|
||||
context->mat[F64].buffer_sub = BUF_PROC(double, 512, , sub);
|
||||
context->mat[F64].buffer_transpose = NULL;
|
||||
context->mat[F64].build_panel = BUILD_PANEL(512, double);
|
||||
context->mat[F64].clear_panel = PNL_PROC(double, 512, , clear);
|
||||
context->mat[F64].ker_fma = KER_PROC(double, 512, , fma);
|
||||
context->mat[F64].ker_tile_fma = KERTILE_PROC(double, 512, , fma);
|
||||
context->mat[F64].pivot = NULL;
|
||||
context->mat[F64].store_panel = STORE_PANEL(512, double);
|
||||
|
||||
context->vec_f32_normalize_3 = f32_normalize;
|
||||
}
|
||||
|
||||
@@ -244,33 +244,33 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, avx, , fma)
|
||||
register __m256d ccol;
|
||||
|
||||
/* Column 0 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[0]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[0]);
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b0, _FMA_SELECT(0))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b0, _FMA_SELECT(1))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b0, _FMA_SELECT(2))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b0, _FMA_SELECT(3))));
|
||||
ans->f64_y[0] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[0], ccol);
|
||||
/* Column 1 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[1]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[1]);
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b1, _FMA_SELECT(0))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b1, _FMA_SELECT(1))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b1, _FMA_SELECT(2))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b1, _FMA_SELECT(3))));
|
||||
ans->f64_y[1] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[1], ccol);
|
||||
/* Column 2 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[2]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[2]);
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b2, _FMA_SELECT(0))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b2, _FMA_SELECT(1))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b2, _FMA_SELECT(2))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b2, _FMA_SELECT(3))));
|
||||
ans->f64_y[2] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[2], ccol);
|
||||
/* Column 3 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[3]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[3]);
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a0, _mm256_permute4x64_pd(b3, _FMA_SELECT(0))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a1, _mm256_permute4x64_pd(b3, _FMA_SELECT(1))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a2, _mm256_permute4x64_pd(b3, _FMA_SELECT(2))));
|
||||
ccol = _mm256_add_pd(ccol, _mm256_mul_pd(a3, _mm256_permute4x64_pd(b3, _FMA_SELECT(3))));
|
||||
ans->f64_y[3] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[3], ccol);
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, avx, _fma, fma)
|
||||
@@ -288,33 +288,33 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, avx, _fma, fma)
|
||||
register __m256d ccol;
|
||||
|
||||
/* Column 0 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[0]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[0]);
|
||||
ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b0, _FMA_SELECT(0)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b0, _FMA_SELECT(1)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b0, _FMA_SELECT(2)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b0, _FMA_SELECT(3)), ccol);
|
||||
ans->f64_y[0] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[0], ccol);
|
||||
/* Column 1 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[1]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[1]);
|
||||
ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b1, _FMA_SELECT(0)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b1, _FMA_SELECT(1)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b1, _FMA_SELECT(2)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b1, _FMA_SELECT(3)), ccol);
|
||||
ans->f64_y[1] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[1], ccol);
|
||||
/* Column 2 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[2]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[2]);
|
||||
ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b2, _FMA_SELECT(0)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b2, _FMA_SELECT(1)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b2, _FMA_SELECT(2)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b2, _FMA_SELECT(3)), ccol);
|
||||
ans->f64_y[2] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[2], ccol);
|
||||
/* Column 3 */
|
||||
ccol = _mm256_load_pd((double *)&ans->f32_y[3]);
|
||||
ccol = _mm256_load_pd((double *)&ans->f64_y[3]);
|
||||
ccol = _mm256_fmadd_pd(a0, _mm256_permute4x64_pd(b3, _FMA_SELECT(0)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a1, _mm256_permute4x64_pd(b3, _FMA_SELECT(1)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a2, _mm256_permute4x64_pd(b3, _FMA_SELECT(2)), ccol);
|
||||
ccol = _mm256_fmadd_pd(a3, _mm256_permute4x64_pd(b3, _FMA_SELECT(3)), ccol);
|
||||
ans->f64_y[3] = ccol;
|
||||
_mm256_store_pd((double *)&ans->f64_y[3], ccol);
|
||||
}
|
||||
|
||||
DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, 512, , fma)
|
||||
@@ -359,8 +359,8 @@ DECLARE_KER_PROC_LEFT_RIGHT_ANS(double, 512, , fma)
|
||||
c01 = _mm512_fmadd_pd(a30, b01_perm, c01);
|
||||
c23 = _mm512_fmadd_pd(a12, b23_perm, c23);
|
||||
|
||||
ans->f64_z[0] = c01;
|
||||
ans->f64_z[1] = c23;
|
||||
_mm512_store_pd((double *)&ans->f64_z[0], c01);
|
||||
_mm512_store_pd((double *)&ans->f64_z[1], c23);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -277,7 +277,7 @@ DECLARE_KERTILE_PROC_LEFT_RIGHT_ANS(float, 512, , fma)
|
||||
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);
|
||||
} while (0)
|
||||
|
||||
DECLARE_KERTILE_PROC_LEFT_RIGHT_ANS(double, sse, , fma)
|
||||
{
|
||||
@@ -300,13 +300,13 @@ DECLARE_KERTILE_PROC_LEFT_RIGHT_ANS(double, sse, , fma)
|
||||
const *left_cur = left + GET_INDEX(ansHeight, i, k),
|
||||
const *right_cur = right + GET_INDEX(commonK, j, k); // GetKernelAddressUnsafe
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(0)
|
||||
DOUBLE_KERNEL_FMA_CYCLE(0);
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(1)
|
||||
DOUBLE_KERNEL_FMA_CYCLE(1);
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(2)
|
||||
DOUBLE_KERNEL_FMA_CYCLE(2);
|
||||
|
||||
DOUBLE_KERNEL_FMA_CYCLE(3)
|
||||
DOUBLE_KERNEL_FMA_CYCLE(3);
|
||||
}
|
||||
|
||||
_mm_store_pd(ans->f64_x + (0 * 2 + 0), c0_lo);
|
||||
|
||||
Reference in New Issue
Block a user