The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

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

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.