random123

Counter-based Random Number Generators
git clone git://git.meso-star.com/random123.git
Log | Files | Refs | README | LICENSE

releasenotes.dox (10727B)


      1 /**
      2 @page "Release Notes"
      3 <dl>
      4 <dt>1.14.0 - Jan 29, 2021 </dt>
      5 <dd><ul>
      6 <li> Correctly identify newer versions (16+) of IBM's XL compiler
      7 <li> Better support for MS Visual Studio 2015 (and hopefully later)
      8 <li> Allow compilation on s390x.
      9 <li> Don't use arrays internally in the threefry implementations.
     10      This seems to avoid register spills when compiled with icc, and
     11      has no apparent effect on gcc's code generation.
     12 <li> Remove error-prone code to discover CPU clockspeed.  Don't report cpB in timing tests.
     13 <li> Remove error-prone code to "clean" device names and parse hex float strings.
     14 <li> Suppress some warnings from gcc10:
     15           - don't use size_t if stddef hasn't been included
     16           - declare default copy-assignment and move-assignment operators in Engine.
     17 <li> CUDA should work better with non-gcc host compilers now.
     18 <li> Use currently recommended compile-time options to build with Metal.
     19 <li> Support clang on powerpc.
     20 </ul></dd>
     21 
     22 <dt>1.13 - Mar 22, 2019 </dt>
     23 <dd><ul>
     24 <li>       Don't try to declare reverse iterators for r123array in cuda.
     25 <li>       Add support for Apple's Metal Shading Language (2.1) - contributed by Tom Schoonjans.
     26            - Implementation of 32-bit threefry and philox.
     27            - metalfeatures.h, plus new macros in compilerfeatures.h,
     28              used in threefry.h, philox.h and kat infrastructure.
     29 	   - tests/kat_metal and examples/pi_metal.
     30 <li>       Small tweaks to silence warnings from newer gcc, clang, cuda and opencl.
     31 <li>       Cosmetic changes to doxygen markup, including fixes to work with newer releases of doxygen.
     32 </ul></dd>
     33 
     34 <dt>1.12 - not publicly released</dt>
     35 <dd>
     36 </dd>
     37 
     38 <dt>1.11 - Mar 30, 2017 (not publicly released)</dt>
     39 <dd><ul>
     40 <li>       Changes to conventional/Engine.hpp:
     41            - The sequence of generated randoms is unchanged.
     42            - shrink the memory footprint by not keeping a copy of the ukey in the Engine and storing the 'elem' counter in v.back().
     43            - insertion and extraction operators have changed incompatibly.  I.e.,
     44            engines serialized with 1.10 or earlier cannot be deserialized
     45            with 1.11, and vice versa.
     46            - getkey returns a key_type and setkey takes a key_type.
     47            - when ukey_type is not the same as key_type, provide a constructor
     48              and a seed method that takes a const key_type& argument.
     49            - the getseed method is eliminated.
     50 <li>       Move uniform.hpp, boxmuller.hpp and u01fixedpt.h into
     51            include/Random123.  I.e., make them available in exactly
     52            the same way as threefry.h, et al.  It is no longer necessary
     53            to copy them from the examples directory to user code.
     54 <li>       Incorporate ua.hpp into uniform.hpp.
     55 <li>       Provide insertion, extraction and comparison operators to the
     56            aesopenssl16x8_key_t and aesni1xm128_key_t.
     57 <li>       Separate tests and benchmarks (which are absurdly complicated)
     58            from examples (which are meant to be short and simple) in
     59            the source tree.  We still test and time the same things, but all
     60            that code is in tests/, while the code remaining in examples/
     61            really tries to be exemplary. 
     62 <li>       More careful use cl_uint and elimination of uint from opencl code.
     63 <li>       Better (but not reliable) support for OpenCL on MacOS.
     64 <li>       Fix documentation for examples/uniform.hpp.
     65 </ul></dd>
     66 
     67 <dt>1.10 - Apr 12, 2016 </dt>
     68 <dd><ul>
     69 <li>       R123EXAMPLE_ENVCONF_SEED environment variable provides seed to most pi_* examples
     70 <li>       R123EXAMPLE_ENVCONF_CUDA_DEVICE and R123EXAMPLE_ENVCONF_OPENCL_DEVICE allow selection of non-default
     71                GPUs, e.g. R123EXAMPLE_ENVCONF_CUDA_DEVICE=980&nbsp;pi_cuda
     72                or R123EXAMPLE_ENVCONF_OPENCL_DEVICE=680&nbsp;pi_opencl
     73 <li>       Updated hardcoded device core detection with newer GPUs (Kepler, Maxwell)
     74            and changed default cores from 1 to 384 to run more sensible number of
     75            iterations on unrecognized devices.
     76 <li>       moved lots of arbitrary, funny, irrelevant constants into example_seeds.h so that they do
     77            not confuse the punters.
     78 <li>       Tested on ARMv7 (32bit) and `ARM A53 (64bit) with Freescale/Linaro toolchain gcc 4.8.
     79            Needed workaround for -O3 compiler bug on ARMv7.
     80 </ul></dd>
     81 <dt>1.09 - Mar 6, 2016 </dt>
     82 <dd><ul>
     83 <li> add \#define R123_USE_U01_DOUBLE to u10fixedpt.h
     84 <li> fix definition of const char *srcstr[] in util_opencl.h
     85 <li> improve nvccfeatures.h so that 64-bit philox can be used
     86 both on the host and on the cuda device.
     87 <li> add _Pragmas so R123_STATIC_ASSERT doesn't warn with clang-3.6.
     88 <li> boxmuller.hpp doesn't look for sincos when __APPLE__ is true.
     89 </ul></dd>
     90 <dt>1.08 - Aug 20, 2013 </dt>
     91 <dd><ul>
     92 <li> Fix a bug in threefry2xW whereby rotation constants were
     93 chosen incorrectly after the 20th round.  There is no reason to
     94 suspect that the incorrectly chosen rotation constants were "bad"
     95 or "deficient" so there is no reason to suspect the quality of the
     96 random numbers produced.  Using threefry with R>20 would have been
     97 rare in any case.  The fix simply makes the implementation correspond 
     98 correctly to the description in the paper.
     99 <li> Add examples/uniform.hpp, examples/boxmuller.hpp and
    100      examples/ua.hpp, containing example code to generate uniformly
    101      and gaussian distributed floats and doubles.  Also add unit tests
    102      (ut_uniform.cpp, ut_uniform_IEEEkat.cpp) and timing harnesses
    103      (time_boxmuller.cpp and time_boxmuller_cuda.cpp).
    104 <li> overhaul u01_closed_closed and u01_open_open so they produce
    105      equally spaced/probable values except for endpoints.
    106 <li> Demote u01.h from the include/Random123/ to examples/ufixed01.h, but
    107      examples/uniform.hpp is preferred.
    108 <li> Add kat_vectors for threefry2xW_32 and threefry4xW_72, i.e., the
    109 largest number of supported rounds in each case.
    110 <li> Mention ukey on the first page of docs.
    111 <li> Fix typos in documentation and comments and in gccfeatures.h.
    112 <li> Don't \#include &lt;x86intrin.h&gt; unless (defined(__x86_64__)||defined(__i386__)).
    113 <li> Use __clang__ rather than __llvm__ in the predicate that decides whether to
    114      include clangfeatures.h.
    115 <li> Add support for Portland Group compilers.
    116 <li> Add support for gcc and IBM XL compilers on powerpc64, e.g. BlueGene/Q.
    117 <li> Port to PPC. (BG/L)
    118 <li> Refuse to build with CUDA before 4.1 to avoid namespace bug.
    119 <li> Update/fix core count hackery NVIDIA Tesla K20c
    120 </ul></dd>
    121 
    122 <dt>1.07 - Nov 7, 2012 </dt>
    123 <dd><ul>
    124 <li> Provide const static data members:  _Min and _Max in Engine and MicroURNG, which
    125 work around a non-standard requirement imposed by the MacOS Xcode 4.5.2 &lt;random&gt; library.
    126 <li> Fine-grained test macros for specific features of C++11 rather than
    127 an all-or-none USE_CXX0X macro.  Features tested:
    128 constexpr, unrestricted unions, explicit conversions, &lt;random&gt; and &lt;type_traits&gt;.
    129 <li> Declare max() and min() methods with the R123_CONSTEXPR attribute
    130 in Engine and MicroURNG.
    131 <li> Improved clang support
    132 <li> Works with Solaris Sun CC now (requires -library=stlport4)
    133 <li> NVIDIA GTX6x0 should report correct core count
    134 <li> ut_features prints the list of features that compile on the build platform
    135 <li> Compiles cleanly with -Wall -Wextra (implying -Wunused-parameter -Wsign-compare)
    136 </ul></dd>
    137 
    138 <dt>1.06 - Apr 5, 2012 </dt>
    139 <dd><ul>
    140 <li> Added a known answer test for the u01 functions (kat_u01).
    141 <li> Defend headers against possible max and min macros in "system" header files.
    142 </ul></dd>
    143 
    144 <dt>1.05 - Mar 20, 2012 </dt><dd>
    145 <ul><li>
    146 MicroURNG and GSL_MICROURNG no longer give the programmer control
    147 over the number bits in the internal counter via a template or macro argument.
    148 Such flexibility is too easy to misuse, with the possible consequence
    149 of repeating random values.  Now, all MicroURNGs have a period in
    150 excess of 2^32, and MicroURNG&lt;CBRNG&gt;(c1, k1)
    151 and MicroURNG&lt;CBRNG&gt;(c2, k2) "collide" if and only if c1==c2 and k1==k2.</li>
    152 <li>Added &lt;Random123/u01.h&gt; header file with static functions for conversion
    153 of integers to uniformly distributed floating point values.</li>
    154 <li>Make operator&lt;&lt;(ostream&amp;, const r123array&amp;) and operator&gt;&gt;(ostream&amp;, r123array&amp;)
    155 inline.  This should work around ODR violations when the header files are
    156 included in more than one file in a project.</li>
    157 <li>Recognize that icpc has an _mm_set_epi64x intrinsic as of version 12.1.</li>
    158 <li>The gsl adapters always return 32-bits of random data, regardless of the
    159 width of counter type.</li>
    160 <li>Works around lack of anonymous enums in Intel OpenCL 1.5</li>
    161 <li>gencl.sh works on MacOS and systems with "classic" BSD indent.</li>
    162 <li>Tests run on AMD Radeon 7970 (Tahiti).</li>
    163 </ul>
    164 
    165 </dd>
    166 
    167 <dt>1.04 - Dec 5, 2011</dt><dd>
    168 <ul><li>
    169 new kat_vectors - there are now three tests for each tested generator: gen(ctr=0, key=0), gen(ctr=fff, key=0xfff),
    170     and gen(ctr=digits-of-pi, key=more-digits-of-pi).  There are fewer tests overall, but they provide
    171     better coverage, especially of non-zero keys.</li>
    172 </ul>
    173 </dd>
    174 
    175 <dt>1.03 - Nov 30, 2011</dt><dd>
    176 <ul>
    177 <li> overhaul known answer tests (kat)
    178    <ul>
    179    <li> common source for serial C, C++, cuda and opencl replaces katc and katpp </li>
    180    <li> add missing kat_vectors for threefry2x32 </li>
    181    </ul></li>
    182 <li> make keyinit functions device/kernel functions in CUDA/OpenCL </li>
    183 <li> replace r123array::assemble methods with r123array::seed(SeedSeq) template </li>
    184 <li> cleanup of signatures of Engine and MicroURNG methods: 
    185    <ul>
    186       <li> Engine(ukey_type&amp;) and MicroURNG(ctr_type, ukey_type) constructors.</li>
    187       <li> Engine(SeedSeq&amp;) takes a reference argument, and, when C++0x &lt;type_traits&gt;
    188            are available the SeedSeq templates don't participate in "surprising" overloads. </li>
    189    </ul>
    190 </li>
    191 </ul>
    192 </dd>
    193 
    194 <dt>1.02 - Nov 21, 2011</dt><dd>
    195 <ul>
    196 <li>
    197 <b> BUG FIXED </b> in threefry2xW_R(R&lt;20, ...).  Earlier implementations of
    198 threefry2x32_R and threfry2x64_R produced incorrect
    199 results when called with the number of rounds less than 20.
    200 The bug caused extra work to be done in every call, possibly resulting in <i>more</i>
    201 mixing than the correct implementation delivers.  Both old (buggy, more mixing) and new (bug-fixed, less mixing)
    202 implementations have been rechecked and are fully "Crush-Resistant". </li>
    203 <li>worked around problems with argument marshalling in version 2.4 of the AMDAPPSDK OpenCL implementation</li>
    204 </ul>
    205 </dd>
    206 
    207 <dt>1.01 - Nov 11, 2011</dt><dd>
    208 <ul>
    209 <li>allow the user to define __STDC_CONSTANT_MACROS</li>
    210 <li>allow r123arrayNxW::incr(larger_than_largest_value_type)</li>
    211 </ul>
    212 
    213 <dt>1.00 - Sep 26, 2011</dt><dd>Initial release</dd>
    214 </dl>
    215 */