Nek5000
SEM for Incompressible NS
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Macros | Functions
gs_local.c File Reference
#include <string.h>
#include <limits.h>
#include <float.h>
#include "c99.h"
#include "name.h"
#include "types.h"
#include "gs_defs.h"
+ Include dependency graph for gs_local.c:

Go to the source code of this file.

Macros

#define gs_gather_array   PREFIXED_NAME(gs_gather_array )
 
#define gs_init_array   PREFIXED_NAME(gs_init_array )
 
#define gs_gather   PREFIXED_NAME(gs_gather )
 
#define gs_scatter   PREFIXED_NAME(gs_scatter )
 
#define gs_init   PREFIXED_NAME(gs_init )
 
#define gs_gather_vec   PREFIXED_NAME(gs_gather_vec )
 
#define gs_scatter_vec   PREFIXED_NAME(gs_scatter_vec )
 
#define gs_init_vec   PREFIXED_NAME(gs_init_vec )
 
#define gs_gather_many   PREFIXED_NAME(gs_gather_many )
 
#define gs_scatter_many   PREFIXED_NAME(gs_scatter_many )
 
#define gs_init_many   PREFIXED_NAME(gs_init_many )
 
#define gs_gather_vec_to_many   PREFIXED_NAME(gs_gather_vec_to_many )
 
#define gs_scatter_many_to_vec   PREFIXED_NAME(gs_scatter_many_to_vec)
 
#define gs_scatter_vec_to_many   PREFIXED_NAME(gs_scatter_vec_to_many)
 
#define DEFINE_GATHER(T, OP)
 
#define DEFINE_INIT(T)
 
#define DEFINE_PROCS(T)
 
#define DEFINE_GATHER(T, OP)
 
#define DEFINE_SCATTER(T)
 
#define DEFINE_INIT(T)
 
#define DEFINE_PROCS(T)
 
#define DEFINE_GATHER(T, OP)
 
#define DEFINE_INIT(T)
 
#define DEFINE_PROCS(T)
 
#define SWITCH_DOMAIN_CASE(T)   case gs_##T: WITH_DOMAIN(T); break;
 
#define SWITCH_DOMAIN(dom)
 
#define SWITCH_OP_CASE(T, OP)   case gs_##OP: WITH_OP(T,OP); break;
 
#define SWITCH_OP(T, op)
 
#define WITH_OP(T, OP)   gather_array_##T##_##OP(out,in,n)
 
#define WITH_DOMAIN(T)   SWITCH_OP(T,op)
 
#define WITH_DOMAIN(T)   init_array_##T(out,n,op)
 
#define WITH_OP(T, OP)   gather_##T##_##OP(out,in,1,map)
 
#define WITH_DOMAIN(T)   SWITCH_OP(T,op)
 
#define WITH_DOMAIN(T)   scatter_##T(out,1,in,1,map)
 
#define WITH_DOMAIN(T)   init_##T(out,map,op)
 
#define WITH_OP(T, OP)   gather_vec_##T##_##OP(out,in,vn,map)
 
#define WITH_DOMAIN(T)   SWITCH_OP(T,op)
 
#define WITH_DOMAIN(T)   init_vec_##T(out,vn,map,op)
 
#define WITH_OP(T, OP)   for(k=0;k<vn;++k) gather_##T##_##OP(p[k],q[k],1,map)
 
#define WITH_DOMAIN(T)   SWITCH_OP(T,op)
 
#define WITH_DOMAIN(T)   for(k=0;k<vn;++k) scatter_##T(p[k],1,q[k],1,map)
 
#define WITH_DOMAIN(T)   for(k=0;k<vn;++k) init_##T(p[k],map,op)
 
#define WITH_OP(T, OP)   for(i=vn;i;--i) gather_##T##_##OP(*p++,(const T*)q,vn,map), q+=unit_size
 
#define WITH_DOMAIN(T)   SWITCH_OP(T,op)
 
#define WITH_DOMAIN(T)   for(i=vn;i;--i) scatter_##T((T*)p,vn,*q++,1,map), p+=unit_size
 
#define WITH_DOMAIN(T)   for(i=vn;i;--i) scatter_##T(*p++,1,(const T*)q,vn,map), q+=unit_size
 

Functions

void gs_scatter_vec (void *restrict out, const void *restrict in, const unsigned vn, const uint *restrict map, gs_dom dom)
 
void gs_gather_array (void *out, const void *in, uint n, gs_dom dom, gs_op op)
 
void gs_init_array (void *out, uint n, gs_dom dom, gs_op op)
 
void gs_gather (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom, gs_op op)
 
void gs_scatter (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom)
 
void gs_init (void *out, const unsigned vn, const uint *map, gs_dom dom, gs_op op)
 
void gs_gather_vec (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom, gs_op op)
 
void gs_init_vec (void *out, const unsigned vn, const uint *map, gs_dom dom, gs_op op)
 
void gs_gather_many (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom, gs_op op)
 
void gs_scatter_many (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom)
 
void gs_init_many (void *out, const unsigned vn, const uint *map, gs_dom dom, gs_op op)
 
void gs_gather_vec_to_many (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom, gs_op op)
 
void gs_scatter_many_to_vec (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom)
 
void gs_scatter_vec_to_many (void *out, const void *in, const unsigned vn, const uint *map, gs_dom dom)
 

Macro Definition Documentation

#define DEFINE_GATHER (   T,
  OP 
)
Value:
static void gather_array_##T##_##OP( \
T *restrict out, const T *restrict in, uint n) \
{ \
for(;n;--n) { T q = *in++, *p = out++; GS_DO_##OP(*p,q); } \
}
#define uint
Definition: types.h:70
double T
Definition: gs_test.c:14
n
Definition: xxt_test.m:73
p
Definition: xxt_test2.m:1
#define restrict
Definition: c99.h:11
ulong out[N]
Definition: sort_test2.c:20

Definition at line 114 of file gs_local.c.

#define DEFINE_GATHER (   T,
  OP 
)
Value:
static void gather_##T##_##OP( \
T *restrict out, const T *restrict in, const unsigned in_stride, \
const uint *restrict map) \
{ \
uint i,j; \
while((i=*map++)!=-(uint)1) { \
T t=out[i]; \
j=*map++; do GS_DO_##OP(t,in[j*in_stride]); while((j=*map++)!=-(uint)1); \
out[i]=t; \
} \
}
#define uint
Definition: types.h:70
double T
Definition: gs_test.c:14
#define restrict
Definition: c99.h:11
for i
Definition: xxt_test.m:74
ulong out[N]
Definition: sort_test2.c:20

Definition at line 114 of file gs_local.c.

#define DEFINE_GATHER (   T,
  OP 
)
Value:
static void gather_vec_##T##_##OP( \
T *restrict out, const T *restrict in, const unsigned vn, \
const uint *restrict map) \
{ \
uint i,j; \
while((i=*map++)!=-(uint)1) { \
T *restrict p = &out[i*vn], *pe = p+vn; \
j=*map++; do { \
const T *restrict q = &in[j*vn]; \
T *restrict pk=p; do { GS_DO_##OP(*pk,*q); ++pk, ++q; } while(pk!=pe); \
} while((j=*map++)!=-(uint)1); \
} \
}
#define uint
Definition: types.h:70
double T
Definition: gs_test.c:14
p
Definition: xxt_test2.m:1
#define restrict
Definition: c99.h:11
for i
Definition: xxt_test.m:74
ulong out[N]
Definition: sort_test2.c:20

Definition at line 114 of file gs_local.c.

#define DEFINE_INIT (   T)
Value:
static void init_array_##T(T *restrict out, uint n, gs_op op) \
{ \
const T e = gs_identity_##T[op]; \
for(;n;--n) *out++=e; \
}
#define uint
Definition: types.h:70
double T
Definition: gs_test.c:14
n
Definition: xxt_test.m:73
gs_op
Definition: gs_defs.h:77
#define restrict
Definition: c99.h:11
ulong out[N]
Definition: sort_test2.c:20

Definition at line 149 of file gs_local.c.

#define DEFINE_INIT (   T)
Value:
static void init_##T(T *restrict out, const uint *restrict map, gs_op op) \
{ \
uint i; const T e = gs_identity_##T[op]; \
while((i=*map++)!=-(uint)1) out[i]=e; \
}
#define uint
Definition: types.h:70
double T
Definition: gs_test.c:14
gs_op
Definition: gs_defs.h:77
#define restrict
Definition: c99.h:11
for i
Definition: xxt_test.m:74
ulong out[N]
Definition: sort_test2.c:20

Definition at line 149 of file gs_local.c.

#define DEFINE_INIT (   T)
Value:
static void init_vec_##T(T *restrict out, const unsigned vn, \
const uint *restrict map, gs_op op) \
{ \
uint i; const T e = gs_identity_##T[op]; \
while((i=*map++)!=-(uint)1) { \
T *restrict u = (T*)out + vn*i, *ue = u+vn; \
do *u++ = e; while(u!=ue); \
} \
}
#define uint
Definition: types.h:70
double T
Definition: gs_test.c:14
gs_op
Definition: gs_defs.h:77
#define restrict
Definition: c99.h:11
for i
Definition: xxt_test.m:74
ulong out[N]
Definition: sort_test2.c:20

Definition at line 149 of file gs_local.c.

#define DEFINE_PROCS (   T)
Value:
double T
Definition: gs_test.c:14
#define GS_FOR_EACH_OP(T, macro)
Definition: gs_defs.h:26
#define DEFINE_INIT(T)
Definition: gs_local.c:149
#define DEFINE_GATHER(T, OP)
Definition: gs_local.c:114

Definition at line 160 of file gs_local.c.

#define DEFINE_PROCS (   T)
Value:
#define DEFINE_SCATTER(T)
Definition: gs_local.c:76
double T
Definition: gs_test.c:14
#define GS_FOR_EACH_OP(T, macro)
Definition: gs_defs.h:26
#define DEFINE_INIT(T)
Definition: gs_local.c:149
#define DEFINE_GATHER(T, OP)
Definition: gs_local.c:114

Definition at line 160 of file gs_local.c.

#define DEFINE_PROCS (   T)
Value:
double T
Definition: gs_test.c:14
#define GS_FOR_EACH_OP(T, macro)
Definition: gs_defs.h:26
#define DEFINE_INIT(T)
Definition: gs_local.c:149
#define DEFINE_GATHER(T, OP)
Definition: gs_local.c:114

Definition at line 160 of file gs_local.c.

#define DEFINE_SCATTER (   T)
Value:
static void scatter_##T( \
T *restrict out, const unsigned out_stride, \
const T *restrict in, const unsigned in_stride, \
const uint *restrict map) \
{ \
uint i,j; \
while((i=*map++)!=-(uint)1) { \
T t=in[i*in_stride]; \
j=*map++; do out[j*out_stride]=t; while((j=*map++)!=-(uint)1); \
} \
}
#define uint
Definition: types.h:70
double T
Definition: gs_test.c:14
#define restrict
Definition: c99.h:11
for i
Definition: xxt_test.m:74
ulong out[N]
Definition: sort_test2.c:20

Definition at line 76 of file gs_local.c.

#define gs_gather   PREFIXED_NAME(gs_gather )

Definition at line 10 of file gs_local.c.

Referenced by cr_exec(), gs_aux(), and pw_exec().

#define gs_gather_array   PREFIXED_NAME(gs_gather_array )

Definition at line 8 of file gs_local.c.

Referenced by allreduce_imp(), and scan_imp().

#define gs_gather_many   PREFIXED_NAME(gs_gather_many )

Definition at line 16 of file gs_local.c.

Referenced by gs_aux().

#define gs_gather_vec   PREFIXED_NAME(gs_gather_vec )

Definition at line 13 of file gs_local.c.

Referenced by cr_exec(), gs_aux(), and pw_exec().

#define gs_gather_vec_to_many   PREFIXED_NAME(gs_gather_vec_to_many )

Definition at line 19 of file gs_local.c.

Referenced by cr_exec(), and pw_exec().

#define gs_init   PREFIXED_NAME(gs_init )

Definition at line 12 of file gs_local.c.

Referenced by gs_aux().

#define gs_init_array   PREFIXED_NAME(gs_init_array )

Definition at line 9 of file gs_local.c.

Referenced by allreduce_exec(), and scan_imp().

#define gs_init_many   PREFIXED_NAME(gs_init_many )

Definition at line 18 of file gs_local.c.

Referenced by gs_aux().

#define gs_init_vec   PREFIXED_NAME(gs_init_vec )

Definition at line 15 of file gs_local.c.

Referenced by gs_aux().

#define gs_scatter   PREFIXED_NAME(gs_scatter )

Definition at line 11 of file gs_local.c.

Referenced by allreduce_exec(), cr_exec(), gs_aux(), and pw_exec().

#define gs_scatter_many   PREFIXED_NAME(gs_scatter_many )

Definition at line 17 of file gs_local.c.

Referenced by gs_aux().

#define gs_scatter_many_to_vec   PREFIXED_NAME(gs_scatter_many_to_vec)

Definition at line 20 of file gs_local.c.

Referenced by allreduce_exec(), cr_exec(), and pw_exec().

#define gs_scatter_vec   PREFIXED_NAME(gs_scatter_vec )

Definition at line 14 of file gs_local.c.

Referenced by allreduce_exec(), cr_exec(), gs_aux(), and pw_exec().

#define gs_scatter_vec_to_many   PREFIXED_NAME(gs_scatter_vec_to_many)

Definition at line 21 of file gs_local.c.

Referenced by allreduce_exec(), and cr_exec().

#define SWITCH_DOMAIN (   dom)
Value:
do switch(dom) { \
GS_FOR_EACH_DOMAIN(SWITCH_DOMAIN_CASE) case gs_dom_n: break; } while(0)
#define SWITCH_DOMAIN_CASE(T)
Definition: gs_local.c:176
const gs_dom dom
Definition: gs_test.c:15
#define GS_FOR_EACH_DOMAIN(macro)
Definition: gs_defs.h:18

Definition at line 177 of file gs_local.c.

Referenced by gs_gather(), gs_gather_array(), gs_gather_many(), gs_gather_vec(), gs_gather_vec_to_many(), gs_init(), gs_init_array(), gs_init_many(), gs_init_vec(), gs_scatter(), gs_scatter_many(), gs_scatter_many_to_vec(), and gs_scatter_vec_to_many().

#define SWITCH_DOMAIN_CASE (   T)    case gs_##T: WITH_DOMAIN(T); break;

Definition at line 176 of file gs_local.c.

#define SWITCH_OP (   T,
  op 
)
Value:
do switch(op) { \
GS_FOR_EACH_OP(T,SWITCH_OP_CASE) case gs_op_n: break; } while(0)
#define SWITCH_OP_CASE(T, OP)
Definition: gs_local.c:180
double T
Definition: gs_test.c:14
#define GS_FOR_EACH_OP(T, macro)
Definition: gs_defs.h:26

Definition at line 181 of file gs_local.c.

#define SWITCH_OP_CASE (   T,
  OP 
)    case gs_##OP: WITH_OP(T,OP); break;

Definition at line 180 of file gs_local.c.

#define WITH_DOMAIN (   T)    SWITCH_OP(T,op)
#define WITH_DOMAIN (   T)    init_array_##T(out,n,op)
#define WITH_DOMAIN (   T)    SWITCH_OP(T,op)
#define WITH_DOMAIN (   T)    scatter_##T(out,1,in,1,map)
#define WITH_DOMAIN (   T)    init_##T(out,map,op)
#define WITH_DOMAIN (   T)    SWITCH_OP(T,op)
#define WITH_DOMAIN (   T)    init_vec_##T(out,vn,map,op)
#define WITH_DOMAIN (   T)    SWITCH_OP(T,op)
#define WITH_DOMAIN (   T)    for(k=0;k<vn;++k) scatter_##T(p[k],1,q[k],1,map)
#define WITH_DOMAIN (   T)    for(k=0;k<vn;++k) init_##T(p[k],map,op)
#define WITH_DOMAIN (   T)    SWITCH_OP(T,op)
#define WITH_DOMAIN (   T)    for(i=vn;i;--i) scatter_##T((T*)p,vn,*q++,1,map), p+=unit_size
#define WITH_DOMAIN (   T)    for(i=vn;i;--i) scatter_##T(*p++,1,(const T*)q,vn,map), q+=unit_size
#define WITH_OP (   T,
  OP 
)    gather_array_##T##_##OP(out,in,n)
#define WITH_OP (   T,
  OP 
)    gather_##T##_##OP(out,in,1,map)
#define WITH_OP (   T,
  OP 
)    gather_vec_##T##_##OP(out,in,vn,map)
#define WITH_OP (   T,
  OP 
)    for(k=0;k<vn;++k) gather_##T##_##OP(p[k],q[k],1,map)
#define WITH_OP (   T,
  OP 
)    for(i=vn;i;--i) gather_##T##_##OP(*p++,(const T*)q,vn,map), q+=unit_size

Function Documentation

void gs_gather ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom,
gs_op  op 
)

Definition at line 206 of file gs_local.c.

References SWITCH_DOMAIN.

void gs_gather_array ( void *  out,
const void *  in,
uint  n,
gs_dom  dom,
gs_op  op 
)

Definition at line 187 of file gs_local.c.

References SWITCH_DOMAIN.

void gs_gather_many ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom,
gs_op  op 
)

Definition at line 256 of file gs_local.c.

References out, p, SWITCH_DOMAIN, and uint.

void gs_gather_vec ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom,
gs_op  op 
)

Definition at line 235 of file gs_local.c.

References SWITCH_DOMAIN.

void gs_gather_vec_to_many ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom,
gs_op  op 
)

Definition at line 295 of file gs_local.c.

References dom, i, out, p, and SWITCH_DOMAIN.

void gs_init ( void *  out,
const unsigned  vn,
const uint map,
gs_dom  dom,
gs_op  op 
)

Definition at line 224 of file gs_local.c.

References SWITCH_DOMAIN.

void gs_init_array ( void *  out,
uint  n,
gs_dom  dom,
gs_op  op 
)

Definition at line 196 of file gs_local.c.

References SWITCH_DOMAIN.

void gs_init_many ( void *  out,
const unsigned  vn,
const uint map,
gs_dom  dom,
gs_op  op 
)

Definition at line 280 of file gs_local.c.

References out, p, SWITCH_DOMAIN, and uint.

void gs_init_vec ( void *  out,
const unsigned  vn,
const uint map,
gs_dom  dom,
gs_op  op 
)

Definition at line 245 of file gs_local.c.

References SWITCH_DOMAIN.

void gs_scatter ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom 
)

Definition at line 216 of file gs_local.c.

References SWITCH_DOMAIN.

void gs_scatter_many ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom 
)

Definition at line 269 of file gs_local.c.

References out, p, SWITCH_DOMAIN, and uint.

void gs_scatter_many_to_vec ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom 
)

Definition at line 309 of file gs_local.c.

References dom, i, out, p, and SWITCH_DOMAIN.

void gs_scatter_vec ( void *restrict  out,
const void *restrict  in,
const unsigned  vn,
const uint *restrict  map,
gs_dom  dom 
)

Definition at line 132 of file gs_local.c.

References dom, i, and uint.

void gs_scatter_vec_to_many ( void *  out,
const void *  in,
const unsigned  vn,
const uint map,
gs_dom  dom 
)

Definition at line 321 of file gs_local.c.

References dom, i, out, p, and SWITCH_DOMAIN.