Hello,

I just created a little package, RcppProgress, to display a progress bar to
monitor the execution status of a C++ code loop, possibly multihreaded with
OpenMP.
I also implemented the possibility to check for user interruption, using
the work-around by Simon Urbanek.

I just uploaded the package on my R-forge project, so you should be able to
get the package from
https://r-forge.r-project.org/scm/viewvc.php/pkg/RcppProgress/?root=gwas-bin-tests

* The progress bar is displayed using REprintf, so that it works also in
the eclipse StatET console, provided that you disable the scroll lock.
* You should be able to nicely interrupt the execution by typing CTRL+C in
the R console, or by clicking the "cancel current task" in the StatET
console.
* I tried to write a small documentation, included in the package, but
basically you use it like this:

The main loop:

Progress p(max, display_progress); // create the progress monitor
#pragma omp parallel for schedule(dynamic)
    for (int i = 0; i < max; ++i) {
        if ( ! p.is_aborted() ) { // the only way to exit an OpenMP loop
            long_computation(nb);
            p.increment(); // update the progress
        }
    }

and in your computation intensive function:

void long_computation(int nb) {
    double sum = 0;
    for (int i = 0; i < nb; ++i) {
        if ( Progress::check_abort() )
            return;
        for (int j = 0; j < nb; ++j) {
            sum += Rf_dlnorm(i+j, 0.0, 1.0, 0);
        }
    }
}

I provided two small R test functions so that you can see how it looks,
please see the doc.

 I would be extremely grateful if you could give me comments, criticisms
and other suggestions.

I try to release this in order to reuse this functionality in my other
packages.

Best regards,
Karl Forner

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to