资讯
HOME
资讯
正文内容
linux nand 慢 如何在 i5 上实现 20 倍的 Python 运行速度?
发布时间 : 2024-10-08
作者 : 小编
访问数量 : 23
扫码分享至微信

如何在 i5 上实现 20 倍的 Python 运行速度?

Intel Distribution for Python 在今年二月进行了更新——英特尔发布了 Update 2 版本。以“加速”为核心的它,相比原生 Python 环境有多大提升呢?

雷锋网获知,并行计算专家、前英特尔高级工程师 James Reinders 对老东家的产品进行了测试。他对外宣布:在配备四核 i5 的 iMAC 上实现了 20 倍的性能加速!

至于他是怎么做到的,请继续往下看(含代码)。

James Reinders

James Reinders:利用 Intel Distribution for Python,我实现了 Python 的 20 倍加速,并且可用单个命令关闭/启用。这还不是在最优情况下,而在虚拟环境——在 VirtualBox(下文简称 VBox) 上运行的 openSUSE Linux Tumbleweed(即“滚动版本”,请参考 openSUSE官网),使用的机器是四核 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

np.sin

102400 10000 36.1987440586

np.cos

102400 10000 36.1938228607

np.tan

102400 10000 51.487637043

% source activate intelpy

% python

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

fft

5000 2.22796392441

fft

7000 8.74916005135

% source activate intelpy

% python

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 表达

Transcendental expressions 包含我在快速示例程序里用的 cosine, sine 和 tangen。这些优化的核心是对 NumPy 的改变,使得 primitives (在 ndarray 数据上进行运算)能选择性地使用英特尔 MKL Short Vector Math Library (SVML) 和 MKL Vector Math Library (VML) 的能力。这使得 Python 利用处理器的最新矢量能力,包括多核优化和 AVX/AVX2/AVX-512。英特尔团队表示,他们利用 Xeon Phi,实现过 NumPy 算术和 transcendental 运算在 vector-vector 和 vector-scalar 上最高 400 倍的速度提升。

优化 NumPy 和 SciPy 的 FFT

这些优化的核心是英特尔 MKL,一系列 NumPy、SciPy 函数都能用到它对 FFT 的原生优化。这些优化包含真实、复杂的数据类型,单精度和双精度都包含 ( single and double precision),从一维到多维的数据,in place 或者 out of place。英特尔团队见到过这项更新带来 60 倍的性能提升。这使得 Python 的性能可与原生 C/C++ 程序相媲美。

优化内存管理

Python 是一门动态语言,为用户管理内存。Python 应用的性能,在很大程度上取决于内存运行的性能,这包括内存分配、再分配(de-allocation)、复制和移动。英特尔提供的加速版本 Python,能在 NumPy 分配数组时保证最佳的 alignment,所以 NumPy、SciPy 的运算函数,能从相应排列的 SIMD 内存访问指令获益。英特尔表示最大的提升来自于对内存复制和移动运算的优化。

更快——能用 Conda 方便地关闭/启用

Anaconda 英特尔渠道的最新加速版本 Python,为 Python 程序带来显著性能优化,而无需改变代码。下载、安装也很方便。

我真的特喜欢用 Conda 把它开启/关闭这一功能。这方便了性能对比,并且让我感到安心——没有这个功能的话,我会对切换到超快的数学函数感到犹豫。

via infoworld

Linux运行速度太慢的关键原因全都在这了

我们在搞清楚如何加速Linux计算机之前,需要知道哪些方法可以帮助我们找到引导时启动的服务、以更高或更低优先级运行的进程、CPU运行状况、内存是否塞满了过多数据,还要检查交换内存区是否已满。最后,我们还要检查硬盘是否运行正常。

一、检查CPU信息

若想加快一台慢腾腾的Linux计算机,采取的第一步是检查CPU信息。你的计算机运行LibreOffice很耗费时间的主要原因可能是,CPU速度远不足以运行重量级应用程序。

打开终端,运行下列命令之一:

cat /proc/cpuinfo

lscpu

上述命令显示了有关CPU的详细信息,比如vendor_id、型号名称、CPU MHZ、缓存大小、微代码和bogomips。

不妨详细介绍关于CPU信息的几个重要细节。

bogomips:bogo是bogus(伪)的意思,MIPS是指每秒百万条指令。它是显示系统性能的独立程序。model_name:表示CPU的制造商、型号和速度。在本文中,我们拥有速度为1.73GHz的英特尔(R)赛扬(R)CPU。CPU MHZ(兆赫):用于测量通道、总线和计算机内部时钟的传输速度。在本文中,传输速度是1733.329GHz。

你可能没意识到,英特尔赛扬1.73GHz CPU是一款处理能力很低的旧处理器。就这种情况而言,与采用多核2.8GHz CPU的计算机相比,这台计算机的CPU传输速度显然很低。这可能是我们的Linux计算机运行重量级应用程序时速度缓慢的原因。

解决办法

CPU又老又慢的话,唯一的解决办法是换个新的。这是购买新处理器时要留意的方面。

二、检查引导时启动的服务

有不同的方法来检查引导时启动的服务。你可以使用下列命令中的任何一个。

该命令列出了引导时启动的服务:

service--status-all

该命令列出了引导时启动的服务。它与CentOS、Fedora和Redhat兼容:

chkconfig --list

该命令也列出了引导时启动的服务:

initctl list

initctl是守护进程控制工具,它让系统管理员得以与Upstart守护进程进行通信和交互。

如果你的系统使用systemd,可以使用下列命令来找到引导时运行的服务:

sudo systemctl list-unit-files --state = enabled

解决办法

对于使用systemd的Linux发行版而言,可以使用systemctl命令来管理服务,以便服务不会在引导时运行。

三、检查CPU负载

除了检查引导时启动的服务外,还可以检查处理器/CPU是否因进程而过载。你可以使用命令top来检查CPU负载。

top命令将资源使用最高的进程排在上面。正如从下面的屏幕截图所见,你可以看清楚哪个进程/应用程序在滥用CPU,必要时使用kill命令终止它。

解决办法

如果你运行过多的应用程序(无论前台还是后台),CPU又达不到标准,最好关闭未使用的应用程序。另外,禁止你未使用的任何应用程序在后台运行。

此外,可以使用preload来加载常用的应用程序。preload是在后台运行的守护进程,它分析经常运行的应用程序。

打开终端,运行下列命令:

sudo apt-get install preload

对于Fedora和CentOS用户而言,可以使用下列命令:

sudo yum install preload

preload在后台运行。因此,没必要调整它。preload将常用应用程序的一部分加载到内存中,确保更快地加载这些应用程序。

四、检查闲置内存空间

内存通常是用来存储常用应用程序的地方。你可以使用free命令来检查内存信息,比如内存可用的闲置空间。内存空间较少也会影响计算机的性能。

解决办法

要么升级内存,要么把耗费大量内存的应用程序换成轻量级应用程序。LibreOffice等应用程序相当耗费内存。你可以使用AbiWord,代替使用LibreOffice。

五、检查硬盘是否使用过度

硬盘指示灯一直在不停地闪烁,但你不知道它在干什么?神秘的输入/输出很可能是个问题,所以有一个类似top的工具:iotop,它专门用来帮助诊断这类问题。

打开终端,输入命令:

sudo apt install iotop

对于Fedora和CentOS用户而言,可以使用下列命令:

sudo yum install iotop

正常的闲置系统其值基本上是零,只是在数据写入时有几个小的尖峰,如下面屏幕截图所示:

然而,如果你运行find之类的磁盘密集型实用程序,可以看到iotop清楚列出的名称和吞吐量。

现在你可以轻松了解哪个程序在使用I/O、谁运行它、数据读取速度等更多信息。

结论

虽然有很多因素可能导致系统缓慢,但CPU、内存和磁盘I/O是导致绝大多数性能问题的原因。使用本文介绍的方法将帮助你查明性能问题的原因以及如何解决这些问题。

相关问答

linux win7双系统 linux 系统开启超 ……………………………...

Windows7开机正常,说明你的硬件是没有问题的。可能原因是你的机器的某些硬件对Linux的支持不太,如果要找出问题所在,最好有Linux的启动log,/var/log/message或...

linux 服务器反应 很慢 是什么问题? - hZP2r4Te9 的回答 - 懂得

loadaverage:23.84,24.59,24.56,超过5就算高了,top执行后,按SHIFT+C按cpu利用率排序,看第一个进程是啥,就知道哪个进程耗cpu了。goodluck晕,太乱了....

linux 服务器反应 很慢 是什么问题? - 158****4574 的回答 - 懂得

晕,太乱了,理顺显示下loadaverage:23.84,24.59,24.56,超过5就算高了,top执行后,按SHIFT+C按cpu利用率排序,看第一个进程是啥,就知道哪个进程耗cpu...

Linux 系统读取分区的速度特别 怎么解决?

Linux系统反应非常慢,磁盘读取速度特别慢那我总结下,以后排查的过程就是1、vmstat110查内存读写情况2、iostat-x1检查磁盘读写情况3、top-d1查看...

linux 重启动速度很 ?

把出错信息贴全一点。。重新启动,是卡在哪一步,关机,开机?还有,启动的时候,按下ESC,可以看到启动的项目,注意观察启动哪个项目卡了。。。把出错信息贴全一...

kalilinux安装太 怎么办?

Kalilinux(国内通用版本)安装速度慢可能是由于多种原因造成的。以下是一些可能的解决方案:1.更换国内源:可以通过删除原有源并添加新的国内源来改善下载速...

为什么在vmware上装的 linux 系统反应 很慢 ? - 9EnBFk02 的回答...

因为机需要多次读写磁盘,读盘时间多,如果你的虚拟机硬盘未预先间更多。此外,你虚拟机设置的内存较小,一般都不超过512M,所以反应很慢。虚拟机的整个...

为什么在vmware上装的 linux 系统反应 很慢 ? - sOmSOVVSFYi 的...

因为机需要多次读写磁盘,读盘时间多,如果你的虚拟机硬盘未预先间更多。此外,你虚拟机设置的内存较小,一般都不超过512M,所以反应很慢。虚拟机的整个...

linux 下载更新速度 过慢 是为什么啊-ZOL问答

10条回答:【推荐答案】敢问你在windows下下载速度会不会出现很低的情况呢?一个道理嘛……资源不好……linux下你可以选择更新的镜像服务器,,具体方法视你的发行...

linux 速度为什么比windows快 - lm962223598 的回答 - 懂得

从网络层面上说,linux和TCP/IP的发展的确十分紧密,TCP/IP协议是固化在Linux内核里面的。而尤其是早期版本的Windows,尤其是WindowsXP及之前,对于TCP...

 连超  lia may 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部