Skip to content

Commit

Permalink
Patch for forthcoming dqrng update (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
jlmelville authored Apr 14, 2024
1 parent 980f419 commit 6d1fced
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 19 deletions.
5 changes: 3 additions & 2 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
Type: Package
Package: rnndescent
Title: Nearest Neighbor Descent Method for Approximate Nearest Neighbors
Version: 0.1.4.9000
Version: 0.1.5
Authors@R: c(
person("James", "Melville", , "[email protected]", role = c("aut", "cre", "cph")),
person("Vitalie", "Spinu", role = "ctb")
person("Vitalie", "Spinu", role = "ctb"),
person("Ralf", "Stubner", role = "ctb")
)
Description: The Nearest Neighbor Descent method for finding approximate
nearest neighbors by Dong and co-workers (2010)
Expand Down
6 changes: 5 additions & 1 deletion NEWS.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# rnndescent (development version)
# rnndescent 0.1.5

* This is a minor release to change an internal API to support an upcoming
release for dqrng. See <https://github.com/daqana/dqrng/issues/80>. Thank you
to [Ralf Stubner](https://github.com/rstub) for the report and a patch.

# rnndescent 0.1.4

Expand Down
30 changes: 14 additions & 16 deletions inst/include/rnndescent/random.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,13 @@ inline auto r_seed() -> uint64_t {
}

inline auto create_dqrng() -> dqrng::rng64_t {
return std::make_shared<dqrng::random_64bit_wrapper<pcg64>>();
auto seed1 = r_seed();
auto seed2 = r_seed();
return dqrng::generator<pcg64>(seed1, seed2);
}

inline auto create_dqrng(uint64_t seed, uint64_t seed2) -> dqrng::rng64_t {
return dqrng::generator<pcg64>(seed, seed2);
}

inline auto combine_seeds(uint32_t msw, uint32_t lsw) -> uint64_t {
Expand All @@ -65,8 +71,7 @@ struct TauRand : public tdoann::RandomGenerator {
std::unique_ptr<tdoann::tau_prng> prng{nullptr};

TauRand(uint64_t seed, uint64_t seed2) {
dqrng::rng64_t rng = create_dqrng();
rng->seed(seed, seed2);
dqrng::rng64_t rng = create_dqrng(seed, seed2);

// Stitch together 3 64-bit ints from 6 32-bit ones
std::vector<uint32_t> tau_seeds32;
Expand Down Expand Up @@ -112,17 +117,11 @@ class DQIntSampler : public tdoann::RandomIntGenerator<Int> {
dqrng::rng64_t rng;

public:

// Not thread safe
DQIntSampler() : rng(create_dqrng()) {
auto seed1 = r_seed();
auto seed2 = r_seed();
rng->seed(seed1, seed2);
}
DQIntSampler() : rng(create_dqrng()) {}

DQIntSampler(uint64_t seed, uint64_t seed2) : rng(create_dqrng()) {
rng->seed(seed, seed2);
}
DQIntSampler(uint64_t seed, uint64_t seed2)
: rng(create_dqrng(seed, seed2)) {}

// Generates a random integer in range [0, n)
Int rand_int(Int n) override {
Expand All @@ -139,7 +138,6 @@ class DQIntSampler : public tdoann::RandomIntGenerator<Int> {
}
};


template <typename Int, template <typename> class RNG>
class ParallelIntRNGAdapter : public tdoann::ParallelRandomIntProvider<Int> {
private:
Expand All @@ -157,9 +155,9 @@ class ParallelIntRNGAdapter : public tdoann::ParallelRandomIntProvider<Int> {
// random numbers in each window, but they are related to the random number
// seed
std::unique_ptr<tdoann::RandomIntGenerator<Int>>
get_parallel_instance(uint64_t seed2) override {
return std::make_unique<RNG<Int>>(seed, seed2);
}
get_parallel_instance(uint64_t seed2) override {
return std::make_unique<RNG<Int>>(seed, seed2);
}
};

} // namespace rnndescent
Expand Down
1 change: 1 addition & 0 deletions man/rnndescent-package.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6d1fced

Please sign in to comment.