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

Functions

void _XMP_L2G (int local_idx, long long int *global_idx, _XMP_template_t *template, int template_index)
 
void _XMP_G2L (long long int global_idx, int *local_idx, _XMP_template_t *template, int template_index)
 

Function Documentation

◆ _XMP_G2L()

void _XMP_G2L ( long long int  global_idx,
int *  local_idx,
_XMP_template_t template,
int  template_index 
)
46 {
47  _XMP_template_chunk_t *chunk = &(template->chunk[template_index]);
48  _XMP_nodes_info_t *n_info = chunk->onto_nodes_info;
49  long long base = template->info[template_index].ser_lower;
50 
51  // NOTE: local_idx is 0-origin.
52 
53  switch(chunk->dist_manner){
55  //*local_idx = global_idx - base;
56  *local_idx = global_idx;
57  break;
58  case _XMP_N_DIST_BLOCK:
59  *local_idx = (global_idx - base) - n_info->rank * chunk->par_chunk_width;
60  break;
61  case _XMP_N_DIST_CYCLIC:
62  *local_idx = (global_idx - base) / n_info->size;
63  break;
65  {
66  int off = global_idx - base;
67  int w = chunk->par_width;
68  *local_idx = (off / (n_info->size*w)) * w + off%w;
69  }
70  break;
71  case _XMP_N_DIST_GBLOCK:
72  *local_idx = global_idx - chunk->mapping_array[n_info->rank];
73  break;
74  default:
75  _XMP_fatal("_XMP_: unknown chunk dist_manner");
76  }
77 }
Here is the call graph for this function:

◆ _XMP_L2G()

void _XMP_L2G ( int  local_idx,
long long int *  global_idx,
_XMP_template_t template,
int  template_index 
)
6 {
7  if(! template->is_owner){
8  return;
9  }
10 
11  _XMP_template_chunk_t *chunk = &(template->chunk[template_index]);
12  _XMP_nodes_info_t *n_info = chunk->onto_nodes_info;
13  long long base = template->info[template_index].ser_lower;
14 
15  switch(chunk->dist_manner){
17  //*global_idx = base + local_idx ;
18  *global_idx = local_idx ;
19  break;
20  case _XMP_N_DIST_BLOCK:
21  *global_idx = base + n_info->rank * chunk->par_chunk_width + local_idx;
22  //xmpf_dbg_printf("%d -> %d, base = %d, rank = %d, chunk = %d\n", local_idx, *global_idx, base, n_info->rank, chunk->par_chunk_width);
23  break;
24  case _XMP_N_DIST_CYCLIC:
25  *global_idx = base + n_info->rank + n_info->size * local_idx;
26  break;
28  {
29  int w = chunk->par_width;
30  *global_idx = base + n_info->rank * w
31  + (local_idx/w) * w * n_info->size + local_idx%w;
32  }
33  break;
34  case _XMP_N_DIST_GBLOCK:
35  *global_idx = local_idx + chunk->mapping_array[n_info->rank];
36  break;
37  default:
38  _XMP_fatal("_XMP_: unknown chunk dist_manner");
39  }
40 }
Here is the call graph for this function:
Here is the caller graph for this function:
_XMP_nodes_info_type::size
int size
Definition: xmp_data_struct.h:32
_XMP_nodes_info_type
Definition: xmp_data_struct.h:31
_XMP_N_DIST_BLOCK
#define _XMP_N_DIST_BLOCK
Definition: xmp_constant.h:29
_XMP_template_chunk_type::onto_nodes_info
_XMP_nodes_info_t * onto_nodes_info
Definition: xmp_data_struct.h:94
_XMP_template_chunk_type::par_chunk_width
unsigned long long par_chunk_width
Definition: xmp_data_struct.h:86
_XMP_N_DIST_CYCLIC
#define _XMP_N_DIST_CYCLIC
Definition: xmp_constant.h:30
_XMP_template_chunk_type
Definition: xmp_data_struct.h:78
_XMP_N_DIST_BLOCK_CYCLIC
#define _XMP_N_DIST_BLOCK_CYCLIC
Definition: xmp_constant.h:31
_XMP_N_DIST_GBLOCK
#define _XMP_N_DIST_GBLOCK
Definition: xmp_constant.h:32
_XMP_N_DIST_DUPLICATION
#define _XMP_N_DIST_DUPLICATION
Definition: xmp_constant.h:28
_XMP_nodes_info_type::rank
int rank
Definition: xmp_data_struct.h:35
_XMP_template_chunk_type::dist_manner
int dist_manner
Definition: xmp_data_struct.h:87
_XMP_fatal
void _XMP_fatal(char *msg)
Definition: xmp_util.c:42
_XMP_template_chunk_type::par_width
unsigned long long par_width
Definition: xmp_data_struct.h:82
_XMP_template_chunk_type::mapping_array
long long * mapping_array
Definition: xmp_data_struct.h:88
_XMP_template_type::is_owner
_Bool is_owner
Definition: xmp_data_struct.h:106