酷睿i5性能瞬间提升20倍的秘诀!
副标题[/!--empirenews.page--]
Intel Distribution for Python在今年二月进行了更新——英特尔发布了Update 2版本。以“加速”为核心的它,相比原生Python环境有多大提升呢? 雷锋网获知,并行计算专家、前英特尔高级工程师James Reinders对老东家的产品进行了测试。他对外宣布:在配备四核i5的iMac上实现了20倍的性能加速,至于他是怎么做到的,请继续往下看(含代码)。 ames Reinders:利用Intel Distribution for Python,我实现了 Python 的20倍加速,并且可用单个命令关闭/启用。这还不是在最优情况下,而在虚拟环境——在 VirtualBox(下文简称VBox)上运行的openSUSE Linux Tumbleweed(即“滚动版本”),使用的机器是四核iMac。 这在Windows, Linux或OS X都能实现。英特尔并没有把openSUSE加入经他们测试过的Linux配置列表中(SUSE Enterprise在表中),但我在运行中并没有遇到任何问题。 这就是我怎么做的: 下载Anaconda命令行安装程序,地址为https://www.continuum.io/downloads 。 安装:% bash Anaconda2-4.3.0-Linux-x86_64.sh 安装英特尔加速器,作为一个单独的、可开启关闭的“环境”%conda config --add channels intel % conda create --name intelpy intelpython2_full python=2 运行示例程序,看到在我的openSUSE VBox设置上有15到20倍的速度提升。 % source deactivate intelpy % python < myprog.py np.sin 102400 10000 36.1987440586 np.cos 102400 10000 36.1938228607 np.tan 102400 10000 51.487637043 % source activate intelpy % python < myprog.py np.sin 102400 10000 1.76131296158 np.cos 102400 10000 1.83870100975 np.tan 102400 10000 3.38778400421 That’s all! The speed-ups are 20.6X, 19.7X, and 15.2X in this quick test running on a virtual machine. Here’s my little Python program: % cat myprog.py import numpy as np import time N = 102400 x = np.linspace(0.0123, 4567.89, N) def mine(x,Z,func,name): print name; start = time.time() for z in range ( 0, Z ) : y = func(x); end = time.time() print N, Z, end - start return mine(x,10000,np.sin,'np.sin') mine(x,10000,np.cos,'np.cos') mine(x,10000,np.tan,'np.tan') 我花很短时间搞起来这个程序,用来验证英特尔对加速NumPy中transcendental expression的承诺。Cosine, sine和tangent 是我还能记得的、搞TI calculator时候用的transcendental,所以我用它们来试。我决定对每一个进行十亿级测试——运行超过十万个数字的函数,重复超过一万次。 虽然未必是一个很有意思的程序,但对于加速而言是个不错的测试。 随时加速Python 我此前写过一篇文章,讨论“Python 加速”(“accelerated Python”)使其更适用于大数据和 HPC 应用。 在速度更快之外,我还展示了,使用Conda来开启/关闭加速是多么得容易。这非常赞,让安装它的决定变得更加安全、没有顾虑——因为该功能是一个可选项。(对新手的提醒: Anaconda 是针对 Python 算法包的集合,Conda则是package manager,即算法包管理器。我两个都用并且都很喜欢。) 我使用 “conda create”来创造被我称之为intelpy的环境。然后,我能够使用“source activate intelpy”、“source deactivate intelpy”来激活、关闭它。 Intel Distribution for Python 带来的大幅加速能力,让 “accelerated Python” 变得更实用更让人信服。 值得注意的是,“accelerated Python” 只是使用更快的Python算法库,不需要对代码做任何改动。当然,我们的Python代码必须使用了某些加速的东西,才能从中获益。 英特尔通过三大方面实现Python加速: 利用多核; 利用矢量指令(SIMD),比如 SSE, AVX, AVX2和AVX-512; 使用英特尔 Math Kernel Library (Intel MKL) 的更先进算法。 对于运行于矢量或矩阵上的程序,上述这些都会生效。对于偶尔的单独cosine,我们不应该期待大幅速度提升。同样的,对于单核CPU,我们也不应该有性能提升的幻想。当然,英特尔72核协处理器Xeon Phi会在大量多核应用的跑分中领先。在我的例子中,我的虚拟机只利用iMac i5的四个核心。 FFT在4核虚拟机上有八倍性能提升 我也试了下Fast Fourier Transforms (FFT)。使用与原始程序相同的设置,我只是按照如下方式运行FFT程序: % source deactivate intelpy % python < myfftprog.py fft 5000 2.22796392441 fft 7000 8.74916005135 % source activate intelpy % python < myfftprog.py fft 5000 0.277629137039 fft 7000 1.11230897903 速度提升为8和7.9倍。当然,还是运行于四核iMac上的openSUSE和VBox。这是我的快速FFT程序: % cat myfftprog.py import numpy as np import numpy.random as rn import time def trythis(Z): mat = rn.rand(Z,Z) + 1j * rn.randn(Z,Z) print 'fft' start = time.time() # 2D transform on a complex-valued matrix: result = np.fft.fft2(mat) end = time.time() print Z, end - start return trythis(5000); trythis(7000); 新 Python 加速 笔者了解到,以下是Intel Distribution for Python全新Update 2版本中,得到了新的速度提升的方面: 优化NumPy的算术和transcendental表达 (编辑:玉林站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |