Skip to content

Instantly share code, notes, and snippets.

@hpages
Last active October 16, 2025 13:39
Show Gist options
  • Select an option

  • Save hpages/b547103d516c2a6c05a8e1c200211ea8 to your computer and use it in GitHub Desktop.

Select an option

Save hpages/b547103d516c2a6c05a8e1c200211ea8 to your computer and use it in GitHub Desktop.
BLAS benchmarks

BLAS benchmarks

WORK IN PROGRESS!

1. The operations that we benchmarked

We benchmarked the following operations (all operations got timed with system.time()):

## --- random matrix (dense) ---

m <- 12000
n <-  2500
set.seed(123)
A <- matrix(rnorm(m * n), nrow=m)     # A: a 12,000 x 2,500 matrix

system.time(A_cp  <- crossprod(A))    # A_cp: a symetric 2,500 x 2,500 matrix
system.time(A_tcp <- tcrossprod(A))   # A_tcp: a symetric 12,000 x 12,000 matrix
system.time(MULT  <- A_cp %*% A_cp) 
system.time(A_svd_30 <- svd(A, nu=30, nv=30)) 

## RSpectra::svds() can also take advantage of BLAS:
library(RSpectra)
system.time(A_RSsvds_30 <- svds(A, k=30))
system.time(A_RSsvds_100 <- svds(A, k=100))

## --- single cell count (sparse) ---

library(scRNAseq)
sce <- fetchDataset("zilionis-lung-2019", "2023-12-20", path="human")
logcounts(sce) <- log1p(assay(sce))
## Select the top 1000 highest mean genes
rs <- rowSums(logcounts(sce))
sce2 <- sce[rank(-rs) <= 1000, ]

M <- as.matrix(logcounts(sce2))   # dense matrix with 89% zeros!

## base::svd()
system.time(M_svd_30 <- svd(M, nu=30, nv=30))
system.time(M_svd_full <- svd(M))

## RSpectra::svds()  # also takes advantage of BLAS
system.time(M_RSsvds_30 <- svds(M, k=30))
system.time(M_RSsvds_100 <- svds(M, k=100))

## Unlike base::svd(), RSpectra::svds() can operate natively on
## a sparse matrix. However, it seems that in the sparse case,
## which BLAS is used makes no difference! (see benchmarks below)
S <- as(M, "dgCMatrix")  # sparse matrix
system.time(S_RSsvds_30 <- svds(S, k=30))
system.time(S_RSsvds_100 <- svds(S, k=100))

sessionInfo():

R version 4.5.1 (2025-06-13)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 24.04.3 LTS

Matrix products: default
BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
 [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
 [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
[10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

time zone: America/New_York
tzcode source: system (glibc)

attached base packages:
[1] stats4    stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] scRNAseq_2.23.0             SingleCellExperiment_1.31.1
 [3] SummarizedExperiment_1.39.1 Biobase_2.69.0             
 [5] GenomicRanges_1.61.1        Seqinfo_0.99.2             
 [7] IRanges_2.43.0              S4Vectors_0.47.0           
 [9] BiocGenerics_0.55.1         generics_0.1.4             
[11] MatrixGenerics_1.21.0       matrixStats_1.5.0          
[13] RSpectra_0.16-2            

loaded via a namespace (and not attached):
 [1] tidyselect_1.2.1         alabaster.se_1.9.0       dplyr_1.1.4             
 [4] blob_1.2.4               filelock_1.0.3           Biostrings_2.77.2       
 [7] bitops_1.0-9             lazyeval_0.2.2           fastmap_1.2.0           
[10] RCurl_1.98-1.17          BiocFileCache_2.99.5     GenomicAlignments_1.45.2
[13] XML_3.99-0.18            lifecycle_1.0.4          ProtGenerics_1.41.0     
[16] alabaster.matrix_1.9.0   KEGGREST_1.49.1          alabaster.base_1.9.5    
[19] RSQLite_2.4.2            magrittr_2.0.3           compiler_4.5.1          
[22] rlang_1.1.6              tools_4.5.1              yaml_2.3.10             
[25] rtracklayer_1.69.1       S4Arrays_1.9.1           bit_4.6.0               
[28] curl_6.4.0               DelayedArray_0.35.2      abind_1.4-8             
[31] BiocParallel_1.43.4      HDF5Array_1.37.0         gypsum_1.5.0            
[34] grid_4.5.1               ExperimentHub_2.99.5     Rhdf5lib_1.31.0         
[37] cli_3.6.5                crayon_1.5.3             httr_1.4.7              
[40] rjson_0.2.23             DBI_1.2.3                cachem_1.1.0            
[43] rhdf5_2.53.4             parallel_4.5.1           AnnotationDbi_1.71.1    
[46] AnnotationFilter_1.33.0  BiocManager_1.30.26      XVector_0.49.0          
[49] restfulr_0.0.16          alabaster.schemas_1.9.0  vctrs_0.6.5             
[52] Matrix_1.7-3             jsonlite_2.0.0           bit64_4.6.0-1           
[55] ensembldb_2.33.1         alabaster.ranges_1.9.1   GenomicFeatures_1.61.6  
[58] h5mread_1.1.1            glue_1.8.0               codetools_0.2-20        
[61] BiocVersion_3.22.0       GenomeInfoDb_1.45.9      UCSC.utils_1.5.0        
[64] BiocIO_1.19.0            tibble_3.3.0             pillar_1.11.0           
[67] rappdirs_0.3.3           rhdf5filters_1.21.0      R6_2.6.1                
[70] dbplyr_2.5.0             httr2_1.2.1              alabaster.sce_1.9.0     
[73] lattice_0.22-7           AnnotationHub_3.99.6     png_0.1-8               
[76] Rsamtools_2.25.2         memoise_2.0.1            Rcpp_1.1.0              
[79] SparseArray_1.9.1        pkgconfig_2.0.3         

2. Results on Linux

On Linux we compared the following BLAS alternatives with R "built-in" BLAS (a.k.a. Rblas):

  • OpenBLAS (-pthread, -openmp, -serial flavors)
  • NVBLAS
  • Intel MKL (Intel Math Kernel Library) -- todo
  • ATLAS -- todo
  • BLIS -- todo

Rblas vs the three OpenBLAS flavors

For this comparison we used four Jetstream2 m3.quad instances (each with 4 cpus, 15 GB of RAM) with Ubuntu 24.04 and R-4.5.1 + BioC 3.22.

Rblas openblas openblas openblas
-pthread -openmp -serial
Operation(*)
A_cp 38.492 0.537 0.535 1.725
A_tcp 135.476 2.769 2.708 8.853
MULT 8.447 0.206 0.206 0.723
A_svd_30 203.369 8.819 7.197 17.873
A_RSsvds_30 18.127 8.162 7.791 5.880
A_RSsvds_100 35.826 18.762 15.567 12.117
M_svd_30 361.366 49.542 43.615 59.258
M_svd_full 384.136 49.153 43.520 56.418
M_RSsvds_30 38.777 10.872 10.255 10.837
M_RSsvds_100 109.056 35.547 37.843 30.569
S_RSsvds_30 4.513 4.678 4.471 4.446
S_RSsvds_100 12.904 13.222 12.825 12.763

(*) See "1. The operations that we benchmarked" at the top of this document for the details of each operation.

OpenBLAS vs NVBLAS

For this comparison we used Bioconductor GPU machine kakapo1 (96 cpus, 128 GB of RAM, GPU NVIDIA L40S) with Ubuntu 24.04 and R-4.5.1 + BioC 3.22. We made two separate installations of R-4.5.1 on the machine: one linked to openblas-openmp and one linked to nvblas.

openblas nvblas openblas nvblas openblas nvblas
OPENBLAS_NUM_THREADS unset(*) unset(*) 4 4 1 1
Operation(**)
A_cp 0.088 0.366 0.088 0.357 0.099 0.350
A_tcp 0.799 1.376 0.821 1.347 0.817 1.343
MULT 0.118 0.083 0.119 0.082 0.119 0.082
A_svd_30 4.293 11.586 4.327 11.525 4.248 11.217
A_RSsvds_30 2.204 1.564 5.158 5.288 2.590 1.688
A_RSsvds_100 3.924 3.319 10.255 10.982 5.378 3.438
M_svd_30 22.033 32.580 24.522 30.852 24.421 31.348
M_svd_full 21.144 30.189 25.215 31.092 24.201 31.267
M_RSsvds_30 6.741 6.740 6.563 7.035 5.803 6.766
M_RSsvds_100 17.258 16.757 16.477 17.235 11.502 18.971
S_RSsvds_30 4.579 4.498 4.311 4.405 4.308 4.398
S_RSsvds_100 12.677 12.632 12.205 12.343 12.172 12.291

(*) With OPENBLAS_NUM_THREADS unset, openblas-openmp has access to kakapo1's 96 cpus!

(**) See "1. The operations that we benchmarked" at the top of this document for the details of each operation.

OpenBLAS vs Intel MKL

OpenBLAS vs ATLAS

OpenBLAS vs BLIS

3. Results on macOS

On macOS we compared vecLib-based BLAS with R "built-in" BLAS (a.k.a. Rblas).

Results on Mac Pro Intel

TODO

Results on Mac Pro Silicon

TODO

4. Impact on OSCA book

Work-in-progress!

The book builds for BioC 3.22 run on nebbiolo2: 72 cpus, 128 GB of RAM, Ubuntu 24.04, R-4.5.1. See https://bioconductor.org/checkResults/3.22/books-LATEST/

The table below reports bookdown::render_book("index.Rmd") times for the various sub-books of the OSCA book. All times are in seconds. OPENBLAS_NUM_THREADS is set to 4.

Rblas openblas openblas openblas
-pthread -openmp -serial
OSCA.intro 449.3 426.2 ??? 424.7
OSCA.basic 865.9 843.6 ??? 846.6
OSCA.advanced error! 3109.1 ??? 3147.3
OSCA.multisample 2893.8 2813.4 ??? 2862.8
OSCA.workflows error! 3475.3 TIMEOUT 3489.1
Total time ??? 10667.6 NA 10770.5
Overall speedup (*) --- ???% NA ???%

(*) Overall relative speedup is with respect to Rblas.

5. A look at correctness/accuracy

TODO

When the result is a matrix (A_cp, A_tcp, and MULT) the maximum relative error can simply be computed with max(abs((Ralt - Rref)/Rref)) where Rref is the result obtained with Rblas and Raltthe result obtained with the alternative BLAS.

6. How to install and use a BLAS alternative on Debian/Ubuntu

Primary documentation https://cran.r-project.org/doc/manuals/r-release/R-admin.html#BLAS

Using R internal BLAS

R includes its own BLAS (located in src/extra/blas/) which is compiled and used by default.

When running R configure script without --with-blas, the script reports something like:

External libraries: pcre2, readline, LAPACK(generic), curl, libdeflate

After compilation, sessionInfo() reports:

BLAS:   <R_HOME>/lib/libRblas.so
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0

and R CMD config BLAS_LIBS and R CMD config LAPACK_LIBS report:

-L/home/hpages/R/R-4.5.r88102/lib -lRblas  # BLAS_LIBS
-llapack                                   # LAPACK_LIBS

How to install and use the system generic BLAS

Not included in our benchmarks because it does not seem to provide any significant performance gains.

On Ubuntu 24.04, generic BLAS and LAPACK are provided by Ubuntu packages libblas3 and liblapack3. These are typically already present on a typical Ubuntu 24.04 installation:

sudo apt-get install libblas3 liblapack3

Path to the libraries:

/usr/lib/x86_64-linux-gnu/blas/libblas.so.3
/usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3

Configure with:

configure --with-blas="-L/usr/lib/x86_64-linux-gnu/blas -lblas" \
          --with-lapack="-L/usr/lib/x86_64-linux-gnu/lapack -llapack"

This reports:

External libraries: ..., BLAS(generic), LAPACK(generic), ...

sessionInfo() reports:

BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.12.0 
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.12.0

R CMD config BLAS_LIBS/LAPACK_LIBS reports:

-L/usr/lib/x86_64-linux-gnu/blas -lblas
-llapack

How to install and use OpenBLAS

Ubuntu provides 3 flavors of OpenBLAS:

  • libopenblas-pthread-dev (same as installing libopenblas-dev)
  • libopenblas-openmp-dev
  • libopenblas-serial-dev They all contain BLAS and LAPACK libraries.

On Ubuntu 24.04, install OpenBLAS with:

sudo apt-get install libopenblas-pthread-dev

Note that this will also install libopenblas0-pthread.

Configure with configure --with-blas="openblas" --with-lapack. This reports:

External libraries: ..., BLAS(OpenBLAS), LAPACK(in blas), ...

extSoftVersion()[["BLAS"]] reports:

## with libopenblas-pthread-dev:
/usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so
## with libopenblas-openmp-dev:
/usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblasp-r0.3.26.so
## with libopenblas-serial-dev:
/usr/lib/x86_64-linux-gnu/openblas-serial/libopenblas-r0.3.26.so

R CMD config BLAS_LIBS reports:

-lopenblas

Note that R CMD config LAPACK_LIBS returns a blank string.

Using update-alternatives to switch between various BLAS

Note that any flavor of OpenBLAS can also be use as a drop-in replacement for the reference BLAS with:

sudo update-alternatives --set libblas.so.3-x86_64-linux-gnu \
         /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3

In this case R should be configured with only --with-blas. The switch to an alternative BLAS can happen any time after R has been compiled.

To cancel the manual selection and put the system back in its normal state:

sudo update-alternatives --auto libblas.so-x86_64-linux-gnu
sudo update-alternatives --auto liblapack.so-x86_64-linux-gnu

How to install and use NVBLAS

Before anything else, use nvidia-smi to make sure that your machine has an NVIDIA GPU and that the NVIDIA drivers are working.

On Ubuntu 24.04 NVBLAS is provided by Ubuntu package libnvblas12:

sudo apt-get install libnvblas12

This will also install libcublas12 and libcublaslt12.

There are a few obstacles that make it a little bit harder to get R to use NVBLAS:

  • We can't use the update-alternatives method because NVBLAS is not a registered alternative for reference BLAS.
  • Another problem is that installing libnvblas12 does not create the /usr/lib/x86_64-linux-gnu/libnvblas.so symlink (to libnvblas.so.12), and also, for some reason, sudo ldconfig -v won't create it.
  • Also it seems that NVBLAS does not provide a full BLAS implementation, only a partial one, so we'll need to link to NVBLAS and OpenBLAS, in that order.
  • Finally, R configure's script doesn't not recognize NVBLAS (like it does for OpenBLAS, ATLAS, MKL, and BLIS), so configuring with
    --with-blas="-L/usr/lib/local/x86_64-linux-gnu -lnvblas"
    
    gets ignored and the script falls back to using Rblas.

Here's how we were able to word around these issues:

  • Manually create a symlink to /usr/lib/x86_64-linux-gnu/libnvblas.so.12.0.2.224 in /usr/local/lib/x86_64-linux-gnu/.
  • Run sudo ldconfig -v. This creates the libnvblas.so.12 symlink in /usr/local/lib/x86_64-linux-gnu/ (but still no libnvblas.so symlink).
  • Manually create the libnvblas.so -> libnvblas.so.12 symlink in /usr/local/lib/x86_64-linux-gnu/.
  • Create nvblas.conf file in /usr/local/lib/x86_64-linux-gnu/ with the following 2 lines in it:
    NVBLAS_CPU_BLAS_LIB /usr/lib/x86_64-linux-gnu/libopenblas.so
    NVBLAS_TILE_DIM 2048
    
    See https://docs.nvidia.com/cuda/nvblas/#configuration for more information about this step.
  • Add the following line to /etc/profile:
    export NVBLAS_CONFIG_FILE=/usr/local/lib/x86_64-linux-gnu/nvblas.conf
    
    Then logout and login again for the change to take effect.
  • Configure with: configure --with-blas="openblas" --with-lapack.
  • Manually change the value of BLAS_LIBS from -lopenblas to -lnvblas -lopenblas in Makeconf and etc/Makeconf.
  • Run make && make install as usual...

Finally start R and check that sessionInfo() reports something like:

BLAS:   /usr/lib/x86_64-linux-gnu/libnvblas.so.12.0.2.224 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-openmp/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0

R CMD config BLAS_LIBS should report:

-lnvblas -lopenblas

Note that R CMD config LAPACK_LIBS should return a blank string.

How to install and use MKL (Intel Math Kernel Library)

How to install and use ATLAS (a BLAS-like library)

How to install and use BLIS

7. Some notes about the Jetstream2 instances used for our benchmarks

We created four Ubuntu 24.04 CPU instances: blas1-4

Flavor: m3.quad (4 cpus, 15 GB of RAM)

Ubuntu packages installed:

sudo apt-get install libxml2-dev libdeflate-dev
@mfansler
Copy link

mfansler commented Oct 16, 2025

Really nice to see this Hervé! 😍

I've had interest in this as part of the Conda Forge R Team, wondering which BLAS implementations are best for different platforms. Below is some info I can share from the Conda Forge/Bioconda perspective, and running the same benchmarks you provided here.

BLAS in Conda Forge R

When Conda Forge compiles R it doesn't use the Rblas, Rlapack. Rather, it has a modular BLAS system that uses a Netlib reference during compilation and allows implementations to be swapped without recompilation. For example, there is one R 4.5.1 built for each platform, and then the end-user can pick whatever is appropriate for their system (e.g., MKL, OpenBLAS, Accelerate).

For macOS, there are currently four BLAS options: Netlib, OpenBLAS, Accelerate, and "new" Accelerate (macOS 13.3+)

Results on MacOS (M3 Pro 5P/6E )

Unfortunately, the Conda ecosystem has lag time for R and Bioconductor releases, so the latest I can benchmark is Bioconductor 3.20 (R 4.4.3). Hopefully, it's not too different - at the very least, one can see within these results how the BLAS's compare.

Results

netlib openblas accelerate newaccelerate
Operation(*)
A_cp 38.021 0.382 0.248 0.250
A_tcp 38.033 1.452 1.161 1.200
MULT 2.175 0.194 0.103 0.091
A_svd_30 123.437 9.862 5.253 5.624
A_RSsvds_30 13.832 2.336 2.504 2.745
A_RSsvds_100 26.894 4.585 5.411 5.965
M_svd_30 141.690 23.313 24.573 24.110
M_svd_full 141.828 22.446 23.793 23.782
M_RSsvds_30 26.762 7.059 5.079 5.289
M_RSsvds_100 77.251 19.821 14.262 14.464
S_RSsvds_30 3.071 3.143 3.136 3.132
S_RSsvds_100 8.656 8.983 8.681 8.958

(*) See "1. The operations that we benchmarked" at the top of this document for
the details of each operation.

Environment

Here's an example session info and Conda environment from the runs.

SessionInfo

## R version 4.4.3 (2025-02-28)
## Platform: aarch64-apple-darwin20.0.0
## Running under: macOS 26.0.1
## 
## Matrix products: default
## BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
## 
## 
## locale:
## [1] C.UTF-8/C.UTF-8/C.UTF-8/C/C.UTF-8/C.UTF-8
## 
## time zone: Europe/Copenhagen
## tzcode source: system (macOS)
## 
## attached base packages:
## [1] stats4    stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] scRNAseq_2.20.0             SingleCellExperiment_1.28.0
##  [3] SummarizedExperiment_1.36.0 Biobase_2.66.0             
##  [5] GenomicRanges_1.58.0        GenomeInfoDb_1.42.0        
##  [7] IRanges_2.40.0              S4Vectors_0.44.0           
##  [9] BiocGenerics_0.52.0         MatrixGenerics_1.18.0      
## [11] matrixStats_1.5.0           RSpectra_0.16-2            
## 
## loaded via a namespace (and not attached):
##  [1] tidyselect_1.2.1         alabaster.se_1.6.0       dplyr_1.1.4             
##  [4] blob_1.2.4               filelock_1.0.3           Biostrings_2.74.0       
##  [7] bitops_1.0-9             lazyeval_0.2.2           fastmap_1.2.0           
## [10] RCurl_1.98-1.17          BiocFileCache_2.14.0     GenomicAlignments_1.42.0
## [13] XML_3.99-0.17            digest_0.6.37            lifecycle_1.0.4         
## [16] ProtGenerics_1.38.0      alabaster.matrix_1.6.1   KEGGREST_1.46.0         
## [19] alabaster.base_1.6.1     RSQLite_2.4.3            magrittr_2.0.4          
## [22] compiler_4.4.3           rlang_1.1.6              sass_0.4.10             
## [25] tools_4.4.3              yaml_2.3.10              rtracklayer_1.66.0      
## [28] knitr_1.50               S4Arrays_1.6.0           bit_4.6.0               
## [31] curl_7.0.0               DelayedArray_0.32.0      abind_1.4-8             
## [34] BiocParallel_1.40.0      HDF5Array_1.34.0         gypsum_1.2.0            
## [37] grid_4.4.3               ExperimentHub_2.14.0     Rhdf5lib_1.28.0         
## [40] cli_3.6.5                rmarkdown_2.30           crayon_1.5.3            
## [43] generics_0.1.4           httr_1.4.7               rjson_0.2.23            
## [46] rhdf5_2.50.0             DBI_1.2.3                cachem_1.1.0            
## [49] zlibbioc_1.52.0          parallel_4.4.3           AnnotationDbi_1.68.0    
## [52] AnnotationFilter_1.30.0  BiocManager_1.30.26      XVector_0.46.0          
## [55] restfulr_0.0.16          alabaster.schemas_1.6.0  vctrs_0.6.5             
## [58] Matrix_1.7-4             jsonlite_2.0.0           bit64_4.6.0-1           
## [61] ensembldb_2.30.0         alabaster.ranges_1.6.0   GenomicFeatures_1.58.0  
## [64] jquerylib_0.1.4          glue_1.8.0               codetools_0.2-20        
## [67] BiocVersion_3.20.0       BiocIO_1.16.0            UCSC.utils_1.2.0        
## [70] tibble_3.3.0             pillar_1.11.1            rhdf5filters_1.18.0     
## [73] rappdirs_0.3.3           htmltools_0.5.8.1        GenomeInfoDbData_1.2.13 
## [76] httr2_1.2.1              R6_2.6.1                 dbplyr_2.5.1            
## [79] alabaster.sce_1.6.0      evaluate_1.0.5           lattice_0.22-7          
## [82] AnnotationHub_3.14.0     png_0.1-8                Rsamtools_2.22.0        
## [85] memoise_2.0.1            bslib_0.9.0              Rcpp_1.1.0              
## [88] SparseArray_1.6.0        xfun_0.53                pkgconfig_2.0.3

Input YAML

name: bench-bioc20-newaccelerate
channels:
  - conda-forge
  - bioconda
  - nodefaults
dependencies:
  # baseline
  - r-base=4.4
  - r-rmarkdown

  # BLAS variant
  - blas=*=newaccelerate

  # benchmark packages
  - bioconductor-scrnaseq=2.20
  - r-rspectra

Solved YAML

name: bench-bioc20-newaccelerate
channels:
  - conda-forge
  - bioconda
dependencies:
  - _r-mutex=1.0.1=anacondar_1
  - argcomplete=3.6.2=pyhd8ed1ab_0
  - bioconductor-alabaster.base=1.6.1=r44hf2c84a5_0
  - bioconductor-alabaster.matrix=1.6.1=r44hb11b259_0
  - bioconductor-alabaster.ranges=1.6.0=r44hdfd78af_0
  - bioconductor-alabaster.sce=1.6.0=r44hdfd78af_0
  - bioconductor-alabaster.schemas=1.6.0=r44hdfd78af_0
  - bioconductor-alabaster.se=1.6.0=r44hdfd78af_0
  - bioconductor-annotationdbi=1.68.0=r44hdfd78af_0
  - bioconductor-annotationfilter=1.30.0=r44hdfd78af_0
  - bioconductor-annotationhub=3.14.0=r44hdfd78af_0
  - bioconductor-biobase=2.66.0=r44h1b44f6e_0
  - bioconductor-biocfilecache=2.14.0=r44hdfd78af_0
  - bioconductor-biocgenerics=0.52.0=r44hdfd78af_3
  - bioconductor-biocio=1.16.0=r44hdfd78af_0
  - bioconductor-biocparallel=1.40.0=r44hb11b259_1
  - bioconductor-biocversion=3.20.0=r44hdfd78af_0
  - bioconductor-biostrings=2.74.0=r44h1b44f6e_1
  - bioconductor-data-packages=20250625=hdfd78af_0
  - bioconductor-delayedarray=0.32.0=r44h1b44f6e_1
  - bioconductor-ensembldb=2.30.0=r44hdfd78af_0
  - bioconductor-experimenthub=2.14.0=r44hdfd78af_0
  - bioconductor-genomeinfodb=1.42.0=r44hdfd78af_2
  - bioconductor-genomeinfodbdata=1.2.13=r44hdfd78af_0
  - bioconductor-genomicalignments=1.42.0=r44h1b44f6e_1
  - bioconductor-genomicfeatures=1.58.0=r44hdfd78af_0
  - bioconductor-genomicranges=1.58.0=r44h1b44f6e_2
  - bioconductor-gypsum=1.2.0=r44hdfd78af_0
  - bioconductor-hdf5array=1.34.0=r44h5badf08_1
  - bioconductor-iranges=2.40.0=r44h1b44f6e_2
  - bioconductor-keggrest=1.46.0=r44hdfd78af_0
  - bioconductor-matrixgenerics=1.18.0=r44hdfd78af_0
  - bioconductor-protgenerics=1.38.0=r44hdfd78af_1
  - bioconductor-rhdf5=2.50.0=r44hf2c84a5_1
  - bioconductor-rhdf5filters=1.18.0=r44hf2c84a5_1
  - bioconductor-rhdf5lib=1.28.0=r44h5badf08_0
  - bioconductor-rhtslib=3.2.0=r44h5badf08_2
  - bioconductor-rsamtools=2.22.0=r44hf2c84a5_1
  - bioconductor-rtracklayer=1.66.0=r44h5badf08_1
  - bioconductor-s4arrays=1.6.0=r44h1b44f6e_1
  - bioconductor-s4vectors=0.44.0=r44h1b44f6e_2
  - bioconductor-scrnaseq=2.20.0=r44hdfd78af_0
  - bioconductor-singlecellexperiment=1.28.0=r44hdfd78af_0
  - bioconductor-sparsearray=1.6.0=r44h1b44f6e_1
  - bioconductor-summarizedexperiment=1.36.0=r44hdfd78af_0
  - bioconductor-ucsc.utils=1.2.0=r44hdfd78af_0
  - bioconductor-xvector=0.46.0=r44h5badf08_2
  - bioconductor-zlibbioc=1.52.0=r44h1b44f6e_2
  - blas=2.137=newaccelerate
  - blas-devel=3.9.0=37_he8d73f0_newaccelerate
  - bwidget=1.10.1=hce30654_1
  - bzip2=1.0.8=hd037594_8
  - c-ares=1.34.5=h5505292_0
  - ca-certificates=2025.10.5=hbd8a1cb_0
  - cairo=1.18.4=h6a3b0d2_0
  - cctools_osx-arm64=1024.3=llvm21_1_haddd2d4_5
  - clang=21.1.3=default_hf9bcbb7_0
  - clang-21=21.1.3=default_h489deba_0
  - clang_impl_osx-arm64=21.1.3=h3492924_25
  - clang_osx-arm64=21.1.3=h07b0088_25
  - clangxx=21.1.3=default_h36137df_0
  - clangxx_impl_osx-arm64=21.1.3=h03b555f_25
  - clangxx_osx-arm64=21.1.3=h07b0088_25
  - compiler-rt=21.1.3=hce30654_0
  - compiler-rt21=21.1.3=h855ad52_0
  - compiler-rt21_osx-arm64=21.1.3=h2514db7_0
  - curl=8.14.1=h73640d1_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=h77eed37_3
  - fontconfig=2.15.0=h1383a14_1
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - freetype=2.14.1=hce30654_0
  - fribidi=1.0.16=hc919400_0
  - gfortran_impl_osx-arm64=14.3.0=h6d03799_1
  - gfortran_osx-arm64=14.3.0=h3c33bd0_0
  - gmp=6.3.0=h7bae524_2
  - graphite2=1.3.14=hec049ff_2
  - gsl=2.7=h6e638da_0
  - harfbuzz=12.1.0=haf38c7b_0
  - icu=75.1=hfee45f7_0
  - isl=0.26=imath32_h347afa1_101
  - jq=1.8.1=hbc156a2_0
  - krb5=1.21.3=h237132a_0
  - ld64=955.13=h5d6df6c_5
  - ld64_osx-arm64=955.13=llvm21_1_hde6573c_5
  - lerc=4.0.0=hd64df32_1
  - libasprintf=0.25.1=h493aca8_0
  - libblas=3.9.0=37_h010d69f_newaccelerate
  - libcblas=3.9.0=37_h1462f9a_newaccelerate
  - libclang-cpp21.1=21.1.3=default_h73dfc95_0
  - libcurl=8.14.1=h73640d1_0
  - libcxx=21.1.3=hf598326_0
  - libcxx-devel=21.1.3=h6dc3340_0
  - libdeflate=1.24=h5773f1b_0
  - libedit=3.1.20250104=pl5321hafb1f1b_0
  - libev=4.33=h93a5062_2
  - libexpat=2.7.1=hec049ff_0
  - libffi=3.4.6=h1da3d7d_1
  - libfreetype=2.14.1=hce30654_0
  - libfreetype6=2.14.1=h6da58f4_0
  - libgettextpo=0.25.1=h493aca8_0
  - libgfortran=15.2.0=hfcf01ff_1
  - libgfortran-devel_osx-arm64=14.3.0=hc965647_1
  - libgfortran5=15.2.0=h742603c_1
  - libglib=2.86.0=h1bb475b_0
  - libiconv=1.18=h23cfdf5_2
  - libintl=0.25.1=h493aca8_0
  - libjpeg-turbo=3.1.0=h5505292_0
  - liblapack=3.9.0=37_h7596bb1_newaccelerate
  - liblapacke=3.9.0=37_hfc133ca_newaccelerate
  - libllvm21=21.1.3=h8e0c9ce_0
  - liblzma=5.8.1=h39f12f2_2
  - libmpdec=4.0.0=h5505292_0
  - libnghttp2=1.67.0=hc438710_0
  - libpng=1.6.50=h280e0eb_1
  - libsqlite=3.50.4=h4237e3c_0
  - libssh2=1.11.1=h1590b86_0
  - libtiff=4.7.1=h7dc4979_0
  - libwebp-base=1.6.0=h07db88b_0
  - libxml2=2.15.0=h9329255_1
  - libxml2-16=2.15.0=h0ff4647_1
  - libxml2-devel=2.15.0=h9329255_1
  - libzlib=1.3.1=h8359307_2
  - llvm-openmp=21.1.3=h4a912ad_0
  - llvm-tools=21.1.3=h855ad52_0
  - llvm-tools-21=21.1.3=h91fd4e7_0
  - make=4.4.1=hc9fafa5_2
  - mpc=1.3.1=h8f1351a_1
  - mpfr=4.2.1=hb693164_3
  - ncurses=6.5=h5e97a16_3
  - oniguruma=6.9.10=h5505292_0
  - openssl=3.5.4=h5503f6c_0
  - pandoc=3.8.2=hce30654_0
  - pango=1.56.4=h875632e_0
  - pcre2=10.46=h7125dd6_0
  - pip=25.2=pyh145f28c_0
  - pixman=0.46.4=h81086ad_1
  - python=3.14.0=h8929636_101_cp314
  - python_abi=3.14=8_cp314
  - pyyaml=6.0.3=pyh7db6752_0
  - r-abind=1.4_8=r44hc72bb7e_1
  - r-askpass=1.2.1=r44h6168396_1
  - r-base=4.4.3=hb7b3c91_4
  - r-base64enc=0.1_3=r44h6168396_1008
  - r-bh=1.87.0_1=r44hc72bb7e_1
  - r-biocmanager=1.30.26=r44hc72bb7e_1
  - r-bit=4.6.0=r44h6168396_1
  - r-bit64=4.6.0_1=r44h6168396_1
  - r-bitops=1.0_9=r44h6168396_1
  - r-blob=1.2.4=r44hc72bb7e_3
  - r-bslib=0.9.0=r44hc72bb7e_1
  - r-cachem=1.1.0=r44h6168396_2
  - r-cli=3.6.5=r44hc1cd577_1
  - r-codetools=0.2_20=r44hc72bb7e_2
  - r-cpp11=0.5.2=r44h785f33e_2
  - r-crayon=1.5.3=r44hc72bb7e_2
  - r-curl=7.0.0=r44hbc3244a_1
  - r-dbi=1.2.3=r44hc72bb7e_2
  - r-dbplyr=2.5.1=r44hc72bb7e_1
  - r-digest=0.6.37=r44hc1cd577_1
  - r-dplyr=1.1.4=r44hc1cd577_2
  - r-ellipsis=0.3.2=r44h6168396_4
  - r-evaluate=1.0.5=r44hc72bb7e_1
  - r-fansi=1.0.6=r44h6168396_2
  - r-fastmap=1.2.0=r44hc1cd577_2
  - r-filelock=1.0.3=r44h6168396_2
  - r-fontawesome=0.5.3=r44hc72bb7e_1
  - r-formatr=1.14=r44hc72bb7e_3
  - r-fs=1.6.6=r44hc1cd577_1
  - r-futile.logger=1.4.3=r44hc72bb7e_1007
  - r-futile.options=1.0.1=r44hc72bb7e_1006
  - r-generics=0.1.4=r44hc72bb7e_1
  - r-glue=1.8.0=r44h6168396_1
  - r-highr=0.11=r44hc72bb7e_2
  - r-htmltools=0.5.8.1=r44hc1cd577_2
  - r-httr=1.4.7=r44hc72bb7e_2
  - r-httr2=1.2.1=r44hc72bb7e_1
  - r-jquerylib=0.1.4=r44hc72bb7e_4
  - r-jsonlite=2.0.0=r44h6168396_1
  - r-jsonvalidate=1.5.0=r44hc72bb7e_1
  - r-knitr=1.50=r44hc72bb7e_1
  - r-lambda.r=1.2.4=r44hc72bb7e_5
  - r-lattice=0.22_7=r44h6168396_1
  - r-lazyeval=0.2.2=r44h6168396_6
  - r-lifecycle=1.0.4=r44hc72bb7e_2
  - r-magrittr=2.0.4=r44h6168396_0
  - r-matrix=1.7_4=r44hb2d3ebe_1
  - r-matrixstats=1.5.0=r44h6168396_1
  - r-memoise=2.0.1=r44hc72bb7e_4
  - r-mime=0.13=r44h6168396_1
  - r-openssl=2.3.4=r44h7a56cc5_0
  - r-pillar=1.11.1=r44hc72bb7e_0
  - r-pkgconfig=2.0.3=r44hc72bb7e_5
  - r-plogr=0.2.0=r44hc72bb7e_1007
  - r-png=0.1_8=r44h4299753_3
  - r-purrr=1.1.0=r44h6168396_1
  - r-r6=2.6.1=r44hc72bb7e_1
  - r-rappdirs=0.3.3=r44h6168396_4
  - r-rcpp=1.1.0=r44hc1cd577_1
  - r-rcppeigen=0.3.4.0.2=r44hd057375_1
  - r-rcurl=1.98_1.17=r44hecea814_2
  - r-restfulr=0.0.16=r44hb39aee5_0
  - r-rjson=0.2.23=r44hc1cd577_1
  - r-rlang=1.1.6=r44hc1cd577_1
  - r-rmarkdown=2.30=r44hc72bb7e_0
  - r-rspectra=0.16_2=r44hd057375_2
  - r-rsqlite=2.4.3=r44hc1cd577_1
  - r-sass=0.4.10=r44hc1cd577_1
  - r-snow=0.4_4=r44hc72bb7e_4
  - r-stringi=1.8.7=r44he9eb878_1
  - r-stringr=1.5.2=r44h785f33e_1
  - r-sys=3.4.3=r44h6168396_1
  - r-tibble=3.3.0=r44h6168396_1
  - r-tidyr=1.3.1=r44hc1cd577_2
  - r-tidyselect=1.2.1=r44hc72bb7e_2
  - r-tinytex=0.57=r44hc72bb7e_1
  - r-utf8=1.2.6=r44h6168396_1
  - r-v8=8.0.1=r44hc1cd577_0
  - r-vctrs=0.6.5=r44hc1cd577_2
  - r-withr=3.0.2=r44hc72bb7e_1
  - r-xfun=0.53=r44hc1cd577_1
  - r-xml=3.99_0.17=r44hbfce4a6_4
  - r-yaml=2.3.10=r44h6168396_1
  - readline=8.2=h1d1bf99_2
  - setuptools=80.9.0=pyhff2d567_0
  - sigtool=0.1.3=h44b9a77_0
  - tapi=1300.6.5=h03f4b80_0
  - tk=8.6.13=h892fb3f_2
  - tktable=2.10=h3c7de25_7
  - toml=0.10.2=pyhd8ed1ab_1
  - tomlkit=0.13.3=pyha770c72_0
  - tzdata=2025b=h78e105d_0
  - xmltodict=1.0.2=pyhcf101f3_0
  - yaml=0.2.5=h925e9cb_3
  - yq=3.4.3=pyhe01879c_2
  - zlib=1.3.1=h8359307_2
  - zstd=1.5.7=h6491c7d_2
prefix: /Users/user/miniforge3/envs/bench-bioc20-newaccelerate

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment