首页/文章/ 详情

AMD处理器到底适不适合科学计算

6月前浏览10000

本文摘要(由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:

import numpy as np
import time
import platform
A = np.random.rand(10000, 10000)
B = np.random.rand(10000, 10000)
t1=time.time()
A@B
t2=time.time()
print('time',t2-t1)

和python的numpy库对比,确实matlab慢了不少。实际上,matlab早期版本在检测到cpu类型是intel处理器后,就会调用Intel MKL(路径内核库),并调用AVX2指令集,获得理想性能。而如果不是intel处理器,matlab就会使用SSE指令集,效率较低。另有信息表明,matlab2020a以上版本已经修正了在amd处理器上的这一劣势。并且,实际上对于早期版本,也是有方法进行处理使得matlab表现更优的。

    具体方法:增加系统环境变量MKL_DEBUG_CPU_TYPE


在完成上述操作后,matlab表现如下:

计算时间达到了令人惊讶的4.29s!这真是极大的提升,并且已经超过了numpy。
实际上,无论是matlab还是numpy,在这种基本的矩阵运算,都是通过调用blas和lapack库完成的,实际上,blas和lapack库基本上定义了一套矩阵运算的标准。Intel MKL库则集成了blas,lapack,pardiso和其他一些FFT的库,具有极高的性能,并且自动并行,用户只需要通过fortran,C或C  语言来使用这些库。
通过fortran调用mkl_blas95的gemm函数测试该计算的耗时如下(O2优化):

速度略快于matlab。
另外,在贴吧amd吧中有吧友对该规模的计算用9900k进行matlab下的测试:

可见对于matlab计算,3900k略慢于同价位下的9900k,不过相差并不太多,可以接受。

【完】

来源:有限元术

MATLABUGpython理论科普
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-06-13
最近编辑:6月前
寒江雪_123
硕士 | cae工程师 签名征集中
获赞 49粉丝 106文章 57课程 9
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈