Type: Package
Title: 'FlexiBLAS' API Interface
Version: 3.4.0
Description: Provides functions to switch the 'BLAS'/'LAPACK' optimized backend and change the number of threads without leaving the R session, which needs to be linked against the 'FlexiBLAS' wrapper library https://www.mpi-magdeburg.mpg.de/projects/flexiblas.
License: LGPL (≥ 3)
Encoding: UTF-8
OS_type: unix
URL: https://github.com/Enchufa2/r-flexiblas
BugReports: https://github.com/Enchufa2/r-flexiblas/issues
Suggests: tinytest
RoxygenNote: 7.1.1
NeedsCompilation: yes
Packaged: 2024-01-11 09:49:21 UTC; iucar
Author: Iñaki Ucar ORCID iD [aut, cph, cre], Martin Koehler ORCID iD [aut, cph]
Maintainer: Iñaki Ucar <iucar@fedoraproject.org>
Repository: CRAN
Date/Publication: 2024-01-11 10:00:09 UTC

flexiblas: FlexiBLAS API Interface for R

Description

Provides functions to switch the BLAS/LAPACK optimized backend and change the number of threads without leaving the R session, which needs to be linked against the FlexiBLAS wrapper library.

Author(s)

Martin Koehler, Iñaki Ucar

References

Koehler M., Saak J. (2020). "FlexiBLAS - A BLAS and LAPACK wrapper library with runtime exchangeable backends." doi:10.5281/zenodo.3909214.


Handle Backends

Description

Get current backend, list available ones, load and switch between backends.

Usage

flexiblas_current_backend()

flexiblas_list()

flexiblas_list_loaded()

flexiblas_load_backend(name)

flexiblas_switch(n)

Arguments

name

character vector of backend names or paths (case insensitive).

n

loaded backend index.

Value

flexiblas_current_backend and ⁠flexiblas_list*⁠ return a character vector of backend names or paths.

flexiblas_load_backend and flexiblas_switch return the indices of the loaded backends if the operation was successful, or fail otherwise.

See Also

flexiblas_avail, flexiblas_version, flexiblas-threads

Examples


n <- 2000
runs <- 10
ignore <- "__FALLBACK__"

A <- matrix(runif(n*n), nrow=n)
B <- matrix(runif(n*n), nrow=n)

# load backends
backends <- setdiff(flexiblas_list(), ignore)
idx <- flexiblas_load_backend(backends)

# benchmark
timings <- sapply(idx, function(i) {
  flexiblas_switch(i)

  # warm-up
  C <- A[1:100, 1:100] %*% B[1:100, 1:100]

  unname(system.time({
    for (j in seq_len(runs))
      C <- A %*% B
  })[3])
})

if (length(timings)) {
  results <- data.frame(
    backend = backends,
    `timing [s]` = timings,
    `performance [GFlops]` = (2 * (n / 1000)^3) / timings,
    check.names = FALSE)

  results[order(results$performance),]
}


Get/Set Number of Threads

Description

Get or set the number of threads for the BLAS backend.

Usage

flexiblas_get_num_threads()

flexiblas_set_num_threads(n)

Arguments

n

number of threads.

Value

flexiblas_get_num_threads returns the number of threads.

flexiblas_set_num_threads returns nothing.

See Also

flexiblas_avail, flexiblas_version, flexiblas-backends

Examples


max_threads <- 4
n <- 2000
runs <- 10

A <- matrix(runif(n*n), nrow=n)
B <- matrix(runif(n*n), nrow=n)

for (i in seq_len(max_threads)) {
  message("Set number of threads to: ", i)
  flexiblas_set_num_threads(i)

  print(system.time({
    for (j in seq_len(runs))
      C <- A %*% B
  }))
}



Check Availability

Description

Check whether FlexiBLAS is available.

Usage

flexiblas_avail()

Value

A boolean.

See Also

flexiblas_version, flexiblas-backends, flexiblas-threads


Get Version

Description

Get current version of FlexiBLAS.

Usage

flexiblas_version()

Value

A package_version object.

See Also

flexiblas_avail, flexiblas-backends, flexiblas-threads

mirror server hosted at Truenetwork, Russian Federation.