libxmp/libxmpf in Omni Compiler  1.3.4
xmpc_gmove.c File Reference
#include <stdlib.h>
#include "xmp_internal.h"
Include dependency graph for xmpc_gmove.c:

Macros

#define XMP_DBG   0
 
#define DBG_RANK   0
 

Functions

void xmpc_gmv_g_alloc (_XMP_gmv_desc_t **gmv_desc, _XMP_array_t *ap)
 
void xmpc_gmv_g_dim_info (_XMP_gmv_desc_t *gp, int i, int kind, int lb, int len, int st)
 
void xmpc_gmv_l_alloc (_XMP_gmv_desc_t **gmv_desc, void *local_data, int n)
 
void xmpc_gmv_l_dim_info (_XMP_gmv_desc_t *gp, int i, int a_lb, int a_len, int kind, int lb, int len, int st)
 
void xmpc_gmv_dealloc (_XMP_gmv_desc_t *gp)
 
void xmpc_gmv_do (_XMP_gmv_desc_t *gmv_desc_leftp, _XMP_gmv_desc_t *gmv_desc_rightp, int mode)
 

Variables

void(* _XMP_pack_comm_set )(void *sendbuf, int sendbuf_size, _XMP_array_t *a, _XMP_comm_set_t *comm_set[][_XMP_N_MAX_DIM])
 
void(* _XMP_unpack_comm_set )(void *recvbuf, int recvbuf_size, _XMP_array_t *a, _XMP_comm_set_t *comm_set[][_XMP_N_MAX_DIM])
 
_XMP_nodes_tgmv_nodes
 
int n_gmv_nodes
 

Macro Definition Documentation

◆ DBG_RANK

#define DBG_RANK   0

◆ XMP_DBG

#define XMP_DBG   0

Function Documentation

◆ xmpc_gmv_dealloc()

void xmpc_gmv_dealloc ( _XMP_gmv_desc_t gp)
129  {
130 
131  _XMP_free(gp->kind);
132  _XMP_free(gp->lb);
133  _XMP_free(gp->ub);
134  _XMP_free(gp->st);
135 
136  _XMP_free(gp->a_lb);
137  _XMP_free(gp->a_ub);
138 
139  _XMP_free(gp);
140 
141 }
Here is the call graph for this function:

◆ xmpc_gmv_do()

void xmpc_gmv_do ( _XMP_gmv_desc_t gmv_desc_leftp,
_XMP_gmv_desc_t gmv_desc_rightp,
int  mode 
)
165 {
166 
167  _XMP_pack_comm_set = _XMPC_pack_comm_set;
168  _XMP_unpack_comm_set = _XMPC_unpack_comm_set;
169 
170  if (gmv_desc_leftp->is_global && gmv_desc_rightp->is_global){
171  _XMP_gmove_garray_garray(gmv_desc_leftp, gmv_desc_rightp, mode);
172  }
173  else if (gmv_desc_leftp->is_global && !gmv_desc_rightp->is_global){
174  if (gmv_desc_rightp->ndims == 0){
175  _XMP_gmove_garray_scalar(gmv_desc_leftp, gmv_desc_rightp->local_data, mode);
176  }
177  else {
178  _XMP_array_t *a = NULL;
179  _XMPC_larray_alloc(&a, gmv_desc_rightp,
180  gmv_desc_leftp->a_desc->type, gmv_desc_leftp->a_desc->align_template);
181  _XMP_gmove_garray_larray(gmv_desc_leftp, gmv_desc_rightp, mode);
183  }
184  }
185  else if (!gmv_desc_leftp->is_global && gmv_desc_rightp->is_global){
186  if (gmv_desc_leftp->ndims == 0){
187  _XMP_gmove_scalar_garray(gmv_desc_leftp->local_data, gmv_desc_rightp, mode);
188  }
189  else {
190 
191  _XMP_ASSERT(gmv_desc_rightp->a_desc);
192 
193  // create a temporal descriptor for the "non-distributed" LHS array (to be possible used
194  // in _XMP_gmove_1to1)
195  _XMP_array_t *a = NULL;
196  _XMPC_larray_alloc(&a, gmv_desc_leftp,
197  gmv_desc_rightp->a_desc->type, gmv_desc_rightp->a_desc->align_template);
198  _XMP_gmove_larray_garray(gmv_desc_leftp, gmv_desc_rightp, mode);
200 
201  }
202  }
203  else {
204  _XMP_fatal("gmv_do: both sides are local.");
205  }
206 
207 }

◆ xmpc_gmv_g_alloc()

void xmpc_gmv_g_alloc ( _XMP_gmv_desc_t **  gmv_desc,
_XMP_array_t ap 
)
25 {
26  _XMP_gmv_desc_t *gp;
27  int n = ap->dim;
28 
30 
31  gp->kind = (int *)_XMP_alloc(sizeof(int) * n);
32  gp->lb = (int *)_XMP_alloc(sizeof(int) * n);
33  gp->ub = (int *)_XMP_alloc(sizeof(int) * n);
34  gp->st = (int *)_XMP_alloc(sizeof(int) * n);
35 
36  if (!gp || !gp->kind || !gp->lb || !gp->st)
37  _XMP_fatal("gmv_g_alloc: cannot alloc memory");
38 
39  gp->is_global = true;
40  gp->ndims = n;
41  gp->a_desc = ap;
42 
43  gp->local_data = NULL;
44  gp->a_lb = NULL;
45  gp->a_ub = NULL;
46 
47  *gmv_desc = gp;
48 }
Here is the call graph for this function:

◆ xmpc_gmv_g_dim_info()

void xmpc_gmv_g_dim_info ( _XMP_gmv_desc_t gp,
int  i,
int  kind,
int  lb,
int  len,
int  st 
)
54 {
55  gp->kind[i] = kind;
56 
57  switch (kind){
58  case XMP_N_GMOVE_ALL:
59  gp->lb[i] = gp->a_desc->info[i].ser_lower;
60  gp->ub[i] = gp->a_desc->info[i].ser_upper;
61  gp->st[i] = 1;
62  break;
63  case XMP_N_GMOVE_INDEX:
64  case XMP_N_GMOVE_RANGE:
65  gp->lb[i] = lb;
66  gp->ub[i] = lb + st * (len - 1);
67  gp->st[i] = st;
68  break;
69  default:
70  _XMP_fatal("wrong gmove kind");
71  }
72 
73 }
Here is the call graph for this function:

◆ xmpc_gmv_l_alloc()

void xmpc_gmv_l_alloc ( _XMP_gmv_desc_t **  gmv_desc,
void *  local_data,
int  n 
)
78 {
79  _XMP_gmv_desc_t *gp;
80 
82 
83  gp->kind = (int *)_XMP_alloc(sizeof(int) * n);
84  gp->lb = (int *)_XMP_alloc(sizeof(int) * n);
85  gp->ub = (int *)_XMP_alloc(sizeof(int) * n);
86  gp->st = (int *)_XMP_alloc(sizeof(int) * n);
87  gp->a_lb = (int *)_XMP_alloc(sizeof(int) * n);
88  gp->a_ub = (int *)_XMP_alloc(sizeof(int) * n);
89 
90  gp->is_global = false;
91  gp->ndims = n;
92  gp->a_desc = NULL;
93 
94  gp->local_data = local_data;
95 
96  *gmv_desc = gp;
97 }
Here is the call graph for this function:

◆ xmpc_gmv_l_dim_info()

void xmpc_gmv_l_dim_info ( _XMP_gmv_desc_t gp,
int  i,
int  a_lb,
int  a_len,
int  kind,
int  lb,
int  len,
int  st 
)
103 {
104  gp->a_lb[i] = a_lb; // always 0
105  gp->a_ub[i] = a_len - 1;
106 
107  gp->kind[i] = kind;
108 
109  switch (kind){
110  case XMP_N_GMOVE_ALL:
111  gp->lb[i] = a_lb;
112  gp->ub[i] = a_len - 1;
113  gp->st[i] = 1;
114  break;
115  case XMP_N_GMOVE_INDEX:
116  case XMP_N_GMOVE_RANGE:
117  gp->lb[i] = lb;
118  gp->ub[i] = lb + st * (len - 1);
119  gp->st[i] = st;
120  break;
121  default:
122  _XMP_fatal("wrong gmove kind");
123  }
124 
125 }
Here is the call graph for this function:

Variable Documentation

◆ _XMP_pack_comm_set

void(* _XMP_pack_comm_set) (void *sendbuf, int sendbuf_size, _XMP_array_t *a, _XMP_comm_set_t *comm_set[][_XMP_N_MAX_DIM])

◆ _XMP_unpack_comm_set

void(* _XMP_unpack_comm_set) (void *recvbuf, int recvbuf_size, _XMP_array_t *a, _XMP_comm_set_t *comm_set[][_XMP_N_MAX_DIM])

◆ gmv_nodes

_XMP_nodes_t* gmv_nodes

◆ n_gmv_nodes

int n_gmv_nodes
_XMP_finalize_array_desc
void _XMP_finalize_array_desc(void *array)
_XMP_alloc
void * _XMP_alloc(size_t size)
Definition: xmp_util.c:21
_XMP_gmv_desc_type::lb
int * lb
Definition: xmp_data_struct.h:398
_XMP_gmv_desc_type::st
int * st
Definition: xmp_data_struct.h:400
_XMP_gmove_garray_larray
void _XMP_gmove_garray_larray(_XMP_gmv_desc_t *gmv_desc_leftp, _XMP_gmv_desc_t *gmv_desc_rightp, int mode)
Definition: xmp_gmove.c:4851
_XMP_array_info_type::ser_upper
int ser_upper
Definition: xmp_data_struct.h:200
_XMP_gmv_desc_type::ub
int * ub
Definition: xmp_data_struct.h:399
XMP_N_GMOVE_INDEX
#define XMP_N_GMOVE_INDEX
Definition: xmp_constant.h:128
_XMP_gmv_desc_type
Definition: xmp_data_struct.h:386
_XMP_gmv_desc_type::a_ub
int * a_ub
Definition: xmp_data_struct.h:395
_XMP_gmove_garray_garray
void _XMP_gmove_garray_garray(_XMP_gmv_desc_t *gmv_desc_leftp, _XMP_gmv_desc_t *gmv_desc_rightp, int mode)
Definition: xmp_gmove.c:4769
_XMP_array_type::align_template
_XMP_template_t * align_template
Definition: xmp_data_struct.h:312
_XMP_gmv_desc_type::kind
int * kind
Definition: xmp_data_struct.h:397
_XMP_array_info_type::ser_lower
int ser_lower
Definition: xmp_data_struct.h:199
_XMP_gmv_desc_type::local_data
void * local_data
Definition: xmp_data_struct.h:393
XMP_N_GMOVE_ALL
#define XMP_N_GMOVE_ALL
Definition: xmp_constant.h:127
_XMP_array_type
Definition: xmp_data_struct.h:266
_XMP_gmv_desc_type::ndims
int ndims
Definition: xmp_data_struct.h:389
_XMP_array_type::info
_XMP_array_info_t info[1]
Definition: xmp_data_struct.h:313
_XMP_free
void _XMP_free(void *p)
Definition: xmp_util.c:37
_XMP_ASSERT
#define _XMP_ASSERT(_flag)
Definition: xmp_internal.h:34
_XMP_gmv_desc_type::is_global
_Bool is_global
Definition: xmp_data_struct.h:388
_XMP_unpack_comm_set
void(* _XMP_unpack_comm_set)(void *recvbuf, int recvbuf_size, _XMP_array_t *a, _XMP_comm_set_t *comm_set[][_XMP_N_MAX_DIM])
Definition: xmp_gmove.c:25
_XMP_pack_comm_set
void(* _XMP_pack_comm_set)(void *sendbuf, int sendbuf_size, _XMP_array_t *a, _XMP_comm_set_t *comm_set[][_XMP_N_MAX_DIM])
Definition: xmp_gmove.c:23
_XMP_array_type::dim
int dim
Definition: xmp_data_struct.h:272
_XMP_fatal
void _XMP_fatal(char *msg)
Definition: xmp_util.c:42
XMP_N_GMOVE_RANGE
#define XMP_N_GMOVE_RANGE
Definition: xmp_constant.h:129
_XMP_gmv_desc_type::a_desc
_XMP_array_t * a_desc
Definition: xmp_data_struct.h:391
_XMP_gmove_garray_scalar
void _XMP_gmove_garray_scalar(_XMP_gmv_desc_t *gmv_desc_leftp, void *scalar, int mode)
Definition: xmp_gmove.c:4732
_XMP_gmove_scalar_garray
void _XMP_gmove_scalar_garray(void *scalar, _XMP_gmv_desc_t *gmv_desc_rightp, int mode)
Definition: xmp_gmove.c:4704
_XMP_array_type::type
int type
Definition: xmp_data_struct.h:273
_XMP_gmove_larray_garray
void _XMP_gmove_larray_garray(_XMP_gmv_desc_t *gmv_desc_leftp, _XMP_gmv_desc_t *gmv_desc_rightp, int mode)
Definition: xmp_gmove.c:5003
_XMP_gmv_desc_type::a_lb
int * a_lb
Definition: xmp_data_struct.h:394