libxmp/libxmpf in Omni Compiler  1.3.4
xmpco_put.c File Reference
#include <assert.h>
#include "xmpco_internal.h"
#include "_xmpco_putget.h"
Include dependency graph for xmpco_put.c:

Macros

#define SCHEME_DirectPut   10
 
#define SCHEME_BufferPut   11
 
#define SCHEME_ExtraDirectPut   12
 
#define SCHEME_ExtraBufferPut   13
 

Functions

void _XMPCO_coarrayInit_put ()
 
void XMPCO_PUT_scalarStmt (CoarrayInfo_t *descPtr, char *baseAddr, int element, int coindex, char *rhs, SyncMode sync_mode)
 
void XMPCO_PUT_arrayStmt (CoarrayInfo_t *descPtr, char *baseAddr, int element, int coindex, char *rhsAddr, int rank, int skip[], int skip_rhs[], int count[], SyncMode sync_mode)
 
void XMPCO_PUT_spread (CoarrayInfo_t *descPtr, char *baseAddr, int element, int coindex, char *rhs, int rank, int skip[], int count[], SyncMode sync_mode)
 
void xmpf_coarray_put_err_len_ (void **descPtr, int *len_mold, int *len_src)
 
void xmpf_coarray_put_err_size_ (void **descPtr, int *dim, int *size_mold, int *size_src)
 

Macro Definition Documentation

◆ SCHEME_BufferPut

#define SCHEME_BufferPut   11

◆ SCHEME_DirectPut

#define SCHEME_DirectPut   10

◆ SCHEME_ExtraBufferPut

#define SCHEME_ExtraBufferPut   13

◆ SCHEME_ExtraDirectPut

#define SCHEME_ExtraDirectPut   12

Function Documentation

◆ _XMPCO_coarrayInit_put()

void _XMPCO_coarrayInit_put ( )
Here is the call graph for this function:

◆ XMPCO_PUT_arrayStmt()

void XMPCO_PUT_arrayStmt ( CoarrayInfo_t descPtr,
char *  baseAddr,
int  element,
int  coindex,
char *  rhsAddr,
int  rank,
int  skip[],
int  skip_rhs[],
int  count[],
SyncMode  sync_mode 
)
193 {
194  int coindex0 = _XMPCO_get_initial_image_withDescPtr(coindex, descPtr);
195 
196  if (element % COMM_UNIT != 0) {
197  _XMPCO_fatal("violation of boundary writing to a coindexed variable\n"
198  " xmpf_coarray_put_array_, " __FILE__);
199  return;
200  }
201 
202  /*--------------------------------------*\
203  * Check whether the local address rhs *
204  * is already registered for DMA and, *
205  * if so, get the descriptor, etc. *
206  \*--------------------------------------*/
207  void *descDMA;
208  size_t offsetDMA;
209  char *orgAddrDMA;
210  char *nameDMA;
211  BOOL avail_DMA;
212  int scheme;
213 
214  descDMA = _XMPCO_get_isEagerCommMode() ? NULL :
215  _XMPCO_get_desc_fromLocalAddr(rhsAddr, &orgAddrDMA, &offsetDMA, &nameDMA);
216  avail_DMA = descDMA ? TRUE : FALSE;
217 
218  /*--------------------------------------*\
219  * select scheme *
220  \*--------------------------------------*/
221  scheme = _select_scheme_put_array(avail_DMA);
222 
223  /*--------------------------------------*\
224  * action *
225  \*--------------------------------------*/
226  switch (scheme) {
227  case SCHEME_DirectPut:
228  _XMPCO_debugPrint("SCHEME_DirectPut/array selected\n");
229  _putCoarray_DMA(descPtr, baseAddr, coindex0, rhsAddr,
230  element, rank, skip, skip_rhs, count,
231  descDMA, offsetDMA, nameDMA, sync_mode);
232  break;
233 
234  case SCHEME_BufferPut:
235  _XMPCO_debugPrint("SCHEME_BufferPut/array selected\n");
236  _putCoarray_buffer(descPtr, baseAddr, coindex0, rhsAddr,
237  element, rank, skip, skip_rhs, count, sync_mode);
238  break;
239 
240  default:
241  _XMPCO_fatal("unexpected scheme number in " __FILE__);
242  }
243 }
Here is the call graph for this function:

◆ XMPCO_PUT_scalarStmt()

void XMPCO_PUT_scalarStmt ( CoarrayInfo_t descPtr,
char *  baseAddr,
int  element,
int  coindex,
char *  rhs,
SyncMode  sync_mode 
)
120 {
121  int coindex0 = _XMPCO_get_initial_image_withDescPtr(coindex, descPtr);
122 
123  /*--------------------------------------*\
124  * Check whether the local address rhs *
125  * is already registered for DMA and, *
126  * if so, get the descriptor, etc. *
127  \*--------------------------------------*/
128  void *descDMA;
129  size_t offsetDMA;
130  char *orgAddrDMA;
131  char *nameDMA;
132  BOOL avail_DMA;
133 
134  descDMA = _XMPCO_get_isEagerCommMode() ? NULL :
135  _XMPCO_get_desc_fromLocalAddr(rhs, &orgAddrDMA, &offsetDMA, &nameDMA);
136  avail_DMA = descDMA ? TRUE : FALSE;
137 
138  /*--------------------------------------*\
139  * select scheme *
140  \*--------------------------------------*/
141  int scheme = _select_scheme_put_scalar(element, avail_DMA);
142 
143  /*--------------------------------------*\
144  * action *
145  \*--------------------------------------*/
146  size_t elementRU;
147 
148  switch (scheme) {
149  case SCHEME_DirectPut:
150  _XMPCO_debugPrint("SCHEME_DirectPut/scalar selected\n");
151  assert(avail_DMA);
152 
153  _putVector_DMA(descPtr, baseAddr, element, coindex0,
154  descDMA, offsetDMA, nameDMA, sync_mode);
155  break;
156 
158  elementRU = ROUND_UP_COMM(element);
159  _XMPCO_debugPrint("SCHEME_ExtraDirectPut/scalar selected. elementRU=%ud\n",
160  elementRU);
161  assert(avail_DMA);
162 
163  _putVector_DMA(descPtr, baseAddr, elementRU, coindex0,
164  descDMA, offsetDMA, nameDMA, sync_mode);
165  break;
166 
167  case SCHEME_BufferPut:
168  _XMPCO_debugPrint("SCHEME_BufferPut/scalar selected\n");
169 
170  _putVector_buffer(descPtr, baseAddr, element, coindex0,
171  rhs, element, sync_mode);
172  break;
173 
175  elementRU = ROUND_UP_COMM(element);
176  _XMPCO_debugPrint("SCHEME_ExtraBufferPut/scalar selected. elementRU=%ud\n",
177  elementRU);
178 
179  _putVector_buffer(descPtr, baseAddr, elementRU, coindex0,
180  rhs, element, sync_mode);
181  break;
182 
183  default:
184  _XMPCO_fatal("unexpected scheme number in " __FILE__);
185  }
186 }
Here is the call graph for this function:

◆ XMPCO_PUT_spread()

void XMPCO_PUT_spread ( CoarrayInfo_t descPtr,
char *  baseAddr,
int  element,
int  coindex,
char *  rhs,
int  rank,
int  skip[],
int  count[],
SyncMode  sync_mode 
)
249 {
250  int coindex0 = _XMPCO_get_initial_image_withDescPtr(coindex, descPtr);
251 
252  if (element % COMM_UNIT != 0) {
253  _XMPCO_fatal("violation of boundary writing a scalar to a coindexed variable\n"
254  " xmpf_coarray_put_spread_, " __FILE__);
255  return;
256  }
257 
258 
259  /*--------------------------------------*\
260  * select scheme *
261  \*--------------------------------------*/
262  // only BufferPut
263  _XMPCO_debugPrint("SCHEME_BufferPut/spread selected\n");
264 
265  /*--------------------------------------*\
266  * action *
267  \*--------------------------------------*/
268  _spreadCoarray(descPtr, baseAddr, coindex0, rhs,
269  element, rank, skip, count, element, sync_mode);
270 }
Here is the call graph for this function:

◆ xmpf_coarray_put_err_len_()

void xmpf_coarray_put_err_len_ ( void **  descPtr,
int *  len_mold,
int *  len_src 
)
279 {
280  char *name = _XMPCO_get_nameOfCoarray(*descPtr);
281 
282  _XMPCO_debugPrint("ERROR DETECTED: xmpf_coarray_put_err_len_\n"
283  " coarray name=\'%s\', len(mold)=%d, len(src)=%d\n",
284  name, *len_mold, *len_src);
285 
286  _XMPCO_fatal("mismatch length-parameters found in "
287  "put-communication on coarray \'%s\'", name);
288 }
Here is the call graph for this function:

◆ xmpf_coarray_put_err_size_()

void xmpf_coarray_put_err_size_ ( void **  descPtr,
int *  dim,
int *  size_mold,
int *  size_src 
)
293 {
294  char *name = _XMPCO_get_nameOfCoarray(*descPtr);
295 
296  _XMPCO_debugPrint("ERROR DETECTED: xmpf_coarray_put_err_size_\n"
297  " coarray name=\'%s\', i=%d, size(mold,i)=%d, size(src,i)=%d\n",
298  name, *dim, *size_mold, *size_src);
299 
300  _XMPCO_fatal("Mismatch sizes of %d-th dimension found in "
301  "put-communication on coarray \'%s\'", *dim, name);
302 }
Here is the call graph for this function:
_XMPCO_get_desc_fromLocalAddr
void * _XMPCO_get_desc_fromLocalAddr(char *localAddr, char **orgAddr, size_t *offset, char **name)
Definition: xmpco_alloc.c:784
SCHEME_ExtraDirectPut
#define SCHEME_ExtraDirectPut
Definition: xmpco_put.c:14
FALSE
#define FALSE
Definition: xmpco_internal.h:16
_XMPCO_debugPrint
void _XMPCO_debugPrint(char *format,...)
Definition: xmpco_msg.c:20
_localBuf_name
char * _localBuf_name
Definition: xmpco_get_stmt.c:69
_XMPCO_get_nameOfCoarray
char * _XMPCO_get_nameOfCoarray(CoarrayInfo_t *cinfo)
Definition: xmpco_alloc.c:701
_localBuf_desc
void * _localBuf_desc
Definition: xmpco_get_stmt.c:65
_XMPCO_get_initial_image_withDescPtr
int _XMPCO_get_initial_image_withDescPtr(int image, CoarrayInfo_t *descPtr)
Definition: xmpco_lib.c:246
_XMPCO_get_isEagerCommMode
BOOL _XMPCO_get_isEagerCommMode(void)
Definition: xmpco_params.c:89
_XMPCO_get_infoOfLocalBuf
void * _XMPCO_get_infoOfLocalBuf(char **baseAddr, size_t *offset, char **name)
Definition: xmpco_alloc.c:770
_localBuf_offset
size_t _localBuf_offset
Definition: xmpco_get_stmt.c:66
BOOL
#define BOOL
Definition: xmpco_internal.h:14
_XMPCO_fatal
void _XMPCO_fatal(char *format,...)
Definition: xmpco_msg.c:4
TRUE
#define TRUE
Definition: xmpco_internal.h:15
_localBuf_size
int _localBuf_size
Definition: xmpco_get_stmt.c:68
SCHEME_ExtraBufferPut
#define SCHEME_ExtraBufferPut
Definition: xmpco_put.c:15
ROUND_UP_COMM
#define ROUND_UP_COMM(n)
Definition: xmpco_internal.h:20
_XMPCO_get_localBufSize
size_t _XMPCO_get_localBufSize(void)
Definition: xmpco_params.c:84
SCHEME_DirectPut
#define SCHEME_DirectPut
Definition: xmpco_put.c:12
SCHEME_BufferPut
#define SCHEME_BufferPut
Definition: xmpco_put.c:13
COMM_UNIT
#define COMM_UNIT
COMM_UNIT : minimum unit of size for PUT/GET communication MALLOC_UNIT : minimum unit of size for mem...
Definition: xmpco_params.h:37
_localBuf_baseAddr
char * _localBuf_baseAddr
Definition: xmpco_get_stmt.c:67