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 <stdlib.h>
#include <inttypes.h>
#include "mtgp64-fast.h"
Functions | |
static uint64_t | ini_func1 (uint64_t x) |
This function represents a function used in the initialization by mtgp64_init_by_array() and mtgp64_init_by_str(). | |
static uint64_t | ini_func2 (uint64_t x) |
This function represents a function used in the initialization by mtgp64_init_by_array() and mtgp64_init_by_str(). | |
static int | alloc_state (mtgp64_fast_t *mtgp64, const mtgp64_params_fast_t *para) |
This function allocates the internal state vector. | |
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 *array) |
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. | |
Variables | |
static const uint64_t | non_zero = 0x4d544750 |
Mersenne Twister for Graphic Processors (mtgp64), which generates 64-bit unsigned integers and double precision floating point numbers based on IEEE 754 format.
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
static int alloc_state | ( | mtgp64_fast_t * | mtgp64, | |
const mtgp64_params_fast_t * | para | |||
) | [static] |
This function allocates the internal state vector.
[in,out] | mtgp64 | MTGP all in one structure. |
[in] | para | a parameter structure. |
References MTGP64_STATUS_FAST_T::large_mask, MTGP64_STATUS_FAST_T::large_size, MTGP64_PARAMS_FAST_T::mexp, MTGP64_FAST_T::params, MTGP64_STATUS_FAST_T::size, and MTGP64_FAST_T::status.
Referenced by mtgp64_init(), mtgp64_init_by_array(), and mtgp64_init_by_str().
static uint64_t ini_func1 | ( | uint64_t | x | ) | [static] |
This function represents a function used in the initialization by mtgp64_init_by_array() and mtgp64_init_by_str().
[in] | x | 64-bit integer |
Referenced by mtgp64_init_by_array(), and mtgp64_init_by_str().
static uint64_t ini_func2 | ( | uint64_t | x | ) | [static] |
This function represents a function used in the initialization by mtgp64_init_by_array() and mtgp64_init_by_str().
[in] | x | 64-bit integer |
Referenced by mtgp64_init_by_array(), and mtgp64_init_by_str().
void mtgp64_free | ( | mtgp64_fast_t * | mtgp64 | ) |
This releases the memory allocated by mtgp64_init(), mtgp64_init_by_array(), mtgp64_init_by_str().
[in,out] | mtgp64 | MTGP all in one structure. |
References MTGP64_FAST_T::status.
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).
[out] | mtgp64 | MTGP structure. |
[in] | para | parameter structure |
[in] | seed | a 64-bit integer used as the seed. |
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).
[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. |
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.
[out] | mtgp64 | MTGP structure. |
[in] | para | parameter structure |
[in] | array | a character array used as a seed. (terminated by zero.) |
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.
[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().
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.
[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.
const uint64_t non_zero = 0x4d544750 [static] |
Referenced by mtgp64_init_by_array(), and mtgp64_init_by_str().