Octave 或 Matlab 的 BLAS 库,最好支持 GPU?

计算科学 线性代数 matlab 参考请求 布拉斯 八度
2021-11-28 22:57:40

我只是搜索了一下 BLAS 实现,并对周围的大量库感到惊讶。有人知道各种图书馆的基准或其他评级吗?

  1. 他们是多么容易安装。
  2. 表现。
  3. 他们使用 Octave 或 Matlab 是多么容易。

我意识到所有这些都取决于操作系统和硬件以及软件的版本。但此时欢迎任何意见。

2个回答

在开源 BLAS 中,据我所知,OpenBLAS ( http://www.openblas.net/ ) 是最好的选择。该网站有一个 DGEMM 基准,与 MKL(见下文)和参考 Fortran BLAS 进行比较。该库是线程化的,并用 C 和汇编语言编写。对于 GPU,有使用 OpenCL 实现 BLAS的 clBLAS ( https://github.com/clMathLibraries/clBLAS )。不幸的是,我不知道 clBLAS 的基准。

如果闭源专有 BLAS 实现没问题,英特尔 MKL 是在多核 CPU 和 Xeon-Phi 加速器上使用的不错选择。它不仅有 BLAS - 它还包括许多 LAPACK 函数和 FFT,例如。NVIDIA 的 CuBLAS 是支持 CUDA 的 GPU 的一个选项。cuBLAS 在http://developer.download.nvidia.com/compute/cuda/6_5/rel/docs/CUDA_6.5_Performance_Report.pdf与 MKL 进行了比较。

我不知道 ClBLAS,但其他的很容易在 Linux 上安装;文档很清楚。至于与 Octave/MATLAB 的接口,我不知道,因为我不使用它们,但希望其他人可以回答这个问题。

MATLAB 已经为它的 BLAS 实施提供了英特尔 MKL。没有理由更换它。

至于使用 GPU,如果您将数组设置为 a gpuArray(为此,只需执行gpuArray(A)),那么您可以使用 MATLAB 的矩阵乘法,它将使用来自 MAGMA 的优化内核来执行计算你可以用谷歌来解释一些人说这比 CUBLAS 好 10%,但评论通常是旧的(2013 年)和 blablabla:它足够快,如果你在 MATLAB 中它可能是最好的选择(尽管如果你真的想要性能,您应该使用 CUBLAS 来查看 Julia,它将具有更低的互操作开销和更快的用户编译内核)。

您找不到“两者兼有”的 BLAS 实现的原因是因为实现必须完全不同才能充分利用 GPU,因此在这一点上,它们也可能是不同的库,因为捆绑代码的原因是通常用于某种形式的代码重用。您可以尝试在 MATLAB 中换出后端 BLAS 实现来学习,但它可能不会导致性能变化,它可能会带来困难,因为它非常无证。这只是闭源软件的众多问题之一。如果您希望能够修改每个细节,交换 BLAS 库和 libm 实现等,您可能需要考虑使用开源软件,如上所述,我推荐 Julia(或者您可以用 Octave 做这个,虽然我没有