mtgp64-fast.h File Reference

Mersenne Twister for Graphic Processors (mtgp64), which generates 64-bit unsigned integers and double precision floating point numbers based on IEEE 754 format. More...

#include <string.h>
#include <assert.h>
#include <stdio.h>
#include <stdint.h>

Go to the source code of this file.

Data Structures

struct  MTGP64_PARAMS_FAST_T
 MTGP64 parameters. More...
struct  MTGP64_STATUS_FAST_T
 MTGP64 internal state array. More...
struct  MTGP64_FAST_T

Typedefs

typedef struct MTGP64_PARAMS_FAST_T mtgp64_params_fast_t
typedef struct MTGP64_STATUS_FAST_T mtgp64_status_fast_t
typedef struct MTGP64_FAST_T mtgp64_fast_t

Functions

int mtgp64_init (mtgp64_fast_t *mtgp64, const mtgp64_params_fast_t *para, uint64_t seed)
 This function allocates and initializes the internal state array with a 64-bit integer seed.
void mtgp64_init_state (uint64_t array[], const mtgp64_params_fast_t *para, uint64_t seed)
 This function initializes the internal state array with a 64-bit integer seed.
int mtgp64_init_by_array (mtgp64_fast_t *mtgp64, const mtgp64_params_fast_t *para, uint64_t *array, int length)
 This function allocates and initializes the internal state array with a 64-bit integer array.
int mtgp64_init_by_str (mtgp64_fast_t *mtgp64, const mtgp64_params_fast_t *para, char *str)
 This function allocates and initializes the internal state array with a character array.
void mtgp64_free (mtgp64_fast_t *mtgp64)
 This releases the memory allocated by mtgp64_init(), mtgp64_init_by_array(), mtgp64_init_by_str().
void mtgp64_print_idstring (const mtgp64_fast_t *mtgp64, FILE *fp)
 This function prints the Mersenne exponent and SHA1 of characteristic polynomial of generators state transition function.
static void mtgp64_do_recursion (uint64_t *r, uint64_t x1, uint64_t x2, uint64_t y, int sh1, int sh2, uint64_t mask, uint64_t tbl[16])
 This is a recursion formula of the generator.
static void mtgp64_next_state (mtgp64_fast_t *mtgp64)
 The state transition function.
static uint64_t mtgp64_genrand_uint64 (mtgp64_fast_t *mtgp64)
 This function generates and returns 64-bit unsigned integer.
static double mtgp64_genrand_close1_open2 (mtgp64_fast_t *mtgp64)
 This function generates and returns double precision pseudorandom number which distributes uniformly in the range [1, 2).
static double mtgp64_genrand_close_open (mtgp64_fast_t *mtgp64)
 This function generates and returns double precision pseudorandom number which distributes uniformly in the range [0, 1).
static double mtgp64_genrand_open_close (mtgp64_fast_t *mtgp64)
 This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1].
static double mtgp64_genrand_open_open (mtgp64_fast_t *mtgp64)
 This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1).
static uint64_t mtgp64_temper (const uint64_t tmp_tbl[16], uint64_t r, uint64_t t)
 The tempering function.
static double mtgp64_temper_double (const uint64_t dbl_tmp_tbl[16], uint64_t r, uint64_t t)
 The tempering and converting function.
static double mtgp64_temper_double_open (const uint64_t dbl_tmp_tbl[16], uint64_t r, uint64_t t)
 The tempering and converting function for generating floating point number f (0 < f < 1).

Variables

mtgp64_params_fast_t mtgp64_params_fast_23209 [128]
 parameter constants tables for MEXP=23209.
mtgp64_params_fast_t mtgp64_params_fast_44497 [128]
 parameter constants tables for MEXP=44497.
mtgp64_params_fast_t mtgp64_params_fast_110503 [128]
 parameter constants tables for MEXP=110503.


Detailed Description

Mersenne Twister for Graphic Processors (mtgp64), which generates 64-bit unsigned integers and double precision floating point numbers based on IEEE 754 format.

Author:
Mutsuo Saito (Hiroshima University)

Makoto Matsumoto (Hiroshima University)

Copyright (C) 2009 Mutsuo Saito, Makoto Matsumoto and Hiroshima University. All rights reserved.

The new BSD License is applied to this software, see LICENSE.txt


Typedef Documentation

typedef struct MTGP64_FAST_T mtgp64_fast_t


Function Documentation

static void mtgp64_do_recursion ( uint64_t *  r,
uint64_t  x1,
uint64_t  x2,
uint64_t  y,
int  sh1,
int  sh2,
uint64_t  mask,
uint64_t  tbl[16] 
) [inline, static]

This is a recursion formula of the generator.

MTGP64 is a 64-bit generator, but using 32-bit operations to fit to graphic processors.

Parameters:
[out] r output
[in] x1 the farthest part of state array.
[in] x2 the second farthest part of state array.
[in] y a part of state array.
[in] sh1 the shift parameter 1.
[in] sh2 the shift parameter 2.
[in] mask the bit mask parameter.
[in] tbl the matrix parameter.

Referenced by mtgp64_next_state().

void mtgp64_free ( mtgp64_fast_t mtgp64  ) 

This releases the memory allocated by mtgp64_init(), mtgp64_init_by_array(), mtgp64_init_by_str().

Parameters:
[in,out] mtgp64 MTGP all in one structure.

References MTGP64_FAST_T::status.

static double mtgp64_genrand_close1_open2 ( mtgp64_fast_t mtgp64  )  [inline, static]

This function generates and returns double precision pseudorandom number which distributes uniformly in the range [1, 2).

mtgp64_init(), mtgp64_init_by_array() or mtgp64_init_by_str() must be called before this function.

Parameters:
[in,out] mtgp64 MTGP all in one structure.
Returns:
double precision floating point pseudorandom number

References MTGP64_STATUS_FAST_T::array, MTGP64_PARAMS_FAST_T::dbl_tmp_tbl, MTGP64_STATUS_FAST_T::idx, MTGP64_STATUS_FAST_T::large_mask, MTGP64_STATUS_FAST_T::large_size, mtgp64_next_state(), mtgp64_temper_double(), MTGP64_FAST_T::params, MTGP64_PARAMS_FAST_T::pos, MTGP64_STATUS_FAST_T::size, and MTGP64_FAST_T::status.

Referenced by mtgp64_genrand_close_open(), and mtgp64_genrand_open_close().

static double mtgp64_genrand_close_open ( mtgp64_fast_t mtgp64  )  [inline, static]

This function generates and returns double precision pseudorandom number which distributes uniformly in the range [0, 1).

mtgp64_init(), mtgp64_init_by_array() or mtgp64_init_by_str() must be called before this function.

Parameters:
[in,out] mtgp64 MTGP all in one structure.
Returns:
double precision floating point pseudorandom number

References mtgp64_genrand_close1_open2().

static double mtgp64_genrand_open_close ( mtgp64_fast_t mtgp64  )  [inline, static]

This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1].

mtgp64_init(), mtgp64_init_by_array() or mtgp64_init_by_str() must be called before this function.

Parameters:
[in,out] mtgp64 MTGP all in one structure.
Returns:
double precision floating point pseudorandom number

References mtgp64_genrand_close1_open2().

static double mtgp64_genrand_open_open ( mtgp64_fast_t mtgp64  )  [inline, static]

This function generates and returns double precision pseudorandom number which distributes uniformly in the range (0, 1).

mtgp64_init(), mtgp64_init_by_array() or mtgp64_init_by_str() must be called before this function.

Parameters:
[in,out] mtgp64 MTGP all in one structure.
Returns:
double precision floating point pseudorandom number

References MTGP64_STATUS_FAST_T::array, MTGP64_PARAMS_FAST_T::dbl_tmp_tbl, MTGP64_STATUS_FAST_T::idx, MTGP64_STATUS_FAST_T::large_mask, MTGP64_STATUS_FAST_T::large_size, mtgp64_next_state(), mtgp64_temper_double_open(), MTGP64_FAST_T::params, MTGP64_PARAMS_FAST_T::pos, MTGP64_STATUS_FAST_T::size, and MTGP64_FAST_T::status.

static uint64_t mtgp64_genrand_uint64 ( mtgp64_fast_t mtgp64  )  [inline, static]

This function generates and returns 64-bit unsigned integer.

mtgp64_init(), mtgp64_init_by_array() or mtgp64_init_by_str() must be called before this function.

Parameters:
[in,out] mtgp64 MTGP all in one structure.
Returns:
64-bit unsigned integer.

References MTGP64_STATUS_FAST_T::array, MTGP64_STATUS_FAST_T::idx, MTGP64_STATUS_FAST_T::large_mask, MTGP64_STATUS_FAST_T::large_size, mtgp64_next_state(), mtgp64_temper(), MTGP64_FAST_T::params, MTGP64_PARAMS_FAST_T::pos, MTGP64_STATUS_FAST_T::size, MTGP64_FAST_T::status, and MTGP64_PARAMS_FAST_T::tmp_tbl.

int mtgp64_init ( mtgp64_fast_t mtgp64,
const mtgp64_params_fast_t para,
uint64_t  seed 
)

This function allocates and initializes the internal state array with a 64-bit integer seed.

The allocated memory should be freed by calling mtgp64_free(). para should be one of the elements in the parameter table (mtgp64-param-ref.c).

Parameters:
[out] mtgp64 MTGP structure.
[in] para parameter structure
[in] seed a 64-bit integer used as the seed.
Returns:
memory allocation result. if 0 O.K.

References alloc_state(), MTGP64_STATUS_FAST_T::array, MTGP64_STATUS_FAST_T::idx, mtgp64_init_state(), MTGP64_STATUS_FAST_T::size, and MTGP64_FAST_T::status.

int mtgp64_init_by_array ( mtgp64_fast_t mtgp64,
const mtgp64_params_fast_t para,
uint64_t *  array,
int  length 
)

This function allocates and initializes the internal state array with a 64-bit integer array.

The allocated memory should be freed by calling mtgp64_free(). para should be one of the elements in the parameter table (mtgp64-param-ref.c).

Parameters:
[out] mtgp64 MTGP structure.
[in] para parameter structure
[in] array a 64-bit integer array used as a seed.
[in] length length of the array.
Returns:
memory allocation result. if 0 O.K.

References alloc_state(), MTGP64_STATUS_FAST_T::array, MTGP64_STATUS_FAST_T::idx, ini_func1(), ini_func2(), MTGP64_PARAMS_FAST_T::mexp, non_zero, MTGP64_FAST_T::params, MTGP64_STATUS_FAST_T::size, MTGP64_FAST_T::status, and MTGP64_PARAMS_FAST_T::tbl.

int mtgp64_init_by_str ( mtgp64_fast_t mtgp64,
const mtgp64_params_fast_t para,
char *  array 
)

This function allocates and initializes the internal state array with a character array.

The allocated memory should be freed by calling mtgp64_free(). para should be one of the elements in the parameter table (mtgp64-param-ref.c). This is the same algorithm with mtgp64_init_by_array(), but hope to be more useful.

Parameters:
[out] mtgp64 MTGP structure.
[in] para parameter structure
[in] array a character array used as a seed. (terminated by zero.)
Returns:
memory allocation result. if 0 then O.K.

References alloc_state(), MTGP64_STATUS_FAST_T::array, MTGP64_STATUS_FAST_T::idx, ini_func1(), ini_func2(), MTGP64_PARAMS_FAST_T::mexp, non_zero, MTGP64_FAST_T::params, MTGP64_STATUS_FAST_T::size, MTGP64_FAST_T::status, and MTGP64_PARAMS_FAST_T::tbl.

void mtgp64_init_state ( uint64_t  array[],
const mtgp64_params_fast_t para,
uint64_t  seed 
)

This function initializes the internal state array with a 64-bit integer seed.

The allocated memory should be freed by calling mtgp64_free(). para should be one of the elements in the parameter table (mtgp64-param-ref.c).

This function is call by cuda program, because cuda program uses another structure and another allocation method.

Parameters:
[out] array MTGP internal status vector.
[in] para parameter structure
[in] seed a 64-bit integer used as the seed.

References MTGP64_PARAMS_FAST_T::mexp, and MTGP64_PARAMS_FAST_T::tbl.

Referenced by make_kernel_data(), and mtgp64_init().

static void mtgp64_next_state ( mtgp64_fast_t mtgp64  )  [inline, static]

void mtgp64_print_idstring ( const mtgp64_fast_t mtgp64,
FILE *  fp 
)

This function prints the Mersenne exponent and SHA1 of characteristic polynomial of generators state transition function.

Parameters:
[in] mtgp64 MTGP all in one structure.
[in,out] fp FILE pointer.

References MTGP64_PARAMS_FAST_T::mexp, MTGP64_FAST_T::params, and MTGP64_PARAMS_FAST_T::poly_sha1.

static uint64_t mtgp64_temper ( const uint64_t  tmp_tbl[16],
uint64_t  r,
uint64_t  t 
) [inline, static]

The tempering function.

Parameters:
[in] tmp_tbl the pre-computed tempering table.
[in] r the value to be tempered.
[in] t the tempering helper value.
Returns:
the tempered value.

Referenced by mtgp64_genrand_uint64().

static double mtgp64_temper_double ( const uint64_t  dbl_tmp_tbl[16],
uint64_t  r,
uint64_t  t 
) [inline, static]

The tempering and converting function.

Parameters:
[in] dbl_tmp_tbl the pre-computed tempering table.
[in] r the value to be tempered.
[in] t the tempering helper value.
Returns:
the tempered value.

Referenced by mtgp64_genrand_close1_open2().

static double mtgp64_temper_double_open ( const uint64_t  dbl_tmp_tbl[16],
uint64_t  r,
uint64_t  t 
) [inline, static]

The tempering and converting function for generating floating point number f (0 < f < 1).

Parameters:
[in] dbl_tmp_tbl the pre-computed tempering table.
[in] r the value to be tempered.
[in] t the tempering helper value.
Returns:
the tempered value.

Referenced by mtgp64_genrand_open_open().


Variable Documentation

parameter constants tables for MEXP=110503.

size - pos > 1024.

parameter constants tables for MEXP=23209.

size - pos > 256.

parameter constants tables for MEXP=44497.

size - pos > 512.

Referenced by main().


Generated on Tue Nov 17 10:52:12 2009 for MTGP by  doxygen 1.5.9