丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給三川
發(fā)送

0

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

本文作者: 三川 2017-04-04 17:28
導(dǎo)語:前英特爾高級工程師 James Reinders,帶你來看 Intel Distribution for Python 第二版本帶來了哪些提升。

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

Intel Distribution for Python 在今年二月進(jìn)行了更新——英特爾發(fā)布了 Update 2 版本。以“加速”為核心的它,相比原生 Python 環(huán)境有多大提升呢?

雷鋒網(wǎng)獲知,并行計算專家、前英特爾高級工程師 James Reinders 對老東家的產(chǎn)品進(jìn)行了測試。他對外宣布:在配備四核 i5 的 iMAC 上實現(xiàn)了 20 倍的性能加速!

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

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

James Reinders

James Reinders:利用 Intel Distribution for Python,我實現(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 都能實現(xiàn)。英特爾并沒有把 openSUSE 加入經(jīng)他們測試過的 Linux 配置列表中(SUSE Enterprise 在表中),但我在運(yùn)行中并沒有遇到任何問題。

這就是我怎么做的:

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

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

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

  4. 運(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')

我花很短時間搞起來這個程序,用來驗證英特爾對加速 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)閉加速是多么得容易。這非常贊,讓安裝它的決定變得更加安全、沒有顧慮——因為該功能是一個可選項。(對新手的提醒: 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” 變得更實用更讓人信服。

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

據(jù)雷鋒網(wǎng)得知,英特爾通過三大方面實現(xiàn) Python 加速:

  1. 利用多核;

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

  3. 使用英特爾 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 加速

雷鋒網(wǎng)了解到,以下是 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)隊表示,他們利用 Xeon Phi,實現(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)化包含真實、復(fù)雜的數(shù)據(jù)類型,單精度和雙精度都包含 ( single and double precision),從一維到多維的數(shù)據(jù),in place 或者 out of place。英特爾團(tuán)隊見到過這項更新帶來 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)文章:

手把手教你用 Python 實現(xiàn)針對時間序列預(yù)測的特征選擇

谷歌開源 Python Fire;一張圖讀懂 Python、R 的大數(shù)據(jù)應(yīng)用等 | AI 開發(fā)者頭條

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

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

分享:
相關(guān)文章

用愛救世界
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說