aboutsummaryrefslogtreecommitdiff
path: root/mg2d.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2018-12-27 11:25:30 +0100
committerAnton Khirnov <anton@khirnov.net>2018-12-27 11:56:47 +0100
commitebb69e5e3765c0a65f92d4eb5e4ae8ba56c23f94 (patch)
tree9ab88212e897e7c4f32a5bca312c7a1208239c46 /mg2d.c
parent8b99b8dc65863c60f0473dc0bfeeaf6f8dd2550e (diff)
Add CPU feature detection.
Will be used for dynamically dispatching future asm functions.
Diffstat (limited to 'mg2d.c')
-rw-r--r--mg2d.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mg2d.c b/mg2d.c
index 4b01ae6..82a5546 100644
--- a/mg2d.c
+++ b/mg2d.c
@@ -24,6 +24,7 @@
#include <string.h>
#include "common.h"
+#include "cpu.h"
#include "ell_relax.h"
#include "log.h"
#include "mg2d.h"
@@ -54,6 +55,8 @@ struct MG2DInternal {
MG2DLevel *root;
+ int cpuflags;
+
int64_t time_solve;
int64_t count_solve;
@@ -343,6 +346,7 @@ static int mg_levels_init(MG2DContext *ctx)
cur->solver->step[0] = prev->solver->step[0] * ((double)(prev->solver->domain_size[0] - 1) / (cur->solver->domain_size[0] - 1));
cur->solver->step[1] = prev->solver->step[1] * ((double)(prev->solver->domain_size[1] - 1) / (cur->solver->domain_size[1] - 1));
}
+ cur->solver->cpuflags = priv->cpuflags;
cur->solver->fd_stencil = ctx->fd_stencil;
@@ -497,6 +501,8 @@ MG2DContext *mg2d_solver_alloc(size_t domain_size)
priv->logger.log = log_callback;
priv->logger.opaque = ctx;
+ priv->cpuflags = mg2di_cpu_flags_get();
+
for (int i = 0; i < ARRAY_ELEMS(ctx->boundaries); i++) {
const size_t boundary_len_max = domain_size + 2 * (FD_STENCIL_MAX - 1);