前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >英特尔MKL加速AMD计算可达3倍?AMD Yes

英特尔MKL加速AMD计算可达3倍?AMD Yes

作者头像
机器之心
发布2020-02-24 12:27:53
2.4K0
发布2020-02-24 12:27:53
举报
文章被收录于专栏:机器之心机器之心

机器之心报道

参与:思源、一鸣、Jamin

数学计算中的硬件加速是社区经常探讨的话题,如果能够利用一些库和硬件的优势,无疑能够帮助科研、生产等。近日,一个优化 AMD CPU 的帖子在 Matlab 社区引起讨论——通过几行代码,将 AMD CPU 加速 250%,进而帖子作者将方法推广到了其他社区,介绍了更普适性的优化方法。

从 Matlab 优化说起

在此前的研究中,作者在 Matlab 社区发起讨论:如何能够使得 Matlab 在 AMD Ryzen/TR CPUs 使用快速代码路径,从而使得性能提升 250%?

众所周知,Matlab 在 AMD CPU 上使用 Intel 数学内核库(MKL)的运行速度非常慢。因为 Intel MKL 会使用一个有区分的 CPU 调度器,而鉴于 CPU 对 SIMD 的支持,该调度器并不会使用有效代码路径,但是会基于供应商的字符串查询结果进行操作。如果 CPU 是 AMD 的,则可以通过系列调整,使得性能有较大的提升。详情参照:https://www.reddit.com/r/matlab/comments/dxn38s/howto_force_matlab_to_use_a_fast_codepath_on_amd/?sort=new

如下图所示,在 Matlab 上测试不同 CPU 加速环境下的性能,就能得到惊人的效果。在 AMD 上加载英特尔 MKL 加速工具,也能获得很大的提升:

综合基准测试结果:

而这一讨论在 Matlab 社群中广为流传,自从发布之后,便有更多社区的开发者来信与作者进行深度的讨论(比如:Pytorch/Numpy/Anaconda/Tensorflow 等等)。所以,这篇新的讨论将更为系统的去分享操作思路,介绍其原理。

英特尔的库,加速 AMD 的芯片?

一般来说,英特尔的数学核库(Intel Math Kernel Library:MKL)是很多人默认使用的库。它在 AMD CPU 上运行地非常慢,因为 MLK 使用一种区分性的(discriminative)CPU 调度器,这种调度器不能根据 SIMD 的支持来有效使用代码路径。如果是 AMD CPU,不管 CPU 到底支不支持更高效的 SIMD 扩展,MKL 不支持使用 SSE3-SSE4 或 AVX1/2 扩展,它只能回到 SSE。

而帖子中则提供了一种方法,能够强制 MKL 支持 AVX2,它和 vendor string 独立,而且只需要一分钟就能完成。如果你有一个 AMD CPU,基于 Zen/Zen+/Zen2 µArch Ryzen/Threadripper 等架构,那么它可以被加速到惊人的程度。

另外,这种方法也可以在更老的 Excavator µArch 上应用,但是请*不要将这个方法用在比 Excavator µArch 更老的 AMD CPU 上,以及英特尔的系统上。*

事实上,这种性能提升是非常明显的,根据操作系统和 CPU 的不同,性能加速幅度在 30% 到 300% 不等。

使用方法

在 Windows 系统上

如果你使用的是 Windows 系统,你首先需要管理员权限。

然后,在 system environment variables 里键入「MKL_DEBUG_CPU_TYPE=5」。这将会对所有使用 NKL 的实例进行应用。

你可以在上图的窗口中键入指令,或者在 CMD 窗口中键入:

setx /M MKL_DEBUG_CPU_TYPE 5

这样一来,所有使用 MKL 的程序都会被永久性的改变设置,直到你修改变量的输入。

Linux

打开终端,在运行同一个实例前键入如下命令即可:

export MKL_DEBUG_CPU_TYPE=5

如果要永久性的改变系统中所有的实例,可在终端中键入:

echo 'export MKL_DEBUG_CPU_TYPE=5' >> ~/.profile

Reddit 热评

首先第一个疑惑就是,这样做能 work 吗?还真有开发者直接上手测试,Inori 在 Reddit 上表明,通过实际基准测试,他确认这样做能提升 NumPy 25% 到 90% 的性能。如下所示,在 AMD 不采用 MKL 的情况下,两个 4096*4096 的矩阵乘法需要 1 秒钟,而加了 MKL 后只需要 0.56 秒。

Inori 后续还提供了基准测试脚本,并表示他也会继续试试 MKL 对 TensorFlow 的加速能力(AMD 芯片下)。

在 Reddit Matlab 原板块中,很多开发者表示计算速度确实快了很多:

对于这种奇淫技巧,当然并不是所有开发者都赞同的,如果就我们自己用用还行,要是放到生产中,其并不稳定,也不安全。wind_of_amazingness 表示,mkl 从没有真正完整地在 AMD 芯片上测试过,这表示它会有一些意想不到的误差,例如数值不稳定等。

最后,也许除了速度,我们还需要测试计算误差,这样才能真正放心使用 MKL 库加速 AMD 芯片的数值计算。

参考链接:https://www.reddit.com/r/MachineLearning/comments/f2pbvz/discussion_workaround_for_mkl_on_amd/

本文为机器之心报道,转载请联系本公众号获得授权。

✄------------------------------------------------

加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com

投稿或寻求报道:content@jiqizhixin.com

广告 & 商务合作:bd@jiqizhixin.com

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档