Skip to content

Commit

Permalink
Merge branch '309_mt19937_host' into 'develop_stream'
Browse files Browse the repository at this point in the history
create host implementation for mt19937 generator

See merge request amd/libraries/rocRAND!325
  • Loading branch information
parbenc authored and Naraenda committed Jul 9, 2024
2 parents 97e83fe + e7cd5bd commit 4224428
Show file tree
Hide file tree
Showing 12 changed files with 687 additions and 244 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ Documentation for rocRAND is available at

## (Unreleased) rocRAND-3.2.0 for ROCm 6.3.0

### Additions

* Added host generator for MT19937

### Changes

* `rocrand_discrete` for MTGP32, LFSR113 and ThreeFry generators now uses the alias method, which is faster than binary search in CDF.
Expand Down
8 changes: 2 additions & 6 deletions benchmark/benchmark_rocrand_host_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,8 @@ int main(int argc, char* argv[])
std::vector<rng_type_t> benchmarked_engine_types{ROCRAND_RNG_PSEUDO_LFSR113,
ROCRAND_RNG_PSEUDO_MRG31K3P,
ROCRAND_RNG_PSEUDO_MRG32K3A,
ROCRAND_RNG_PSEUDO_MTGP32,
ROCRAND_RNG_PSEUDO_MT19937,
ROCRAND_RNG_PSEUDO_PHILOX4_32_10,
ROCRAND_RNG_PSEUDO_THREEFRY2_32_20,
ROCRAND_RNG_PSEUDO_THREEFRY2_64_20,
Expand All @@ -190,12 +192,6 @@ int main(int argc, char* argv[])
ROCRAND_RNG_QUASI_SOBOL64,
ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL64};

if(!benchmark_host)
{
benchmarked_engine_types.push_back(ROCRAND_RNG_PSEUDO_MTGP32);
benchmarked_engine_types.push_back(ROCRAND_RNG_PSEUDO_MT19937);
}

const std::map<rocrand_ordering, std::string> ordering_name_map{
{ROCRAND_ORDERING_PSEUDO_DEFAULT, "default"},
{ ROCRAND_ORDERING_PSEUDO_LEGACY, "legacy"},
Expand Down
4 changes: 3 additions & 1 deletion benchmark/tuning/benchmarked_generators.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ using mtgp32_generator_template
ConfigProvider>;

template<class ConfigProvider>
using mt19937_generator_template = rocrand_impl::host::mt19937_generator_template<ConfigProvider>;
using mt19937_generator_template
= rocrand_impl::host::mt19937_generator_template<rocrand_impl::system::device_system,
ConfigProvider>;

template<class ConfigProvider>
using philox4x32_10_generator_template
Expand Down
15 changes: 1 addition & 14 deletions library/include/rocrand/rocrand.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,20 +170,7 @@ rocrand_create_generator(rocrand_generator * generator, rocrand_rng_type rng_typ
* and returns it in \p generator. This generator is executed on the host rather than
* on a device, and it is enqueued on the stream associated with the generator.
*
* Values for \p rng_type are:
* - ROCRAND_RNG_PSEUDO_XORWOW
* - ROCRAND_RNG_PSEUDO_MRG31K3P
* - ROCRAND_RNG_PSEUDO_MRG32K3A
* - ROCRAND_RNG_PSEUDO_PHILOX4_32_10
* - ROCRAND_RNG_PSEUDO_LFSR113
* - ROCRAND_RNG_PSEUDO_THREEFRY2_32_20
* - ROCRAND_RNG_PSEUDO_THREEFRY2_64_20
* - ROCRAND_RNG_PSEUDO_THREEFRY4_32_20
* - ROCRAND_RNG_PSEUDO_THREEFRY4_64_20
* - ROCRAND_RNG_QUASI_SOBOL32
* - ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL32
* - ROCRAND_RNG_QUASI_SOBOL64
* - ROCRAND_RNG_QUASI_SCRAMBLED_SOBOL64
* All generators are supported.
*
* \param generator - Pointer to generator
* \param rng_type - Type of generator to create
Expand Down
2 changes: 2 additions & 0 deletions library/src/rng/generator_type_mt19937.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,7 @@ namespace rocrand_impl::host
{

template struct generator_type<mt19937_generator>;
template struct generator_type<mt19937_generator_host<true>>;
template struct generator_type<mt19937_generator_host<false>>;

} // namespace rocrand_impl::host
2 changes: 2 additions & 0 deletions library/src/rng/generator_types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ extern template struct generator_type<mrg32k3a_generator>;
extern template struct generator_type<mrg32k3a_generator_host<false>>;
extern template struct generator_type<mrg32k3a_generator_host<true>>;
extern template struct generator_type<mt19937_generator>;
extern template struct generator_type<mt19937_generator_host<true>>;
extern template struct generator_type<mt19937_generator_host<false>>;
extern template struct generator_type<mtgp32_generator>;
extern template struct generator_type<mtgp32_generator_host<false>>;
extern template struct generator_type<mtgp32_generator_host<true>>;
Expand Down
Loading

0 comments on commit 4224428

Please sign in to comment.