Skip to content
This repository has been archived by the owner on Apr 6, 2024. It is now read-only.
/ xorshiftplus Public archive

Archive of Sebastiano Vigna's xorshift+ and xorshift*

Notifications You must be signed in to change notification settings

jj1bdx/xorshiftplus

Repository files navigation

xorshift* / xorshift+

This directory contains the contents of xorshift-1.1.2.tgz.

(See http://xorshift.di.unimi.it/ for the original archive.)

For the licensing details, see each individual file.

README

This archive contains the files related to my papers "An experimental exploration of Marsaglia's xorshift generators, scrambled" and "Further scramblings of Marsaglia's xorshift generators". The data generated during the experiments is available as a separate download at http://xorshift.di.unimi.it/xorshift-data.tar.bz2.

  • The files triple64, triple1024 and triple4096 contains the triple giving a full period a state spaces of 64, 1024 and 4096 bits.

  • The directory data contains scripts eval-01.rb and eval-db.rb, which analyze the results of TestU01/Dieharder and print a succint report of the test results. For example,

      ./eval-01.rb test-xorshift64-small >xorshift64-small
    

    will produce data for SmallCrush on the xorshift64 generators.

    The script conj.sh can be used with xorshift data to get combined results for xorshift conjugate generators:

      ./conj.sh <xorshift64-small
    

    The script ./sum.sh can instead be used to add values from standard and reverse generators. For instance,

      ./eval-01.rb test-xorshift64star32-medium >xorshift64star32-medium
      ./eval-01.rb test-xorshift64star32-medium-rev >xorshift64star32-medium-rev
      ./sum.sh xorshift64star32-medium xorshift64star32-medium-rev >xorshift64star32-medium-comb
    
  • The directory scripts contains the scripts used to generate the results in data. This includes bash scripts used to run the tests and Ruby scripts used to generate the seeds. Each script is associated with the directory in data with the same name prefixed with test-. Note that some of the scripts include tests to limit parallel computations (so they should be adapted to your hardware), and some compute only a part of the data of the associated directory (e.g., because the computation was carried out for different generators on different machines). It is trivial to use the triple files to make the scripts compute all data.

  • In the the directory c for each GENERATOR you can find

    • GENERATOR.c : used to create the TestU01 and the stdout version.
    • GENERATOR-ed.c : computes equidistribution
    • GENERATOR-ez.c : computes the escape-from-zero statistics
    • GENERATOR-speed.c : measures speed

    compile.sh compiles all binaries, except for those computing equidistribution, as they require MTToolBox https://github.com/MSaito/MTToolBox/. The libraries associated with TestU01 must be installed and accessible (compile.sh assumes, however, that includes might be in /usr/local/include).

  • The directory full contains all that is necessary to compute full-period generators using Fermat http://home.bway.net/lewis/. This includes

    • the Java class XorShift, which computes directly the parameters for full period using matrix powers. You must modify the BITS constant and recompile the class.

    • the Java class XorShiftPoly, which outputs the Fermat code to check primitivity of irreducible polynomials without using large exponents. The number of bits is given as a command-line argument.

    • The Fermat code used to compute the characteristic polynomials associated to generators, and test their irreducibility. The Ruby scripts have been used to generate the associated Fermat code. The tests for primitivity must be generated by feeding to the script test.sh TAB-separated pairs <FILENAME,POLY>, where POLY is in Fermat output format; test.sh expects the number of bits as only argument. Grepping the output of test.sh for OK you can find the triples providing full period.

    • The file xorshift*poly.txt contain the characteristic polynomials associated with full-period generators, and their weight.

    This quite complicated setup is due to the difficult of working with predefined integers in Fermat, as at soon as one switches to Z/2 all known values become 0 or 1.

  • The directory dieharder contains a CHANGES file and an additional source by which you can get the modified version of Dieharder used to perform the tests, starting from Dieharder 3.31.1.

  • The directory equidist contains files describing the equidistribution score of each xorshift generator considered in the paper.

About

Archive of Sebastiano Vigna's xorshift+ and xorshift*

Resources

Code of conduct

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published