aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-06-26 17:29:36 +0200
committerAnton Khirnov <anton@khirnov.net>2019-06-29 11:19:32 +0200
commit6d9c352ff599201dacff330004a7c6cd54705aaa (patch)
tree600d537d11bfacb4fda664447520aae267e90dc6
parent2bd55ca0e3fb500bff5cf5ceb36a80a196f0f29d (diff)
mg2d: make init_guess() MPI-aware
API and ABI break.
-rw-r--r--libmg2d.v2
-rw-r--r--mg2d.c23
-rw-r--r--mg2d.h1
3 files changed, 16 insertions, 10 deletions
diff --git a/libmg2d.v b/libmg2d.v
index 5c9f863..526ba87 100644
--- a/libmg2d.v
+++ b/libmg2d.v
@@ -1,4 +1,4 @@
-LIBMG2D_13 {
+LIBMG2D_14 {
global: mg2d_*;
local: *;
};
diff --git a/mg2d.c b/mg2d.c
index 9775c16..113830b 100644
--- a/mg2d.c
+++ b/mg2d.c
@@ -1971,6 +1971,7 @@ unsigned int mg2d_max_fd_stencil(void)
int mg2d_init_guess(MG2DContext *ctx, const double *src,
ptrdiff_t src_stride,
+ const ptrdiff_t src_start[2],
const size_t src_size[2],
const double src_step[2])
{
@@ -2000,22 +2001,26 @@ int mg2d_init_guess(MG2DContext *ctx, const double *src,
priv->transfer_init->tp = priv->tp;
priv->transfer_init->cpuflags = priv->cpuflags;
- priv->transfer_init->src.size[0] = src_size[0];
- priv->transfer_init->src.size[1] = src_size[1];
- priv->transfer_init->src.step[0] = src_step[0];
- priv->transfer_init->src.step[1] = src_step[1];
+ priv->transfer_init->src.start[0] = src_start[1];
+ priv->transfer_init->src.start[1] = src_start[0];
+ priv->transfer_init->src.size[0] = src_size[1];
+ priv->transfer_init->src.size[1] = src_size[0];
+ priv->transfer_init->src.step[0] = src_step[1];
+ priv->transfer_init->src.step[1] = src_step[0];
- priv->transfer_init->dst.size[0] = ctx->local_size[0];
- priv->transfer_init->dst.size[1] = ctx->local_size[1];
- priv->transfer_init->dst.step[0] = ctx->step[0];
- priv->transfer_init->dst.step[1] = ctx->step[1];
+ priv->transfer_init->dst.start[0] = ctx->local_start[1];
+ priv->transfer_init->dst.start[1] = ctx->local_start[0];
+ priv->transfer_init->dst.size[0] = ctx->local_size[1];
+ priv->transfer_init->dst.size[1] = ctx->local_size[0];
+ priv->transfer_init->dst.step[0] = ctx->step[1];
+ priv->transfer_init->dst.step[1] = ctx->step[0];
ret = mg2di_gt_init(priv->transfer_init);
if (ret < 0)
return ret;
}
- ret = mg2di_ndarray_wrap(&a_src, 2, src_size, src,
+ ret = mg2di_ndarray_wrap(&a_src, 2, (size_t [2]){ src_size[1], src_size[0] }, src,
(ptrdiff_t [2]){ src_stride, 1 });
if (ret < 0)
return ret;
diff --git a/mg2d.h b/mg2d.h
index 2f593bc..867d77e 100644
--- a/mg2d.h
+++ b/mg2d.h
@@ -288,6 +288,7 @@ unsigned int mg2d_max_fd_stencil(void);
int mg2d_init_guess(MG2DContext *ctx, const double *src,
ptrdiff_t src_stride,
+ const ptrdiff_t src_start[2],
const size_t src_size[2],
const double src_step[2]);