ATLAS 是免费的 BLAS/LAPACK 替代品,可在编译时根据机器自行调整。MKL 是英特尔提供的商业库。这两个库在性能方面是否具有可比性,或者 MKL 在某些任务上是否占上风?如果有,有哪些?
ATLAS 和 MKL 之间的性能差异?
MKL(来自英特尔)针对英特尔处理器进行了优化,在许多情况下可能占据“上风”。但它也因为 AMD 处理器选择“最差”的代码路径而“出名”,如此处所述。
之前对这个问题的回答已经涵盖了大部分要点,但我想就此添加一条评论:
MKL 在某些任务上占上风吗?
MKL 团队在了解未来的英特尔指令集及其在特定处理器中的实施方面处于独特的地位。此外,他们可以使用英特尔以外的任何人都无法使用的专有处理器模拟器和预生产硬件。因此,MKL 在对未来产品的了解程度以及他们何时获得这些知识方面具有优势。因此,如果他们比其他任何人产生了更好的 BLAS 实现,至少在具有新功能的产品生命周期的早期,这应该不会太令人惊讶。
另一方面,英特尔对 AVX-512 指令集非常开放,并提供了英特尔® 软件开发模拟器(SDE),允许开发人员在本机不支持这些指令的处理器上模拟 AVX-512 指令。因此,如果 BLAS 的高质量开源实现可用于在这些产品生命周期早期支持 AVX-512 的英特尔处理器,那也就不足为奇了。
当然,拥有特定处理器的详细信息与密集线性代数算法的基本原理之间有多大的区别还没有完全解决。以下引用比我更好地解决了这个问题:
从理论上讲,理论与实践没有区别。但是,在实践中,确实存在。
全面披露:我为英特尔工作。
简介,不要猜测!(也可以作为“基准,不要推测!”)
没有什么可以说的通用性,它在很大程度上取决于您要执行的任务(例如 BLAS 1/2/3)和您所使用的硬件(显然,英特尔 MKL 不能在 ARM 处理器上运行,因为示例;但即使在 Intel 处理器中,您也可以预料到性能差异)。
我认为值得一提的另一件事是 AMD 还提供了针对其处理器调整的数学库AMD Core Math Library。它不像英特尔的 MKL 那样功能丰富,但它确实包含 BLAS。