线程化 OpenBlas 基准测试比系统 blas 慢?

计算科学 并行计算 拉帕克 布拉斯
2021-12-22 21:02:21

我不确定我是否做错了什么,或者我只是不了解优化 BLAS 的概念。

我是一名 FEM 工程师,试图优化我在小型集群计算机(六个节点)上的设置。我在开源工具上构建一切。我的目标是使用强大的设置来管理大型机械模拟。在最终使用 MPI 编译我的程序后,我正在阅读使用优化的 BLAS 将帮助我进一步缩短计算时间。

我安装了OpenBlas并构建了 Lapack 3.4.2lapack 基准测试的结果令人惊讶。它们在系统(未优化)BLAS 中速度最快,并且运行时间随着指定线程数量的增加而增加(export OPENBLAS_NUM_THREADS=i)。scalapack也是如此此外,虽然我在这台机器上可用,但i>16似乎只使用线程。没关系,因为无论如何我都希望有人在一个节点上运行几个 MPI 进程(4 个?),但我觉得这很可疑。1632

我是初学者,不知道从哪里开始挖掘。有人可以给我一个提示吗?我在这里i=32有一个日志的粘贴箱

OpenBLAS build complete.
OS               ... Linux
Architecture     ... x86_64 
BINARY           ... 64bit
C compiler       ... GCC  (command line : gcc)
Fortran compiler ... GFORTRAN  (command line : gfortran)
Library Name     ... libopenblas_sandybridgep-r0.2.5.a (Multi threaded; Max num-threads is 32)

Lapack 3.4.2 make.inc(默认更改)

 BLASLIB = /path/to/libopenblas.a -lpthread

-编辑:(更多信息,因为@Aron Ahmadia的评论)

  • 系统 BLAS 日志
  • i=1日志
  • i=32日志
  • CentOS 6.3 版(最终版)
  • blas-devel-3.2.1-4.el6.x86_64
  • gcc版本 4.4.6 20120305(Red Hat 4.4.6-4)(GCC)(与 相同gfortran)。
  • MemTotal: 198202172 kB

    $ grep "Xeon(R) CPU E5-2690 0 @ 2.90GHz" /proc/cpuinfo | wc -l 
    32. 
    
1个回答

OpenBLAS 被设计为一个库,可以有效地解决科学计算中出现的最常见的计算挑战问题、需要几分钟或更长时间才能解决的线性代数问题。正如@Stefano 和@JedBrown 在评论中所暗示的那样,您不一定会严重依赖 BLAS 库的性能来获得 FEM 求解器的性能,更重要的是使用免费提供的强大软件框架,例如PETSc ,(可能使用deal.IIFEniCS作为上面更友好的 FEM 界面),来开发您的软件。在极少数情况下,我不建议使用高级 FEM 和线性代数框架来开发和执行您的代码。

在这种情况下,您没有看到性能差异,因为您使用的是 LAPACK 的验证测试,它解决了相当小的问题。从 shell 启动进程并动态加载它们的运行时间会混淆您的性能测量。

正如评论中所建议的,通过测量更大的问题,您会注意到性能的相对显着提高。