aboutsummaryrefslogtreecommitdiff
path: root/init.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2017-06-30 09:44:25 +0200
committerAnton Khirnov <anton@khirnov.net>2017-06-30 09:45:37 +0200
commit24103bc5ae3d568ca97bdb70175b975fa680546c (patch)
tree595ab9702987a266e7730807cdb1f4279b838a78 /init.c
parentd8e21cfe33c9fd98109374510311479955684412 (diff)
Refactor conformal factor evaluation.
Diffstat (limited to 'init.c')
-rw-r--r--init.c29
1 files changed, 29 insertions, 0 deletions
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;