From 24103bc5ae3d568ca97bdb70175b975fa680546c Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 30 Jun 2017 09:44:25 +0200 Subject: Refactor conformal factor evaluation. --- init.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'init.c') diff --git a/init.c b/init.c index 72dabed..0cc1f32 100644 --- a/init.c +++ b/init.c @@ -23,14 +23,41 @@ #include "brill_data.h" #include "basis.h" +#include "cpu.h" #include "internal.h" #include "qfunc.h" +#include "threadpool.h" + +double bdi_scalarproduct_metric_fma3(size_t len1, size_t len2, double *mat, + double *vec1, double *vec2); +double bdi_scalarproduct_metric_avx(size_t len1, size_t len2, double *mat, + double *vec1, double *vec2); +double bdi_scalarproduct_metric_sse3(size_t len1, size_t len2, double *mat, + double *vec1, double *vec2); +double bdi_scalarproduct_metric_c(size_t len1, size_t len2, double *mat, + double *vec1, double *vec2); static int brill_init_check_options(BDContext *bd) { BDPriv *s = bd->priv; int ret; + bdi_init_cpu_flags(bd); + + s->scalarproduct_metric = bdi_scalarproduct_metric_c; + if (EXTERNAL_SSE3(s->cpu_flags)) + s->scalarproduct_metric = bdi_scalarproduct_metric_sse3; + if (EXTERNAL_AVX(s->cpu_flags)) + s->scalarproduct_metric = bdi_scalarproduct_metric_avx; + if (EXTERNAL_FMA3(s->cpu_flags)) + s->scalarproduct_metric = bdi_scalarproduct_metric_fma3; + + if (!bd->nb_threads) { + bd->nb_threads = bdi_cpu_count(); + if (!bd->nb_threads) + bd->nb_threads = 1; + } + ret = bdi_qfunc_init(bd, &s->qfunc, bd->q_func_type, bd->amplitude, bd->eppley_n); if (!s->qfunc) @@ -87,6 +114,8 @@ BDContext *bd_context_alloc(void) if (!bd) return NULL; + bd->nb_threads = 1; + bd->q_func_type = BD_Q_FUNC_GUNDLACH; bd->amplitude = 1.0; bd->eppley_n = 5; -- cgit v1.2.3