亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

如何在Core i5 上實(shí)現(xiàn) 20 倍的 Python 運(yùn)行速度?

摘要:Intel Distribution for Python 在今年二月進(jìn)行了更新——英特爾發(fā)布了 Update 2 版本。以“加速”為核心的它,相比原生 Python 環(huán)境有多大提升呢?并行計算專家、前英特爾高級工程師 James Reinders 對老東家的產(chǎn)品進(jìn)行了測試。他對外宣布:在配備四核 i5 的 iMAC 上實(shí)現(xiàn)了 20 倍的性能加速!

至于他是怎么做到的,請繼續(xù)往下看(含代碼)。

如何在Core i5 上實(shí)現(xiàn) 20 倍的 Python 運(yùn)行速度?

James Reinders

James Reinders:利用 Intel Distribution for Python,我實(shí)現(xiàn)了?Python 的 20 倍加速,并且可用單個命令關(guān)閉/啟用。這還不是在最優(yōu)情況下,而在虛擬環(huán)境——在 VirtualBox(下文簡稱 VBox) 上運(yùn)行的 openSUSE?Linux?Tumbleweed(即“滾動版本”,請參考 openSUSE?官網(wǎng)),使用的機(jī)器是四核 iMac。

這在?Windows, Linux 或 OS X 都能實(shí)現(xiàn)。英特爾并沒有把?openSUSE 加入經(jīng)他們測試過的 Linux 配置列表中(SUSE Enterprise 在表中),但我在運(yùn)行中并沒有遇到任何問題。

這就是我怎么做的:

下載?Anaconda 命令行安裝程序,地址為?https://www.continuum.io/downloads?。

安裝:?% bash Anaconda2-4.3.0-Linux-x86_64.sh

安裝英特爾加速器,作為一個單獨(dú)的、可開啟關(guān)閉的“環(huán)境”:% conda config --add channels intel % conda create --name intelpy intelPython2_full Python=2

運(yùn)行示例程序,看到在我的 openSUSE VBox 設(shè)置上有 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')

我花很短時間搞起來這個程序,用來驗(yàn)證英特爾對加速?NumPy 中??transcendental expression 的承諾。?Cosine, sine 和 tangent 是我還能記得的、搞 TI calculator 時候用的??transcendental,所以我用它們來試。我決定對每一個進(jìn)行十億級測試——運(yùn)行超過十萬個數(shù)字的函數(shù),重復(fù)超過一萬次。

雖然未必是一個很有意思的程序,但對于加速而言是個不錯的測試。

隨時加速?Python

我此前寫過一篇文章,討論“Python 加速”(?“accelerated Python”?)使其更適用于大數(shù)據(jù)和 HPC 應(yīng)用。?在速度更快之外,我還展示了,使用 Conda 來開啟/關(guān)閉加速是多么得容易。這非常贊,讓安裝它的決定變得更加安全、沒有顧慮——因?yàn)樵摴δ苁且粋€可選項(xiàng)。(對新手的提醒:?Anaconda 是針對 Python 算法包的集合,Conda 則是 package manager,即算法包管理器。我兩個都用并且都很喜歡。)

我使用?“conda create”來創(chuàng)造被我稱之為?intelpy 的環(huán)境。然后,我能夠使用?“source activate intelpy”、“source deactivate intelpy”來激活、關(guān)閉它。

Intel Distribution for Python 帶來的大幅加速能力,讓?“accelerated Python”?變得更實(shí)用更讓人信服。

值得注意的是,?“accelerated Python” 只是使用更快的??Python 算法庫,不需要對代碼做任何改動。當(dāng)然,我們的 Python 代碼必須使用了某些加速的東西,才能從中獲益。

英特爾通過三大方面實(shí)現(xiàn) Python 加速:

利用多核;

利用矢量指令(SIMD),比如 SSE, AVX, AVX2 和 AVX-512;

使用英特爾 Math Kernel Library?(Intel MKL) 的更先進(jìn)算法。

對于運(yùn)行于矢量或矩陣上的程序,上述這些都會生效。對于偶爾的單獨(dú)?cosine,我們不應(yīng)該期待大幅速度提升。同樣的,對于單核 CPU,我們也不應(yīng)該有性能提升的幻想。當(dāng)然,英特爾 72 核協(xié)處理器?Xeon Phi 會在大量多核應(yīng)用的跑分中領(lǐng)先。在我的例子中,我的虛擬機(jī)只利用 iMac i5 的四個核心。

FFT 在 4 核虛擬機(jī)上有八倍性能提升

我也試了下??Fast Fourier Transforms (FFT)。使用與原始程序相同的設(shè)置,我只是按照如下方式運(yùn)行?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 倍。當(dāng)然,還是運(yùn)行于四核 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 版本中,得到了新的速度提升的方面:

優(yōu)化 NumPy 的算術(shù)和?transcendental 表達(dá)

Transcendental expressions 包含我在快速示例程序里用的 cosine, sine 和 tangen。這些優(yōu)化的核心是對 NumPy 的改變,使得 primitives (在 ndarray 數(shù)據(jù)上進(jìn)行運(yùn)算)能選擇性地使用英特爾 MKL Short Vector Math Library (SVML)?和 MKL Vector Math Library (VML) 的能力。這使得 Python 利用處理器的最新矢量能力,包括多核優(yōu)化和 AVX/AVX2/AVX-512。英特爾團(tuán)隊(duì)表示,他們利用 Xeon Phi,實(shí)現(xiàn)過?NumPy 算術(shù)和 transcendental 運(yùn)算在 vector-vector 和 vector-scalar 上最高 400 倍的速度提升。

優(yōu)化?NumPy 和 SciPy 的 FFT

這些優(yōu)化的核心是英特爾 MKL,一系列 NumPy、SciPy 函數(shù)都能用到它對 FFT 的原生優(yōu)化。這些優(yōu)化包含真實(shí)、復(fù)雜的數(shù)據(jù)類型,單精度和雙精度都包含 (?single and double precision),從一維到多維的數(shù)據(jù),in place 或者?out of place。英特爾團(tuán)隊(duì)見到過這項(xiàng)更新帶來 60 倍的性能提升。這使得?Python 的性能可與原生?C/C++ 程序相媲美。

優(yōu)化內(nèi)存管理

Python 是一門動態(tài)語言,為用戶管理內(nèi)存。Python 應(yīng)用的性能,在很大程度上取決于內(nèi)存運(yùn)行的性能,這包括內(nèi)存分配、再分配(de-allocation)、復(fù)制和移動。英特爾提供的加速版本 Python,能在 NumPy?分配數(shù)組時保證最佳的??alignment,所以 NumPy、SciPy 的運(yùn)算函數(shù),能從相應(yīng)排列的 SIMD 內(nèi)存訪問指令獲益。英特爾表示最大的提升來自于對內(nèi)存復(fù)制和移動運(yùn)算的優(yōu)化。

更快——能用?Conda 方便地關(guān)閉/啟用

Anaconda 英特爾渠道的最新加速版本 Python,為 Python 程序帶來顯著性能優(yōu)化,而無需改變代碼。下載、安裝也很方便。

我真的特喜歡用?Conda 把它開啟/關(guān)閉這一功能。這方便了性能對比,并且讓我感到安心——沒有這個功能的話,我會對切換到超快的數(shù)學(xué)函數(shù)感到猶豫。

via?infoworld

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!