ATLAS是BLAS / LAPACK的免费替代产品,可在编译时自动调整为计算机。MKL是英特尔提供的商业库。在性能方面,这两个库是否具有可比性,还是MKL在某些任务上具有优势?如果是这样,哪个?
ATLAS是BLAS / LAPACK的免费替代产品,可在编译时自动调整为计算机。MKL是英特尔提供的商业库。在性能方面,这两个库是否具有可比性,还是MKL在某些任务上具有优势?如果是这样,哪个?
Answers:
BLAS不是整体的。BLAS1和BLAS2受到内存带宽的限制,您无法做很多事情来加快它们的速度(循环展开,级别2的缓存阻塞)。BLAS3更有趣,此处的原型基准是矩阵-矩阵乘法。据我所知,GOTOBlas一直是这里的明显赢家,例如,请参阅此比较或该比较和理由。
现在已经过了几年,我们有了BLIS项目。它是MKL的最佳免费替代软件。
个人资料,不要猜测!(也可以用作“基准,不要猜测!”)
没有什么可以说的,这在很大程度上取决于您要执行的任务(例如BLAS 1/2/3)和您所使用的硬件(显然,Intel MKL不在ARM处理器上运行),例如;但即使在Intel处理器中,您也可以预期性能差异)。
我认为值得一提的另一件事是,AMD还提供了针对其处理器进行调整的数学库,即AMD核心数学库。它不像英特尔的MKL那样功能丰富,但确实包括BLAS。
该问题的先前答案涵盖了大多数要点,但是我想就此添加一个评论:
MKL在某些任务上有优势吗?
MKL团队处于独特的位置,可以了解未来的Intel指令集及其在特定处理器中的实现。此外,他们可以访问专有处理器模拟器和预生产硬件,而英特尔以外的任何人都无法使用。因此,MKL在有关未来产品的知识程度以及何时获得这些知识方面具有优势。因此,至少在具有新功能的产品生命周期的早期,如果它们能比其他任何人提供更好的BLAS实现,也就不足为奇了。
另一方面,英特尔对AVX-512指令集非常开放,并提供了英特尔®软件开发仿真器(SDE),使开发人员可以在本身不支持这些指令的处理器上仿真AVX-512指令。因此,如果BLAS的高质量开源实现可用于支持AVX-512的英特尔处理器早在这些产品的生命周期中,就不足为奇了。
当然,关于特定处理器的详细信息与密集线性代数算法的基础知识有多大差异还无法完全解决。以下引用比我能更好地解决此问题:
在理论上,理论与实践之间没有区别。但是,实际上有。
全面披露:我为英特尔工作。
我认为供应商BLAS库与开放源代码BLAS库之间的主要区别在于开放源代码支持最新硬件功能所花费的时间。
由于BLAS被广泛使用,因此支持最新的硬件功能对供应商来说很有意义。例如,考虑2011年1月随“ sandy-bridge”处理器引入的Intel的AVX矢量扩展。MKL甚至在CPU可用之前就具有AVX支持,但直到最近ATLAS(2011年底)才开始推出对AVX的支持。 。
另外,如果您的应用程序确实需要性能,并且在开始对不同的BLAS库进行基准测试或开始研究优化任何东西之前,请对应用程序进行概要分析。通常,人类的直觉不是一个非常有效的探查器预测器,至少我知道我的不是!因此,与其花费时间随机优化,不如对应用程序进行概要分析并系统地解决每个瓶颈。