Skip to content

Save trace in memory rather than files? #18

@osorensen

Description

@osorensen

ParameterTracer::ParameterTracer(bool trace, bool trace_latent, const std::string& trace_directory)
: trace { trace }, trace_latent { trace_latent }, trace_directory { trace_directory } {
if(trace) {
#ifdef _WIN32
// On Windows, mkdir takes only one argument
int status = mkdir(trace_directory.c_str());
#else
// On POSIX systems, mkdir takes two arguments
int status = mkdir(trace_directory.c_str(), 0777);
#endif
if (status != 0) {
Rcpp::stop("Error creating trace directory.");
}
}
}

It should potentially speed up the algorithm, and at the same time make it easier to post-process.

Some timing experiments below:

library(BayesMallowsSMC2)
set.seed(2)
system.time({
  mod <- compute_sequentially(
    partial_rankings,
    hyperparameters = set_hyperparameters(n_items = 5),
    smc_options = set_smc_options(n_particles = 100, max_rejuvenation_steps = 5)
  )
})
#>    user  system elapsed 
#>   1.419   0.038   1.459

set.seed(2)
system.time({
  mod <- compute_sequentially(
    partial_rankings,
    hyperparameters = set_hyperparameters(n_items = 5),
    smc_options = set_smc_options(n_particles = 100, max_rejuvenation_steps = 5,
                                  trace = TRUE, trace_latent = FALSE,
                                  trace_directory = paste0(tempdir(), "trace1"))
  )
})
#>    user  system elapsed 
#>   1.494   0.244   1.946


set.seed(2)
system.time({
  mod <- compute_sequentially(
    partial_rankings,
    hyperparameters = set_hyperparameters(n_items = 5),
    smc_options = set_smc_options(n_particles = 100, max_rejuvenation_steps = 5,
                                  trace = TRUE, trace_latent = TRUE,
                                  trace_directory = paste0(tempdir(), "trace2"))
  )
})
#>    user  system elapsed 
#>   2.571   6.438  21.058

Created on 2025-04-10 with reprex v2.1.1

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions