我应该无条件地信任 BLAS 库以提高性能吗

SHould I trust BLAS libraries unconditionally to improve performance

我正在从事一些涉及计算密集型图像处理算法的项目,这些算法涉及许多可以由 BLAS 库处理的步骤(主要是 1 级例程)。由于我的数据非常大,因此考虑使用 BLAS 当然是有意义的。

我见过一些例子,其中优化的 BLAS 库提供了巨大的性能提升(矩阵矩阵乘法的加速因子 10 并不罕见)。

我应该尽可能地应用 BLAS 函数并盲目地相信它会产生更好的性能,还是应该逐个分析并只在必要时应用 BLAS?

盲目应用 BLAS 的好处是我现在可以节省一些时间,因为我不必详细分析我的代码。另一方面,仔细分析每种方法可能会给我最好的性能,但我想知道现在花几个小时是否值得,只是为了在 运行 软件后获得半秒的时间。

前段时间在一本书上看到:(1)优化的黄金法则:不要做(2)优化的黄金法则(专家专用):还不做。简而言之,我建议按以下方式进行:

  • 第 1 步:以最简单/最易读的方式实现算法
  • 第 2 步:衡量绩效
  • 第 3 步:如果(且仅当)性能不令人满意时,使用分析器检测热点。他们往往不是我们想的那样!!
  • 第 4 步:仅针对热点尝试不同的备选方案(衡量每个备选方案的性能)

更具体地说你的问题:是的,一个好的 BLAS 实现可以带来一些不同(它可以使用 AVX 指令集,并且对于矩阵乘法矩阵,将矩阵分解成块,以一种更高速缓存的方式 -友好),但同样,我不会 "trust unconditionally"(取决于 BLAS 的版本、数据、目标机器等...),然后 测量 性能和比较是绝对必要的。