MyNixOS website logo
Description

'Rcpp' Tic-Toc Timer with 'OpenMP' Support.

Provides 'Rcpp' bindings for 'cpptimer', a simple tic-toc timer class for benchmarking 'C++' code <https://github.com/BerriJ/cpptimer>. It's not just simple, it's blazing fast! This sleek tic-toc timer class supports overlapping timers as well as 'OpenMP' parallelism <https://www.openmp.org/>. It boasts a nanosecond-level time resolution. We did not find any overhead of the timer itself at this resolution. Results (with summary statistics) are automatically passed back to 'R' as a data frame.

rcpptimer

CRAN/METACRAN Version R-hub Codecov

Overview

This R Package provides Rcpp bindings for cpptimer, a simple tic-toc class for timing C++ code. It's not just simple, it's blazing fast! This sleek tic-toc timer class supports nested and overlapping timers and OpenMP parallelism. It boasts a nanosecond-level time resolution. Results (with summary statistics) are automatically passed back to R as a data.frame.

Install

Install rcpptimer from CRAN.

install.packages("rcpptimer")

Basic Usage with Rcpp::cppFunction

Here is a straightforward example of using the Rcpp::Timer with Rcpp::cppFunction:

Rcpp::cppFunction("
double demo_rnorm()
{
  Rcpp::Timer timer;
  timer.tic();
  double x = rnorm(1, 1)[0];
  timer.toc();
  return(x);
}",
  depends = "rcpptimer"
)

demo_rnorm()

The timer object will automatically write its result to the R environment:

print(times)
       Microseconds SD   Min   Max Count
tictoc        3.972  0 3.972 3.972     1

Check out the Documentation for:

  • Setting up multiple, nested, and overlapping timers
  • Using OpenMP parallelism
  • Using rcpptimer with Rcpp::sourceCpp
  • Adding rcpptimer to your package

Limitations

Processes taking less than a nanosecond cannot be timed.

Unmatched .tic() and .toc() calls do not raise errors at compile time. However, they throw warnings at runtime.

Acknowledgments

This package (and the underlying cpptimer class) was inspired by zdebruine's RcppClock. I used that package a lot and wanted to add OpenMP support, alter the process of calculating summary statistics, and apply a series of other adjustments. I hope you find it useful.

Metadata

Version

1.2.1

License

Unknown

Platforms (77)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows