diff options
author | Anton Khirnov <anton@khirnov.net> | 2017-06-30 09:44:25 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2017-06-30 09:45:37 +0200 |
commit | 24103bc5ae3d568ca97bdb70175b975fa680546c (patch) | |
tree | 595ab9702987a266e7730807cdb1f4279b838a78 /init.c | |
parent | d8e21cfe33c9fd98109374510311479955684412 (diff) |
Refactor conformal factor evaluation.
Diffstat (limited to 'init.c')
-rw-r--r-- | init.c | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -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; |