Return information about OpenMP support for this system. For
individual models look at the $has_openmp()
method.
dust_openmp_support(check_compile = FALSE)
A list with information about the openmp support on your system.
The first few elements come from the openmp library directly:
num_proc
, max_threads
, thread_limit
; these correspond to a
call to the function omp_get_<name>()
in C and
openmp_version
which is the value of the _OPENMP
macro.
A logical has_openmp
which is TRUE
if it looks like runtime
OpenMP support is available
The next elements tell you about different sources that might
control the number of threads allowed to run: mc.cores
(from
the R option with the same name), OMP_THREAD_LIMIT
,
OMP_NUM_THREADS
, MC_CORES
(from environment variables),
limit_r
(limit computed against R-related control variables),
limit_openmp
(limit computed against OpenMP-related variables)
and limit
the smaller of limit_r
and limit_openmp
dust_openmp_threads()
for setting a polite number of
threads.
# System wide support
dust::dust_openmp_support()
#> $num_procs
#> [1] 4
#>
#> $max_threads
#> [1] 4
#>
#> $thread_limit
#> [1] 2147483647
#>
#> $openmp_version
#> [1] 201511
#>
#> $has_openmp
#> [1] TRUE
#>
#> $mc.cores
#> [1] NA
#>
#> $OMP_THREAD_LIMIT
#> [1] NA
#>
#> $OMP_NUM_THREADS
#> [1] NA
#>
#> $MC_CORES
#> [1] NA
#>
#> $limit_r
#> [1] 1
#>
#> $limit_openmp
#> [1] 4
#>
#> $limit
#> [1] 1
#>
# Support compiled into a generator
walk <- dust::dust_example("walk")
walk$public_methods$has_openmp()
#> [1] TRUE
# Support from an instance of that model
model <- walk$new(list(sd = 1), 0, 1)
model$has_openmp()
#> [1] TRUE