OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  代码  ›  OpenBLAS — 高性能线性代数库

OpenBLAS — 高性能线性代数库

 
  model ·  2026-03-03 00:02:06 · 2 次点击  · 0 条评论  

OpenBLAS

加入 Gitter 聊天室

Travis CI: 构建状态

AppVeyor: 构建状态

简介

OpenBLAS 是一个基于 GotoBLAS2 1.13 BSD 版本的优化 BLAS 库。

请阅读 OpenBLAS wiki 页面上的文档:http://github.com/xianyi/OpenBLAS/wiki

二进制包

我们为以下平台提供二进制包。

  • Windows x86/x86_64

你可以从 sourceforge.net 上的文件托管服务 下载它们。

从源代码安装

从项目主页下载:http://xianyi.github.com/OpenBLAS/

或者,从 git://github.com/xianyi/OpenBLAS.git 检出代码。

常规编译

  • 输入 make 以自动检测 CPU。
    或者
  • 输入 make TARGET=xxx 来设置目标 CPU,例如 make TARGET=NEHALEM。完整的目标列表在文件 TargetList.txt 中。

交叉编译

请使用交叉工具链设置 CC 和 FC。然后,使用你的主机 C 编译器设置 HOSTCC。最后,显式设置 TARGET。

示例:

在 X86 机器上,为龙芯 3A CPU 编译此库。

make BINARY=64 CC=mips64el-unknown-linux-gnu-gcc FC=mips64el-unknown-linux-gnu-gfortran HOSTCC=gcc TARGET=LOONGSON3A

在 X86 机器上,使用龙芯编译器(基于 Open64)为龙芯 3A CPU 编译此库。

make CC=loongcc FC=loongf95 HOSTCC=gcc TARGET=LOONGSON3A CROSS=1 CROSS_SUFFIX=mips64el-st-linux-gnu-   NO_LAPACKE=1 NO_SHARED=1 BINARY=32

调试版本

make DEBUG=1

在 Power CPU 上编译并启用 MASS 支持(可选依赖)

IBM MASS 库包含一组针对 POWER 架构优化的 C、C++ 和 Fortran 语言数学函数。启用 MASS 的 OpenBLAS 要求 POWER 上运行 64 位、小端序操作系统。可按以下方式安装该库:

  • 在 Ubuntu 上:

    wget -q http://public.dhe.ibm.com/software/server/POWER/Linux/xl-compiler/eval/ppc64le/ubuntu/public.gpg -O- | sudo apt-key add -

    echo "deb http://public.dhe.ibm.com/software/server/POWER/Linux/xl-compiler/eval/ppc64le/ubuntu/ trusty main" | sudo tee /etc/apt/sources.list.d/ibm-xl-compiler-eval.list

    sudo apt-get update

    sudo apt-get install libxlmass-devel.8.1.5

  • 在 RHEL/CentOS 上:

    wget http://public.dhe.ibm.com/software/server/POWER/Linux/xl-compiler/eval/ppc64le/rhel7/repodata/repomd.xml.key

    sudo rpm --import repomd.xml.key

    wget http://public.dhe.ibm.com/software/server/POWER/Linux/xl-compiler/eval/ppc64le/rhel7/ibm-xl-compiler-eval.repo

    sudo cp ibm-xl-compiler-eval.repo /etc/yum.repos.d/

    sudo yum install libxlmass-devel.8.1.5

安装 MASS 库后,使用 USE_MASS=1 编译 openblas。

示例:

在 Power8 上编译并启用 MASS 支持:

make USE_MASS=1 TARGET=POWER8

安装到指定目录(可选)

示例:

make install PREFIX=你的安装目录

默认目录是 /opt/OpenBLAS。

支持的 CPU 和操作系统

请阅读 GotoBLAS_01Readme.txt。

额外支持的 CPU:

x86/x86-64:

  • Intel Xeon 56xx (Westmere):使用 GotoBLAS2 Nehalem 代码。
  • Intel Sandy Bridge:在 x86-64 上使用 AVX 优化的 Level-3 和 Level-2 BLAS。
  • Intel Haswell:在 x86-64 上使用 AVX2 和 FMA 优化的 Level-3 和 Level-2 BLAS。
  • AMD Bobcat:使用 GotoBLAS2 Barcelona 代码。
  • AMD Bulldozer:x86-64 ?GEMM FMA4 内核。(感谢 Werner Saar)
  • AMD PILEDRIVER:使用 Bulldozer 代码并进行了一些优化。
  • AMD STEAMROLLER:使用 Bulldozer 代码并进行了一些优化。

MIPS64:

  • ICT 龙芯 3A:优化的 Level-3 BLAS 及部分 Level-1、Level-2 BLAS。
  • ICT 龙芯 3B:实验性支持。

ARM:

  • ARMV6:针对 vfpv2 和 vfpv3-d16 优化的 BLAS(例如 BCM2835、Cortex M0+)。
  • ARMV7:针对 vfpv3-d32 优化的 BLAS(例如 Cortex A8、A9 和 A15)。

ARM64:

  • ARMV8:实验性支持。
  • ARM Cortex-A57:实验性支持。

IBM zEnterprise 系统:

  • Z13:优化的 Level-3 BLAS。

支持的操作系统:

使用方法

链接 libopenblas.a 或使用 -lopenblas 链接共享库。

使用环境变量设置线程数。

示例:

export OPENBLAS_NUM_THREADS=4

export GOTO_NUM_THREADS=4

export OMP_NUM_THREADS=4

优先级为:OPENBLAS_NUM_THREADS > GOTO_NUM_THREADS > OMP_NUM_THREADS。

如果你使用 USE_OPENMP=1 编译此库,则应设置 OMP_NUM_THREADS 环境变量。当启用 USE_OPENMP=1 时,OpenBLAS 会忽略 OPENBLAS_NUM_THREADS 和 GOTO_NUM_THREADS。

在运行时设置线程数。

我们提供了以下函数在运行时控制线程数。

void goto_set_num_threads(int num_threads);

void openblas_set_num_threads(int num_threads);

如果你使用 USE_OPENMP=1 编译此库,也应使用上述函数。

报告问题

请在 https://github.com/xianyi/OpenBLAS/issues 提交 issue。

联系

  • OpenBLAS 用户邮件列表:https://groups.google.com/forum/#!forum/openblas-users
  • OpenBLAS 开发者邮件列表:https://groups.google.com/forum/#!forum/openblas-dev

更新日志

请查看 Changelog.txt 以了解与 GotoBLAS2 1.13 BSD 版本的差异。

故障排除

  • 请先阅读 常见问题解答
  • 在 Linux/MingW/BSD 上编译 Sandy Bridge AVX 内核时,请使用 gcc 4.6 及以上版本。
  • 在 Sandy Bridge 微架构上编译此库时,请使用 Clang 3.1 及以上版本。Clang 3.0 会生成错误的 AVX 二进制代码。
  • CPU/核心数应小于或等于 256。在 Linux x86_64(amd64) 上,如果你使用 BIGNUMA=1 构建库,则实验性支持最多 1024 个 CPU/核心和 128 个 NUMA 节点。
  • OpenBLAS 默认不设置处理器亲和性。在 Linux 上,你可以通过注释 Makefile.rule 中的 NO_AFFINITY=1 行来启用处理器亲和性。但这可能会导致与 R parallel 的冲突
  • 在龙芯 3A 上,make test 可能会因为 pthread_create 错误而失败,错误代码为 EAGAIN。但是,在 shell 中运行相同的测试用例时,它会正常工作。

贡献

  1. 查看现有 issue 或创建一个新 issue,围绕功能想法或 bug 展开讨论。
  2. Fork OpenBLAS 仓库以开始进行更改。
  3. 编写一个测试,证明 bug 已修复或功能按预期工作。
  4. 发送 pull request。请确保将你自己添加到 CONTRIBUTORS.md 中。

捐赠

请阅读 此 wiki 页面

2 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor