1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
Description: Use Debian packaged libsprng
Author: Andreas Tille <tille@debian.org>
Last-Update: Mon, 08 Jul 2019 16:47:12 +0200
ATTENTION: Please double check the change in src/util.c.
The Debian packaged sprng seems to have a different
interface for init_sprng (quoting from CHANGES.TEXT):
Changes in Version 2.0
----------------------
Using the previous version of SPRNG, a user can use only one of the
SPRNG generators in one run of the program. The objective of the new
version is to combine the current random number generators (RNGs) into
a single library so that a user can use all of them in a single program
at a same time.
The user now is able to and needs to specify the type of RNG when a
random number stream is initialized. We add one integer argument
rng_type to the front of the argument list of the function init_sprng.
int *init_sprng(int rng_type,
int stream_number, int nstreams, int seed, int rng_parameter)
SPRNG_POINTER init_sprng(integer rng_type,
integer streamnum, integer nstreams,
integer seed, integer param)
User can sprcify one of the follows for rng_type:
SPRNG_LFG
SPRNG_LCG
SPRNG_LCG64
SPRNG_CMRG
SPRNG_MLFG
SPRNG_PMLCG
The following macros are added to sprng.h and sprng_f.h:
#define SPRNG_LFG 0
#define SPRNG_LCG 1
#define SPRNG_LCG64 2
#define SPRNG_CMRG 3
#define SPRNG_MLFG 4
#define SPRNG_PMLCG 5
For simple interface, a user can only have one random number stream at
one time since he doesn't specify stream ID.
The default generator is "SPRNG_LFG".
User still can change RNG at runtime by calling init_sprng:
int *init_sprng(int rng_type,
int seed, int rng_parameter)
SPRNG_POINTER init_sprng(integer rng_type,
integer seed, integer param)
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -15,7 +15,7 @@
# ($Id$)
#
-SUBDIRS = sprng
+# SUBDIRS = sprng
bin_PROGRAMS = puzzle @PPUZZLE@
EXTRA_PROGRAMS = ppuzzle
EXTRA_DIST = \
@@ -30,8 +30,8 @@ EXTRA_DIST = \
#SPRNG_OBJ = makeseed.$(OBJEXT) store.$(OBJEXT) memory.$(OBJEXT) checkid.$(OBJEXT) lcg64.$(OBJEXT) primes-lcg64.$(OBJEXT)
#SPRNG_DIR_OBJ = sprng/makeseed.$(OBJEXT) sprng/store.$(OBJEXT) sprng/memory.$(OBJEXT) sprng/checkid.$(OBJEXT) sprng/lcg64.$(OBJEXT) sprng/primes-lcg64.$(OBJEXT)
### MLFG - multiplicative lagged Fibonacci generator
-SPRNG_OBJ = mlfg.$(OBJEXT) makeseed.$(OBJEXT) memory.$(OBJEXT) checkid.$(OBJEXT) store.$(OBJEXT)
-SPRNG_DIR_OBJ = sprng/mlfg.$(OBJEXT) sprng/makeseed.$(OBJEXT) sprng/memory.$(OBJEXT) sprng/checkid.$(OBJEXT) sprng/store.$(OBJEXT)
+# SPRNG_OBJ = mlfg.$(OBJEXT) makeseed.$(OBJEXT) memory.$(OBJEXT) checkid.$(OBJEXT) store.$(OBJEXT)
+# SPRNG_DIR_OBJ = sprng/mlfg.$(OBJEXT) sprng/makeseed.$(OBJEXT) sprng/memory.$(OBJEXT) sprng/checkid.$(OBJEXT) sprng/store.$(OBJEXT)
#SPRNG_OBJ = sprng/makeseed.$(OBJEXT) sprng/store.$(OBJEXT) sprng/memory.$(OBJEXT) sprng/checkid.$(OBJEXT) sprng/lcg64.$(OBJEXT) sprng/primes-lcg64.$(OBJEXT)
@@ -49,13 +49,13 @@ SPRNG_DIR_OBJ = sprng/mlfg.$(OBJEXT) spr
puzzle_SOURCES = gamma.c ml1.c ml2.c mlparam.c model1.c model2.c puzzle1.c puzzle2.c pstep.c util.c consensus.c treesort.c treetest.c ml.h util.h puzzle.h pstep.h gamma.h consensus.h treesort.h treetest.h
#puzzle_LDADD = sgamma.o sml1.o sml2.o smlparam.o smodel1.o smodel2.o spuzzle1.o spuzzle2.o spstep.o sutil.o sconsensus.o streesort.o sprng/liblcg64.a
-puzzle_LDADD = sgamma.$(OBJEXT) sml1.$(OBJEXT) sml2.$(OBJEXT) smlparam.$(OBJEXT) smodel1.$(OBJEXT) smodel2.$(OBJEXT) spuzzle1.$(OBJEXT) spuzzle2.$(OBJEXT) spstep.$(OBJEXT) sutil.$(OBJEXT) sconsensus.$(OBJEXT) streesort.$(OBJEXT) streetest.$(OBJEXT)
+puzzle_LDADD = sgamma.$(OBJEXT) sml1.$(OBJEXT) sml2.$(OBJEXT) smlparam.$(OBJEXT) smodel1.$(OBJEXT) smodel2.$(OBJEXT) spuzzle1.$(OBJEXT) spuzzle2.$(OBJEXT) spstep.$(OBJEXT) sutil.$(OBJEXT) sconsensus.$(OBJEXT) streesort.$(OBJEXT) streetest.$(OBJEXT)
-TPINCLUDES = -I. -I.. -I$(srcdir) -I$(srcdir)/sprng
+TPINCLUDES = -I. -I.. -I$(srcdir) -I/usr/include/sprng
SDEFS =
SCFLAGS =
SLDFLAGS =
-SLDLIBS = @LIBS@
+SLDLIBS = -lsprng @LIBS@
SCOMPILE = $(CC) $(SDEFS) $(DEFS) $(TPINCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(SCFLAGS) $(CFLAGS)
SCCLD = $(CC)
@@ -68,7 +68,7 @@ PCC = @MPICC@
PDEFS = -DPARALLEL
PCFLAGS =
PLDFLAGS =
-PLDLIBS = @LIBS@ @MPILIBS@
+PLDLIBS = -lsprng @LIBS@ @MPILIBS@
PCOMPILE = $(PCC) $(PDEFS) $(DEFS) $(TPINCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(PCFLAGS) $(CFLAGS)
PCCLD = $(PCC)
@@ -76,7 +76,7 @@ PLINK = $(PCCLD) $(AM_CFLAGS) $(PCFLAGS)
make-sprng-objs:
- cd sprng && $(MAKE) $(SPRNG_OBJ)
+ echo "Use Debian packaged libsprng2."
puzzle$(EXEEXT): $(puzzle_LDADD) $(puzzle_SOURCES) make-sprng-objs Makefile
--- a/configure.ac
+++ b/configure.ac
@@ -179,6 +179,6 @@ dnl AC_CHECK_FUNCS(xdrstdio_create)
dnl AC_CHECK_FUNCS(xdr_destroy)
dnl AC_CHECK_FUNCS(xdr_inline)
-AC_CONFIG_FILES([Makefile src/Makefile src/sprng/Makefile doc/Makefile data/Makefile tests/Makefile])
+AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile data/Makefile tests/Makefile])
dnl AC_CONFIG_FILES([Makefile src/Makefile src/sprng/Makefile doc/Makefile doc/fig/Makefile data/Makefile tests/Makefile])
AC_OUTPUT
--- a/src/util.c
+++ b/src/util.c
@@ -626,7 +626,7 @@ int initrandom(int seed)
# ifndef PARALLEL
fprintf(STDOUT,"Using SPRNG -- Scalable Parallel Random Number Generator\n");
fflush(STDOUT);
- randstream = init_sprng(0,1,seed,SPRNG_DEFAULT); /*init stream*/
+ randstream = init_sprng(SPRNG_LFG, 0,1,seed,SPRNG_DEFAULT); /*init stream*/
# ifdef RANDVERBOSE1
fprintf(STDOUT, "!!! random seed set to %d !!!\n", seed);
@@ -639,7 +639,7 @@ int initrandom(int seed)
fflush(STDOUT);
}
/* MPI_Bcast(&seed, 1, MPI_UNSIGNED, PP_MyMaster, MPI_COMM_WORLD); */
- randstream = init_sprng(PP_Myid,PP_NumProcs,seed,SPRNG_DEFAULT); /*initialize stream*/
+ randstream = init_sprng(SPRNG_LFG, PP_Myid,PP_NumProcs,seed,SPRNG_DEFAULT); /*initialize stream*/
# ifdef RANDVERBOSE1
fprintf(STDOUT, "(%2d) !!! random seed set to %d !!!\n", PP_Myid, seed);
fprintf(STDOUT, " Printing information about new stream\n");
|