Galois
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SyncStructures.h File Reference

Contains macros for easily defining common Galois sync structures and the field flags class used for on-demand synchronization. More...

#include <cstdint>
#include <galois/AtomicHelpers.h>
#include <galois/runtime/DataCommMode.h>
#include <galois/gIO.h>

Go to the source code of this file.

Classes

class  galois::runtime::FieldFlags
 Each field has a FieldFlags object that indicates synchronization status of that field. More...
 

Namespaces

 galois
 The Galois namespace containing all Galois structures and functions.
 
 galois::runtime
 Internal Galois functionality - Use at your own risk.
 

Macros

#define GALOIS_SYNC_STRUCTURE_ADD_EDGES(fieldtype)
 
#define GALOIS_SYNC_STRUCTURE_BITSET_EDGES
 Sync structure for dynamic bitsets, edges. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_ADD(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a sum reduction. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_ADD_ARRAY(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a sum reduction on a field that is represented by an array. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_SET(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a set as a reduction. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_SET_ARRAY(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a set as a reduction on a field represented by an array. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_MIN(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a min reduction. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_MAX(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a max reduction. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_MIN_ARRAY(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a pairwise min reduction on an array. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_PAIR_WISE_AVG_ARRAY(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a pairwise average on an array. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_PAIR_WISE_ADD_ARRAY(fieldname, fieldtype)
 Creates a Galois reduction sync structure that does a pairwise sum reduction on an array. More...
 
#define GALOIS_SYNC_STRUCTURE_REDUCE_PAIR_WISE_ADD_ARRAY_SINGLE(fieldname,fieldtype)
 Creates a Galois reduction sync structure that does a pairwise sum reduction on an array on a SINGLE element. More...
 
#define GALOIS_SYNC_STRUCTURE_BITSET(fieldname)
 Sync structure for dynamic bitsets. More...
 
#define GALOIS_SYNC_STRUCTURE_VECTOR_BITSET(fieldname)
 Sync structure for a vector of dynamic bitsets. More...
 

Enumerations

enum  galois::runtime::BITVECTOR_STATUS { galois::runtime::NONE_INVALID, galois::runtime::SRC_INVALID, galois::runtime::DST_INVALID, galois::runtime::BOTH_INVALID }
 Bitvector status enum specifying validness of certain things in bitvector. More...
 

Functions

bool galois::runtime::src_invalid (BITVECTOR_STATUS bv_flag)
 Return true if the sources are invalid in bitvector flag. More...
 
bool galois::runtime::dst_invalid (BITVECTOR_STATUS bv_flag)
 Return true if the destinations are invalid in bitvector flag. More...
 
void galois::runtime::make_src_invalid (BITVECTOR_STATUS *bv_flag)
 Marks sources invalid on passed in bitvector flag. More...
 
void galois::runtime::make_dst_invalid (BITVECTOR_STATUS *bv_flag)
 Marks destinations invalid on passed in bitvector flag. More...
 

Detailed Description

Contains macros for easily defining common Galois sync structures and the field flags class used for on-demand synchronization.

Macro Definition Documentation

#define GALOIS_SYNC_STRUCTURE_ADD_EDGES (   fieldtype)
#define GALOIS_SYNC_STRUCTURE_BITSET (   fieldname)
Value:
struct Bitset_##fieldname { \
static constexpr bool is_vector_bitset() { return false; } \
\
static constexpr bool is_valid() { return true; } \
\
static galois::DynamicBitSet& get() { return bitset_##fieldname; } \
\
static void reset_range(size_t begin, size_t end) { \
bitset_##fieldname.reset(begin, end); \
} \
}
Concurrent dynamically allocated bitset.
Definition: libgalois/include/galois/DynamicBitset.h:47
void reset()
Gets the space taken by the bitset.
Definition: libgalois/include/galois/DynamicBitset.h:110

Sync structure for dynamic bitsets.

Bitsets are expected to have the following naming scheme: bitset_<fieldname>

In addition, you will have to declare and appropriately resize the bitset in your main program as well as set the bitset appropriately (i.e. when you do a write to a particular node).

#define GALOIS_SYNC_STRUCTURE_BITSET_EDGES
Value:
struct Bitset_edges { \
static constexpr bool is_vector_bitset() { return false; } \
\
static constexpr bool is_valid() { return true; } \
\
static galois::DynamicBitSet& get() { return bitset_edges; } \
\
static void reset_range(size_t begin, size_t end) { \
bitset_edges.reset(begin, end); \
} \
}
Concurrent dynamically allocated bitset.
Definition: libgalois/include/galois/DynamicBitset.h:47
void reset()
Gets the space taken by the bitset.
Definition: libgalois/include/galois/DynamicBitset.h:110

Sync structure for dynamic bitsets, edges.

Bitsets are expected to have the following naming scheme: bitset_edges

In addition, you will have to declare and appropriately resize the bitset in your main program as well as set the bitset appropriately (i.e. when you do a write to a particular node).

#define GALOIS_SYNC_STRUCTURE_REDUCE_ADD (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a sum reduction.

#define GALOIS_SYNC_STRUCTURE_REDUCE_ADD_ARRAY (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a sum reduction on a field that is represented by an array.

#define GALOIS_SYNC_STRUCTURE_REDUCE_MAX (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a max reduction.

#define GALOIS_SYNC_STRUCTURE_REDUCE_MIN (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a min reduction.

#define GALOIS_SYNC_STRUCTURE_REDUCE_MIN_ARRAY (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a pairwise min reduction on an array.

#define GALOIS_SYNC_STRUCTURE_REDUCE_PAIR_WISE_ADD_ARRAY (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a pairwise sum reduction on an array.

#define GALOIS_SYNC_STRUCTURE_REDUCE_PAIR_WISE_ADD_ARRAY_SINGLE (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a pairwise sum reduction on an array on a SINGLE element.

#define GALOIS_SYNC_STRUCTURE_REDUCE_PAIR_WISE_AVG_ARRAY (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a pairwise average on an array.

#define GALOIS_SYNC_STRUCTURE_REDUCE_SET (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a set as a reduction.

#define GALOIS_SYNC_STRUCTURE_REDUCE_SET_ARRAY (   fieldname,
  fieldtype 
)

Creates a Galois reduction sync structure that does a set as a reduction on a field represented by an array.

#define GALOIS_SYNC_STRUCTURE_VECTOR_BITSET (   fieldname)
Value:
struct Bitset_##fieldname { \
static unsigned numBitsets() { return vbitset_##fieldname.size(); } \
\
static constexpr bool is_vector_bitset() { return true; } \
\
static constexpr bool is_valid() { return true; } \
\
static galois::DynamicBitSet& get(unsigned i) { \
return vbitset_##fieldname[i]; \
} \
\
static void reset_range(size_t begin, size_t end) { \
for (unsigned i = 0; i < vbitset_##fieldname.size(); i++) { \
vbitset_##fieldname[i].reset(begin, end); \
} \
} \
}
Concurrent dynamically allocated bitset.
Definition: libgalois/include/galois/DynamicBitset.h:47
void reset()
Gets the space taken by the bitset.
Definition: libgalois/include/galois/DynamicBitset.h:110

Sync structure for a vector of dynamic bitsets.

Function signatures allow indexing into this vector to get the correct bitset

Bitsets are expected to have the following naming scheme: bitset_<fieldname>

In addition, you will have to declare and appropriately resize the bitset in your main program as well as set the bitset appropriately (i.e. when you do a write to a particular node).