35#ifndef _REF_GEN_2_1_H_
36#define _REF_GEN_2_1_H_
45#ifndef __STDC_CONSTANT_MACROS
46#define __STDC_CONSTANT_MACROS
48#ifndef __STDC_LIMIT_MACROS
49#define __STDC_LIMIT_MACROS
63#include "graph500/generator/graph_generator.h"
64#include "graph500/generator/utils.h"
73#define INITIATOR_A_NUMERATOR 5700
74#define INITIATOR_BC_NUMERATOR 1900
75#define INITIATOR_DENOMINATOR 10000
84#define SPK_NOISE_LEVEL 0
95 seed[0] = (
userseed & 0x3FFFFFFF) + 1;
96 seed[1] = ((
userseed >> 30) & 0x3FFFFFFF) + 1;
97 seed[2] = (
userseed & 0x3FFFFFFF) + 1;
98 seed[3] = ((
userseed >> 30) & 0x3FFFFFFF) + 1;
114 #if SPK_NOISE_LEVEL == 0
125 #if SPK_NOISE_LEVEL == 0
138 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
139 #define USE_GCC_BYTESWAP
142 #ifdef FAST_64BIT_ARITHMETIC
145 #ifdef USE_GCC_BYTESWAP
148 x = (
x >> 32) | (
x << 32);
149 x = ((
x >> 16) &
UINT64_C(0x0000FFFF0000FFFF)) | ((
x &
UINT64_C(0x0000FFFF0000FFFF)) << 16);
162 #ifdef USE_GCC_BYTESWAP
166 h = (
h >> 16) | (
h << 16);
167 l = (
l >> 16) | (
l << 16);
254 #pragma omp parallel for
313 if (
errno) seed = -1;
316 if (seed < 0) seed = 0xDECAFBAD;
static mrg_state MakeScrambleValues(uint64_t &val0, uint64_t &val1, const uint_fast32_t seed[])
static void generate_kronecker_range(const uint_fast32_t seed[5], int logN, int64_t start_edge, int64_t end_edge, packed_edge *edges)
static long init_random()
static void make_mrg_seed_short(uint64_t userseed, uint_fast32_t *seed)
static int generate_4way_bernoulli(mrg_state *st, int level, int nlevels)
static int64_t scramble(int64_t v0, int lgN, uint64_t val0, uint64_t val1)
static void compute_edge_range(int rank, int size, int64_t M, int64_t *start_idx, int64_t *end_idx)
static void make_one_edge(int64_t nverts, int level, int lgN, mrg_state *st, packed_edge *result, uint64_t val0, uint64_t val1)
static uint64_t bitreverse(uint64_t x)
static void make_graph(int log_numverts, int64_t M, int64_t *nedges_ptr, packed_edge **result_ptr, MPI_Comm &world)
#define INITIATOR_BC_NUMERATOR
#define INITIATOR_A_NUMERATOR
#define INITIATOR_DENOMINATOR
double limit(double x, double bound)
void mrg_seed(mrg_state *st, const uint_fast32_t seed[5])
void mrg_skip(mrg_state *state, uint_least64_t exponent_high, uint_least64_t exponent_middle, uint_least64_t exponent_low)
uint_fast32_t mrg_get_uint_orig(mrg_state *state)
void make_mrg_seed(uint64_t userseed1, uint64_t userseed2, uint_fast32_t *seed)
unsigned __int64 uint64_t