scalapack 需要带螺纹的还是不带螺纹的 blas?

计算科学 线性代数 并行计算 布拉斯
2021-12-07 06:32:50

我正在编译一个 blas 以与 scalapack 一起使用。一些blas,比如openblas,自然是多线程的,但是scalapack使用mpi,所以可能需要一个单线程的blas?那么我的问题是:

  • scalapack 需要多线程 blas 吗?单线程 blas?或者它在任何一个上都可以正常工作,因为例如,它在运行时以某种方式强制线程数为 1?
  • 如果scalapack在运行时强制线程数为1,它是如何做到的?这适用于openblas吗?似乎 openblas 中的 api 是openblas_set_num_threads(1),这听起来不像是一个特别便携的命令,而且听起来这样的配置是 blas 特定的?

编辑:我想我可以只使用多线程 OpenBLAS,然后打电话给openblas_set_num_threads(1)自己?

1个回答

你必须选择。运行具有减少 MPI 等级计数的线程化 BLAS 可能比运行每个等级一个线程的大量等级提供更好的性能。如果你有p处理器内核,然后是任何整数对trtrp是线程组合的可行可能性(t) 和排名 (r)。其中最快的将取决于您的机器和您的问题。典型的选择是r=pt=1r=st=p/s在哪里s是节点中的 CPU 插槽数。至少你应该测试这两个。不要忘记选择适当的等级和线程绑定到套接字,否则您的性能可能会受到影响。