AMD处理器到底适不适合科学计算
本文摘要(由AI生成):
AMD处理器在早期版本的matlab中性能表现有待提升,主要是由于matlab对Intel处理器的优化和AMD处理器使用的指令集效率较低。然而,自2020a版本以后,matlab已经修正了在AMD处理器上的劣势。通过增加系统环境变量,matlab在AMD处理器上的性能得到了极大提升,甚至超过了numpy。总体来说,虽然AMD处理器在某些特定情况下可能略逊于同价位的Intel处理器,但差距并不大,对于科学计算来说仍然是可接受的。
AMD处理器到底适不适合科学计算,这是一个经常被讨论的问题。常见的针对该问题的测试或者质疑均在于诸如amd对matlab负优化,在amd的cpu上运行matlab效率远低于同级别intel处理器,甚至在很多编程群里,经常会出现“amd处理器能否用mkl库”等提问。
知乎上问题“Matlab/NumPy/C Eigen 速度差距为什么很大?”测试了10000x10000的矩阵乘法,具体计算时间对比如下:
实际上,对于早期版本的matlab(2020a以前),在amd的cpu表现上确实有待提升。以笔者的3900x处理器用matlab2019a测试为例:
Python调用numpy:
A = np.random.rand(10000, 10000)B = np.random.rand(10000, 10000)
和python的numpy库对比,确实matlab慢了不少。实际上,matlab早期版本在检测到cpu类型是intel处理器后,就会调用Intel MKL(路径内核库),并调用AVX2指令集,获得理想性能。而如果不是intel处理器,matlab就会使用SSE指令集,效率较低。另有信息表明,matlab2020a以上版本已经修正了在amd处理器上的这一劣势。并且,实际上对于早期版本,也是有方法进行处理使得matlab表现更优的。 具体方法:增加系统环境变量MKL_DEBUG_CPU_TYPE:
计算时间达到了令人惊讶的4.29s!这真是极大的提升,并且已经超过了numpy。实际上,无论是matlab还是numpy,在这种基本的矩阵运算,都是通过调用blas和lapack库完成的,实际上,blas和lapack库基本上定义了一套矩阵运算的标准。Intel MKL库则集成了blas,lapack,pardiso和其他一些FFT的库,具有极高的性能,并且自动并行,用户只需要通过fortran,C或C 语言来使用这些库。通过fortran调用mkl_blas95的gemm函数测试该计算的耗时如下(O2优化):
另外,在贴吧amd吧中有吧友对该规模的计算用9900k进行matlab下的测试:
可见对于matlab计算,3900k略慢于同价位下的9900k,不过相差并不太多,可以接受。【完】
来源:有限元术